Butler captures usage events from Claude Code. The token costs, tool calls, prompts, model choices, subagent activity, and OpenTelemetry traces and spans. All in one dashboard.
{ "hooks": { // Once configured, Butler captures events automatically "Notification": [{ "matcher": "", "hooks": [{ "type": "http", "url": "https://collector.eldernoak.com/…", "headers": { "X-User-ID": "mike@example.com" } }] }], // … PreCompact, PostCompact, PostToolUse, Stop, and more } }
Claude Code sends events through its native hooks API and events API. No agents, no wrappers, no changes to your workflow.
Browse every Claude Code session by day. See prompt counts, tool call volumes, and session duration at a glance, then drill into any session for the full event replay.
Every event is stored with full input and response payloads. Know exactly what Claude did, what it was given, and what came back.
Butler records the model name, speed, and total token count for every Agent subagent call so you will know which model handled which work and what it cost.
HTTP hooks fire asynchronously. Butler's collector is designed for fast response times, so capturing your events adds no perceptible latency to Claude Code tool calls.
Events are authorized with your account and stored in the database, isolated by user.
Butler accepts OTLP (OTel) telemetry from Claude Code. As Claude changes, updated events will keep being tracked.
Hook events and OTel spans share the same session identifier, so you can trace a user prompt all the way through your instrumented backend services, Claude Code, and your own code, together.
No SDKs. No proxy layers. No changes to how you use Claude Code. Butler works through Claude Code's native HTTP hooks API and OpenTelemetry. Just download a config and use the install prompt.
Visit the configuration page. Butler generates a complete
~/.claude/settings.json block with your user
email address and authentication code.
Download and have Claude install it.
Open a new Claude Code session, and start writing prompts. Every session from now on is captured.
The entire Butler integration is a JSON object in
your ~/.claude/settings.json file. No CLI tools,
no environment variables, no daemons to run.
After signing up, Butler generates a Claude configuration file for your account and lets you download it and install via Claude.
If you already have a settings.json, just merge
the hooks key into your existing file.
No existing settings are affected.
{ "hooks": { "FileChanged": [{ "matcher": "", "hooks": [{ "type": "http", "url": "https://collector.eldernoak.com
/hooks/receive/", "headers": { "X-User-ID": "mike@example.com" } }] }], "PermissionDenied": [ … same pattern … ], "Stop": [ … same pattern … ], // … 23 more events, all pre-filled } }
Butler registers handlers for Claude Code lifecycle events and accepts OpenTelemetry telemetry over OTLP/HTTP. A representative sample of each is shown below.
| Event | When it fires | Key data captured | Status |
|---|---|---|---|
SessionStart |
Session begins or resumes | Session ID, model, source (startup / resume / compact) | Captured |
PostToolUse |
After a tool call succeeds | Tool name, full response, model, token usage (Agent calls) | Captured |
PostToolUseFailure |
After a tool call fails | Tool name, error message, tool use ID | Captured |
SubagentStart / SubagentStop |
Subagent spawned or finishes | Agent type, session context | Captured |
Stop |
Claude finishes a response | Stop reason, session ID | Captured |
SessionEnd |
Session terminates | End reason, final session state | Captured |
InstructionsLoaded,
PreCompact,
PostCompact,
and 15 more…
|
Various lifecycle points | Full payload stored | Captured |
Butler's OTLP/HTTP receiver accepts telemetry from any OpenTelemetry-instrumented service. Spans are stored in an Analytics Database and surfaced alongside your Claude Code session data.
| Signal type | Transport | Key data captured | Status |
|---|---|---|---|
Traces / Spans |
OTLP/HTTP | Trace ID, span ID, service name, duration, attributes | Captured |
Resource attributes |
Included with each batch | Service name, deployment environment, user/org ID | Captured |
Token usage attributes |
Span attributes on Agent calls | Input/output tokens, model name, cost — enriches session cost view | Captured |
Sign up with your email address, download a JSON file and install into your Claude Code settings.
Questions? Generate your config after signing in.