What would you like to be added?
Proposed Solution
Add a compact/verbose mode with a Ctrl+O keyboard shortcut to toggle between the two modes:
Compact Mode (default)
- Tool names and status indicators remain visible (✓ Success, ✗ Error, ⟳ Executing)
- Tool result output is hidden
- Thinking-chain content (
gemini_thought / gemini_thought_content) is hidden
- Final assistant responses are always shown
- Footer shows no indicator (clean state)
Verbose Mode
- Everything shown as today: full tool output, thinking chains, diffs, agent traces
- Footer shows a
verbose label as a visual indicator that the mode is active
Behavior Details
| Behavior |
Description |
| Toggle key |
Ctrl+O |
| Default state |
Compact (noise-reduced) |
| Persistence |
Setting saved to ~/.qwen/settings.json as ui.verboseMode |
| Retroactive switch |
History re-renders immediately on toggle (via refreshStatic) |
| Mid-stream toggle |
Viewport freezes at current state to prevent jitter; auto-unfreezes when stream ends |
| Settings key |
ui.verboseMode: boolean (default: false) |
Motivation
- Reduces cognitive load: Users can focus on the assistant's answer rather than intermediate tool chatter
- Consistent with industry standard: Claude Code already offers this pattern; users switching between tools expect parity
- Power users get the best of both: Verbose mode is one keypress away when debugging or auditing tool behavior
- No data loss: Toggling only affects rendering — all data is preserved in the underlying history
Expected UX
[Compact mode — default]
✓ ReadFile src/main.ts
✓ SearchFiles "TODO"
✓ WriteFile src/fix.ts
Here's what I did: I found and fixed the bug in ...
[After Ctrl+O — verbose mode]
✓ ReadFile src/main.ts
export function main() {
// ... full file content visible ...
}
✓ SearchFiles "TODO"
src/main.ts:42: // TODO: fix this
✓ WriteFile src/fix.ts
+ const fixed = ...
Here's what I did: I found and fixed the bug in ...
Footer indicator when verbose is active:
? for shortcuts verbose | 42% context
Implementation Notes
The feature can be implemented purely at the rendering layer with no changes to the core streaming or data model:
- A
VerboseModeContext (React Context) distributes verboseMode: boolean and frozenSnapshot to consumer components
HistoryItemDisplay gates gemini_thought / gemini_thought_content on verboseMode
ToolMessage suppresses result display when verboseMode is false
MainContent uses a frozen snapshot of pendingHistoryItems during streaming to prevent viewport jitter
AppContainer owns state, handles Ctrl+O, and persists to settings
This approach is minimal, non-breaking, and testable in isolation.
References
Why is this needed?
Background
When Qwen Code processes a complex task, it executes multiple tool calls — file reads, searches, shell commands — each producing output that is printed to the terminal. For long-running agentic tasks, this creates a wall of intermediate output that buries the final answer and makes the conversation hard to
scan.
Claude Code addresses this with a compact/verbose mode toggle (Ctrl+O): in compact mode,
tool result output and thinking-chain content are hidden, showing only tool names, statuses, and final assistant responses. Verbose mode reveals the full
output. The mode persists across sessions and is togglable at any time — including mid-stream — without losing context.
Problem
Currently, Qwen Code always renders the full output of every tool call, including:
- Complete file contents returned by read tools
- Full stdout/stderr of shell commands
- Step-by-step thinking chain entries (
<think> blocks)
- Large diff outputs and agent execution traces
For a task involving 20+ tool calls, the terminal becomes cluttered and the actual answer is difficult to find. There is no way to reduce this noise
without losing the information entirely.
Additional context
No response
What would you like to be added?
Proposed Solution
Add a compact/verbose mode with a
Ctrl+Okeyboard shortcut to toggle between the two modes:Compact Mode (default)
gemini_thought/gemini_thought_content) is hiddenVerbose Mode
verboselabel as a visual indicator that the mode is activeBehavior Details
Ctrl+O~/.qwen/settings.jsonasui.verboseModerefreshStatic)ui.verboseMode: boolean(default:false)Motivation
Expected UX
Footer indicator when verbose is active:
Implementation Notes
The feature can be implemented purely at the rendering layer with no changes to the core streaming or data model:
VerboseModeContext(React Context) distributesverboseMode: booleanandfrozenSnapshotto consumer componentsHistoryItemDisplaygatesgemini_thought/gemini_thought_contentonverboseModeToolMessagesuppresses result display whenverboseModeisfalseMainContentuses a frozen snapshot ofpendingHistoryItemsduring streaming to prevent viewport jitterAppContainerowns state, handlesCtrl+O, and persists to settingsThis approach is minimal, non-breaking, and testable in isolation.
References
Why is this needed?
Background
When Qwen Code processes a complex task, it executes multiple tool calls — file reads, searches, shell commands — each producing output that is printed to the terminal. For long-running agentic tasks, this creates a wall of intermediate output that buries the final answer and makes the conversation hard to
scan.
Claude Code addresses this with a compact/verbose mode toggle (
Ctrl+O): in compact mode,tool result output and thinking-chain content are hidden, showing only tool names, statuses, and final assistant responses. Verbose mode reveals the full
output. The mode persists across sessions and is togglable at any time — including mid-stream — without losing context.
Problem
Currently, Qwen Code always renders the full output of every tool call, including:
<think>blocks)For a task involving 20+ tool calls, the terminal becomes cluttered and the actual answer is difficult to find. There is no way to reduce this noise
without losing the information entirely.
Additional context
No response