Terminal rendering breaks in long conversations - status lines print on new lines instead of updating in place

Resolved 💬 10 comments Opened Jan 7, 2026 by ustunb Closed Feb 27, 2026

Description

After a conversation reaches a certain length, Claude Code's terminal rendering breaks - status updates print on new lines instead of updating in place. This causes the "Thinking..." spinner to spam hundreds of lines, making the interface unusable.

Expected Behavior

Status lines like "✳ Infusing... (esc to interrupt · 5s · ↓ 217 tokens · thinking)" should update in place on a single line.

Actual Behavior

Each status update prints on a new line, resulting in output like:

✳ Infusing…  (esc to interrupt · 5s · ↓ 217 tokens · thinking)

✳ Infusing…  (esc to interrupt · 5s · ↓ 217 tokens · thinking)

✶ Infusing…  (esc to interrupt · 5s · ↑ 217 tokens · thinking)

✶ Infusing…  (esc to interrupt · 5s · ↑ 218 tokens · thinking)

This continues for hundreds of lines. Tool status also affected:

⏺ Bash(ls -la ~/.claude/file-history/ | head -20)
  ⎿  Waiting…

⏺ Bash(ls -la ~/.claude/file-history/ | head -20)
  ⎿  Waiting…

⏺ Bash(ls -la ~/.claude/file-history/ | head -20)
  ⎿  Running…

Observations

  • Does NOT happen at start of conversation - only after conversation reaches a certain length
  • Restarting Claude Code fixes it temporarily (until conversation gets long again)
  • Sometimes stops on its own after a while
  • Occurs in both iTerm2 and Terminal.app on macOS
  • ANSI escape codes for cursor movement appear to stop working

Environment

  • Claude Code version: 2.0.76
  • OS: macOS (Darwin 24.6.0)
  • Terminals tested: iTerm2, Terminal.app (bug occurs in both)

Impact

  • Interface becomes unusable - can't see conversation
  • Consumes excessive terminal buffer
  • Have to restart Claude Code frequently during long sessions

View original on GitHub ↗

This issue has 10 comments on GitHub. Read the full discussion on GitHub ↗