Persistent setting to collapse tool-call output by default (reopen of #40428)
Summary
Reopen the ask for a persistent setting that makes tool-call output collapsed by default, with the existing Ctrl+O toggle used to expand on demand. The mechanism ALREADY EXISTS in the UI — the "… +15 lines (ctrl+o to expand)" preview proves it — but it's never the initial state, and the toggle doesn't survive a session.
Previously requested and closed:
- #40428 — closed
not planned - #39683 — closed as duplicate of #40428
Reopening because the closes offered no substitute, and the friction has grown with agentic work: a single conversation frequently produces dozens of Update() diffs and multi-line Bash() blocks that drown the actual reasoning and decisions the user is trying to follow.
Real cost, measured today
Screenshot from a real session (Portuguese OS, macOS terminal): a single Update(check-painel.mjs) plus one Bash(...) chain took ~1000 vertical pixels and pushed the model's next reasoning off-screen. The user's own words when asked about the setup, verbatim: "isso só suja o visual entendeu?" Then they asked me to open this issue.
Impact:
- Long-running sessions with many edits/reads become unreadable — the scrollback is dominated by tool metadata that the user reads in the editor or shell anyway.
- The reasoning between tool calls loses its narrative — decisions are separated by walls of diff that the user doesn't want to see inline.
outputStyle: "Concise"andverbose: falsedo NOT change this — they only affect Claude's prose, not the harness-rendered tool blocks.
Proposed
Minimal, non-invasive:
{
"toolOutput": {
"default": "collapsed"
}
}
Or, matching the naming from #40428:
{ "compactToolOutput": true }
Optional refinements (do not gate the main ask on these):
- Per-tool override:
"toolOutput": {"default": "collapsed", "expand": ["Read"]}— some users like seeing Read inline. - Threshold:
"toolOutput": {"collapseAbove": 10}— only collapse when the preview would exceed N lines.
Behavior stays exactly what Ctrl+O already does today; the setting only changes the INITIAL state of each block.
Why this is different from verbose
verbose in settings.json controls Claude's own message detail (thinking depth, explanation length). Tool-call rendering is a separate concern — it's the HARNESS drawing the diff/output, not the model. That's why verbose: false doesn't help here.
Why "not planned" deserves revisiting
The Ctrl+O preview state proves the render path exists. The ask is not "add a new UI mode" — it's "let me pick which of the two existing modes is the default." The engineering cost is a boolean read at render time; the friction it removes for heavy sessions is real and repeatable.
If there's a design reason the default MUST be expanded (safety, transparency, discoverability), a brief note in the close would help the community understand — the prior closes have no reasoning attached.
Reproduce
- Any recent Claude Code (2.x, tested here on macOS Terminal + iTerm).
- Ask Claude to make several edits and run a handful of bash commands in one turn.
- Observe: every
Update()shows the full diff inline, everyBash()shows the full command and output inline.Ctrl+Ocollapses them but only for the current session; a fresh session starts expanded again.
Related
- #40428 (closed not planned)
- #39683 (closed duplicate)
- #57060 (a Windows-specific toggle bug — unrelated to the default-state ask)
Happy to help test a preview if the team decides to reconsider.
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗