Co-authored-by: ozymandiashh <234437643+ozymandiashh@users.noreply.github.com> Co-authored-by: iamtoruk <hello@agentseal.org>
2.9 KiB
Claude
Anthropic Claude Code CLI and Claude Desktop's local agent mode.
- Source:
src/providers/claude.ts - Loading: eager (
src/providers/index.ts:1) - Test: none directly. Coverage comes from
tests/parser-claude-cwd.test.ts,tests/parser-filter.test.ts, andtests/parser-mcp-inventory.test.ts, which exercisesrc/parser.tsend-to-end against fixture session files.
Where it reads from
| Source | Path |
|---|---|
| Claude Code CLI | $CLAUDE_CONFIG_DIR if set, otherwise ~/.claude/projects/ |
| Claude Desktop (macOS) | ~/Library/Application Support/Claude/local-agent-mode-sessions/ |
| Claude Desktop (Windows) | %APPDATA%/Claude/local-agent-mode-sessions/ |
| Claude Desktop (Linux) | ~/.config/Claude/local-agent-mode-sessions/ |
For Desktop, findDesktopProjectDirs walks up to 8 levels deep looking for projects/ subdirectories, skipping node_modules and .git.
Storage format
JSONL, one event per line, per session file. Sessions live under <project>/<sessionId>.jsonl.
Parser
createSessionParser returns an empty async generator (claude.ts:101-105). Claude is a special case: src/parser.ts reads Claude JSONL files directly with full turn grouping, dedup of streaming message IDs, and MCP tool inventory extraction. The provider object exists only so discoverSessions can return Claude session sources alongside the others.
Pricing
Claude Code reports total cache-write tokens in usage.cache_creation_input_tokens.
When available, it also splits those writes by duration in
usage.cache_creation.ephemeral_5m_input_tokens and
usage.cache_creation.ephemeral_1h_input_tokens. CodeBurn keeps the existing
aggregate cache-write token total for reports, but prices the 1-hour portion at
2x base input cost (1.6x the 5-minute cache-write rate exposed by LiteLLM).
If the split fields are missing, the parser falls back to the legacy behavior
and prices every cache write at the 5-minute rate.
Caching
None at the provider level. The daily aggregation cache (src/daily-cache.ts) reuses prior computed days.
Quirks
- The parser is in
src/parser.ts, not insrc/providers/claude.ts. Anything that changes Claude parsing belongs inparser.ts. - Streaming responses produce duplicate message IDs across resumed sessions;
parser.tsstrips them via the globalseenMsgIdsSet. - Model display names are mapped in
claude.ts:7-20; add new versions there when Anthropic releases them.
When fixing a bug here
- Confirm whether the bug is in discovery (sessions not picked up) or parsing (sessions found but data wrong).
- Discovery bugs live in
claude.ts:78-99. Verify the directory layout you expect actually matches what Claude writes today. - Parsing bugs live in
src/parser.ts. Look forparseSessionFile,groupIntoTurns, anddedupeStreamingMessageIds. - Add a fixture under
tests/fixtures/and a test undertests/parser-claude-cwd.test.ts(or a new file). Do not mock the filesystem.