statusLine still wired to deprecated agent-name.sh; new statusline.sh composer never rolled out #879

Open
opened 2026-08-04 22:07:03 +00:00 by coilyco-ops · 0 comments
Member

Symptom

Claude Code's status line only shows the single agent-name row. The multi-row composed line (agent-name + repo-tracker + any other providers) documented in docs/statusline.md never appears on the host.

Root cause

docs/statusline.md documents a composer at docker/dev-base/statusline.sh that walks provider dirs (statusline.d/) in three tiers (base/user/repo) and joins their output into a multi-row line. It explicitly frames this as replacing the old hand-wired approach:

The host scripts/agent-name.sh hand-wired the second row... Adding each segment by hand does not scale.

But the live settings.json on this host still has:

"statusLine": {
  "type": "command",
  "command": "/Users/kai/projects/coilyco-flight-deck/agentic-os/scripts/agent-name.sh statusline",
  "padding": 2
}

— exactly the mechanism the doc says was replaced.

Why it's stuck there

agentic-os/scripts/install-agent-name.py (merge_statusline, ~line 57) unconditionally writes/keeps statusLine.command as agent-name.sh statusline:

STATUSLINE_CMD = _cmd("statusline")   # resolves to .../scripts/agent-name.sh statusline
...
desired = {"type": "command", "command": STATUSLINE_CMD, "padding": 2}

It never references the new composer path at all. This script is run on every host converge by the claude-hooks Ansible role (infrastructure/ansible/roles/claude-hooks/tasks/main.yml, task "Wire the agent self-name into settings.json"), so every converge re-affirms the deprecated single-script wiring.

docs/statusline.md says the host rollout "lands in infrastructure/ansible" via "the claude-hooks ansible role pointing the host statusLine at this composer" — but the current claude-hooks role has no task that sets statusLine to the composer path. That rollout was documented but never actually implemented.

Suggested fix

  • Update install-agent-name.py (or a new installer step) to point statusLine.command at docker/dev-base/statusline.sh instead of agent-name.sh statusline directly, OR
  • Add the missing task to infrastructure/ansible/roles/claude-hooks/tasks/main.yml that wires statusLine to the composer, per what docs/statusline.md already describes.

Either way, the composer needs to actually be host-portable-verified (doc claims it is) and the installer/role needs to stop re-writing the old path on every converge.

Repro

  1. python3 -c "import json; print(json.load(open('/Users/kai/.claude/settings.json'))['statusLine'])" — still shows agent-name.sh statusline, not statusline.sh.
  2. grep -n statusLine infrastructure/ansible/roles/claude-hooks/tasks/main.yml — no match.
## Symptom Claude Code's status line only shows the single agent-name row. The multi-row composed line (agent-name + repo-tracker + any other providers) documented in `docs/statusline.md` never appears on the host. ## Root cause `docs/statusline.md` documents a **composer** at `docker/dev-base/statusline.sh` that walks provider dirs (`statusline.d/`) in three tiers (base/user/repo) and joins their output into a multi-row line. It explicitly frames this as replacing the old hand-wired approach: > The host `scripts/agent-name.sh` hand-wired the second row... Adding each segment by hand does not scale. But the live `settings.json` on this host still has: ```json "statusLine": { "type": "command", "command": "/Users/kai/projects/coilyco-flight-deck/agentic-os/scripts/agent-name.sh statusline", "padding": 2 } ``` — exactly the mechanism the doc says was replaced. ### Why it's stuck there `agentic-os/scripts/install-agent-name.py` (`merge_statusline`, ~line 57) unconditionally writes/keeps `statusLine.command` as `agent-name.sh statusline`: ```python STATUSLINE_CMD = _cmd("statusline") # resolves to .../scripts/agent-name.sh statusline ... desired = {"type": "command", "command": STATUSLINE_CMD, "padding": 2} ``` It never references the new composer path at all. This script is run on every host converge by the `claude-hooks` Ansible role (`infrastructure/ansible/roles/claude-hooks/tasks/main.yml`, task "Wire the agent self-name into settings.json"), so every converge re-affirms the deprecated single-script wiring. `docs/statusline.md` says the host rollout "lands in infrastructure/ansible" via "the claude-hooks ansible role pointing the host `statusLine` at this composer" — but the current `claude-hooks` role has **no task** that sets `statusLine` to the composer path. That rollout was documented but never actually implemented. ## Suggested fix - Update `install-agent-name.py` (or a new installer step) to point `statusLine.command` at `docker/dev-base/statusline.sh` instead of `agent-name.sh statusline` directly, OR - Add the missing task to `infrastructure/ansible/roles/claude-hooks/tasks/main.yml` that wires `statusLine` to the composer, per what `docs/statusline.md` already describes. Either way, the composer needs to actually be host-portable-verified (doc claims it is) and the installer/role needs to stop re-writing the old path on every converge. ## Repro 1. `python3 -c "import json; print(json.load(open('/Users/kai/.claude/settings.json'))['statusLine'])"` — still shows `agent-name.sh statusline`, not `statusline.sh`. 2. `grep -n statusLine infrastructure/ansible/roles/claude-hooks/tasks/main.yml` — no match.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
coilyco-flight-deck/agentic-os#879
No description provided.