Modular status line for Claude Code. Displays path, context tokens, git info, battery, memory, API usage, and session cost. Supports configurable profiles (minimal, standard, developer, full, classic) and individual module toggles. Use when setting up or customizing the Claude Code status line.
Resources
1Install
npx skillscat add leobrival/topographic-plugins-official/statusline Install via the SkillsCat registry.
Statusline
Modular status line system for Claude Code with configurable profiles and 7 display modules.
Overview
This skill provides a customizable status line that displays real-time information during Claude Code sessions.
| Module | Information | Default |
|---|---|---|
path |
Current working directory (full/relative/short) | On |
context |
Token count and context window usage % | On |
git |
Branch name, changed files, additions/deletions | Off |
battery |
Battery percentage and charging state (macOS) | On |
memory |
RAM usage percentage and pressure level (macOS) | On |
usage |
API usage with progress bar (OAuth + Anthropic API) | On |
cost |
Session cost in USD and duration | Off |
Architecture
scripts/statusline/
├── src/
│ ├── index.ts # Main entry point (reads stdin HookInput)
│ ├── cli.ts # CLI argument parser
│ └── lib/
│ ├── types.ts # HookInput interface, type definitions
│ ├── config-manager.ts # Profile loading, deep merge, config resolution
│ ├── context.ts # Standalone context token counter
│ ├── formatters.ts # ANSI colors, progress bars, path formatting
│ ├── usage-limits.ts # OAuth token retrieval, Anthropic API usage
│ └── modules/
│ ├── base.ts # BaseStatusModule abstract class
│ ├── path.ts # PathModule
│ ├── context.ts # ContextModule (transcript parsing)
│ ├── git.ts # GitModule (branch, changes, diff stats)
│ ├── battery.ts # BatteryModule (pmset, macOS)
│ ├── memory.ts # MemoryModule (vm_stat, macOS)
│ ├── usage.ts # UsageModule (API usage bars)
│ └── cost.ts # CostModule (session cost + duration)
├── config/
│ ├── default.json # Default module configuration
│ └── profiles/
│ ├── minimal.json # Path + context only
│ ├── standard.json # Balanced with usage
│ ├── developer.json # All modules including git + cost
│ ├── full.json # Everything enabled
│ └── classic.json # Block-style progress bars
├── statusline.config.ts # Legacy config interface
├── package.json
├── tsconfig.json
└── biome.jsonInstallation
Step 1: Install dependencies
cd ~/.claude/plugins/marketplaces/topographic-plugins-official/plugins/dev/skills/statusline/scripts/statusline
bun installStep 2: Configure status line in settings.json
Add or update the statusLine entry in ~/.claude/settings.json:
{
"statusLine": {
"type": "command",
"command": "bun ~/.claude/plugins/marketplaces/topographic-plugins-official/plugins/dev/skills/statusline/scripts/statusline/src/index.ts",
"padding": 0
}
}Step 3: Verify installation
Restart Claude Code. The status line should appear at the bottom of the terminal.
To test manually:
echo '{"session_id":"test","transcript_path":"/tmp/test","cwd":"/tmp","model":"claude-sonnet-4-20250514"}' | bun ~/.claude/plugins/marketplaces/topographic-plugins-official/plugins/dev/skills/statusline/scripts/statusline/src/index.tsProfiles
Switch profiles via CLI argument or by editing config/default.json.
| Profile | Modules Enabled | Use Case |
|---|---|---|
minimal |
path, context | Low distraction |
standard |
path, context, battery, memory, usage | Balanced (default) |
developer |
path, context, git, battery, memory, usage, cost | Full dev info |
full |
All modules, all features | Maximum information |
classic |
Same as standard, block-style bars | Retro look |
Using a Profile
Edit the statusLine command in settings.json to pass --profile:
{
"statusLine": {
"type": "command",
"command": "bun ~/.claude/plugins/marketplaces/topographic-plugins-official/plugins/dev/skills/statusline/scripts/statusline/src/index.ts --profile developer",
"padding": 0
}
}CLI Options
| Flag | Description |
|---|---|
--profile <name> |
Load a profile (minimal, standard, developer, full, classic) |
--modules <list> |
Comma-separated list of modules to enable |
--separator <char> |
Custom separator between modules (default: •) |
--no-progress-bar |
Disable progress bars |
--debug |
Enable debug output |
--list-profiles |
List available profiles |
--help |
Show help |
Customization
Editing Module Configuration
Edit config/default.json to customize individual modules:
{
"modules": {
"path": { "enabled": true, "mode": "full" },
"git": { "enabled": true, "showBranch": true, "showChanges": true },
"usage": { "enabled": true, "progressBarStyle": "braille" }
}
}Creating a Custom Profile
Add a JSON file in config/profiles/:
{
"modules": {
"path": { "enabled": true, "mode": "short" },
"context": { "enabled": true },
"git": { "enabled": true }
},
"separator": " | "
}macOS-Specific Modules
The battery and memory modules use macOS-specific commands:
- Battery:
pmset -g batt(power management) - Memory:
vm_stat(virtual memory statistics)
These modules gracefully degrade on non-macOS systems (disabled or show fallback).
Troubleshooting
Status line not appearing
- Verify the command path in
settings.jsonpoints to the correct location - Ensure
bunis in PATH - Test manually with echo + pipe (see Step 3 above)
- Check for errors: add
--debugflag to the command
Usage module shows empty
The usage module requires OAuth authentication with Anthropic. It reads the token from macOS Keychain (security find-generic-password). If not authenticated, the module shows no data.
Modules not loading
Check config/default.json — modules must have "enabled": true to appear.