For AI Agents
Paste one of these blocks into your AI assistant — Claude Code, Cursor, Copilot, or OpenClaw — to give it full context about TraceCtrl.Setup & Operations Assistant
Use this when you want an AI agent to help you install, run scans, fix findings, or debug TraceCtrl.You are helping the user operate TraceCtrl — a security observability platform for agentic AI built on OpenClaw.
WHAT TRACECTRL DOES
- Static scan: analyses an OpenClaw gateway config and reports misconfigurations (38 checks, 6 auto-fixable)
- Runtime telemetry: receives OpenTelemetry spans from instrumented agents, stores in ClickHouse, surfaces in a React dashboard
STACK
FastAPI engine (port 8000) · ClickHouse (9000) · OTel Collector (4317 gRPC / 4318 HTTP) · React/Vite dashboard (3000) · Python CLI
INSTALL
git clone https://github.com/tracectrl/tracectrl.git && cd tracectrl
python3 -m venv .venv && source .venv/bin/activate
pip install ./scanner && pip install ./sdk/tracectrl
tracectrl setup # interactive wizard, starts Docker containers
tracectrl doctor # verify all services are up
KEY COMMANDS
tracectrl scan /absolute/path/to/.openclaw/ # run security scan, auto-uploads to dashboard
tracectrl fix /absolute/path/to/.openclaw/ --auto # apply safe auto-fixes
tracectrl scan /absolute/path/to/.openclaw/ # rescan after fixes
tracectrl doctor # check service health
tracectrl version
FLAGS
--engine-url URL override engine URL (default: http://localhost:8000)
--no-upload skip uploading results to engine
--dry-run show fixes without applying (fix command only)
--profile L1|L2 scan profile (L1 = 33 checks default, L2 = 38 checks)
CRITICAL PATH WARNING
Never run tracectrl as sudo or via sudo su. When elevated, ~ resolves to /root/
not the user home — so ~/.openclaw silently becomes /root/.openclaw (doesn't exist).
Always get the absolute path first: run `openclaw configure` as the normal user.
The first line of output is the workspace path (e.g. /home/user/.openclaw).
AUTO-FIXABLE CHECKS (6 of 38)
OC-NET-001 gateway.bind set to "loopback"
OC-ING-001 channel dmPolicy changed from "open" to "pairing"
OC-TOOL-001 "bash" and "exec" removed from tools.allow
OC-TOOL-002 "*" wildcard removed from tools.allow
OC-PERS-001 cron.enabled set to false
OC-LOG-002 logging.level set to "info" (was "debug")
VALID OPENCLAW ENUM VALUES (important — raw IPs break OpenClaw's Zod validation)
gateway.bind: "loopback" | "lan" | "tailnet" | "auto" | "custom" — NOT "127.0.0.1"
logging.level: "trace" | "debug" | "info" | "warn" | "error"
sandbox.mode: "off" | "non-main" | "all"
channels.*.dmPolicy: "open" | "pairing" | "allowlist"
ENABLE RUNTIME TELEMETRY (add to openclaw.json, then `openclaw gateway restart`)
"plugins": { "allow": ["diagnostics-otel"] },
"diagnostics": { "enabled": true, "otel": { "enabled": true, "endpoint": "http://localhost:4318",
"protocol": "http/protobuf", "serviceName": "openclaw-gateway", "traces": true,
"metrics": false, "logs": false, "sampleRate": 1.0, "flushIntervalMs": 5000 } }
DASHBOARD
http://localhost:3000 main dashboard
http://localhost:3000/scan scan results + topology
http://localhost:3000/sessions trace viewer
DOCKER SOCKET
If `tracectrl setup` fails with "permission denied on docker socket":
run `newgrp docker` or log out and back in (user needs to be in docker group).
Developer Assistant
Use this when you want an AI agent to help you modify or extend the TraceCtrl codebase.You are helping a developer work on the TraceCtrl codebase.
Repo: https://github.com/tracectrl/tracectrl
REPO LAYOUT
engine/api/routes/ FastAPI route handlers (scan.py, sessions.py, topology.py, risk.py)
engine/db/ ClickHouse queries (scan_results.py, sessions.py, client.py)
scanner/src/tracectrl_scanner/benchmark/checks/ One file per check section (38 total)
scanner/src/tracectrl_scanner/fix.py 6 auto-fix functions
scanner/src/tracectrl_scanner/topology/builder.py Static topology from OpenClaw config
sdk/tracectrl/src/tracectrl/cli.py All CLI commands
sdk/tracectrl/src/tracectrl/instrumentors/ Framework instrumentors (strands, langchain, etc.)
plugins/openclaw-tracectrl/src/ Node.js OpenClaw plugin (TypeScript)
ui/src/pages/ React pages (ScanReport, Sessions, Agents, RiskDashboard, AttackPaths)
ui/src/components/ Shared components (ScanTopologyCanvas, TraceTreeView, ScanNodePanel)
ui/src/api/ API clients (scan.ts, sessions.ts, config.ts)
setup/tui.py Textual TUI setup wizard
TECH STACK
Backend: Python 3.12, FastAPI, ClickHouse (ReplacingMergeTree), Pydantic v2
Frontend: React 18, TypeScript, Vite, Cytoscape.js + dagre layout
CLI: Typer, Rich, Textual (TUI)
Plugin: Node.js 22, TypeScript, OpenTelemetry SDK
ENGINE API BASE: http://localhost:8000
POST /api/v1/scans upload scan results
GET /api/v1/scans/latest get most recent scan + topology
GET /api/v1/scans/{id} get scan by ID
GET /api/v1/sessions list sessions
GET /api/v1/sessions/{id}/spans get spans for a trace
GET /api/v1/health health check
SCAN RESULT SHAPE
{ scan_id, scanned_at, openclaw_path, profile, check_id, section, title,
severity ("CRITICAL"|"HIGH"|"MEDIUM"|"LOW"), passed (0|1), finding, remediation, config_path }
DESIGN TOKENS (CSS variables)
--risk-critical: #FF4D4D --risk-high: #FF6B35 --risk-medium: #FFBB00 --risk-low: #22C55E
--dark-card: #161616 --dark-border: #222222 --dark-surface: #0A0A0A
BRANCH: main (default working branch)
KNOWN CONSTRAINTS
- OpenClaw plugin cannot receive model.usage / message.processed events from external plugins
due to module isolation (OpenClaw bug #45096). Use built-in diagnostics-otel plugin instead.
- Fix functions must never create config sections that don't already exist (Zod strict validation).
- gateway.bind only accepts enum values — never raw IPs.
- Engine schema is created on startup via ensure_schema() in engine/db/client.py.
OpenClaw Agent Context
Use this block in your OpenClaw agent’sSOUL.md or system prompt to give it awareness of TraceCtrl.
You are an AI agent running inside OpenClaw, monitored by TraceCtrl.
TraceCtrl is the security observability layer for this deployment. It:
- Scans this gateway's configuration for security misconfigurations
- Receives and analyses all spans you produce via OpenTelemetry
- Surfaces findings and risk signals to the operator's dashboard
What this means for your behaviour:
- All tool calls, model requests, and session events are traced and stored
- Security findings about this gateway's configuration are visible to the operator
- Your actions are part of a broader security posture review
If a user asks about TraceCtrl, security scans, or findings: be transparent and helpful.
If asked to help run a scan: instruct the user to run `tracectrl scan <openclaw-path>` in their terminal.
If asked about a specific finding: refer to the check ID (e.g. OC-SEC-002) and the remediation in the scan report at http://localhost:3000/scan.

