Skip to main content
Claude Code is fully supported: Terma receives its usage and cost through Claude Code’s own OpenTelemetry export, attributes the commits it produces through machine-wide hooks, and reads your plan’s usage windows through its status line. One choice covers both the Claude Code CLI and Claude Desktop, because they read the same user-level settings. IDE extensions that read those settings are covered too.

Set up

Run terma setup once on your machine and choose Claude Code & Desktop when asked:
Then restart any running Claude Code sessions so they load the new configuration. See terma setup for every option. Sessions are collected only where your team’s collection policy allows: in a repository the policy lists, or everywhere if the policy collects every session. An org admin sets this on Team settings → Data collection.

How it works

Terma combines three channels, all configured in your user-level Claude Code settings (~/.claude/settings.json). Nothing is written into your repositories.

Telemetry: Claude Code’s OpenTelemetry export

Claude Code exports its own traces, events, and metrics. terma setup points that export at a relay terma runs on your machine, on 127.0.0.1. The relay forwards only sessions that a hook claimed in a repository your team collects, with your team’s key, and drops everything else on your machine. Your team’s key never appears in Claude Code’s settings. This channel carries model calls with their token counts (input, output, cache read, cache write) and cost, tool calls, and — when your team’s policy collects them — your prompts, Claude’s responses, and tool input and output.

Attribution: machine-wide hooks

terma setup adds Terma’s hooks to your user-level Claude Code settings: Each entry is a guarded one-liner that calls terma by its full path, so on a machine without terma the hooks do nothing. Your existing hooks are preserved. Hooks never make a network request: they append to a local queue that terma delivers in the background. Set TERMA_HOOKS=0 to turn them off for one shell or process. When your team’s policy stamps commits, the first session in a collected repository also installs commit hooks in that repository’s .git/hooks. See Commit attribution.

Plan usage: the status line

To capture your Claude plan’s usage windows, terma setup places terma in front of your existing status line command in ~/.claude/settings.json. Your renderer keeps running unchanged, and its output is preserved. If you had no status line, Terma captures silently and shows nothing. If your renderer is slow, set TERMA_STATUSLINE_TIMEOUT=60s in Claude Code’s environment.

What’s captured

Controlling what is sent

Your team’s collection policy decides what leaves your machine. An org admin sets it on Team settings → Data collection: which repositories are collected, whether commits are stamped, and whether prompts and tool inputs and results are sent. The local relay removes what the policy does not collect before anything leaves. See Privacy and data.

Verify

doctor checks your sign-in, whether your team collects the current repository, the hooks, Claude Code’s export, and delivery to Terma. Every failure names its fix, usually terma setup.
Claude Code’s managed settings and a custom --settings argument can override your user-level settings, and are outside what terma can check. An organization that deploys managed settings can include terma’s hooks with terma setup --managed-config <dir>.