Skip to main content

statuskit

CI PyPI version Python versions License

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 name
    • git — branch, remote status, changes, last commit, project/worktree location
    • usage_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:

  1. Add the statusline hook to Claude Code settings
  2. Create configuration file at the appropriate level
  3. 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)

Source distribution for claude-statuskit 0.5.2
File Size Uploaded
claude_statuskit-0.5.2.tar.gz 99.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for claude-statuskit 0.5.2
File Interpreter ABI Platform
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 log

Release 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

Release history Release notifications | RSS feed

This release

0.5.2 This release

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page