[BUG] Custom status line renders vertically when notification banner is displayed

Resolved 💬 4 comments Opened Feb 21, 2026 by silouone Closed Mar 23, 2026

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_line setting

Steps to Reproduce

  1. Configure a custom status line script in ~/.claude/settings.json:

``json
{
"status_line": "~/.claude/status_lines/status_line_main.py"
}
``

  1. Have a condition that triggers a Claude Code notification banner (e.g., pending claude install migration notice)
  2. 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):

  1. Suppress custom status line when a notification banner is active
  2. Reserve separate space for notification vs. status line (e.g., notification above, status line below)
  3. Pass available width in the JSON data sent to the status line script, so scripts can truncate or self-suppress when width is insufficient
  4. 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.

  1. 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)

  1. Start a new Claude Code session (claude in terminal)
  2. 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_

View original on GitHub ↗

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