claude --verbose vs claude-devtools
Both surface the data Claude Code's terminal hides. --verbose dumps a raw JSON stream live; claude-devtools renders the same data as a structured, navigable, searchable interface after the fact.
Since v2.1.20, Claude Code's terminal hides most of what it actually does — file paths, diffs, regex patterns, thinking content. There are two ways to get that detail back: the built-in --verbose flag, and claude-devtools. Both read the same underlying session data. The difference is in how that data is presented.
claude --verbose prints the raw event stream as it happens. Every JSON message — user turn, assistant response, tool call, tool result, system event — is dumped to stdout, one per line, including internal system prompts and embedded metadata.
claude-devtools reads the same JSONL transcripts after they're written to ~/.claude/, and renders them as a structured conversation with per-tool viewers, navigable history, and search.
Source of data: --verbose is a live stdout stream during the run. claude-devtools reads ~/.claude/ JSONL files after Claude Code writes them — every session you've ever run is available.
Format: --verbose is raw JSON, one line per event, with system prompts and metadata included. claude-devtools renders a chronological conversation with tool-specific viewers — Read calls become syntax-highlighted code, Edit calls become inline diffs, Bash calls render terminal output.
Tool calls: --verbose shows escaped JSON for both inputs and outputs. claude-devtools shows formatted inputs and specialized output renderers per tool.
Thinking content: Both surface it, but claude-devtools makes thinking collapsible per turn so you can scan a session quickly.
Past sessions: --verbose is ephemeral — once stdout is gone, it's gone. claude-devtools indexes every transcript on disk and lets you navigate any of them.
Search: --verbose requires piping to grep or jq. claude-devtools provides cross-session Cmd+K search across every transcript.
Subagents: --verbose interleaves subagent events into the main stream. claude-devtools renders each subagent as its own recursive execution tree with tool traces and metrics.
Token attribution: --verbose shows raw usage fields per response. claude-devtools breaks down per-turn usage across 7 categories — CLAUDE.md, skills, @-mentioned files, tool I/O, thinking, team overhead, user text.
Compaction events: --verbose shows a JSON marker. claude-devtools visualizes the boundary, the token delta before/after, and what was compressed away.
When --verbose is the right tool:
- You need the live event stream while a session runs (e.g. for piping into another tool)
- You're writing custom log processors and want the canonical data
- You need to confirm an event happened now, not after the fact
When claude-devtools is the right tool:
- You're trying to figure out what went wrong in a session that already finished
- You need to compare what Claude was thinking vs. what it actually did
- You want to inspect a subagent's full execution tree without losing your place
- You're auditing token cost or compaction across many sessions
- You want to do any of the above on a remote machine over SSH
The two are not mutually exclusive. --verbose is useful for live, scripted access; claude-devtools is the post-hoc debugger.
Related
Why did Claude Code forget? Diagnosing compaction
When Claude Code suddenly 'forgets' an earlier instruction or file, the cause is almost always context compaction. Here's a step-by-step walkthrough to find the boundary, see what was lost, and recover.
Claude Code JSONL transcript format explained
Claude Code stores every session as a JSONL file — one JSON object per line — under ~/.claude/projects/. Field-by-field reference for reading or processing transcripts directly with jq, Python, or any JSONL-aware tool.