--- title: Runtime support description: All {{RUNTIME_COUNT}} agent runtimes ClawMetry observes — OpenClaw, Claude Code, Codex, Cursor, Copilot, Gemini CLI, Goose, Cline, OpenHands and more — and what each exposes. keywords: supported AI agent runtimes, Claude Code observability, Cursor telemetry, Codex monitoring, Goose agent, OpenHands, Cline, agent runtime support eyebrow: Runtimes --- # Runtime support ClawMetry reads **{{RUNTIME_COUNT}} agent runtimes**. {{FREE_RUNTIME_COUNT}} are free in the open-source package; {{PAID_RUNTIME_COUNT}} unlock on a paid tier. Every one of them is read from its own on-disk (or, for two, remote) store — there is no SDK to import and nothing to instrument. {{RUNTIME_CARDS}} ## The full list {{RUNTIME_TABLE}} Two runtime ids exist in the entitlement list but share another runtime's read path: `grok_bot` is read through the Grok adapter. Adapters also ship for Lovable and Replit. ## What "supported" means here A runtime being on this list means an adapter exists that reads its real store and maps it into ClawMetry's unified event schema. It does **not** mean every runtime exposes the same things — they genuinely do not, and the difference matters: - **Cline** records dollars, a per-message token split, process ids, exit codes, sub-agent lineage, real cron schedules with per-run cost, and even the tool calls it rejected. It is the richest store in the matrix. - **PicoClaw**'s message struct has no token field at all. ClawMetry reports zero tokens and does not advertise cost for it, because the data is not there. - **Cursor**'s backend is proprietary, so token counts come only from a hosted VM's loopback usage log — which is why a Cursor row can show real cost on a managed node and none on a laptop. - **Kimi** persists a complete token breakdown but never the model id, so cost is marked `estimated` with the model resolved from config. [What each runtime exposes](/docs/runtimes/coverage/) has the comparison table. Each runtime's own page has the exact paths, environment overrides and traps. ## Adding a runtime that is not here Three options, in increasing order of effort: 1. **OpenTelemetry.** If the runtime can export OTLP, point it at ClawMetry's receiver. This is the supported path for n8n on Postgres, hosted CI agents and anything without a local store. → [OpenTelemetry ingest](/docs/runtimes/opentelemetry/) 2. **The ingest API.** Push runs and events over HTTP from code you control. → [Custom runtime ingest](/docs/runtimes/custom-ingest/) 3. **The interceptor.** Two lines in a Python process capture its LLM calls, cost, tokens, latency and errors, attributed to a named source. → [Track any SDK agent](/docs/runtimes/sdk-agents/) If you want a first-class adapter for a runtime that writes to disk, [open an issue](https://github.com/vivekchand/clawmetry/issues/new) with the store layout — that is the part that takes the work. ## Runtime ids The `id` column is what appears everywhere machine-readable: the entitlement API, `clawmetry runtimes --json`, the `runtime` filter on query shapes, session id prefixes, and per-runtime environment overrides like `CLAWMETRY_NOPROG_TOOLS__CODEX`. Common alternate spellings are accepted as aliases — `claude-code` and `claudecode` both resolve to `claude_code`.