Trace a coding agent

    Point Claude Code, Codex, Gemini CLI, Cursor, Windsurf or OpenCode at an Environment with one command — evalkit coding install — and see each turn as a trace with no application code.

    After this page a coding agent you already use sends every turn to an Environment as one trace — the main agent, every subagent it launched, and everything each of them did — and you know which files the installer touched and how to undo it.

    Install

    Installing the SDK also installs the evalkit command (pip install syntropylabs-evalkit, or npx evalkit … from the npm package). The quickstart’s Coding agents tab renders the command below with your Environment’s real key and starts the first-trace detector.

    evalkit coding install --vendor claude-code --key tk_live_...
    evalkit coding install --vendor codex --key tk_live_...
    evalkit coding install --vendor gemini-cli --key tk_live_... --capture full
    evalkit coding install --vendor cursor --key tk_live_... --scope project
    evalkit coding install --vendor windsurf --key tk_live_...
    evalkit coding install --vendor opencode --key tk_live_...
    evalkit coding status
    evalkit coding doctor
    evalkit coding uninstall --vendor codex
    FlagMeaning
    --vendorclaude-code · codex · gemini-cli · cursor · windsurf · opencode
    --keythe environment key
    --endpointthe OTLP base; default https://api.syntropylabs.ai/v1/otlp
    --tenantoptional: the tenant id doctor reads traces back with. Without it doctor reads /v1/traces/me/…, which a current receiver resolves from the key; pass it only against an older receiver
    --scope user|projectproject writes into the current directory’s config instead of your home directory
    --capture minimal|fullwhether prompt, reply and tool text leave your machine; default minimal
    --no-traceskeep log events only — spans are on by default wherever the vendor has them
    --no-subagentsClaude Code: write no hooks at all
    --dry-runshow what would be written
    --managedClaude Code: print a managed-settings snippet instead of writing

    The key and endpoint are stored once in ~/.config/evalkit/config.env (mode 0600), and ~/.config/evalkit/state.json records exactly which keys, blocks and files the installer wrote, so uninstall removes only that and restores any value it replaced — including a key you had already set to the same value. The key is never printed. Both CLIs write byte-identical files for the same flags.

    Then start a session

    Start a new agent session — a running one keeps its old configuration. Give the agent one task. Within a moment the quickstart shows First trace: claude-code · “your prompt” · spans · logs · cost, with the vendor as the service, the Environment, and the agent version, and offers View trace. Home’s checklist ticks Install SDK and Receive first trace. In Traces the Coding agent facet separates agent sessions from application traffic, the row shows a subagents chip, and Sessions lists the turns of one session in order. Continue in Reading a turn.

    How the data flows

    Claude Code, Codex and Gemini CLI export OpenTelemetry themselves; the installer only points their exporter at the receiver (POST …/v1/otlp/v1/traces|logs|metrics, JSON or protobuf, Authorization: Bearer <environment key>). Cursor and Windsurf have no telemetry export, so the installer registers evalkit coding hook entries in their hooks file and the hook builds the spans itself with deterministic ids. OpenCode gets a plugin file that does the same. One turn is one trace; the receiver merges the content and usage records that arrive separately onto the span they describe, so a turn can be readable before its dollars are. Metrics are accepted and dropped: every number shown is derived from spans. What each vendor exports has the per-vendor table.

    Default capture is minimal: tool calls, timings, tokens and cost arrive, but not the prompt, reply or tool text. Pass --capture full when you want them — see Content capture, status and doctor.

    EvalKit is built by Syntropylabs. Published on PyPI and npm.