Docs

    Coding agents

    Trace a coding agent

    Run evalkit coding install and each Claude Code, Codex, Gemini CLI, Cursor, Windsurf or OpenCode turn arrives in your Environment as a trace.

    evalkit coding install points a coding agent you already use at an Environment, with no application code. Each turn then arrives as one trace that holds the main agent, every subagent it launched and everything each of them did.

    Install

    The evalkit command comes with the SDK: pip install syntropylabs-evalkit, or npx evalkit from the npm package. The quickstart's Coding agents tab shows the command below with your Environment's real key and starts watching for the first trace.

    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 or opencode
    --keythe Environment key; optional once a key is stored or EVALKIT_API_KEY is set
    --endpointthe OTLP base; default https://api.syntropylabs.ai/v1/otlp
    --tenantthe tenant id doctor reads traces back with, needed only against an older receiver
    --scope user|projectproject writes into the current directory's config, not your home directory
    --capture minimal|fullwhether prompt, reply and tool text leave your machine; default minimal, or the level an earlier install stored
    --no-tracessend log events only; spans are on by default wherever the vendor has them
    --no-subagentsClaude Code only: write no hooks at all
    --dry-runshow what would be written
    --managedClaude Code only: print a managed-settings snippet and write nothing

    The key and endpoint are stored once in ~/.config/evalkit/config.env, and ~/.config/evalkit/state.json records exactly which keys, blocks and files the installer wrote. Both files are mode 0600. uninstall removes only what was written and restores any value it replaced, including a key you had already set to the same value. The CLI never prints the key in full.

    Both CLIs write byte-identical files for the same flags, except that only the Python CLI installs the Codex reply hooks and has backfill.

    Then start a session

    Start a new agent session, because a running one keeps its old configuration. Give the agent one task. Within a few seconds the quickstart shows "First Claude Code session received" (or your vendor's name), the operation, span count and model, and View trace. Home's checklist ticks Install SDK and Receive first trace.

    In Traces, the Coding agent facet separates agent sessions from application traffic, and a turn that launched subagents has an "N subagents" chip. 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, with Authorization: Bearer <environment key>.

    Cursor and Windsurf have no telemetry export. 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. Content and usage records arrive separately, and the receiver merges each onto the span it describes, so a turn can be readable before its dollars arrive. Metrics are accepted and dropped, and every number shown is derived from spans. What each vendor exports has the per-vendor table.

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