[BUG] Forces scroll to top when outputting code (NOT just when scrolling)
Resolved 💬 35 comments Opened Mar 13, 2026 by loekj Closed Apr 26, 2026
💡 Likely answer: A maintainer (claude[bot], contributor)
responded on this thread — see the highlighted reply below.
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
Whenever I'm trying to read what Claude's doing, so I have my scroll position somewhere not at bottom or top; and then Claude forces my scroll position to top (it jumps) out of nowhere, whenever it's outputting code.
This was a bug in old versions, and somehow it's back. Massive annoying regression.
CC version 2.1.74
MacOS Tahoe 26.4
MacBook Pro M4 Pro
iTerm2 3.6.8
PS:
All the other bug reports indicate WHEN SCROLLING UP, but I'm just trying to read in place.
What Should Happen?
It should just let me read.
Error Messages/Logs
Steps to Reproduce
- Just have it output lots of code.
- Go somewhere in the terminal for reading
- See it jump
- Throw your cat out of the window
Claude Model
None
Is this a regression?
Yes, this worked in a previous version
Last Working Version
Unsure, but 2.1.69 maybe?
Claude Code Version
2.1.74
Platform
Anthropic API
Operating System
macOS
Terminal/Shell
iTerm2
Additional Information
I have a .mov screen recording, but can't seem to upload here 🤷
<!-- Failed to upload "ARGH.mov" -->
35 Comments
Found 3 possible duplicate issues:
This issue will be automatically closed as a duplicate in 3 days.
🤖 Generated with Claude Code
PLEASE fix this ASAP. I can't read anything Claude does whenever it's still running. So annoying, I've defenestrated multiple cats already.
We hit this too and collected working workarounds into a repo: claude-code-scroll-fix
Quick fix (Windows Terminal): Add
"snapOnOutput": falseto yourprofiles.defaultsinsettings.json. Reduces jumping ~60-70%.Complete fix: Run Claude inside tmux — it completely decouples your scroll position from Claude's cursor repositioning. The repo has a one-click installer that sets up WSL + tmux + a Windows Terminal profile.
Root cause: Claude Code uses CSI escape sequences to rewrite the thinking spinner in-place, and terminals follow the cursor position back up.
snapOnOutputonly fixes output-triggered scrolling, not cursor repositioning — tmux fixes both.Meh. Thanks, but Anthropic just has to fix this...
Root cause traced in cli.js v2.1.76 source: Ink's rendering uses \ on every re-render. When output is large, the cursor moves far up in the buffer and Windows Terminal (and iTerm) follows the cursor, snapping the viewport to the top. Full analysis in #34794.
Updated PR #34798 with v2 fix: stateful stdout.write interceptor that clamps cursor-up across ALL writes (not just sync blocks). Catches Ink renderer, prompt renderer, and all other cursor-up sources. Patch + PowerShell script included.
Updated PR #34798 with 3 combined patches: (1) stateful stdout.write interceptor clamping cursor-up, (2) render throttle 16ms→200ms, (3) disable synchronized update mode. All three are needed — cursor-up clamping alone does not fix it because Windows Terminal exits scroll mode on ANY stdout write, and sync blocks batch writes into one viewport-resetting update. PowerShell apply/revert script included.
v3 update: Previous fixes (cursor-up clamping, disabling sync update) did not work and caused flickering.
Root cause identified: Windows Terminal bug microsoft/terminal#14774 —
SetConsoleCursorPositionalways scrolls viewport to cursor, even when visible. Every Ink re-render triggers this. Cannot be fixed from within the process.v3 patch: render throttle
SK6=16→SK6=1000(1fps). Gives 1 second of uninterrupted reading between viewport resets. Trade-off: streaming text in ~1s chunks. No flickering.PR #34798 updated. Real fix needs Microsoft (terminal#14774) or Anthropic (PTY proxy/append-only rendering).
v5 update: Fundamentally different approach — buffer ALL Ink renders during active work, screen stays frozen (no viewport jumping). Flush only when (a) user types (at prompt/bottom, safe to update) or (b) 5s of no renders (Claude finished). Previous v1-v4 failed because WT bug microsoft/terminal#14774 triggers viewport scroll on ANY cursor positioning. v5 avoids this by not writing to stdout at all during active work. Trade-off: no spinner/progress visible during work. PR #34798 updated.
v6: Buffer ALL renders, flush ONLY on user input (stdin). No timer. No auto-flush. Zero viewport jumping while not at bottom. Root cause: WT bug microsoft/terminal#14774. PR #34798.
v7: Replay ALL buffered frames on flush (fixes v6 outdated screens). Keeps entire diff chain so screen content is always correct. Still zero viewport jumping — flush only on user input (stdin). PR #34798.
Final fix: Ctrl+6 freeze toggle. Press Ctrl+6 to freeze screen (buffer renders, scroll freely). Press again to unfreeze (replay + live output). Tab title shows [FROZEN]. Root cause is WT bug microsoft/terminal#14774 — cannot be detected/fixed automatically. PR #34798.
Thanks but it was fixed before, in a previous version. This is a regression, and I don't understand why not more people are absolutely going apeshit over this. It's the most annoying thing!
I can't do any work at any speed at the moment. I need to understand what's happening and currently am just waiting for it to wait to then read. Very annoying.
Same issue here — iTerm2 on macOS, Max account. This is a show-stopper. Viewport jumps to top of scrollback on every output event, making it impossible to read, select, or copy previous output. Have to scroll down thousands of lines to get back. Competing CLI tools do not have this problem in the same terminal. Will cancel Max subscription if this isn't fixed.
A fix for this is available as a Claude Code plugin: https://github.com/anthropics/claude-code/pull/35683
The scroll-fix plugin clamps cursor-up sequences within synchronized output blocks to the viewport height, preventing the terminal from scrolling to the top. Also includes Ctrl+6 freeze toggle for manual scroll control. Works on all platforms and terminals.
Is the intended solution for affected users a plugin? That seems completely unacceptable.
A fix is available as a Claude Code plugin: scroll-fix
Install:
Root cause: both Ink renderer AND readline/prompt system emit cursor-up sequences exceeding viewport height. The plugin clamps all cursor-up per write call. Also includes Ctrl+6 freeze toggle.
PR: https://github.com/anthropics/claude-code/pull/35683
Eagerly awaiting for a resolution (that doesn't require and external plugin) for this very annoying bug.
@cruzlauroiii
A simple workaround for this is to just type any letter in the session (don't send it)
This is super aggravating.
Doesn't work on all terminals unfortunately
Still broken as of v2.1.81:
https://github.com/anthropics/claude-code/issues/36582
https://github.com/anthropics/claude-code/issues/35403
https://github.com/anthropics/claude-code/issues/36816
https://github.com/anthropics/claude-code/pull/35683
https://github.com/anthropics/claude-code/issues/33814
https://github.com/anthropics/claude-code/issues/34845
https://github.com/anthropics/claude-code/issues/33367
https://github.com/anthropics/claude-code/issues/34400
https://github.com/anthropics/claude-code/issues/826
https://github.com/anthropics/claude-code/issues/36621
https://github.com/anthropics/claude-code/issues/36128
https://github.com/anthropics/claude-code/issues/35766
https://github.com/anthropics/claude-code/issues/34242
https://github.com/anthropics/claude-code/issues/18299
Is this fix coming in the next version? Patch looks a little involved but
great work!
On Sat, Mar 21, 2026 at 11:21 AM dotiallwrong @.***>
wrote:
+1 — experiencing this on GNOME Terminal (same behavior as IntelliJ terminal). Cursor randomly scrolls up during streaming output.
+1
+1 iTerm 3.6.9 love me some claude code but you have to fix this.
Experiencing this on Ghostty (macOS). Confirmed that Ghostty's
scroll-to-bottom = no-outputconfig has no effect — the issue is Claude Code's Ink renderer emitting cursor-repositioning escape sequences (\x1b[<N>A) on every redraw, which bypasses terminal scroll settings entirely.For anyone on macOS/Linux looking for a workaround, claude-chill (a Rust PTY proxy) or running inside tmux are the current best options.
This is easily the most disruptive UX issue in daily use — would love to see the community PR (#35683) reviewed or an official fix prioritized.
👍 We're experiencing the same issue embedding xterm.js 6.0.0 in a Tauri app. The scroll position jumps when Claude Code redraws its TUI while the user is scrolled up. Confirmed root cause: cursor-up sequences exceeding viewport height + ESC[2J/ESC[3J.
https://code.claude.com/docs/en/changelog
Is it fixed!?
I just encountered scroll back to beginning of scroll history (claude 2.1.83; iterm2 3.6.9; no tmux/screen) but it is first time for half of a day playing with 2.1.83 claude cli. So seems to be "mostly fixed" (for me).
This scrolling issue is part of a broader pattern (#826, #769, #1486, #367, #33814) where Claude Code's TUI rendering causes unintended scroll behavior.
Workaround 1 — tmux isolates scrolling:
tmux manages its own viewport independently of the terminal's scroll buffer. Scroll with
Ctrl+B [in tmux instead of using the terminal's native scroll.Workaround 2 — Compact to reduce rendered history:
Less conversation history = less content to render = less scrolling issues. Compact at natural breakpoints.
Workaround 3 — Reduce terminal scrollback:
Smaller scrollback buffers reduce the range of scroll-jumping.
Workaround 4 — Fresh sessions for new tasks:
Workaround 5 — Use headless mode for non-interactive work:
No TUI = no scrolling issues.
At some point they had it fixed. Unsure what exact version that was since they release new version at a faster clip than uncle Earl commits felonies.
Any patch so far proposed is just not really a good work around.
This is a duplicate of #35403, which was fixed as of version 2.1.101.
This issue has been automatically locked since it was closed and has not had any activity for 7 days. If you're experiencing a similar issue, please file a new issue and reference this one if it's relevant.