writing-statuslines

STARTER_CHARACTER = πŸ“Š

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "writing-statuslines" with this command: npx skills add lexler/skill-factory/lexler-skill-factory-writing-statuslines

STARTER_CHARACTER = πŸ“Š

Setup

Update the reference docs to get the latest from Anthropic:

python ~/.claude/skills/writing-statuslines/scripts/update-docs.py

What Status Lines Are

Custom scripts that display contextual information at the bottom of Claude Code's interface. Updated when conversation messages change, at most every 300ms.

Configuration

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.

How It Works

  • Claude Code passes session context as JSON via stdin to the script

  • First line of stdout becomes the status line text

  • ANSI color codes supported

  • Script must be executable (chmod +x )

  • Only stdout is used (not stderr)

JSON Input Schema

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.

Key Fields

  • model.display_name β€” short model name ("Opus", "Sonnet")

  • workspace.current_dir / workspace.project_dir β€” may differ when working in subdirectories

  • cost.total_cost_usd β€” cumulative session cost

  • context_window.used_percentage / remaining_percentage β€” pre-calculated, ready to display

  • context_window.current_usage β€” raw token counts from the last API call

Constraints

  • Output exactly one line

  • Runs every 300ms at most β€” expensive operations must be cached

  • Keep it scannable: glanceable in under a second

  • Script must exit cleanly and quickly

Anti-Patterns

  • Cramming too much info β€” pick 3-4 data points max

  • Not consuming stdin (script must read it even if it doesn't use all fields)

  • Expensive uncached operations (git commands, API calls) on every invocation

  • Multiple output lines (only first line is used)

  • Forgetting chmod +x

  • Writing to stderr instead of stdout

Testing

Test 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

Reference

  • references/anthropic-statusline.md - Complete reference with examples in bash, python, and node

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

hexagonal-architecture

No summary provided by upstream source.

Repository SourceNeeds Review
General

using-uv

No summary provided by upstream source.

Repository SourceNeeds Review
General

ai-patterns

No summary provided by upstream source.

Repository SourceNeeds Review
General

refinement-loop

No summary provided by upstream source.

Repository SourceNeeds Review