[BUG] Fullscreen TUI: stale spinner rows + statusline vertical desync under nested/parallel subagent load (WSL2, v2.1.178)

Status Fixed / completed
Reported on v2.1.178
Maintainer reply None cached
Activity 4 comments · opened Jun 16, 2026 · closed Jun 17, 2026

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report
  • [x] I am using the latest version of Claude Code (v2.1.178)

Environment

  • Claude Code: 2.1.178 (latest)
  • OS: WSL2 (Linux 6.12 kernel) on Windows
  • Terminal: Windows Terminal — WT_SESSION is set (e.g. fbd66005-…), confirming WT; note TERM_PROGRAM is unset despite this (WT sets WT_SESSION but not TERM_PROGRAM)
  • Shell: bash, running as root via sudo -i, with sudo Defaults !use_pty (default use_pty disabled — see discriminators)
  • TERM: xterm-256color; COLORTERM unset
  • Setting: "tui": "fullscreen"

What's Wrong?

With "tui": "fullscreen", the no-flicker differential renderer leaves stale cells and overlapping lines when the agent-progress region grows/shrinks rapidly under heavy nested/parallel subagent load. Concrete artifacts (see screenshot):

  • spinnerVerbs rows (e.g. Newspapering…) multiply and are never cleared — old frames' rows linger on screen
  • the statusline renders in the middle of the screen instead of pinned to the bottom (vertical position desync)
  • the prompt/composer input line is drawn over content from above
  • bottom-row garbage fragments left behind (e.g. ns, 2, 20, a doubled ), stray es)
  • a hint line (…without interrupting Claude's current work) collides on top of a data row
  • token/label text merges, e.g. Running 3 claude◆agents… es, claud (+2), claude(+3))
  • after all agents complete, the screen mostly self-recovers without Ctrl+L (a steady-state repaint cleans most stale cells)

Reproduction

  1. Set "tui": "fullscreen" in ~/.claude/settings.json.
  2. From the main conversation, spawn many concurrent + nested subagents. I used 12 total = 3 parallel chains, each nesting 4 levels deep via the Task/Agent tool (each agent spawns exactly one haiku child; recursive nesting added in 2.1.172). The progress tree + agent list (shown with (+N) nesting badges) grows and shrinks quickly.
  3. Watch the fullscreen TUI during the run.
  4. Observe: stale spinner rows, mid-screen statusline, input-line overdraw, bottom-row garbage.
  5. After agents finish, the screen mostly self-heals.

What Should Happen

The fullscreen differential renderer should clear vacated rows when the agent-progress region shrinks, keep the statusline pinned to the bottom, and not overdraw the input line — i.e. no stale cells or overlapping lines during or after the run.

Key discriminators (already triaged)

  • Not a pty issue: by default sudo's Defaults use_pty inserts an intermediate pty (a second pts) between the login shell and Claude Code. We set Defaults !use_pty, collapsing the chain to a single pts (verified: bash → sudo → bash → claude all on the same pts). The corruption is unchanged with the single pts, so the intermediate pty is not the cause.
  • /tui default does NOT corrupt; only /tui fullscreen does → the bug is in the fullscreen no-flicker renderer, not the terminal/WSL layer.

Possibly related

  • #21690 (closed/completed) — TUI corruption with 18 parallel Task subagents (macOS); same trigger and similar text-merging artifacts, but marked fixed — we still reproduce similar corruption at v2.1.178 in fullscreen + WSL2 + nested agents.
  • #59750 (open) — agent-view vertical position desync on Windows Terminal/PowerShell (differs: fully unresponsive / dead input loop).
  • #17025 (closed/not_planned) — progress lines fail to update in place (line-clear / ANSI positioning failure).

_Screenshot of the corruption attached below._

View original on GitHub ↗

4 Comments

github-actions[bot] · 4 months ago

Found 3 possible duplicate issues:

  1. https://github.com/anthropics/claude-code/issues/31127
  2. https://github.com/anthropics/claude-code/issues/29182
  3. https://github.com/anthropics/claude-code/issues/21690

This issue will be automatically closed as a duplicate in 3 days.

  • If your issue is a duplicate, please close it and 👍 the existing issue instead
  • To prevent auto-closure, add a comment or 👎 this comment

🤖 Generated with Claude Code

h2suzuki · 4 months ago

<img width="1467" height="630" alt="Image" src="https://github.com/user-attachments/assets/59bf7bf2-ccb3-4d36-8e49-609d12ed9d8a" />

h2suzuki · 4 months ago

Thanks for the triage — but I don't think this duplicates the three linked issues; it adds information none of them contain.

**The three matches are the flat-parallel, default-renderer family, and all are already closed:**

  • #21690 — closed as completed (i.e. fixed). 18–30 flat parallel Task agents, macOS, inline agent-tree text-merging. Yet I reproduce similar corruption on v2.1.178 (latest), so that fix does not cover the path below.
  • #31127 — closed as duplicate, v2.1.69; flat parallel agents, and it explicitly references the scrollback-boundary flicker fixes → default / inline renderer.
  • #29182 — closed as not planned (stale), macOS; triggered "while scrolling … transition to a permission prompt", "possibly tmux" → again the scrollback / inline renderer.

What this report adds (none of the above have it):

  1. Fullscreen-only, with a discriminator. It reproduces with "tui": "fullscreen" but /tui default does NOT corrupt. That localizes it to the no-flicker fullscreen differential renderer — a different code path from the scrollback-renderer reports above. None of the three mention this discriminator.
  2. **Recursive nested sub-agents, not flat parallel.** My repro is 3 parallel chains × 4 levels of nesting (each agent spawns its own child), exercising the (+N) badge / agent-list view. All three cited issues describe only flat parallel agents.
  3. Still reproduces on the latest release (v2.1.178). The cited issues are v2.1.69 / Feb–Mar builds, all closed.
  4. Environment they don't cover: WSL2 + Windows Terminal (not tmux, not macOS), single pts (sudo Defaults !use_pty, so no intermediate pty).
  5. Self-recovers after the agents finish, without Ctrl+L — not reported in the others.

Happy to consolidate if maintainers prefer — e.g. reopen #21690 and track the fullscreen + nested path here. But it shouldn't be auto-closed against three older, closed, default-renderer reports.

github-actions[bot] · 1 month ago

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.