groove-admin-claude-statusline
Install a rich single-line Claude Code statusline. Writes three scripts to ~/.claude/hooks/ and merges config into ~/.claude/settings.json.
Use --uninstall to remove. Use --list to show current status.
Outcome
~/.claude/settings.json has statusLine pointing to the statusline script, plus PostToolUse and SessionEnd hooks to track active /loop cron jobs. The statusline shows on every Claude Code turn.
What the statusline shows
claude-sonnet-4-6 | myrepo@main (+3 -1) | 42k/200k (21%) | effort: high | 5h 12% @8:00pm | 7d 3% @mar 16, 9:00am | 2 loops | check deployment @4:10pm
| Section | Description |
|---|---|
| Model | Display name of the active model |
| Repo@branch | CWD folder name, git branch, staged diff +N -N |
| Tokens | Used / total context, % used |
| Effort | Current effort level (low / med / high) |
| 5h / 7d | Rate-limit utilisation with reset time (cached 60s) |
| Loops | Count of active /loop crons + soonest-firing prompt and time |
Steps
--list
Read ~/.claude/settings.json. Report whether statusLine is set, and whether each hook script exists in ~/.claude/hooks/. Exit.
--uninstall
Remove statusLine from ~/.claude/settings.json. Remove the three CronCreate|CronDelete / SessionEnd hook entries added by this skill. Do not remove hook scripts (leave for manual cleanup). Report changes. Exit.
Default (install)
-
Create
~/.claude/hooks/if absent. -
Write the three scripts below to
~/.claude/hooks/. Never overwrite without showing a diff and confirming. -
Make all three scripts executable (
chmod +x). -
Read
~/.claude/settings.json(default{}). Merge in thestatusLineentry and the two hook entries below. Preserve all other keys. Do not create duplicate entries. -
Write
~/.claude/settings.json. -
Report:
✓ statusline.sh → ~/.claude/hooks/statusline.sh ✓ cron-state.sh → ~/.claude/hooks/cron-state.sh ✓ cron-state-clear.sh → ~/.claude/hooks/cron-state-clear.sh ✓ ~/.claude/settings.json updated Note: restart Claude Code for changes to take effect.
Scripts
The three shell scripts live in scripts/ per the Agent Skills specification:
| Script | Installed to | Purpose |
|---|---|---|
scripts/statusline.sh | ~/.claude/hooks/statusline.sh | Main statusline renderer |
scripts/cron-state.sh | ~/.claude/hooks/cron-state.sh | Tracks /loop cron jobs in /tmp/claude/loops.json |
scripts/cron-state-clear.sh | ~/.claude/hooks/cron-state-clear.sh | Clears loop state on session end |
Copy each script from scripts/ to ~/.claude/hooks/. Never overwrite an existing script without showing a diff and confirming.
~/.claude/settings.json entries
Merge these into the existing settings. Preserve all other keys. Do not create duplicates.
{
"statusLine": {
"type": "command",
"command": "~/.claude/hooks/statusline.sh"
},
"hooks": {
"PostToolUse": [
{
"matcher": "CronCreate|CronDelete",
"hooks": [
{
"type": "command",
"command": "~/.claude/hooks/cron-state.sh",
"async": true
}
]
}
],
"SessionEnd": [
{
"hooks": [
{
"type": "command",
"command": "~/.claude/hooks/cron-state-clear.sh",
"async": true
}
]
}
]
}
}
Constraints
- Write to
~/.claude/hooks/(user-global), not.claude/(project-local) - Never overwrite an existing script without showing a diff and confirming
- Never discard existing keys in
~/.claude/settings.json - Requires:
jq,curl,python3,git(all standard on macOS/Linux) - The 5h/7d usage section requires a Claude Pro/Max OAuth session; it silently omits if no token is found
- After install: restart Claude Code for the statusLine and hooks to take effect