with one click
writing-statuslines
// Writes Claude Code status line scripts. Use when creating, customizing, or debugging statusline configurations.
// Writes Claude Code status line scripts. Use when creating, customizing, or debugging statusline configurations.
Presents a proposed approach in progressive confirmable chunks with recommended decisions and alternatives. Use when aligning on a design, plan, or technical approach before implementation.
Iterative code refactoring through progressive lenses via a worker-reviewer agent team.
Launches agent teams with structured roles and task decomposition. Use when asked to create a team, spawn teammates, or coordinate multiple agents in parallel.
Drive feature development using Outside-In TDD with Hexagonal Architecture. Design emerges through inline code, in-memory fakes, interface extraction, and deferred I/O. Use when building features, writing tests, or structuring backend services. Triggers on: TDD, outside-in, hexagonal, ports and adapters, emergent design, acceptance test, component test, walking skeleton, in-memory fakes, component, contract test, adapter, fast tests, sub-second feedback. Language-agnostic (Go, Rust, Python, TypeScript, Java, C#).
Creates process files - text as code instructions for reliable AI workflows. Use when creating new process files.
Designs systems using Event Modeling.
| name | writing-statuslines |
| description | Writes Claude Code status line scripts. Use when creating, customizing, or debugging statusline configurations. |
STARTER_CHARACTER = 📊
Update the reference docs to get the latest from Anthropic:
python ~/.claude/skills/writing-statuslines/scripts/update-docs.py
Custom scripts that display contextual information at the bottom of Claude Code's interface. Updated when conversation messages change, at most every 300ms.
Add to ~/.claude/settings.json (user-level) or .claude/settings.json (project-level):
{
"statusLine": {
"type": "command",
"command": "~/.claude/statusline.sh",
"padding": 0
}
}
padding is optional. Set to 0 to let the status line reach the terminal edge.
chmod +x)The script receives this via stdin:
{
"hook_event_name": "Status",
"session_id": "abc123...",
"transcript_path": "/path/to/transcript.json",
"cwd": "/current/working/directory",
"model": {
"id": "claude-opus-4-1",
"display_name": "Opus"
},
"workspace": {
"current_dir": "/current/working/directory",
"project_dir": "/original/project/directory"
},
"version": "1.0.80",
"output_style": {
"name": "default"
},
"cost": {
"total_cost_usd": 0.01234,
"total_duration_ms": 45000,
"total_api_duration_ms": 2300,
"total_lines_added": 156,
"total_lines_removed": 23
},
"context_window": {
"total_input_tokens": 15234,
"total_output_tokens": 4521,
"context_window_size": 200000,
"used_percentage": 42.5,
"remaining_percentage": 57.5,
"current_usage": {
"input_tokens": 8500,
"output_tokens": 1200,
"cache_creation_input_tokens": 5000,
"cache_read_input_tokens": 2000
}
}
}
context_window.current_usage may be null if no messages have been sent yet.
model.display_name — short model name ("Opus", "Sonnet")workspace.current_dir / workspace.project_dir — may differ when working in subdirectoriescost.total_cost_usd — cumulative session costcontext_window.used_percentage / remaining_percentage — pre-calculated, ready to displaycontext_window.current_usage — raw token counts from the last API callchmod +xTest scripts manually with mock JSON:
echo '{"model":{"display_name":"Sonnet"},"workspace":{"current_dir":"/test"},"cost":{"total_cost_usd":0.05},"context_window":{"used_percentage":42.5}}' | ./statusline.sh