UNPKG

claude-statusline-powerline

Version:

Beautiful powerline-style statusline for Claude Code with git integration, session tracking, and cost monitoring

466 lines (378 loc) โ€ข 12.2 kB
# Claude Statusline Powerline [![npm version](https://badge.fury.io/js/claude-statusline-powerline.svg)](https://badge.fury.io/js/claude-statusline-powerline) [![npm downloads](https://img.shields.io/npm/dm/claude-statusline-powerline.svg)](https://www.npmjs.com/package/claude-statusline-powerline) [![install size](https://packagephobia.com/badge?p=claude-statusline-powerline)](https://packagephobia.com/result?p=claude-statusline-powerline) [![license](https://img.shields.io/npm/l/claude-statusline-powerline.svg)](https://github.com/spences10/claude-statusline-powerline/blob/main/LICENSE) [![TypeScript](https://img.shields.io/badge/TypeScript-007ACC?style=flat&logo=typescript&logoColor=white)](https://www.typescriptlang.org/) A beautiful powerline-style statusline for Claude Code with git integration, session tracking, and settings config IntelliSense support. ![demo of themes](/demo.png) ## โœจ Features - ๐ŸŽจ **Powerline styling** with beautiful separators and colors - ๐ŸŒฟ **Enhanced git integration** - comprehensive status with superscript symbols - ๐Ÿ“ **Directory display** - current working directory - ๐Ÿ“ฑ **Model info** - shows which Claude model you're using - ๐Ÿ’ฐ **Session tracking** - real-time token usage and cost estimation - ๐Ÿ“Š **Context monitoring** - smart warnings at 75% and 90% usage - ๐Ÿง  **Context caching** - displays cache hit rate and warm/cold sessions - ๐ŸŽฏ **Settings IntelliSense** - autocomplete, validation, and hover docs in settings files ## ๐Ÿ“Š Available Segments | Segment | Icon | Description | Example Output | | ------------- | ---- | ----------------------------------------- | ------------------------------ | | **Model** | โšก | Shows the Claude model being used | `โšก Claude Sonnet 4` | | **Directory** | ๐Ÿ“ | Current working directory name | `๐Ÿ“ my-project` | | **Git** | ๐ŸŒฟ | Git branch and status with superscript | `๐ŸŒฟ main โบ3 หœ1 แต˜2` | | **Session** | ๐Ÿ’ฐ | Token usage, cost, and context monitoring | `๐Ÿ’ฐ 1.2k โ€ข $0.01 999k left` | | **Usage** | ๐Ÿ“Š | Aggregated usage statistics from database | `๐Ÿ“Š 29.9k โ€ข $8.83 7d` | | **Context** | ๐Ÿง  | Cache performance and session state | `๐Ÿง  10.5k cached (70% reused)` | All segments can be **shown/hidden** (via `lines` configuration), **reordered**, and **customized** through the configuration file. ## Themes & Configuration ### ๐ŸŽจ Color Themes: - **`dark`** - Default professional dark theme - **`electric`** - High-contrast electric theme with vibrant colors - **`night-owl`** - Dark theme inspired by Night Owl - **`dracula`** - Popular Dracula theme colors - **`gruvbox`** - Retro groove color scheme - **`one-dark`** - Atom's One Dark theme - **`monokai`** - Classic Monokai theme - **`nord`** - Arctic, north-bluish theme - **`tokyo-night`** - Modern dark theme - **`solarized-light`** - Light theme based on Solarized - **`gruvbox-light`** - Light variant of Gruvbox - **`alucard`** - Dark red theme inspired by Hellsing ### โšก Available Separator Styles: - `thick` - Standard powerline separator โ–ถ - `thin` - Thin powerline separator โ†’ - `curvy` - Curved separator (Victor Mono compatible) - `angly` - Angular separator \ - `angly2` - Alternative angular separator / - `flame` - Dramatic flame-style effect ๐Ÿ”ฅ - `wave` - Wave-like alternating effect ๐ŸŒŠ - `lightning` - High-energy lightning effect โšก - `none` - No separator ## ๐Ÿ”ง Configuration ### JSON Configuration with IntelliSense Claude Statusline Powerline uses JSON configuration files with **IntelliSense support**: **Primary config location:** `~/.claude/claude-statusline-powerline.json` **Project-specific override:** `./.claude/claude-statusline-powerline.json` ### โšก IntelliSense Features - **๐ŸŽฏ Autocomplete** - All available options as you type - **๐Ÿ“– Hover documentation** - Descriptions for every property - **๐ŸŽจ Color validation** - Hex color patterns with examples ### Example Configuration ```json { "$schema": "https://raw.githubusercontent.com/spences10/claude-statusline-powerline/main/statusline.schema.json", "color_theme": "dark", "font_profile": "nerd-font", "segment_config": { "segments": [ { "type": "model" }, { "type": "directory" }, { "type": "git" }, { "type": "session" }, { "type": "usage" }, { "type": "context" } ] } } ``` ### Configuration Options **Color Themes:** - `"dark"` - Classic blue/gray/yellow theme - `"electric"` - Purple/cyan/red theme - `"night-owl"` - Dark theme with blue/purple accents - `"dracula"` - Purple/pink/green Dracula theme - `"gruvbox"` - Warm retro colors - `"one-dark"` - Blue/purple Atom theme - `"monokai"` - Classic yellow/orange/green - `"nord"` - Cool blue/teal arctic theme - `"tokyo-night"` - Modern purple/blue theme - `"solarized-light"` - Light theme with blue accents - `"gruvbox-light"` - Light warm theme - `"alucard"` - Dark red/crimson theme **Font Profiles:** - `"powerline"` - Basic powerline font support - `"nerd-font"` - Full Nerd Font support with more icons ### Multi-line Layout & Segment Ordering Control segment layout and ordering using the `lines` configuration: ```json { "segment_config": { "lines": [ { "directory": true, "git": true }, { "model": true, "session": true }, { "context": true } ], "segments": [ { "type": "git" }, { "type": "model" }, { "type": "directory" }, { "type": "session" } ] } } ``` **Control rules:** - **Visibility**: Only segments present in `lines` configuration are shown - **Between lines**: Order determined by position in `lines` array - **Within lines**: Order determined by property order in each line object - **Styling**: Use `segments` array to configure colors, icons, separators, etc. ### Custom Icons Customize the icons used in each segment with the `icons` property in segment styles: ```json { "segment_config": { "segments": [ { "type": "model", "style": { "icons": { "ai": "๐Ÿค–" } } }, { "type": "directory", "style": { "icons": { "folder": "๐Ÿ—‚๏ธ" } } }, { "type": "git", "style": { "icons": { "branch": "๐ŸŒฟ", "clean": "โœ…", "dirty": "โš ๏ธ" } } }, { "type": "session", "style": { "icons": { "cost": "๐Ÿ’ฒ" } } } ] } } ``` **Available Icons:** - `ai` - AI/Model segment icon - `folder` - Directory/folder icon - `branch` - Git branch icon - `clean` - Clean git status icon - `dirty` - Dirty git status icon (fallback) - `ahead` - Commits ahead of remote - `behind` - Commits behind remote - `conflicts` - Merge conflicts - `staged_add` - Staged additions/modifications - `staged_del` - Staged deletions - `unstaged` - Unstaged working directory changes - `untracked` - Untracked files - `cost` - Session cost/usage icon You can use any Unicode character, emoji, or Nerd Font icon code (e.g., `\uF07B` for folder). ### Custom Separators Customize separators for individual segments or git states: ```json { "segment_config": { "segments": [ { "type": "git", "style": { "separator": { "clean": "thick", "dirty": "lightning", "conflicts": "flame" } } }, { "type": "model", "style": { "separator": { "style": "curvy" } } } ] } } ``` ### Single Line Layout For simple single-line statuslines, just omit the `lines` configuration: ```json { "segment_config": { "segments": [ { "type": "model" }, { "type": "directory" }, { "type": "git" }, { "type": "session" } ] } } ``` Segments will appear in the order enabled segments are found. ## ๐ŸŒฟ Enhanced Git Status The git segment displays comprehensive repository information using beautiful superscript symbols optimized for Victor Mono font: ### Git Status Symbols **Powerline Font Profile:** - `โ‡ก2` - 2 commits ahead of remote - `โ‡ฃ1` - 1 commit behind remote - `โš ๏ธ` - Merge conflicts present - `โบ3` - 3 staged additions/modifications - `โป1` - 1 staged deletion - `หœ2` - 2 unstaged changes in working directory - `แต˜4` - 4 untracked files **Example outputs:** - Clean repo: ` main โœ“` - Complex status: ` main โ‡ก2 โบ3 หœ1 แต˜2` - With conflicts: ` main โš ๏ธ โบ1` - Behind remote: ` main โ‡ฃ3 หœ2` ### Truncation Control Long segment content is automatically truncated. You can configure the maximum length per segment: ```json { "segment_config": { "segments": [ { "type": "git", "style": { "truncation_length": 15 } } ] } } ``` ## ๐Ÿ“ฆ Installation Install globally with your preferred package manager: ```bash # npm npm install -g claude-statusline-powerline # pnpm pnpm add -g claude-statusline-powerline # bun bun add -g claude-statusline-powerline # volta volta install claude-statusline-powerline ``` The statusline will be automatically configured for Claude Code with a default config file! ## Font Setup For the best experience, use a powerline-compatible font: **Recommended fonts:** - **Victor Mono** (built and tested with this) - Any [Nerd Font](https://www.nerdfonts.com/) The statusline uses these symbols: `(powerline separators) and` (git branch) ## How It Works Claude Code sends session information via stdin as JSON: ```json { "session_id": "...", "model": { "display_name": "Claude Sonnet 4" }, "workspace": { "current_dir": "/path/to/project" } } ``` The statusline script processes this and outputs a coloured powerline-style status. ## ๐Ÿ—ƒ๏ธ Local Usage Database Claude Statusline Powerline maintains a local SQLite database at `~/.claude/statusline-usage.db` to track usage analytics and power both the **Session** and **Usage** segments with high-performance data access. **Stored Data:** - **Session records** with start/end times and token usage - **Daily summaries** with total costs and model usage - **Project mapping** linking sessions to directory paths - **Cache performance** metrics for optimization insights **Performance Benefits:** - **Session segment**: 31x faster than file parsing (0.11ms vs 3.44ms) - **Usage segment**: Pre-aggregated daily/weekly/monthly summaries - **Real-time insights** without impacting statusline responsiveness - **Efficient SQLite queries** for instant data access **These segments are database-only** and require the SQLite database to function. They are not included in the default configuration but can be enabled by adding them to your config: ```json { "segment_config": { "segments": [{ "type": "session" }, { "type": "usage" }] } } ``` The database automatically tracks usage data as you use Claude Code. If the database is unavailable, these segments simply won't appear. ## Segments 1. **Model** - Shows the Claude model name 2. **Directory** - Shows current directory name 3. **Git** - Enhanced status with superscript symbols 4. **Session** - Current session token usage, cost, and context monitoring - **Powered by SQLite database** - Format: `๐Ÿ’ฐ {tokens}k โ€ข ${cost} {context}` - Context shows: remaining tokens (< 75%), percentage (75-89%), or warning (!90%+) - Must be manually enabled in configuration 5. **Usage** - Aggregated usage statistics across time periods - **Powered by SQLite database** with pre-calculated summaries - Format: `๐Ÿ“Š {tokens}k โ€ข ${cost} {period}` - Shows daily/weekly/monthly aggregated data - Must be manually enabled in configuration 6. **Context** - Cache performance and session state - Shows cache hit rate and total cached tokens for warm sessions - Displays "Cold" for new sessions without significant cache usage ## Credits This project was inspired by [claude-powerline](https://github.com/Owloops/claude-powerline) by [@Owloops](https://github.com/Owloops) - thanks for the initial concept and inspiration! Built for [Claude Code](https://docs.anthropic.com/en/docs/claude-code) by [Anthropic](https://www.anthropic.com/). ## License MIT