Set up
Runterma setup once on your machine and choose Claude Code & Desktop when asked:
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>.