English | 简体中文 | 日本語

best-claude-hud

Minimal Claude Code statusline HUD, powered by Rust

---

Rust MacOS Linux Windows supported Command: best-claude-hud License: Apache-2.0

## best-claude-hud Overview `best-claude-hud` is a high-performance Claude Code statusline tool written in Rust. It shows the status information you actually need while using Claude Code in a terminal: model and live reasoning effort, workspace, Git branch/status, context window usage, and optional usage/rate-limit metadata.

best-claude-hud statusline preview

The default statusline focuses on: - Claude model display with live reasoning effort when available - Claude Code launch directory, stable across temporary working-directory changes - Git branch, clean/dirty/conflict state, and ahead/behind counts - context window usage from Claude Code's official statusLine data, with active-transcript fallback - optional usage/rate-limit, cost, session, and output style segments ## Install `best-claude-hud` is distributed through npm. The npm package uses prebuilt native binaries; users do not need Rust installed. Install `best-claude-hud` and configure Claude Code in one line: ```bash npm install -g best-claude-hud@latest && best-claude-hud --setup ``` Restart Claude Code after setup. Existing sessions do not automatically reload `~/.claude/settings.json`. Install only: ```bash npm install -g best-claude-hud@latest ``` Using yarn or pnpm: ```bash yarn global add best-claude-hud@latest pnpm add -g best-claude-hud@latest ``` For users in China: ```bash npm install -g best-claude-hud@latest --registry https://registry.npmmirror.com && best-claude-hud --setup ``` Update an existing installation: ```bash npm install -g best-claude-hud@latest ``` Uninstall: ```bash npm uninstall -g best-claude-hud ``` ## Nix `best-claude-hud` also ships a Nix flake for declarative and reproducible environments. Run without installing globally: ```bash nix run github:GaoSSR/best-claude-hud -- --help ``` Install into a Nix profile: ```bash nix profile install github:GaoSSR/best-claude-hud best-claude-hud --setup ``` For home-manager or another declarative setup, point Claude Code directly at the Nix store binary. The example below declaratively manages the entire `~/.claude/settings.json` file and does not merge existing settings. Use it only for a new file or when all Claude Code settings are declared in the same Nix configuration: ```nix # In your flake inputs: # best-claude-hud.url = "github:GaoSSR/best-claude-hud"; { inputs, pkgs, ... }: let hud = inputs.best-claude-hud.packages.${pkgs.system}.default; in { home.packages = [ hud ]; home.file.".claude/settings.json".text = builtins.toJSON { statusLine = { type = "command"; command = "${hud}/bin/best-claude-hud"; padding = 0; }; }; } ``` If you keep `~/.claude/settings.json` manually, run `best-claude-hud --setup` or add the `statusLine` block directly; do not use this `home.file` declaration. If Nix already manages the file, add `statusLine` to the existing Nix expression. To migrate an unmanaged file to Home Manager, first copy every existing setting into Nix, then move the original file out of the way—for example, by renaming it as a backup—before activation. Development shell: ```bash nix develop ``` ## Claude Code Configuration `npm install -g best-claude-hud@latest` only installs the command. Claude Code will not show the HUD until `statusLine` is configured. Recommended: ```bash best-claude-hud --setup ``` The setup command writes a `statusLine` block to `~/.claude/settings.json` and preserves existing settings. It resolves the installed command to an absolute path when possible: ```json { "statusLine": { "type": "command", "command": "/path/to/best-claude-hud", "padding": 0 } } ``` Manual configuration can also use `"command": "best-claude-hud"` if your Claude Code sessions inherit the same PATH as your shell. If `statusLine` already exists, `--setup` creates a timestamped backup next to `settings.json` before replacing it. Restart Claude Code after changing this file. The npm package intentionally does not install a binary into `~/.claude`. It uses the global npm command and resolves the matching native binary from Kiri-style npm alias optional dependencies. ## Commands ```bash best-claude-hud # open the interactive menu when run in a terminal best-claude-hud --help # print command help best-claude-hud --version # print version best-claude-hud --setup # configure Claude Code statusLine best-claude-hud --config # open the TUI configuration interface best-claude-hud --theme minimal # temporarily render with a built-in theme best-claude-hud --patch # patch Claude Code cli.js context warnings ``` ## Themes Temporarily override the configured theme: ```bash best-claude-hud --theme cometix best-claude-hud --theme minimal best-claude-hud --theme gruvbox best-claude-hud --theme nord best-claude-hud --theme powerline-dark best-claude-hud --theme powerline-light best-claude-hud --theme powerline-rose-pine best-claude-hud --theme powerline-tokyo-night ``` Custom themes can be stored under: ```text ~/.claude/best-claude-hud/themes/ ``` Then use: ```bash best-claude-hud --theme my-custom-theme ``` ## Configuration Configuration files are stored under: ```text ~/.claude/best-claude-hud/ ``` Important files: - `config.toml`: main HUD and segment configuration - `models.toml`: model display names and context window limits - `themes/*.toml`: custom theme presets - `.api_usage_cache.json`: optional usage API cache - `.update_state.json`: update-check state Run the TUI configurator: ```bash best-claude-hud --config ``` Available segment families: - `model` - `directory` - `git` - `context_window` - `usage` - `cost` - `session` - `output_style` - `update` ## Model Configuration `models.toml` is created automatically on first run: ```text ~/.claude/best-claude-hud/models.toml ``` It controls model display names and context limits. Claude model families are recognized automatically, while third-party models can be customized: ```toml [[models]] pattern = "kimi-k2.7" display_name = "Kimi K2.7" context_limit = 262144 [[models]] pattern = "glm-5" display_name = "GLM-5" context_limit = 200000 [[models]] pattern = "qwen3-coder" display_name = "Qwen Coder" context_limit = 256000 [[context_modifiers]] pattern = "[1m]" display_suffix = " 1M" context_limit = 1000000 ``` ## Statusline Data Claude Code sends statusLine data to the command through stdin. `best-claude-hud` reads: - `model` - `effort.level`, shown as a separate item when the current model supports reasoning effort - `workspace.project_dir` for the stable Claude Code launch directory - `workspace.current_dir` as a fallback for older Claude Code versions - `transcript_path` - `session_id`, used to scope Ultracode detection to the current Claude Code process - `context_window` - `cost` - `output_style` - `rate_limits` The effort item follows the model name with an explicit ASCII pipe and a brain icon, for example `Kimi K2.7 | 🧠 max`. Its label is rendered in bright purple (`#B45CFF`). The HUD displays `low`, `medium`, `high`, `xhigh`, `max`, or `ultracode`; Nerd Font and Powerline modes use the matching Nerd Font brain glyph. Claude Code's official statusline payload reports Ultracode as `xhigh`. To keep ordinary `xhigh` and Ultracode distinct, the HUD cross-checks successful `/effort` events from the current Claude Code process only. Events from an earlier process are ignored when a conversation is resumed. An `xhigh` `CLAUDE_CODE_EFFORT_LEVEL` override remains compatible with Ultracode, while other active overrides prevent it from being reported. If Claude Code does not provide effort data, unsupported and third-party models keep the existing model-only display. The Claude Code version field is intentionally not shown. For context window usage, the HUD prefers Claude Code's official `context_window` fields. The active transcript is used only as a compatibility fallback when those fields are absent, null, or temporarily zero. All-zero usage placeholders written after an interrupted response are ignored, so pressing `Esc` does not erase the last valid context reading. A genuinely new session with no usage still shows `0% · 0 tokens` and never scans older project history. ## Git Status Indicators - `✓`: clean working tree - `●`: dirty working tree - `⚠`: conflicts - `↑n`: commits ahead of upstream - `↓n`: commits behind upstream Git commands run with `--no-optional-locks`, so the HUD does not create unnecessary `.git/index.lock` contention while you work. ## Claude Code Patch Utility The inherited patcher can patch Claude Code `cli.js` to reduce context warning noise: ```bash best-claude-hud --patch /path/to/claude-code/cli.js ``` Example: ```bash best-claude-hud --patch ~/.local/share/fnm/node-versions/v24.4.1/installation/lib/node_modules/@anthropic-ai/claude-code/cli.js ``` The patcher creates a backup next to the target file before writing. ## Platform Support | Platform | Native binary source | Status | | --- | --- | --- | | MacOS arm64 | Native binary selected automatically by npm | Supported | | MacOS x64 | Native binary selected automatically by npm | Supported | | Linux x64 musl | Native binary selected automatically by npm | Supported | | Windows x64 | Native binary selected automatically by npm | Supported | | Linux arm64 / Windows arm64 | - | Planned | ## Requirements - Claude Code with `statusLine` support - Git for branch/status display - A terminal with ANSI color support - A Nerd Font if you choose Nerd Font or Powerline themes ## Development For maintainers and contributors working from source: ```bash cargo fmt cargo clippy -- -D warnings cargo test cargo build --release cargo run -- --help npm --prefix packaging/npm run check npm --prefix packaging/npm run test ``` ## Release Maintainers must follow the complete, approval-gated checklist in [RELEASING.md](./RELEASING.md). It is the source of truth for version updates, local verification, Git tags, GitHub Releases, npm publishing, and local installation upgrades. ## Project Resources - [Changelog](./CHANGELOG.md) - [Contributing guide](./CONTRIBUTING.md) - [Release process](./RELEASING.md) - [Security policy](./SECURITY.md) - [Upstream triage](./docs/triage.md) ## Acknowledgements Third-party attribution is preserved in [NOTICE](./NOTICE). ## License Licensed under the [Apache License 2.0](./LICENSE).