Skip to content

Supported harnesses

A harness is any AI coding tool that acts as a signal source — a CLI, a desktop app, or an IDE that does AI-assisted work. Trove sweeps the standard install paths for all 17 supported harnesses the moment it launches, surfaces what’s on disk, and lets you enable telemetry per-tool with a single click.

How Trove captures a harness’s telemetry depends on its coverage tier:

  • Native OTel — the harness emits OpenTelemetry (OTLP) on its own. Trove just flips the right env vars or config flags and routes the stream through the local collector.
  • Partial coverage — the harness exposes only a subset of useful events (for example, shell-exec hooks but not full session traces).
  • Best effort — the harness does not emit OTel natively, so Trove installs a lightweight watcher (a filesystem monitor) or a shell-rc wrapper that derives equivalent OTLP records from the tool’s on-disk logs. Derived records share the same queries as their native peers.
  • Setup guide — Trove can’t patch the tool automatically yet, but ships step-by-step instructions to point it at the local collector.

Harnesses tab showing auto-detected AI coding tools with per-row Enable/Disable toggles, telemetry status pills, and coverage badges

HarnessCoverage tierTelemetry source
Claude CodeNative OTelBuilt-in OTEL_EXPORTER_OTLP_* env vars
Claude DesktopNative OTelAuto-detected via local audit log (no setup)
Antigravity CLINative OTelAntigravity hooks via ~/.gemini/antigravity-cli/hooks.json
OpenAI Codex CLINative OTelCodex 0.130+ [otel.exporter.otlp-http] block
OpenAI Codex (desktop)Native OTelShares Codex CLI’s codex app-server backend
Qwen CodeNative OTelBuilt-in OTel exporter
OpenCodeNative OTelBuilt-in OTel exporter
Cursor IDENative OTelCursor hooks via ~/.cursor/hooks.json
Cursor CLIPartial coverageSubset of Cursor hook events (shell exec only)
ClineBest effortWatcher derives OTLP from Cline’s task records
AiderBest effortShell-rc wrapper tees the session log into OTLP
GitHub Copilot CLIBest effortShell-rc wrappers around copilot and gh copilot
Junie CLISetup guideSetup guide (JetBrains)
Droid (factory.ai)Setup guideSetup guide
Kimi Code CLISetup guideSetup guide
DevinSetup guideSetup guide
ForgeCodeSetup guideSetup guide

Regardless of how Trove captures a harness, every signal lands in one of two layers:

  • Tier A — the normalized cross-harness schema (trove.harness.events, trove.harness.tokens, trove.harness.cost.usd, trove.harness.turn.duration, trove.harness.errors). This is the cross-vendor comparison layer: cost per turn for Claude Code is directly comparable to cost per turn for Copilot CLI in your own dashboard.
  • Tier B — the harness’s native metrics, passed through untouched for teams that want the raw, vendor-specific detail.

Every span, metric, and log carries a harness.id resource attribute so you can filter and compare side-by-side in one query.

When you click Enable on a row, Trove writes a sentinel-bracketed managed region into that tool’s config (or installs a watcher/wrapper for best-effort harnesses). The row’s telemetry pill turns green the moment OTLP starts flowing through the local collector — typically within about 5 seconds. One click reverts the change byte-for-byte.