Skip to content

Telemetry Events

TypeSourceFields
llm_callRunnermodel, promptTokens, completionTokens, latencyMs, costUsd
llm_errorRunnermodel, errorType, retryCount
tool_callRunnertoolName, durationMs, success
agent_completeRunnerexitReason (cost_limit, max_iterations, halt, error, done)
context_compactionRunnertokensBefore, tokensAfter
guard_scanGuardside (write/read/snapshot), score, action, findingsCount
agent_spawnOrchestratoragentId, role, type, model
agent_exitOrchestratoragentId, exitReason, durationMs
agent_killOrchestratoragentId, killReason
protocol_startOrchestratorprotocolName, agentCount
protocol_endOrchestratordurationMs, totalTokens, totalCostUsd
dance_callWebSockettoolName, callerRole, latencyMs

Each line in the telemetry file is a JSON object:

{"type":"llm_call","timestamp":"2026-02-15T10:30:00.000Z","model":"claude-sonnet","promptTokens":500,"completionTokens":200,"latencyMs":1500,"costUsd":0.003}
{"type":"tool_call","timestamp":"2026-02-15T10:30:01.500Z","toolName":"read_file","durationMs":12,"success":true}
{"type":"guard_scan","timestamp":"2026-02-15T10:30:01.600Z","side":"write","score":5,"action":"PASS","findingsCount":0}
~/.honeyb/projects/<slug>/telemetry/<date>.jsonl

One file per day, auto-rotated.

The reporter aggregates events into 5-minute summaries:

{
"period": "2026-02-15T10:30:00Z/2026-02-15T10:35:00Z",
"counts": { "llm_call": 42, "tool_call": 18, "guard_scan": 60 },
"totalPromptTokens": 21000,
"totalCompletionTokens": 8400,
"totalCostUsd": 0.15,
"avgLatencyMs": 1200,
"errorRate": 0.02,
"guardBlocks": 0,
"guardWarns": 3
}

Aggregation runs for both local-only and cloud modes (needed for getSnapshot()).

Opt-in via environment variables:

Terminal window
export TELEMETRY_ENDPOINT=https://carapace.honeyb.dev/v1/telemetry
export TELEMETRY_API_KEY=your-key

Cloud receives aggregated summaries only, never individual events or raw content. Sends every 5 minutes.

Terminal window
# Local overview (counts, totals, averages)
wgl telemetry overview --local
# Recent events
wgl telemetry events --type llm_call --limit 20
# Daily breakdown
wgl telemetry timeline
# Cloud overview (if configured)
wgl telemetry overview

The incubator dashboard Metrics tab receives live telemetry via WebSocket:

  • Push interval: every 10 seconds
  • Message type: metrics
  • Data source: reporter.getSnapshot()
  • Display: stat cards, event breakdown bars, numeric averages