๐ Beautiful highly customizable statusline for Claude Code CLI with powerline support, themes, and more.
TypeScript
13,255
418 commits
updated Oct 9, 2026
_ _ _ _
___ ___ ___| |_ __ _| |_ _ _ ___| (_)_ __ ___
/ __/ __/ __| __/ _` | __| | | / __| | | '_ \ / _ \
| (_| (__\__ \ || (_| | |_| |_| \__ \ | | | | | __/
\___\___|___/\__\__,_|\__|\__,_|___/_|_|_| |_|\___|
๐จ A highly customizable status line formatter for Claude Code CLI Display model info, git branch, token usage, and other metrics in your terminal

g to edit insertion/deletion signs, Git clean/dirty markers, and the JJ Revision prefix, including empty glyphs for compact layouts.h; use f for 12/24-hour format and o for weekly hours-only display.Claude Status widget with live severity, a cached 48-hour incident-history strip, stale-data fallback, and graceful ? output when status data is unavailable.h checklist for supported hide conditions, with automatic migration of existing settings and optional merge-target hiding for decorative text or symbols.โ 0 or a customizable clean glyph when the tree is conflict-free.Weekly Fable Usage widget with percentage, progress-bar, remaining-mode, and time-cursor controls.limits[] response, while Sonnet, Opus, and Fable weekly widgets read authoritative weekly_scoped entries so migrated accounts do not show stale or frozen values.compact_boundary.postTokens after /compact, then switch to the first new turn instead of retaining the pre-compaction size.gh calls from blocking the status line.
Cache Timer widget with live HOT state, TTL countdown, configurable 5-minute/1-hour windows, and customizable state glyphs.Git CI Status widget that summarizes failing, pending, and successful checks for the current branch's pull request.Sandbox Status widget with glyph, text, and Nerd Font formats that follows Claude Code's layered sandbox setting on each refresh.settings.json files are left untouched, defaults render in memory, and the status line shows an invalid-config warning.x in the line editor to let a widget and the rest of its line keep their natural widths while earlier Powerline columns stay auto-aligned.Git Branch and Git Root Dir can cap their visible width with ellipsis-safe truncation while preserving hyperlink targets.Current Working Dir can prepend an optional custom glyph, including in raw-value mode.CCSTATUSLINE_CONTEXT_SIZE_FALLBACK overrides the default 200k last-resort context window when Claude Code and the model name do not report one.Compaction Counter can render count, auto, manual, unknown, or reclaimed-token values independently for custom layouts.ccstatusline --version now prints the installed package version and exits.Compaction Counter now counts explicit compact_boundary markers and can optionally show trigger splits plus tokens reclaimed.Extra Usage Used and formats extra usage amounts with the billing currency reported by the usage API.Custom Command widgets receive terminal_width in stdin JSON when ccstatusline can detect the terminal width.Cache Hit Rate, Cache Read, and Cache Write widgets with turn/session scopes and hide-when-empty behavior.999950 through 999999 now render as 1.0M instead of 1000.0k.g on the Edit Colors screen for widget gradients, or press g for Override FG Color in Global Overrides for a line-wide gradient.Tokens Input and Tokens Output now prefer cumulative transcript metrics before falling back to context-window totals.[Timeout] for accounts with overage enabled but no monthly limit configured.Compaction Counter ignores transient below-1% context readings so incomplete status frames do not create false compaction counts.HOME, USERPROFILE, CLAUDE_CONFIG_DIR, and proxy variables so local tests cannot touch the real ccstatusline cache.--no-optional-locks so background status checks avoid creating index.lock races.~/.cache/ccstatusline/git-cache with configurable TTL and .git/HEAD/.git/index mtime checks to reduce repeated subprocess work.windowsHide so helper commands do not open extra windows on Windows.CCSTATUSLINE_WIDTH can provide an explicit terminal width when automatic probing is unavailable./usage model split.Git Branch and Git PR/MR now support GitHub, GitLab, and compatible self-hosted remotes, using gh or glab as appropriate.statusLine.refreshInterval from the TUI when Claude Code >=2.1.97 supports it.k in the item editor to duplicate the selected widget, with fresh Powerline background color for cloned Powerline items.Context Window widget for total model window size, keeping Context Length focused on current context usage.Compaction Counter widget that tracks session context compactions, with icon/text/number formats, optional Nerd Font icon, and hide-when-zero behavior.Git Staged Files, Git Unstaged Files, Git Untracked Files, and Git Clean Status for file counts and clean/dirty state.Context % and Context % (usable) now label rendered values as used or left when toggling used/remaining mode.xhigh, show default when no effort is set, mark unknown future effort levels with ?, and track live status JSON plus /effort command changes. Claude Code reports Ultracode as xhigh in status line data.(1M context); use Context Window when you want the total window size shown.Git PR widget with clickable PR links plus optional status and title display for the current branch.Git Status, Git Staged, Git Unstaged, Git Untracked, Git Ahead/Behind, Git Conflicts, Git SHA, Git Origin Owner, Git Origin Repo, Git Origin Owner/Repo, Git Upstream Owner, Git Upstream Repo, Git Upstream Owner/Repo, Git Is Fork, Git Worktree Mode, Git Worktree Name, Git Worktree Branch, Git Worktree Original Branch, and Custom Symbol.~/.claude.json while respecting CLAUDE_CONFIG_DIR.Global Overrides that forces widgets into raw-value mode for a cleaner, label-free status line.0-120 seconds in the widget editor (w key).0 disables window mode and uses a full-session average speed.1-120 calculates recent speed over the selected rolling window.HTTPS_PROXY environment variable for their direct API call to Anthropic.Git Branch can render clickable GitHub branch links, and Git Root Dir can render clickable IDE links for VS Code and Cursor.c:\dev\null file.+42).-10).context_window_size is missing, context widgets now infer 1M models from long-context labels such as [1m] and 1M context in model identifiers.Weekly Reset Timer widget.--config <path> support so ccstatusline can load/save settings from a custom file location.U+10FFFF).Git Worktree now correctly detects linked worktrees created from bare repositories.Mem: used/total)./rename.~ abbreviation option for CWD display in both preview and live rendering.[1m] suffix across models, not just a single model path.CLAUDE.md to AGENTS.md (with symlink compatibility).


.../Personal/ccstatusline)$X.YZ vs Cost: $X.YZ)/resume (Claude Code limitation)
npx or bunx - no global package neededCLAUDE_CONFIG_DIR environment variableThe localizations in this section are third-party forks maintained outside this repository. They are not maintained, reviewed, or endorsed by this repository, so review their code and releases before using them.
# Run the configuration TUI with npm
npx -y ccstatusline@latest
# Or with Bun (faster)
bunx -y ccstatusline@latest
Both commands launch the same TUI. During the initial setup flow, choose Pinned global install if you want Claude Code to stay on the ccstatusline version you are running instead of following @latest; the TUI will install that version globally with npm or Bun and write the pinned ccstatusline command to Claude Code settings. After a pinned install, you can run ccstatusline directly to launch the TUI in the future.
The interactive configuration tool provides a terminal UI where you can:
๐ก Tip: Your settings are automatically saved to
~/.config/ccstatusline/settings.json
๐ง Custom Claude Config: If your Claude Code configuration is in a non-standard location, set the
CLAUDE_CONFIG_DIRenvironment variable:# Linux/macOS export CLAUDE_CONFIG_DIR=/custom/path/to/.claude
๐ Usage API proxy: Usage widgets honor the uppercase
HTTPS_PROXYenvironment variable for their direct API call to Anthropic.
๐ช Windows Support: PowerShell examples, installation notes, fonts, troubleshooting, WSL, and Windows Terminal configuration are in docs/WINDOWS.md.
๐ซฅ Status line empty in one folder? Claude Code only runs the status line command in trusted workspaces, and nested git repositories stopped inheriting trust in Claude Code 2.1.232. See Status line empty in one folder.
When you install from the TUI, ccstatusline writes a statusLine command object to your Claude Code settings:
{
"statusLine": {
"type": "command",
"command": "npx -y ccstatusline@latest",
"padding": 0,
"refreshInterval": 10
}
}
refreshInterval is written only when your Claude Code version supports it (>=2.1.97). The TUI can set it to 1-60 seconds, or remove it by leaving the input empty.
Other supported command values are:
bunx -y ccstatusline@latestccstatusline (for self-managed/global installs)The status line command runs once per repaint, so what it costs to invoke is paid over and over. Under
Bun that cost depends on the specifier: bunx re-resolves the latest dist-tag against the registry
on every run, because a dist-tag is not cacheable. Measured on Windows with a warm cache, median of
five runs of --version, which exits before rendering:
| command | median |
|---|---|
bunx -y ccstatusline@latest | 633 ms |
bunx -y ccstatusline@2.2.27 | 202 ms |
bunx -y ccstatusline | 207 ms |
Dropping @latest is worth about 430 ms per repaint there. npm does not behave this way: npx -y ccstatusline@latest and npx -y ccstatusline@2.2.27 measured 1082 ms and 1135 ms, so pinning buys
nothing under npx. A Pinned global install, which writes "command": "ccstatusline", avoids the
resolution entirely on both.
For pinned installs, launch the TUI with npx -y ccstatusline@latest or bunx -y ccstatusline@latest, then choose Pinned global install. The TUI pins the active version by installing it globally and writing "command": "ccstatusline" to settings.json; afterward, you can run ccstatusline directly to open the TUI.
Contributions are welcome! Please feel free to submit a Pull Request.
git checkout -b feature/amazing-feature)git commit -m 'Add some amazing feature')git push origin feature/amazing-feature)If ccstatusline is useful to you, consider buying me a coffee:
MIT ยฉ Matthew Breedlove
Matthew Breedlove
cc-session-num, a Custom Command widget that shows the current session's rank (#1, #2, โฆ).--segment mode built to embed as a Custom Command widget.--segment mode built to embed as a Custom Command widget.Give a โญ if this project helped you!
(top 24 of 160)
6,260 followers ยท starred Apr 2026
7,103 followers ยท starred Jul 2026
7,556 followers ยท starred Mar 2026
4,065 followers ยท starred May 2026
๐ Beautiful highly customizable statusline for Claude Code CLI with powerline support, themes, and more.
TypeScript
13,255
418 commits
updated Oct 9, 2026
_ _ _ _
___ ___ ___| |_ __ _| |_ _ _ ___| (_)_ __ ___
/ __/ __/ __| __/ _` | __| | | / __| | | '_ \ / _ \
| (_| (__\__ \ || (_| | |_| |_| \__ \ | | | | | __/
\___\___|___/\__\__,_|\__|\__,_|___/_|_|_| |_|\___|
๐จ A highly customizable status line formatter for Claude Code CLI Display model info, git branch, token usage, and other metrics in your terminal

g to edit insertion/deletion signs, Git clean/dirty markers, and the JJ Revision prefix, including empty glyphs for compact layouts.h; use f for 12/24-hour format and o for weekly hours-only display.Claude Status widget with live severity, a cached 48-hour incident-history strip, stale-data fallback, and graceful ? output when status data is unavailable.h checklist for supported hide conditions, with automatic migration of existing settings and optional merge-target hiding for decorative text or symbols.โ 0 or a customizable clean glyph when the tree is conflict-free.Weekly Fable Usage widget with percentage, progress-bar, remaining-mode, and time-cursor controls.limits[] response, while Sonnet, Opus, and Fable weekly widgets read authoritative weekly_scoped entries so migrated accounts do not show stale or frozen values.compact_boundary.postTokens after /compact, then switch to the first new turn instead of retaining the pre-compaction size.gh calls from blocking the status line.
Cache Timer widget with live HOT state, TTL countdown, configurable 5-minute/1-hour windows, and customizable state glyphs.Git CI Status widget that summarizes failing, pending, and successful checks for the current branch's pull request.Sandbox Status widget with glyph, text, and Nerd Font formats that follows Claude Code's layered sandbox setting on each refresh.settings.json files are left untouched, defaults render in memory, and the status line shows an invalid-config warning.x in the line editor to let a widget and the rest of its line keep their natural widths while earlier Powerline columns stay auto-aligned.Git Branch and Git Root Dir can cap their visible width with ellipsis-safe truncation while preserving hyperlink targets.Current Working Dir can prepend an optional custom glyph, including in raw-value mode.CCSTATUSLINE_CONTEXT_SIZE_FALLBACK overrides the default 200k last-resort context window when Claude Code and the model name do not report one.Compaction Counter can render count, auto, manual, unknown, or reclaimed-token values independently for custom layouts.ccstatusline --version now prints the installed package version and exits.Compaction Counter now counts explicit compact_boundary markers and can optionally show trigger splits plus tokens reclaimed.Extra Usage Used and formats extra usage amounts with the billing currency reported by the usage API.Custom Command widgets receive terminal_width in stdin JSON when ccstatusline can detect the terminal width.Cache Hit Rate, Cache Read, and Cache Write widgets with turn/session scopes and hide-when-empty behavior.999950 through 999999 now render as 1.0M instead of 1000.0k.g on the Edit Colors screen for widget gradients, or press g for Override FG Color in Global Overrides for a line-wide gradient.Tokens Input and Tokens Output now prefer cumulative transcript metrics before falling back to context-window totals.[Timeout] for accounts with overage enabled but no monthly limit configured.Compaction Counter ignores transient below-1% context readings so incomplete status frames do not create false compaction counts.HOME, USERPROFILE, CLAUDE_CONFIG_DIR, and proxy variables so local tests cannot touch the real ccstatusline cache.--no-optional-locks so background status checks avoid creating index.lock races.~/.cache/ccstatusline/git-cache with configurable TTL and .git/HEAD/.git/index mtime checks to reduce repeated subprocess work.windowsHide so helper commands do not open extra windows on Windows.CCSTATUSLINE_WIDTH can provide an explicit terminal width when automatic probing is unavailable./usage model split.Git Branch and Git PR/MR now support GitHub, GitLab, and compatible self-hosted remotes, using gh or glab as appropriate.statusLine.refreshInterval from the TUI when Claude Code >=2.1.97 supports it.k in the item editor to duplicate the selected widget, with fresh Powerline background color for cloned Powerline items.Context Window widget for total model window size, keeping Context Length focused on current context usage.Compaction Counter widget that tracks session context compactions, with icon/text/number formats, optional Nerd Font icon, and hide-when-zero behavior.Git Staged Files, Git Unstaged Files, Git Untracked Files, and Git Clean Status for file counts and clean/dirty state.Context % and Context % (usable) now label rendered values as used or left when toggling used/remaining mode.xhigh, show default when no effort is set, mark unknown future effort levels with ?, and track live status JSON plus /effort command changes. Claude Code reports Ultracode as xhigh in status line data.(1M context); use Context Window when you want the total window size shown.Git PR widget with clickable PR links plus optional status and title display for the current branch.Git Status, Git Staged, Git Unstaged, Git Untracked, Git Ahead/Behind, Git Conflicts, Git SHA, Git Origin Owner, Git Origin Repo, Git Origin Owner/Repo, Git Upstream Owner, Git Upstream Repo, Git Upstream Owner/Repo, Git Is Fork, Git Worktree Mode, Git Worktree Name, Git Worktree Branch, Git Worktree Original Branch, and Custom Symbol.~/.claude.json while respecting CLAUDE_CONFIG_DIR.Global Overrides that forces widgets into raw-value mode for a cleaner, label-free status line.0-120 seconds in the widget editor (w key).0 disables window mode and uses a full-session average speed.1-120 calculates recent speed over the selected rolling window.HTTPS_PROXY environment variable for their direct API call to Anthropic.Git Branch can render clickable GitHub branch links, and Git Root Dir can render clickable IDE links for VS Code and Cursor.c:\dev\null file.+42).-10).context_window_size is missing, context widgets now infer 1M models from long-context labels such as [1m] and 1M context in model identifiers.Weekly Reset Timer widget.--config <path> support so ccstatusline can load/save settings from a custom file location.U+10FFFF).Git Worktree now correctly detects linked worktrees created from bare repositories.Mem: used/total)./rename.~ abbreviation option for CWD display in both preview and live rendering.[1m] suffix across models, not just a single model path.CLAUDE.md to AGENTS.md (with symlink compatibility).


.../Personal/ccstatusline)$X.YZ vs Cost: $X.YZ)/resume (Claude Code limitation)
npx or bunx - no global package neededCLAUDE_CONFIG_DIR environment variableThe localizations in this section are third-party forks maintained outside this repository. They are not maintained, reviewed, or endorsed by this repository, so review their code and releases before using them.
# Run the configuration TUI with npm
npx -y ccstatusline@latest
# Or with Bun (faster)
bunx -y ccstatusline@latest
Both commands launch the same TUI. During the initial setup flow, choose Pinned global install if you want Claude Code to stay on the ccstatusline version you are running instead of following @latest; the TUI will install that version globally with npm or Bun and write the pinned ccstatusline command to Claude Code settings. After a pinned install, you can run ccstatusline directly to launch the TUI in the future.
The interactive configuration tool provides a terminal UI where you can:
๐ก Tip: Your settings are automatically saved to
~/.config/ccstatusline/settings.json
๐ง Custom Claude Config: If your Claude Code configuration is in a non-standard location, set the
CLAUDE_CONFIG_DIRenvironment variable:# Linux/macOS export CLAUDE_CONFIG_DIR=/custom/path/to/.claude
๐ Usage API proxy: Usage widgets honor the uppercase
HTTPS_PROXYenvironment variable for their direct API call to Anthropic.
๐ช Windows Support: PowerShell examples, installation notes, fonts, troubleshooting, WSL, and Windows Terminal configuration are in docs/WINDOWS.md.
๐ซฅ Status line empty in one folder? Claude Code only runs the status line command in trusted workspaces, and nested git repositories stopped inheriting trust in Claude Code 2.1.232. See Status line empty in one folder.
When you install from the TUI, ccstatusline writes a statusLine command object to your Claude Code settings:
{
"statusLine": {
"type": "command",
"command": "npx -y ccstatusline@latest",
"padding": 0,
"refreshInterval": 10
}
}
refreshInterval is written only when your Claude Code version supports it (>=2.1.97). The TUI can set it to 1-60 seconds, or remove it by leaving the input empty.
Other supported command values are:
bunx -y ccstatusline@latestccstatusline (for self-managed/global installs)The status line command runs once per repaint, so what it costs to invoke is paid over and over. Under
Bun that cost depends on the specifier: bunx re-resolves the latest dist-tag against the registry
on every run, because a dist-tag is not cacheable. Measured on Windows with a warm cache, median of
five runs of --version, which exits before rendering:
| command | median |
|---|---|
bunx -y ccstatusline@latest | 633 ms |
bunx -y ccstatusline@2.2.27 | 202 ms |
bunx -y ccstatusline | 207 ms |
Dropping @latest is worth about 430 ms per repaint there. npm does not behave this way: npx -y ccstatusline@latest and npx -y ccstatusline@2.2.27 measured 1082 ms and 1135 ms, so pinning buys
nothing under npx. A Pinned global install, which writes "command": "ccstatusline", avoids the
resolution entirely on both.
For pinned installs, launch the TUI with npx -y ccstatusline@latest or bunx -y ccstatusline@latest, then choose Pinned global install. The TUI pins the active version by installing it globally and writing "command": "ccstatusline" to settings.json; afterward, you can run ccstatusline directly to open the TUI.
Contributions are welcome! Please feel free to submit a Pull Request.
git checkout -b feature/amazing-feature)git commit -m 'Add some amazing feature')git push origin feature/amazing-feature)If ccstatusline is useful to you, consider buying me a coffee:
MIT ยฉ Matthew Breedlove
Matthew Breedlove
cc-session-num, a Custom Command widget that shows the current session's rank (#1, #2, โฆ).--segment mode built to embed as a Custom Command widget.--segment mode built to embed as a Custom Command widget.Give a โญ if this project helped you!
(top 24 of 160)
6,260 followers ยท starred Apr 2026
7,103 followers ยท starred Jul 2026
7,556 followers ยท starred Mar 2026
4,065 followers ยท starred May 2026