By dash0hq
OpenTelemetry observability for Claude Code sessions. Captures tool calls, LLM invocations, token usage, and errors as OTel traces.
npx claudepluginhub dash0hq/claude-marketplace --plugin dash0-agent-pluginClaude Code plugin that captures all agent activity and logs hook events to a newline-delimited JSON file for observability.
# Add the Dash0 marketplace
/plugin marketplace add dash0hq/claude-marketplace
# Install the plugin
/plugin install dash0-agent-plugin@dash0
# Test locally without marketplace
claude --plugin-dir /path/to/dash0-agent-plugin
# Build the binary locally (instead of downloading from GitHub Releases)
go build -o ~/.claude/plugins/data/dash0-agent-plugin-inline/bin/on-event-0.1.0-$(uname -s | tr '[:upper:]' '[:lower:]')-$(uname -m | sed 's/x86_64/amd64/') ./cmd/on-event/
The plugin registers a hook for every supported Claude Code event. Each event's payload is written as a single JSON line (with a timestamp field added) to:
~/.claude/plugins/data/dash0-agent-plugin/events.jsonl
| Category | Events |
|---|---|
| Session | SessionStart, SessionEnd |
| Turn | UserPromptSubmit, Stop, StopFailure |
| Tool | PreToolUse, PostToolUse, PostToolUseFailure |
| Permission | PermissionRequest, PermissionDenied |
| Subagent | SubagentStart, SubagentStop |
| Task | TaskCreated, TaskCompleted, TeammateIdle |
| Config | ConfigChange, CwdChanged, FileChanged, InstructionsLoaded |
| Compaction | PreCompact, PostCompact |
| Worktree | WorktreeCreate, WorktreeRemove |
| Elicitation | Elicitation, ElicitationResult |
| Notification | Notification |
Create .claude/dash0-agent-plugin.local.md in your project root:
---
enabled: true
otlp_url: "https://ingress.us1.dash0.com"
auth_token: "your-dash0-auth-token"
dataset: "your-dataset"
agent_name: "my-coding-agent"
---
| Setting | Description | Required |
|---|---|---|
enabled | Enable or disable the plugin for this project (true/false) | No (defaults to true) |
otlp_url | Dash0 OTLP endpoint URL | Yes |
auth_token | Dash0 authentication token | Yes |
dataset | Dash0 dataset to send data to | No |
agent_name | Name for this agent, used as service.name and gen_ai.agent.name resource attributes | No (defaults to claude-code) |
These can also be set as environment variables instead of (or in addition to) the configuration file:
| Variable | Description |
|---|---|
DASH0_OTLP_URL | Dash0 OTLP endpoint URL — must include scheme (e.g. https://ingress.us1.dash0.com) |
DASH0_AUTH_TOKEN | Dash0 authentication token |
DASH0_DATASET | Dash0 dataset |
DASH0_AGENT_NAME | Agent name |
DASH0_OMIT_USER_INFO | Omit user.name and user.email from telemetry (true/false) |
DASH0_OMIT_IO | Omit tool inputs/outputs and prompt content (true/false) |
DASH0_DEBUG | Print OTel payloads to stderr for local debugging (true/false) |
DASH0_DEBUG_FILE | Also write debug output to this file path (e.g. /tmp/dash0-debug.log) |
Set DASH0_DEBUG=true to print all OTel payloads to stderr. Works with or without an OTLP endpoint configured — useful for verifying what telemetry the plugin produces.
DASH0_DEBUG=true claude --debug --plugin-dir /path/to/dash0-agent-plugin
To write debug output to a file (useful for tailing in a separate terminal without --debug):
DASH0_DEBUG=true DASH0_DEBUG_FILE=/tmp/dash0-debug.log claude --plugin-dir /path/to/dash0-agent-plugin
# In another terminal:
tail -f /tmp/dash0-debug.log
Output is prefixed with [dash0:trace] or [dash0:log] for filtering:
[dash0:trace] {"resourceSpans":[...]}
[dash0:log] {"resourceLogs":[...]}
If telemetry isn't arriving in Dash0, run Claude Code with --debug to see plugin error messages:
DASH0_OTLP_URL="https://ingress.us1.dash0.com:4318" \
DASH0_AUTH_TOKEN="your-token" \
claude --debug --plugin-dir /path/to/dash0-agent-plugin 2>&1 | grep "on-event:"
Plugin errors are prefixed with on-event: in the output.
Releases are automated with GoReleaser via GitHub Actions. To create a new release:
git tag v0.1.0
git push --tags
This triggers the release workflow which cross-compiles binaries for darwin/linux × amd64/arm64 and publishes them to GitHub Releases. The on-event.sh script downloads the matching binary on first run.
Permanent coding companion for Claude Code — survives any update. MCP-based terminal pet with ASCII art, stats, reactions, and personality.
Matches all tools
Hooks run on every tool call, not just specific ones
Share bugs, ideas, or general feedback.
Semantic search for Claude Code conversations. Remember past discussions, decisions, and patterns.