[BUG] Custom status line renders vertically when notification banner is displayed
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?
Summary
When Claude Code displays a notification banner (e.g., "Claude Code has switched from npm to native installer"), the custom status line output renders vertically (one character per line) instead of horizontally.
Environment
- OS: macOS (Darwin 24.6.0)
- Claude Code version: latest (as of 2026-02-21)
- Terminal: VS Code integrated terminal + standalone terminal
- Status line: Custom Python script via
status_linesetting
Steps to Reproduce
- Configure a custom status line script in
~/.claude/settings.json:
``json``
{
"status_line": "~/.claude/status_lines/status_line_main.py"
}
- Have a condition that triggers a Claude Code notification banner (e.g., pending
claude installmigration notice) - Start a new Claude Code session
Expected Behavior
The custom status line should render on a single horizontal line:
Opus 4.6 | 82c30665 | [////// ] 36% | ~/.claude | main
Or the notification banner and status line should coexist without layout corruption.
Actual Behavior
The notification banner takes over the status line rendering area. The custom status line output is rendered below/inside the content area with an effective width of 1 character, causing every character to appear on its own line:
<img width="508" height="263" alt="Image" src="https://github.com/user-attachments/assets/c1b76392-2f65-44c2-84d5-ad18f6f887f6" />
What Should Happen?
Analysis
- The custom status line script outputs a single correctly-formatted line to stdout
- Terminal width detection from the script (via
stty,COLUMNS,shutil.get_terminal_size()) all report the correct full terminal width - The issue is in Claude Code's rendering layer: when a notification banner is active, the custom status line output is placed in a layout context with ~1 character of available width
- The script has no way to detect or work around this — there is no field in the status line JSON input indicating a notification is active
Suggested Fix
Options (from Claude Code's side):
- Suppress custom status line when a notification banner is active
- Reserve separate space for notification vs. status line (e.g., notification above, status line below)
- Pass available width in the JSON data sent to the status line script, so scripts can truncate or self-suppress when width is insufficient
- Clip/truncate the status line output on Claude Code's side rather than wrapping it character-by-character
Error Messages/Logs
Steps to Reproduce
Configure a custom status line script in ~/.claude/settings.json:
```json
{ "status_line": "/path/to/status_line.py" }
The script can be minimal — just reads JSON from stdin, prints one line to stdout.
- Have any condition that triggers a Claude Code notification banner in the status area
(e.g., the "Claude Code has switched from npm to native installer" migration notice)
- Start a new Claude Code session (claude in terminal)
- The notification banner renders in the status line area. The custom status line output
renders vertically below it — one character per line — instead of on a single horizontal
line.
Note: When no notification banner is present, the custom status line renders correctly.
The issue only occurs when Claude Code displays a message that overlaps the status line
area.
```
Claude Model
None
Is this a regression?
I don't know
Last Working Version
_No response_
Claude Code Version
2.1.50
Platform
Anthropic API
Operating System
macOS
Terminal/Shell
Terminal.app (macOS)
Additional Information
_No response_
This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗