Caude writes JSONL transcripts but they're not usable in real time.
So I built ObservAgent. It's a local dashboard that gives you live visibility into every Claude Code session without touching your code.
How it works:
Claude Code has a hooks system (PreToolUse, PostToolUse, SubagentStart, SubagentStop). ObservAgent installs a tiny Python relay that fires a fire-and-forget POST to a local Fastify server on every hook event. The server stores events in SQLite and streams them to a React dashboard over SSE.
npm install -g @darshannere/observagent observagent init # installs hooks into ~/.claude/settings.json observagent start # opens dashboard at localhost:4999
That's it. Run any Claude Code session and watch it live.
What you get:
- Real-time tool call log with latency per call - Cost tracking — token usage per model (including cache read/write) auto-calculated against current Claude pricing - Agent tree — session + subagent hierarchy with per-agent cost rollups - Session history grouped by repository with one-click replay and JSONL/CSV export - Health panel with p50/p95 latency and error rates
Everything binds to 127.0.0.1. No cloud, no telemetry, no API keys needed.
GitHub:https://github.com/darshannere/observagent npm: npm install -g @darshannere/observagent
Happy to answer questions about the hooks architecture or how I handle cost attribution across subagents (trickier than it sounds).