Terminal title rewritten every 960ms (activity glyph is part of the title payload), restarting terminal status animations

Status Open
Reported on v2.1.231
Maintainer reply None cached
Activity 1 comment · opened Aug 20, 2026

Environment

  • Claude Code 2.1.231 (native install)
  • macOS 26 (Darwin 25.5.0), Apple Silicon
  • iTerm2 3.7b, attached via tmux -CC (control mode); tmux 3.7b; TERM=tmux-256color

Behavior

While a turn is in flight, Claude Code rewrites the terminal title roughly every 960 ms.

The OSC 0 payload is <glyph> <title>, where the glyph alternates / while busy ( when idle). The title text is stable across those writes — only the glyph changes. Because the composed string differs each frame, every frame produces a real title write.

Impact

Under tmux -CC, each write updates pane_title; tmux pushes that to the control-mode client, and iTerm2 restarts its tab status/progress animation. The result is an indicator that re-animates once per second for the entire turn — visually a gradient that never finishes sliding.

Nothing in the chain deduplicates: Claude Code doesn't compare against the last title it emitted, and tmux's title handling stores and notifies unconditionally.

Why there is no workaround

  • CLAUDE_CODE_DISABLE_TERMINAL_TITLE removes the title entirely. That defeats the purpose — I rely on the generated session topic to tell apart many tabs started in the same directory.
  • A code path that omits the glyph appears to exist, but is reachable only behind an internal feature gate (tengu_terminal_sidebar) combined with the showStatusInTerminalTab config, so it can't be enabled locally.
  • tmux can strip the glyph in format strings (automatic-rename-format, status-right, pane-border-format), but it cannot rewrite pane_title itself: there is no pane-title-changed hook, and allow-set-title off is again all-or-nothing. iTerm2 in control mode reads pane_title directly, so format-level rewriting doesn't reach it.

Net effect: there is currently no configuration that keeps the title and stops the per-second churn.

Requests

Any one of these would resolve it:

  1. A setting to omit the activity glyph from the terminal title (i.e. make the existing no-prefix path reachable).
  2. Skip the OSC write when the composed title is unchanged from the last one emitted.
  3. Make the glyph animation opt-in, or slow it substantially.

Option 2 seems strictly good regardless — it removes redundant terminal writes for every user, not just multiplexer setups.

Note

I have not verified whether the OSC 9;4 progress reporting (terminalProgressBarEnabled) also re-emits per frame; if it does, it would be a second source of the same restart behavior.

Workaround for anyone hitting this

The session topic is persisted to the transcript as {"type":"custom-title","customTitle":"…"}, so it's possible to keep CLAUDE_CODE_DISABLE_TERMINAL_TITLE=1 and set the tab title from a Stop hook instead — once per turn rather than once per second.

View original on GitHub ↗

This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗