@raindrop-ai/claude-code
v0.0.18
Published
Raindrop observability for Claude Code CLI — automatic session, tool call, and prompt tracing via hooks
Readme
@raindrop-ai/claude-code
Raindrop observability for Claude Code CLI. Automatic session, tool call, and prompt tracing via Claude Code's native hooks system.
Install
npm install -g @raindrop-ai/claude-codeSetup
raindrop-claude-code setupThis saves your write key and configures Claude Code hooks. Every session will now send telemetry to your Raindrop dashboard.
Hooks are synchronous by default for headless/one-shot compatibility (claude -p). Use --async if you prefer non-blocking hooks in interactive mode.
What gets tracked
- Every prompt turn as a separate event, grouped by session
- Tool calls with inputs, outputs, and real durations
- Token usage per turn and per session (input, output, cache read, cache creation)
- Model name, service tier, and stop reason
- CLAUDE.md and rules file contents
--append-system-prompt/--append-system-prompt-filecontent (best-effort)- Subagent spawns and completions
- Permission denials and context compaction
- Self-diagnostics — agent-reported issues via MCP tool, with customizable signal categories
- Nested trace view (tools under root, subagent tools under subagent)
- Claude's responses and errors
Custom Properties
Tag events with product names or custom metadata via .claude/settings.json:
{
"env": {
"RAINDROP_EVENT_NAME": "design-agent",
"RAINDROP_PROPERTIES": "{\"product\":\"design\",\"team\":\"ai\"}"
}
}Custom Self-Diagnostics Signals
Replace the built-in signal categories with your own via ~/.config/raindrop/config.json:
{
"self_diagnostics": {
"signals": {
"billing_complaint": { "description": "User billing issue.", "sentiment": "NEGATIVE" },
"feature_request": { "description": "User wants a feature.", "sentiment": "POSITIVE" }
},
"guidance": "Only report billing if explicitly mentioned."
}
}Or via env var: RAINDROP_SELF_DIAGNOSTICS='{"signals":{...}}'
Projects
If your org has multiple projects, route telemetry to a specific one by setting its slug via the RAINDROP_PROJECT_ID env var or the project_id key in ~/.config/raindrop/config.json:
{
"project_id": "support-prod"
}This sets the X-Raindrop-Project-Id header on every outbound request. Leave it unset (or use "default") to use your org's default Production project — the existing behavior. Single-project orgs need nothing new.
Payload size limits & bounded hooks
Event input/output are capped at 1,000,000 characters per field (span
attributes at 32 KB) and truncated with a ...[truncated by raindrop] marker,
enforced before serialization so multi-MB prompts or tool results cost the cap
— not the payload — inside the hook process. Each hook invocation also runs
under a hard overall deadline (8s by default, covering the stdin read,
mapping, and network flush; RAINDROP_HOOK_FLUSH_DEADLINE_MS to override)
and exits explicitly, so a dead or slow network can never stall Claude Code's
hook machinery.
Debugging
raindrop-claude-code debug-on # logs hook output to /tmp/raindrop-hooks.log
raindrop-claude-code debug-off # disables loggingDocs
Full documentation: docs.raindrop.ai/sdk/claude-code
