# Claude Code Statusline Development

> This skill should be used when the user asks to "create a statusline", "customize the status line", "add a custom prompt", or mentions Claude Code statusline. Also suggest when the user wants to display git branch, context usage, model name, or session costs at the bottom of Claude Code.

- Skill: `majiayu000/claude-code-statusline-development` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds add majiayu000/claude-code-statusline-development`
- Raw SKILL.md: https://api.skillmd.com/api/skills/majiayu000/claude-code-statusline-development/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: majiayu000 (https://skillmd.com/u/majiayu000)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/majiayu000/claude-code-statusline-development

---


# Claude Code Statusline Development

Create custom status lines that display contextual information at the bottom of Claude Code.

## Quick Reference

You MUST read the reference files for detailed schemas and examples:

- [JSON Schema](./references/json-schema.md) - Complete input structure documentation
- [Example: Simple](./references/example-simple.md) - Basic bash statusline
- [Example: Git-Aware](./references/example-git-aware.md) - Git branch and status
- [Example: Context Usage](./references/example-context-usage.md) - Context window percentage
- [Example: Cost Tracking](./references/example-cost-tracking.md) - Session costs and tokens

## Configuration

Add to `.claude/settings.json`:

```json
{
  "statusLine": {
    "type": "command",
    "command": "~/.claude/statusline.sh",
    "padding": 0
  }
}
```

## How It Works

- Status line updates when conversation messages change
- Updates run at most every 300ms
- First line of stdout becomes the status line text
- ANSI color codes supported
- JSON context passed via stdin

## JSON Input (Quick Reference)

| Field | Description |
|-------|-------------|
| `model.display_name` | Model name (e.g., "Opus") |
| `workspace.current_dir` | Current working directory |
| `workspace.project_dir` | Original project directory |
| `cost.total_cost_usd` | Session cost in USD |
| `cost.total_lines_added` | Lines added this session |
| `cost.total_lines_removed` | Lines removed this session |
| `context_window.context_window_size` | Max context tokens |
| `context_window.current_usage` | Current token usage object |

See [JSON Schema](./references/json-schema.md) for complete structure.

## Script Template

```bash
#!/bin/bash
input=$(cat)

# Extract values using jq
model=$(echo "$input" | jq -r '.model.display_name')
dir=$(echo "$input" | jq -r '.workspace.current_dir')

# Colors via tput
blue=$(tput setaf 4)
reset=$(tput sgr0)

echo "${blue}[$model]${reset} ${dir##*/}"
```

Make executable:

```bash
chmod +x ~/.claude/statusline.sh
```

## Tips

- Keep output concise - single line only
- Use `tput` for portable ANSI colors
- Test with mock JSON: `echo '{"model":{"display_name":"Test"}}' | ./statusline.sh`
- Cache expensive operations (git status) if needed

## Important

After creating or modifying statuslines, inform the user:

> **No restart needed.** Statusline changes take effect immediately - Claude Code reads settings fresh on each update.

## Attribution

Based on [Claude Code Status Line Configuration](https://code.claude.com/docs/en/statusline).

