BeClaude

claude-hud

25.2kCommunity RegistryGeneralby Jarrod Watts

Real-time statusline showing context usage, active tools, running agents, and todo progress. Always visible below your input, zero config required.

First seen 4/17/2026

Summary

Claude HUD is a real-time statusline plugin for Claude Code that displays context usage, active tools, running agents, and todo progress directly below your input.

  • It requires zero configuration and helps developers stay aware of their environment and task status without disrupting their workflow.

Overview

A Claude Code plugin that shows what's happening β€” context usage, active tools, running agents, and todo progress. Always visible below your input.

![License](LICENSE) ![Stars](https://github.com/jarrodwatts/claude-hud/stargazers)

!Claude HUD in action

🌐 English | δΈ­ζ–‡ζ–‡ζ‘£

Install

Inside a Claude Code instance, run the following commands:

Step 1: Add the marketplace

code
/plugin marketplace add jarrodwatts/claude-hud

Step 2: Install the plugin

<details> <summary><strong>⚠️ Linux users: Click here first</strong></summary>

On Linux, /tmp is often a separate filesystem (tmpfs), which causes plugin installation to fail with:

code
EXDEV: cross-device link not permitted

Fix: Set TMPDIR before installing:

bash
mkdir -p ~/.cache/tmp && TMPDIR=~/.cache/tmp claude

Then run the install command below in that session. This is a Claude Code platform limitation.

</details>

code
/plugin install claude-hud

After that, reload plugins:

code
/reload-plugins

Step 3: Configure the statusline

code
/claude-hud:setup

<details> <summary><strong>⚠️ Windows users: Click here if setup says no JavaScript runtime was found</strong></summary>

On Windows, Node.js LTS is the supported runtime for Claude HUD setup. If setup says no JavaScript runtime was found, install Node.js for your shell first:

powershell
winget install OpenJS.NodeJS.LTS

Then restart your shell and run /claude-hud:setup again.

</details>

Done! Restart Claude Code to load the new statusLine config, then the HUD will appear.

On Windows, make that a full Claude Code restart after setup writes the new statusLine config.


What is Claude HUD?

Claude HUD gives you better insights into what's happening in your Claude Code session.

What You SeeWhy It Matters
Project pathKnow which project you're in (configurable 1-3 directory levels)
Context healthKnow exactly how full your context window is before it's too late
Tool activityWatch Claude read, edit, and search files as it happens
Agent trackingSee which subagents are running and what they're doing
Todo progressTrack task completion in real-time

What You See

Default (2 lines)

code
[Opus] β”‚ my-project git:(main*)
Context β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘ 45% β”‚ Usage β–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 25% (1h 30m / 5h)
  • β€’Line 1 β€” Model, provider label when positively identified (for example Bedrock, Vertex), project path, git branch
  • β€’Line 2 β€” Context bar (green β†’ yellow β†’ red) and usage rate limits

Optional lines (enable via /claude-hud:configure)

code
◐ Edit: auth.ts | βœ“ Read Γ—3 | βœ“ Grep Γ—2        ← Tools activity
◐ explore [haiku]: Finding auth code (2m 15s)    ← Agent status
β–Έ Fix authentication bug (2/5)                   ← Todo progress

How It Works

Claude HUD uses Claude Code's native statusline API β€” no separate window, no tmux required, works in any terminal.

code
Claude Code β†’ stdin JSON β†’ claude-hud β†’ stdout β†’ displayed in your terminal
           β†˜ transcript JSONL (tools, agents, todos)

Key features:

  • β€’Native token data from Claude Code (not estimated)
  • β€’Scales with Claude Code's reported context window size, including newer 1M-context sessions
  • β€’Parses the transcript for tool/agent activity
  • β€’Updates every ~300ms

Configuration

Customize your HUD anytime:

code
/claude-hud:configure

The guided flow handles layout, language, and common display toggles. Advanced overrides such as custom colors and thresholds are preserved there, but you set them by editing the config file directly:

  • β€’First time setup: Choose a preset (Full/Essential/Minimal), pick a label language, then fine-tune individual elements
  • β€’Customize anytime: Toggle items on/off, adjust git display style, switch layouts, or change label language
  • β€’Preview before saving: See exactly how your HUD will look before committing changes

Presets

PresetWhat's Shown
FullEverything enabled β€” tools, agents, todos, git, usage, duration
EssentialActivity lines + git status, minimal info clutter
MinimalCore only β€” just model name and context bar

After choosing a preset, you can turn individual elements on or off.

Manual Configuration

Edit ~/.claude/plugins/claude-hud/config.json directly for advanced settings such as colors.*, pathLevels, maxWidth, threshold overrides, display.timeFormat, and display.promptCacheTtlSeconds. Running /claude-hud:configure preserves those manual settings while still letting you change language, layout, and the common guided toggles.

Chinese HUD labels are available as an explicit opt-in. English stays the default unless you choose δΈ­ζ–‡ in /claude-hud:configure or set language in config. The short zh alias remains valid, and new guided config writes the canonical zh-Hans value.

Options

OptionTypeDefaultDescription
languageen \zh \zh-HansenHUD label language. English is the default; set zh or zh-Hans to enable Simplified Chinese labels.
lineLayoutstringexpandedLayout: expanded (multi-line) or compact (single line)
pathLevels1-31Directory levels to show in project path
maxWidthnumber \nullnullOptional fallback width used only when terminal width detection fails completely
forceMaxWidthbooleanfalseAlways use maxWidth when it is set, even if terminal width detection returns a smaller value
elementOrderstring[]["project","addedDirs","context","usage","promptCache","memory","environment","tools","skills","mcp","agents","todos","sessionTime"]Expanded-mode element order. Omit entries to hide them in expanded mode. Existing configs keep their explicit order until updated.
display.mergeGroupsstring[][][["context","usage"]]Expanded-mode groups that should share a line when adjacent. Set [] to disable merged lines.
gitStatus.enabledbooleantrueShow git branch in HUD
gitStatus.showDirtybooleantrueShow * for uncommitted changes
gitStatus.showAheadBehindbooleanfalseShow ↑N ↓N for ahead/behind remote
gitStatus.pushWarningThresholdnumber0Color the ahead count with the warning color at or above this unpushed-commit count (0 disables it)
gitStatus.pushCriticalThresholdnumber0Color the ahead count with the critical color at or above this unpushed-commit count (0 disables it)
gitStatus.showFileStatsbooleanfalseShow file change counts !M +A ✘D ?U
gitStatus.branchOverflowtruncate \wraptruncateKeep current truncation behavior or let the git block wrap onto its own line boundary when possible
display.showModelbooleantrueShow model name [Opus]
display.showAddedDirsbooleantrueShow extra workspace directories from /add-dir (e.g. +sparkle +lib-foo); empty array renders nothing. In both layouts at most 5 dirs render (overflow shown as +N more) and basenames are truncated to 24 chars with …
display.addedDirsLayoutinline \lineinlineinline puts dirs next to the project name with a +name prefix per dir; line renders them on a separate Added dirs: name1, name2 line (no + prefix, comma-separated)
display.showContextBarbooleantrueShow visual context bar β–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘β–‘
display.contextValuepercent \tokens \remaining \bothpercentContext display format (45%, 45k/200k, 55% remaining, or 45% (45k/200k))
display.autoCompactWindownumber \nullnullWhen set to a positive number such as 200000, compute the context percentage against this auto-compact window instead of the full model context window, matching the /context figure. Leave unset or null to preserve default full-window behavior.
display.showConfigCountsbooleanfalseShow CLAUDE.md, rules, MCPs, hooks counts
display.showCostbooleanfalseShow session cost using Claude Code's native cost.total_cost_usd when available, with a local estimate fallback for direct Anthropic sessions
display.showOutputStylebooleanfalseShow the active Claude Code outputStyle from settings files as style: <name>
display.showDurationbooleanfalseShow session duration ⏱️ 5m
display.showSpeedbooleanfalseShow output token speed out: 42.1 tok/s
display.showUsagebooleantrueShow Claude subscriber usage limits when available
display.usageValuepercent \remainingpercentUsage display format (25% used, or 75% remaining)
display.usageBarEnabledbooleantrueDisplay usage as visual bar instead of text
display.usageCompactbooleanfalseDisplay usage in a shorter text form such as 5h: 25% (1h 30m); takes precedence over display.usageBarEnabled
display.showResetLabelbooleantrueShow the resets in prefix before usage countdowns
display.timeFormatrelative \absolute \both \elapsed \elapsedAndAbsoluterelativeHow usage-window time is shown: countdown only (resets in 2h 30m), wall-clock reset (resets at 14:30), both, elapsed window percentage (53% elapsed), or elapsed plus wall-clock reset
display.sevenDayThreshold0-10080Show 7-day usage when >= threshold (0 = always)
display.externalUsagePathstring""Optional path to a local usage snapshot file. When stdin rate_limits are present, only balance_label is appended; when they are missing, valid usage windows can be used as a fallback
display.externalUsageWritePathstring""Optional absolute .json path in an existing directory. When stdin rate_limits exists, ClaudeHUD writes a private snapshot for other local tools. Relative paths, non-json files, and missing parent directories are ignored
display.externalUsageFreshnessMsnumber300000Maximum allowed age for the external usage snapshot before it is ignored
display.showTokenBreakdownbooleantrueShow token details at high context (85%+)
display.showToolsbooleanfalseShow tools activity line
display.showSkillsbooleanfalseShow active Skills detected from Skill tool invocations
display.showMcpbooleanfalseShow active MCP servers detected from mcp__server__tool invocations
display.toolNameMaxLengthnumber0Maximum displayed tool-name length. 0 keeps full names; MCP names may shorten to their final segment when truncating
display.toolsMaxVisiblenumber4Maximum completed tools shown on the tools line. 0 means unlimited
display.showAgentsbooleanfalseShow agents activity line
display.showTodosbooleanfalseShow todos progress line
display.showSessionNamebooleanfalseShow session slug or custom title from /rename
display.showAdvisorbooleanfalseInline the model configured via Claude Code's /advisor on the project line, e.g. Advisor: Opus 4.7. Read from the advisorModel field that Claude Code stamps on each assistant transcript record; sanitised and capped at 64 chars before rendering
display.advisorOverridestring""Optional manual override for the displayed advisor label. When non-empty, replaces transcript-driven detection. Also sanitised and capped at 64 chars
display.showSessionStartDatebooleanfalseShow the transcript session start timestamp
display.showLastResponseAtbooleanfalseShow how long ago the last assistant response was written
display.showCompactionsbooleanfalseShow how many context compactions (manual /compact or auto) have occurred this session, counted from transcript compact_boundary entries, e.g. Compactions: 2. Hidden until the first compaction
display.showClaudeCodeVersionbooleanfalseShow the installed Claude Code version, e.g. CC v2.1.81
display.showMemoryUsagebooleanfalseShow an approximate system RAM usage line in expanded layout
display.showPromptCachebooleanfalseShow a prompt cache countdown based on the last assistant response timestamp in the transcript
display.promptCacheTtlSecondsnumber300Prompt cache TTL in seconds. Keep the default for Pro, set 3600 for Max
colors.contextcolor valuegreenBase color for the context bar and context percentage
colors.usagecolor valuebrightBlueBase color for usage bars and percentages below warning thresholds
colors.warningcolor valueyellowWarning color for context thresholds and usage warning text
colors.usageWarningcolor valuebrightMagentaWarning color for usage bars and percentages near their threshold
colors.criticalcolor valueredCritical color for limit-reached states and critical thresholds
colors.modelcolor valuecyanColor for the model badge such as [Opus]
colors.projectcolor valueyellowColor for the project path
colors.gitcolor valuemagentaColor for git wrapper text such as git:( and )
colors.gitBranchcolor valuecyanColor for the git branch and branch status text
colors.labelcolor valuedimColor for labels and secondary metadata such as Context, Usage, counts, and progress text
colors.customcolor value208Color for the optional custom line
colors.barFilledstringβ–ˆCharacter used for the filled portion of progress bars
colors.barEmptystringβ–‘Character used for the empty portion of progress bars

colors.barFilled and colors.barEmpty accept a single visible grapheme. Control characters, invisible format characters (bidi controls, zero-width joiners, variation selectors), line/paragraph separators, and noncharacters are rejected. Wide characters (emoji, CJK) may affect bar alignment depending on the terminal.

Supported color names: dim, red, green, yellow, magenta, cyan, brightBlue, brightMagenta. You can also use a 256-color number (0-255) or hex (#rrggbb).

display.showMemoryUsage is fully opt-in and only renders in expanded layout. It reports approximate system RAM usage from the local machine, not precise memory pressure inside Claude Code or a specific process. The number may overstate actual pressure because reclaimable OS cache and buffers can still be counted as used memory.

display.showCost is fully opt-in. ClaudeHUD prefers the native cost.total_cost_usd field that Claude Code provides on stdin when it is available. If that field is absent or invalid for a direct Anthropic session, ClaudeHUD falls back to the existing local transcript-based estimate so the cost line still works on older payloads. The native field is absent before the first API response in a session, so the cost display may stay hidden until then. ClaudeHUD also keeps the cost hidden for known routed providers such as Bedrock and Vertex AI, because cloud-provider billed sessions may report $0.00 or omit the field even though the session was not literally free.

display.showPromptCache is fully opt-in. When enabled, ClaudeHUD looks at the timestamp of the last assistant response in the local transcript and shows a live countdown until the prompt cache expires. The default TTL is 5 minutes (300 seconds). Set display.promptCacheTtlSeconds to 3600 if you want a 1-hour Max-style window. If the transcript does not have an assistant timestamp yet, the cache element stays hidden.

Usage Limits

Usage display is enabled by default when Claude Code provides subscriber rate_limits data on stdin. It shows your rate limit consumption on line 2 alongside the context bar.

Set display.usageValue to remaining to show quota left instead of quota used. Warning colors and 7-day threshold checks still use the underlying used percentage.

ClaudeHUD prefers the official statusline stdin payload for rate-limit windows. If display.externalUsagePath points to a fresh local sidecar snapshot, ClaudeHUD can append its balance_label alongside stdin windows. If stdin rate_limits are missing, the same snapshot can provide fallback usage windows.

The fallback snapshot must be fresh enough (display.externalUsageFreshnessMs) and include valid updated_at, plus a five_hour window, seven_day window, or balance_label. balance_label is optional text for prepaid provider balances; it is trimmed, length-limited, and sanitized before display. Invalid JSON, stale files, or invalid timestamps are ignored quietly.

Set display.externalUsageWritePath if you want ClaudeHUD to write the official stdin rate_limits into a local snapshot for other tools. The path must be absolute, end in .json, and live in an existing directory. ClaudeHUD writes the file with private permissions and ignores invalid paths quietly.

Free/weekly-only accounts render the weekly window by itself instead of showing a ghost 5h: -- placeholder.

The 7-day percentage appears when above the display.sevenDayThreshold (default 80%):

code
Context β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘ 45% β”‚ Usage β–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 25% (1h 30m / 5h) | β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ 85% (2d / 7d)

To disable, set display.showUsage to false.

Reset times use relative countdowns by default. Set display.timeFormat to absolute for wall-clock times, both to show both forms, elapsed to show how far through each usage window you are, or elapsedAndAbsolute to show elapsed window progress plus the wall-clock reset time. This setting is manual-only today; /claude-hud:configure preserves it without editing it.

Set display.showResetLabel to false if you want shorter usage countdowns such as (3h 17m) instead of (resets in 3h 17m).

Set display.usageCompact to true if you want the shorter usage-only form, for example 5h: 25% (1h 30m). Compact usage takes precedence over display.usageBarEnabled.

Requirements:

  • β€’Claude Code must include subscriber rate_limits data on stdin for the current session
  • β€’Not available for API-key-only users

Troubleshooting: If usage doesn't appear:

  • β€’Ensure you're logged in with a Claude subscriber account (not API key)
  • β€’Check display.showUsage is not set to false in config
  • β€’API users see no usage display (they have pay-per-token, not rate limits)
  • β€’AWS Bedrock models display Bedrock and hide usage limits (usage is managed in AWS)
  • β€’Google Vertex AI models display Vertex and hide cost estimates (pricing differs from Anthropic direct)
  • β€’Claude Code may leave rate_limits empty until after the first model response in a session
  • β€’Some Claude Code builds and subscription tiers may still omit rate_limits, even after the first response
  • β€’If you configured display.externalUsagePath, ClaudeHUD will try that local snapshot before hiding usage
  • β€’ClaudeHUD never falls back to credential scraping or undocumented API calls

Example fallback snapshot:

json
{
  "updated_at": "2026-04-20T12:00:00.000Z",
  "five_hour": {
    "used_percentage": 42,
    "resets_at": "2026-04-20T15:00:00.000Z"
  },
  "seven_day": {
    "used_percentage": 84,
    "resets_at": "2026-04-27T12:00:00.000Z"
  }
}

Example Configuration

json
{
  "language": "zh",
  "lineLayout": "expanded",
  "pathLevels": 2,
  "elementOrder": ["project", "tools", "skills", "mcp", "context", "usage", "memory", "environment", "agents", "todos", "sessionTime"],
  "gitStatus": {
    "enabled": true,
    "showDirty": true,
    "showAheadBehind": true,
    "showFileStats": true
  },
  "display": {
    "showTools": true,
    "showSkills": true,
    "showMcp": true,
    "showAgents": true,
    "showTodos": true,
    "showConfigCounts": true,
    "showDuration": true,
    "showMemoryUsage": true
  },
  "colors": {
    "context": "cyan",
    "usage": "cyan",
    "warning": "yellow",
    "usageWarning": "magenta",
    "critical": "red",
    "model": "cyan",
    "project": "yellow",
    "git": "magenta",
    "gitBranch": "cyan",
    "label": "dim",
    "custom": "#FF6600"
  }
}

Display Examples

1 level (default): [Opus] β”‚ my-project git:(main)

2 levels: [Opus] β”‚ apps/my-project git:(main)

3 levels: [Opus] β”‚ dev/apps/my-project git:(main)

With dirty indicator: [Opus] β”‚ my-project git:(main*)

With ahead/behind: [Opus] β”‚ my-project git:(main ↑2 ↓1)

With file stats: [Opus] β”‚ my-project git:(main* !3 +1 ?2)

  • β€’! = modified files, + = added/staged, ✘ = deleted, ? = untracked
  • β€’Counts of 0 are omitted for cleaner display

Disabling the HUD Temporarily

Set the CLAUDE_HUD_DISABLE environment variable to launch a session without the HUD β€” no need to remove the statusLine entry from settings.json:

bash
CLAUDE_HUD_DISABLE=1 claude

Leaving it unset (or setting an explicit negative: 0, false, off, no) keeps the HUD enabled. When disabled, the HUD exits immediately without reading the transcript or running git, so the statusline simply stays empty for that session.

Troubleshooting

Config not applying?

  • β€’Check for JSON syntax errors: invalid JSON silently falls back to defaults
  • β€’Ensure valid values: pathLevels must be 1, 2, or 3; lineLayout must be expanded or compact; maxWidth must be a positive number
  • β€’Delete config and run /claude-hud:configure to regenerate

Git status missing?

  • β€’Verify you're in a git repository
  • β€’Check gitStatus.enabled is not false in config

Tool/skill/MCP/agent/todo lines missing?

  • β€’These are hidden by default β€” enable with showTools, showSkills, showMcp, showAgents, showTodos in config
  • β€’They also only appear when there's activity to show

HUD not appearing after setup?

  • β€’Restart Claude Code so it picks up the new statusLine config
  • β€’On macOS, fully quit Claude Code and run claude again in your terminal
  • β€’Make sure CLAUDE_HUD_DISABLE is not set in your environment (e.g. exported from a shell profile) β€” it silences the HUD entirely, including setup verification

Requirements

  • β€’Claude Code v1.0.80+
  • β€’macOS/Linux: Node.js 18+ or Bun
  • β€’Windows: Node.js 18+

Development

bash
git clone https://github.com/jarrodwatts/claude-hud
cd claude-hud
npm ci && npm run build
npm test

See CONTRIBUTING.md for guidelines.


License

MIT β€” see LICENSE


Star History

![Star History Chart](https://star-history.com/#jarrodwatts/claude-hud&Date)

Install & Usage

1
Add a marketplace
/plugin marketplace add <org/repo>
2
Install the plugin

Add the configuration to /plugin install claude-hud@<marketplace>

3
Manage with /plugin
/plugin

Use Cases

Monitor current context usage to avoid hitting limits during long coding sessions.
Track active tools and agents to understand what background processes are running.
View todo progress to quickly check completion status of tasks without switching contexts.
Debug plugin or agent behavior by seeing real-time status updates in the HUD.
Optimize workflow by keeping an eye on resource consumption while iterating on code.
Onboard new team members by providing a visible status overview of the Claude Code session.

Usage Examples

1

/claude-hud:setup to configure the statusline display.

2

/claude-hud:status to view current HUD information.

3

Check my context usage and active tools while I work on this refactor.

View source on GitHub
agenthudstatuslinemonitoringcontexttoolsagentstodos

Security Audits

LicenseUnknownSourceWarnRepositoryPass

Frequently Asked Questions

What is claude-hud?

Claude HUD is a real-time statusline plugin for Claude Code that displays context usage, active tools, running agents, and todo progress directly below your input. It requires zero configuration and helps developers stay aware of their environment and task status without disrupting their workflow.

How to install claude-hud?

To install claude-hud: add a marketplace (/plugin marketplace add <org/repo>), then add the config to /plugin install claude-hud@<marketplace>. Finally, /plugin in Claude Code.

What is claude-hud best for?

claude-hud is a plugin categorized under General. It is designed for: agent, hud, statusline, monitoring, context, tools, agents, todos. Created by Jarrod Watts.

What can I use claude-hud for?

claude-hud is useful for: Monitor current context usage to avoid hitting limits during long coding sessions.; Track active tools and agents to understand what background processes are running.; View todo progress to quickly check completion status of tasks without switching contexts.; Debug plugin or agent behavior by seeing real-time status updates in the HUD.; Optimize workflow by keeping an eye on resource consumption while iterating on code.; Onboard new team members by providing a visible status overview of the Claude Code session..