TokenMeter — AI Agent Observability Architecture

Unified observability for Claude Code + Codex — hooks, log watchers, SQLite, TUI & Web

hooks (stdin JSON) writes writes poll poll Unix socket write events (live) read read JSONL read for message viewer Claude Code AI coding agent hooks + JSONL Codex AI coding agent JSONL only Claude JSONL ~/.claude/projects/ token usage source Codex JSONL ~/.codex/sessions/ YYYY/MM/DD/*.jsonl tm emit hook stdin bridge CLI → Unix socket ClaudeLogWatcher JSONL poller assistant.usage CodexWatcher JSONL poller session_meta · tokens tm daemon Unix socket server ~/.tokenmeter/tokenmeter.sock Responsibilities • Event Normalizer • Cost Estimator • Subscription Broadcaster • Storage Writer Pricing-aware: Opus · Sonnet · Haiku GPT-5 · GPT-4.1 Unified Event struct dedup via source_id SQLite ~/.tokenmeter/data/tokenmeter.db • sessions • agents • tool_calls • token_usage • file_changes modernc · pure Go tm TUI Bubbletea terminal UI • Dashboard • Messages • Tool Calls • Stats real-time event subscription tm web localhost:8370 • REST API + SPA • Cost charts • Dark / light mode • Session detail reads SQLite + JSONL Legend External (AI agent) Backend (Go) Database / Log file Frontend live event stream async log read

Core Pipeline

  • • Single Go 1.24 binary, no deps
  • • Unix socket transport
  • • Event unification (Claude + Codex)
  • • Cost estimator with model-aware pricing
  • • Live pub/sub broadcaster to TUI
  • • SessionEnd cleanup, stale-session GC

Data Sources & Storage

  • • Claude hooks: PreToolUse / PostToolUse
  • • Claude hooks: Session* / Subagent* / Stop
  • • Claude JSONL → tokens, usage, gitBranch
  • • Codex JSONL → session_meta, tokens
  • • SQLite: 5 tables, modernc pure-Go driver
  • • Dedup via source_id unique index

User Interfaces

  • • TUI: 4 tabs (Dashboard / Messages / Tool Calls / Stats)
  • • TUI: keyboard nav (j/k, Tab, / filter)
  • • TUI: 2s poll + live event push
  • • Web: REST API + embedded SPA
  • • Web: cost area chart, session detail
  • • Web: dark / light mode auto-detect