Summary
In non-VP mode (default), when conversation output plus the footer exceeds the terminal height while background agents are running, the view cannot be scrolled up — any scroll-up immediately snaps back to the bottom and the screen flickers. The issue resolves on its own once the agent run finishes.
Steps to Reproduce
- Use default settings (non-VP mode,
ui.useTerminalBuffer unset)
- Run a flow that launches several background agents (e.g., a parallel review with multiple subagents)
- Wait for conversation/tool output to fill the terminal height
- Try to scroll up while agents are still running
Expected Behavior
The view should scroll up normally, showing earlier output.
Actual Behavior
- Scroll-up immediately snaps back to the bottom
- Screen flickers during each repaint cycle (~1s intervals)
- Issue resolves once all agents finish
Root Cause
controlsHeight (footer height) is measured in a useLayoutEffect whose dependencies don't include the agent roster state. When LiveAgentPanel grows (agents launching/changing status), the measurement effect doesn't re-run, leaving controlsHeight stale (too small). This causes the content area to overflow the terminal viewport, and the per-second elapsed-time ticks force repaints that snap the view to the bottom.
Environment
- OS: macOS
- Qwen Code version: latest main
ui.useTerminalBuffer: not set (default false)
Summary
In non-VP mode (default), when conversation output plus the footer exceeds the terminal height while background agents are running, the view cannot be scrolled up — any scroll-up immediately snaps back to the bottom and the screen flickers. The issue resolves on its own once the agent run finishes.
Steps to Reproduce
ui.useTerminalBufferunset)Expected Behavior
The view should scroll up normally, showing earlier output.
Actual Behavior
Root Cause
controlsHeight(footer height) is measured in auseLayoutEffectwhose dependencies don't include the agent roster state. WhenLiveAgentPanelgrows (agents launching/changing status), the measurement effect doesn't re-run, leavingcontrolsHeightstale (too small). This causes the content area to overflow the terminal viewport, and the per-second elapsed-time ticks force repaints that snap the view to the bottom.Environment
ui.useTerminalBuffer: not set (defaultfalse)