TUI redraws force scroll-to-bottom, ignoring terminal scroll-to-bottom=no-output setting
Description
Claude Code's TUI output forces the terminal viewport to scroll to the bottom during long conversations, overriding the terminal's scroll-to-bottom = no-output configuration. This makes it impossible to review earlier output while Claude is actively streaming or redrawing.
Behavior
- Works correctly at the start of a conversation
- After the conversation reaches a certain length, the viewport is forced to the bottom on every TUI redraw (status line animation, streaming text)
- The terminal's
scroll-to-bottomsetting is completely bypassed - Survives terminal restart — tied to conversation length, not session state
Reproduction
- Configure terminal with
scroll-to-bottom = no-output, no-keystroke(tested in Ghostty, but also confirmed in iTerm2 and Terminal.app) - Start a Claude Code session
- Have a conversation long enough (several back-and-forth exchanges)
- Scroll up to review earlier output
- Observe: viewport is yanked back to the bottom on every Claude Code redraw
Root Cause
Claude Code's TUI appears to use terminal escape sequences (cursor repositioning / screen redraws) that force scroll-to-bottom regardless of terminal configuration. This is not regular PTY output — it bypasses the terminal's no-output scroll behavior.
Expected Behavior
When the user has scrolled up to review previous output, Claude Code should not force the viewport back to the bottom. The terminal's scroll-to-bottom configuration should be respected.
Related
- ghostty-org/ghostty#10456 — Ghostty discussion confirming this is a Claude Code issue, not terminal-side
- #35208 — Related scroll-to-bottom issue on edit acceptance
Environment
- Claude Code CLI (latest)
- macOS (Darwin 25.3.0, Apple M4 Pro)
- Tested in: Ghostty (tip channel), iTerm2, Terminal.app
This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗