statuskit
Modular statusline for Claude Code.
Statuskit displays contextual information below Claude's responses: current model, git status, API usage limits, and more. It reads JSON from Claude Code's statusline hook and renders formatted, colored output.
Features
- Modular architecture — enable only the modules you need
- Configurable — customize each module's behavior via TOML config
- Built-in modules:
model— current Claude model namegit— branch, remote status, changes, last commit, project/worktree locationusage_limits— API quota tracking (5h session, 7d weekly) with color-coded warnings
- Coming soon:
beads— display active beads tasks- External modules support — load custom modules from separate packages
Installation
# Using uv (recommended)
uv tool install claude-statuskit
# Using pipx
pipx install claude-statuskit
# Using pip
pip install claude-statuskit
Quick Start
Run the setup command to configure Claude Code:
# User-level setup (recommended for personal use)
statuskit setup
# Project-level setup (shared config for team)
statuskit setup --scope project
# Local setup (personal overrides, gitignored)
statuskit setup --scope local
Setup will:
- Add the statusline hook to Claude Code settings
- Create configuration file at the appropriate level
- Update gitignore for local configs (if applicable)
After setup, restart Claude Code to see the statusline.
Example Output
Opus 4.5 · 47m · 120k free (60%)
claude-tools master ↑1 +2 ~1 ?3 · a1b2c3d 2h
Session: 45% (2h 30m) · Weekly: 12%
This shows:
- Line 1 (model): Model name, session duration, context window
- Line 2 (git): Project, branch, remote status, changes, last commit
- Line 3 (usage_limits): API quota for session and weekly limits
Configuration
Configuration files are loaded in priority order (first found wins):
| Level | Path | Use case |
|---|---|---|
| Local | .claude/statuskit.local.toml |
Personal overrides, gitignored |
| Project | .claude/statuskit.toml |
Shared team configuration |
| User | ~/.claude/statuskit.toml |
Global personal defaults |
Basic Configuration
# Modules to display (in order)
modules = ["model", "git", "usage_limits"]
# Enable debug output
debug = false
Module Configuration
Each module can be configured in its own section:
[git]
show_branch = true
commit_age_format = "compact"
[usage_limits]
show_session = true
show_weekly = true
multiline = false
Module Reference
model Module
Displays model name, session duration, and context window usage.
| Parameter | Type | Default | Description |
|---|---|---|---|
show_duration |
bool | true |
Show session duration |
show_context |
bool | true |
Show context window usage |
context_format |
string | "free" |
Context display format (see below) |
context_compact |
bool | false |
Use compact numbers (e.g., 150k instead of 150,000) |
context_threshold_green |
int | 50 |
Percentage of free context to show green |
context_threshold_yellow |
int | 25 |
Percentage of free context to show yellow (below = red) |
context_format values:
| Value | Output example |
|---|---|
"free" |
150,000 free (75.0%) |
"used" |
50,000 used (25.0%) |
"ratio" |
50,000/200,000 (25.0%) |
"bar" |
[███████░░░] 70% |
git Module
Displays git branch, remote status, changes, last commit, and project/worktree location.
| Parameter | Type | Default | Description |
|---|---|---|---|
show_project |
bool | true |
Show project (repository) name |
show_worktree |
bool | true |
Show worktree name with 🌲 indicator |
show_folder |
bool | true |
Show current subfolder relative to repo root |
show_branch |
bool | true |
Show current branch name |
show_remote_status |
bool | true |
Show ahead/behind/diverged status |
show_changes |
bool | true |
Show staged/modified/untracked counts |
show_commit |
bool | true |
Show last commit hash and age |
commit_age_format |
string | "relative" |
Commit age format (see below) |
show_pr |
bool | true |
Show the current branch's PR (GitHub) / MR (GitLab) |
pr_provider |
string | "auto" |
Provider detection: "auto", "github", "gitlab" |
pr_link |
bool | true |
Wrap the PR/MR token in a clickable OSC 8 hyperlink |
pr_cache_ttl |
int | 300 |
Minimum seconds between PR/MR network lookups |
commit_age_format values:
| Value | Output example |
|---|---|
"relative" |
2 hours ago |
"compact" |
2h |
PR / MR display:
The git module can show the current branch's pull request (GitHub) or merge request
(GitLab), rendered between the branch name and the sync indicator as a state-colored
token — PR #42 ● (GitHub) or MR !7 ○ (GitLab):
| State | Glyph | Color |
|---|---|---|
| open | ● |
green |
| draft | ○ |
yellow |
| merged | ✓ |
magenta |
| closed | ✗ |
red |
Optional dependencies: this feature shells out to the official CLIs —
gh for GitHub and glab
for GitLab — reusing their authentication and host configuration (so self-hosted /
Enterprise instances work with no extra setup). Neither CLI is required to install
statuskit; when the relevant CLI is missing or unauthenticated the PR/MR segment is
simply omitted. Lookups are cached (pr_cache_ttl, default 300s) so the status line
never hits the network on every render. Set pr_provider to force a provider, or
show_pr = false to disable the segment entirely. When pr_link is on, supporting
terminals (iTerm2, Kitty, WezTerm) make the token Cmd/Ctrl-clickable; others show it
as plain text.
usage_limits Module
Displays API usage limits with color-coded warnings based on consumption rate.
Session and Weekly come from the rate_limits block Claude Code puts in the statusline
payload — no network call, refreshed on every API response. Per-model rows (Fable, …) are not
in that payload, so they are fetched from the account usage endpoint at most once per
cache_ttl and cached; the last payload block is cached too, so a brand-new session can show
the overall rows before its first API response.
Session and Weekly need a recent Claude Code that sends rate_limits in the statusline
payload. Without it (an older Claude Code, or a cold cache before the first payload with that
block arrives), only the per-model rows render.
A row that comes from the cache after a failed refresh is marked with its age, e.g.
Fable: 25% (Wed 08:00) (40m ago). When the endpoint answers 429, its Retry-After is
honoured: no request goes out until the window it names has passed.
| Parameter | Type | Default | Description |
|---|---|---|---|
show_session |
bool | true |
Show 5-hour session limit |
show_weekly |
bool | true |
Show 7-day weekly limit |
models_always_show |
list | [] |
Model display names to always show, even at 0% |
models_never_show |
list | [] |
Model display names to never show |
show_reset_time |
bool | true |
Show time until reset |
multiline |
bool | true |
Display each limit on separate line |
show_progress_bar |
bool | false |
Show visual progress bar |
bar_width |
int | 10 |
Progress bar width in characters |
session_time_format |
string | "remaining" |
Time format for session limit |
weekly_time_format |
string | "reset_at" |
Time format for weekly limit |
model_time_format |
string | "reset_at" |
Time format for per-model limits |
cache_ttl |
int | 120 |
Minimum seconds between usage-API refetches (per-model rows only) |
Time format values:
| Value | Output example |
|---|---|
"remaining" |
2h 30m |
"reset_at" |
Thu 17:00 |
Color coding: Usage is colored based on consumption rate vs elapsed time:
- 🟢 Green — on track or under
- 🟡 Yellow — approaching the limit trajectory
- 🔴 Red — ahead of pace, may hit limit
License
MIT — see LICENSE for details.
Release files for claude-statuskit 0.5.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| claude_statuskit-0.5.2.tar.gz | 99.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| claude_statuskit-0.5.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 154.5 kB
Release files / claude_statuskit-0.5.2.tar.gz
| Download URL | claude_statuskit-0.5.2.tar.gz |
|---|---|
| Size | 99.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
de2be432a9b0a4a5261cc2349b15cabb5a96080903561c219f428d7b538ba865
|
|
BLAKE2b-256 checksum How to use checksums |
6c966e325802f1a753ac07281242a97c9c16099ce24f367eaf39bf81a9467f2c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.
Transparency logRelease files / claude_statuskit-0.5.2-py3-none-any.whl
| Download URL | claude_statuskit-0.5.2-py3-none-any.whl |
|---|---|
| Size | 54.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
bcaa649637388595aea2a511b6426a9786ae5372a821a6367ce7bd804787dd84
|
|
BLAKE2b-256 checksum How to use checksums |
6c6cf60db8fb29425f7ac36751c07a4f2420725e6c01b2f79afb741898609339
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.
Transparency log