Skip to main content
Navigara measures how your organization actually uses AI coding assistants — cost, tokens, models, and which developers are active — by ingesting usage telemetry from the tools themselves. Every AI tool emits OpenTelemetry (OTLP), and Navigara exposes an OTLP endpoint that turns that stream into per-developer, per-model spend on the Tool Spend dashboard.
Any plan or license works — we support them all. Ingestion is pure OpenTelemetry, independent of how you pay for the tool. There’s nothing to buy or upgrade to be measured.
You control what leaves the workstation. By default Navigara collects only usage metadata — session and user IDs, model, cost, token counts, durations, and tool names. Each tool’s own telemetry flags let you opt into richer signals (prompt text, tool inputs/outputs, raw API bodies) — for Claude Code, for example, OTEL_LOG_USER_PROMPTS, OTEL_LOG_TOOL_DETAILS, OTEL_LOG_TOOL_CONTENT, and OTEL_LOG_RAW_API_BODIES. Send as much or as little as you choose.

How it works

  1. You mint an ingest token — a write-only API token scoped to your organization.
  2. You configure the tool to export OTLP metrics (and logs, for identity) to Navigara’s endpoint with that token as a bearer header.
  3. Navigara attributes usage to contributors by email and materializes it into cost and token metrics. Usage shows up in Tool Spend within a few minutes.
The fastest path is the built-in wizard — it mints the token and generates the exact config for you:
1

Open the AI tools group

Go to Settings → Connections. Alongside Source control and Task tracking, there is an AI tools group — “Usage telemetry from AI coding assistants”.
2

Pick a tool and name the connection

Choose Claude Code, GitHub Copilot, OpenAI Codex, or LiteLLM, then give the connection a name (e.g. by team, region, or backend). You can add more than one connection per tool.
3

Generate the token and config

Click Generate token & config. Navigara mints a write-only ingest token and drops it into a ready-to-copy config block. The token is shown once — copy it now. (Use Preview config to see the snippet with a <YOUR_INGEST_TOKEN> placeholder without minting anything.)
4

Roll the config out

Apply the config to your workstations, fleet, or proxy using the per-tool instructions below. Usage appears in Tool Spend within a few minutes.

The ingest endpoint and token

If you’d rather wire it up by hand, everything the wizard produces comes down to two values. Endpoint — Navigara serves OTLP/HTTP at /api/otlp. OTLP clients append the signal path (/v1/metrics, /v1/logs) themselves. Ingest token — create one at Settings → API Tokens → Create API Token. Any token works, but a dedicated Ingest only token (write-only, cannot read your data) is recommended; the AI-tools wizard mints exactly this. Pass it on every request as:
Identity is matched by email. Navigara joins usage to a contributor using the email the tool reports. Where a tool can’t emit an email natively, the snippets below set enduser.id (usually from the developer’s git email) — make sure it matches the email Navigara already knows the contributor by. Usage that can’t be matched still counts toward org totals; it just shows as unattributed until an email resolves.

Claude Code

Claude Code has native OpenTelemetry support. It emits cost and token metrics, and — on Claude.ai (Team / Enterprise) sign-in — the developer’s email, account, and organization IDs on logs, which is how usage is attributed.
Ship this file via MDM so developers can’t override it:
  • macOS: /Library/Application Support/ClaudeCode/managed-settings.json
  • Linux: /etc/claude-code/managed-settings.json
  • Windows: C:\Program Files\ClaudeCode\managed-settings.json

Attribution by auth model

  • Claude.ai sign-in (Team / Enterprise) — Claude Code emits the user’s email and account IDs natively. Nothing else to add.
  • API key / Bedrock / Vertex — only an anonymous installation ID is emitted, so set enduser.id yourself. Because managed settings are identical on every machine, this belongs in a per-developer launcher, not the shared JSON:

GitHub Copilot

Copilot CLI telemetry is off by default. Copilot configures OTLP through environment variables only — its ~/.copilot/config.json has no telemetry settings — so for a fleet-wide rollout drop these into a shared profile (e.g. /etc/profile.d/) or a copilot launcher wrapper.
Copilot CLI does not ship protobuf export yet, so the protocol is pinned to http/json — the encoding Navigara accepts for Copilot.

OpenAI Codex

Codex configures OTLP through ~/.codex/config.toml, not environment variables. Telemetry is off by default; this turns on its OTLP exporter and points it at Navigara. Usage rides metrics; identity rides logs.
Codex token-usage metrics carry no developer identity, so set enduser.id per workstation. It’s a per-developer value, so it belongs in the shell profile, not the shared config file:
Codex sets service.name per surface (codex_exec, codex_tui); Navigara collapses these to one codex source automatically.

LiteLLM

Run one LiteLLM proxy in front of your providers and Navigara captures proxy-wide token and cost usage for every tool that routes through it. Requires LiteLLM 1.89 or newer — earlier proxies read OTEL_ENDPOINT instead and don’t append the /v1/metrics path, so usage won’t arrive.
1

Enable the OTel callback in config.yaml

2

Set these on the proxy deployment

3

Attribute usage to developers

Pick whichever matches how developers authenticate to the proxy. All three land the email in metadata.user_api_key_*, which Navigara resolves to a contributor.
Mint a virtual key per developer (/key/generate or /user/new) and set that user’s user_email to their git/commit email. LiteLLM exports it as metadata.user_api_key_user_email.

Troubleshooting

  • Nothing in Tool Spend after a few minutes — confirm the endpoint ends in /api/otlp (no /v1/... suffix except where a tool takes a full per-signal path, like Codex), and that the Authorization header carries a valid ingest token. Restart the tool/proxy so it re-reads its config.
  • Usage shows up as unattributed — the tool isn’t emitting a resolvable email. For Copilot and Codex, set OTEL_RESOURCE_ATTRIBUTES="enduser.id=..."; for Claude Code under API-key auth, add the enduser.id launcher; for LiteLLM, wire one of the three identity models. The email must match the contributor’s known email.
  • Attribution resolves a day or two late — Navigara re-attributes a trailing window automatically, so late-arriving emails backfill without action.
  • LiteLLM sends traces but no cost/tokens — set LITELLM_OTEL_INTEGRATION_ENABLE_METRICS=true and upgrade to LiteLLM ≥ 1.89.
  • Copilot export fails on protobuf — keep OTEL_EXPORTER_OTLP_PROTOCOL=http/json; the CLI doesn’t ship protobuf export yet.