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.
How to copy text from Claude Code (without the terminal pain)
Copying Claude Code output from the terminal is awkward — line wraps break selection, ANSI color codes leak into the clipboard, and code blocks lose their Markdown formatting. claude-devtools renders every message as real selectable text with one-click copy.