Coding agents
Cursor telemetry: trace agent turns via hooks
Cursor exports nothing, so the hook builds the trace: deterministic span ids, tool spans with their real interval, subagents under their tool call.
Set up Cursor
The snippet is copied from the SDK README, not paraphrased. Keys shown as tk_live_... are the environment key from Settings › Environments.
pip install syntropylabs-evalkit
evalkit coding install --vendor cursor --key tk_live_... --scope project
evalkit coding status
evalkit coding doctorCopied from sdk-py/README.md § Coding agents (Claude Code · Codex · Gemini CLI · Cursor · Windsurf · OpenCode)
Install → first trace
- 01
Install the SDK
pip install syntropylabs-evalkit or npm install syntropylabs-evalkit. Installing the SDK also installs the evalkit command.
- 02
Point Cursor at your environment
evalkit coding install --vendor cursor --key tk_live_... --scope project — the key and endpoint are stored once in ~/.config/evalkit/config.env; the key is never printed.
- 03
Start a new agent session
Cursor reads its configuration when a session starts, so an already-open session keeps sending nothing. Open a new one and run one prompt.
- 04
Check and open the trace
evalkit coding status shows what was written; evalkit coding doctor posts one synthetic turn and reads it back. The turn appears in Traces as one trace.
What a turn looks like
Sample data in the product’s own table. Hover, focus or tap a claim to see the columns it points at.
Sample run
| Operation | Service | Status | Model | Latency | Tokens | ≈Cost | Score |
|---|---|---|---|---|---|---|---|
| support_agent.turn8f3a1c0d94e2session sess_4b1e | support-api | ok | gpt-4o-mini | 1.84 s | 3,412 | $0.0006 | 92%auto |
| refund_agent.turnc21d7e5a30b8session sess_9a02tool loop | refund-worker | ok | claude-sonnet-4 | 4.31 s | 7,905 | $0.0389 | 68%auto |
| claude-code.turn5be04f7d1a96session sess_f77c | Claude Code | unset | claude-sonnet-4 | 48.20 s | 61,208 | $0.19 | — |
| rag.answere9a2b6c4d015error | docs-bot | error | gpt-4o | 6.02 s | 9,880 | $0.0312 | 41%auto |
| voice.turn17c8d3f2a4e0session sess_20d1 | ivr-agent | ok | gpt-4o-realtime | 0.92 s | 1,104 | $0.0071 | — |
fig. 1 · the traces table this integration fills · sample data
What you see
Taken from the SDK READMEs’ coverage tables. with flag means the signal leaves your machine only when you opt in.
| Signal | Captured | Detail |
|---|---|---|
| One tree per turn | yes | built by the hooks with deterministic span ids |
| Tool calls | yes | — |
| Tool output | with flag | with --capture full |
| Prompt and reply | with flag | with --capture full |
| Subagents | yes | subagentStart / subagentStop |
| Tokens and cost | no | Cursor’s hooks carry neither |
Limitations
- No tokens and no cost: Cursor’s hook payloads carry neither, so those columns stay empty for Cursor sessions.
- A turn root is written when the prompt is submitted and completed by an enrichment record; the tree is assembled by the receiver.
- The hook exits 0 within 5 seconds and never blocks the editor, which also means a hook that cannot reach the receiver drops that event.
Next steps
Trace Cursor today
Tracing is free for one project on every plan, coding-agent traces included. Evaluations, datasets and simulation are Pro and up.