Claude Code & observability

Every session,
documented.

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.

~/.claude/settings.json
{
  "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 
  }
}
26 events can be captured
Low collector latency
60s setup time
26
Hook events captured
OTel
OTLP/HTTP traces & spans
2MB
Max event payload
Sessions stored

Show everything in your AI sessions

Claude Code sends events through its native hooks API and events API. No agents, no wrappers, no changes to your workflow.

🗂

Session timeline

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.

🔬

Tool call inspector

Every event is stored with full input and response payloads. Know exactly what Claude did, what it was given, and what came back.

🤖

Model & token tracking

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.

Non-blocking capture

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.

🔒

Isolated by design

Events are authorized with your account and stored in the database, isolated by user.

📡

OpenTelemetry ingestion

Butler accepts OTLP (OTel) telemetry from Claude Code. As Claude changes, updated events will keep being tracked.

🔗

Correlated sessions

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.

Up and running in three steps.

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.

1

Sign up

Create your Butler account at dashboard.eldernoak.com using your email address.

2

Get your config

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.

3

Watch it flow

Open a new Claude Code session, and start writing prompts. Every session from now on is captured.

One JSON block.
Every event, 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.

~/.claude/settings.json (excerpt) JSON
{
  "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 } }

What Butler captures.

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

Ready to meet your Butler?

Sign up with your email address, download a JSON file and install into your Claude Code settings.

Get started at dashboard.eldernoak.com →

Questions? Generate your config after signing in.