Terminal tab title should update dynamically as conversation evolves

Resolved 💬 2 comments Opened Mar 30, 2026 by faisal-claude Closed May 3, 2026

Problem

The terminal tab title is set from the first user message in a conversation and never updates. As the conversation evolves across different topics (e.g., from financial analysis → email search → calendar check → debugging), the title remains stale and no longer reflects what's actually happening.

Additionally, there is no way to set a persistent custom tab title. A previous hook-based approach (using OSC escape sequences) worked but broke in a recent update — Claude Code now overrides the title on every render cycle, making any user-set title impossible to maintain.

Current Behavior

  • Title is set once from the initial prompt (e.g., "Check steam revenue for February and March")
  • Claude Code continuously resets the terminal title on every render cycle
  • Any attempt to override via OSC escape sequences in statusLine or hooks gets immediately overwritten
  • This means custom workarounds (e.g., UserPromptSubmit hook + statusLine OSC injection) don't work
  • Regression: This used to work — users could set a custom tab title via hooks/OSC sequences before a recent update

Desired Behavior

One or more of:

  1. terminalTitle setting — Allow users to set a static or template-based title (e.g., "terminalTitle": "Faisal Home" or "terminalTitle": "{cwd} - {model}")
  2. terminalTitle: false — Option to disable Claude Code's title-setting entirely, so users can manage it themselves via hooks/statusLine OSC sequences without being overridden
  3. Dynamic title updates — Update the terminal title periodically to reflect the current conversation topic, not just the first message
  4. Expose topic/conversation_summary in statusLine JSON — Let the statusLine script access the current topic so it can set the title via OSC

Context

  • Long-running sessions with multiple topics make the stale title actively misleading
  • Users with multiple Claude Code tabs open rely on the title to identify which session is which
  • A previous custom hook-based approach worked but broke in a recent update when Claude Code started overriding the title on every render cycle — this is a regression

Environment

  • Claude Code CLI (macOS, iTerm2 / Terminal.app)
  • Opus 4.6 (1M context)

View original on GitHub ↗

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