Custom statusLine never renders (built-in footer badge row works) — 2.1.220, macOS 15.6, native
Bug: custom statusLine never renders (built-in footer badge row works fine)
What happens
The custom statusLine row does not render at all. The built-in footer badge row directly below it renders normally (shows ⏵⏵ bypass permissions on (shift+tab to cycle) · PR #10 · ← for agents, including auto-detected PR #10). So the TUI footer area is drawing — only the custom statusLine row above it is missing.
Environment
- Claude Code 2.1.220 (native install)
- macOS 15.6 (24G84), arm64
- Node v24.14.1
- Terminal.app,
TERM=xterm-256color
Config (~/.claude/settings.json) — valid per the published schema
"statusLine": { "type": "command", "command": "~/.claude/status.sh", "refreshInterval": 1 }
Validated against https://json.schemastore.org/claude-code-settings.json — statusLine block matches (type/command/refreshInterval all legal).
The script is not the problem — extensively verified
- Runs standalone with exit 0 and correct stdout under: realistic JSON on stdin, empty
{}, and a strippedenv -i PATH=/usr/bin:/bin(no Homebrew). - Replaced it with a trivial two-line script (
cat >/dev/null; echo "PLAINTEXT", no colors/escapes) — still nothing rendered, even thoughrefreshInterval: 1should re-run it every second. So the per-second timer isn't firing → the feature isn't executing, independent of script content.
Other things ruled out
- Repeated full quit/relaunch (not mid-session config load).
- Wide terminal; also plain Terminal.app (not just IDE-embedded).
- No
statusLineoverride in~/.claude.jsonor project settings. - Removed two invalid top-level keys (
servers,lsp) from settings.json — no change. - SessionStart hook fires normally, so settings.json is being loaded.
Note on debugging
claude --debug 2>&1 | grep -i statusline produces no output, but that appears to be because piping stdout drops the interactive TUI (and the status line is a TUI feature), so that probe may be uninformative rather than diagnostic.
Expected
The custom statusLine row renders above the built-in footer badges.
Actual
Custom statusLine row absent; built-in footer badge row present.