* feat: display last 3 path segments first in session line Shows the last 3 segments of the working directory path at the beginning of the session line for quick project identification. Before: [Opus 4.5] ████░░░░░░ 19% | my-project git:(main) | ... After: dev/apps/my-project git:(main) | [Opus 4.5] ████░░░░░░ 19% | ... This helps distinguish between projects with similar names in different locations and puts the most relevant info first. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * feat: configurable path levels (1-3) and git status toggle - Add config system at ~/.claude/plugins/claude-hud/config.json - Default path display to 1 level (was hardcoded at 3) - Add pathLevels option: 1, 2, or 3 directory segments - Add gitStatus.enabled toggle to show/hide git branch - Add interactive CLI: npx claude-hud-configure - Add comprehensive tests for config and path levels - Update README with configuration documentation 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: handle cross-platform path separators - Split paths by both / and \ for Windows compatibility - Always output forward slashes for consistent display - Add tests for Windows paths, UNC paths, and mixed separators 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * feat: show existing config when reconfiguring - Display current values when config file exists - Prompt user that Enter keeps current values 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * feat: interactive CLI with arrow-key selection - Add @inquirer/prompts for better UX - Arrow keys to select path levels - Visual feedback with checkmarks - Cleaner, more compact output 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * feat: add dirty indicator and ahead/behind git status - Add gitStatus.showDirty option (default: true) - Add gitStatus.showAheadBehind option (default: false) - Update getGitStatus to return isDirty, ahead, behind - Update CLI to configure new options with preview - Add tests for dirty and ahead/behind display - Update README with new options 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * feat: add configurable display options for all HUD elements - Add display configuration object with 8 boolean options: - showModel: Toggle model name display [Opus] - showContextBar: Toggle visual context bar ████░░░░░░ - showConfigCounts: Toggle CLAUDE.md, rules, MCPs, hooks counts - showDuration: Toggle session duration display - showTokenBreakdown: Toggle token details at high context (85%+) - showTools: Toggle tools activity line - showAgents: Toggle agents activity line - showTodos: Toggle todos progress line - All options default to true for backward compatibility - Enhanced CLI preview with colors matching actual HUD output - Added 5 new tests for display configuration (87 total) - Updated README with complete configuration reference 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * feat: add configurable layout options (default, condensed, separators) - Add layout config option with three styles: - default: All info on first line (original behavior) - condensed: Model/context top, project bottom - separators: Condensed with visual separator lines - Create project-line.ts for rendering project path in split layouts - Add renderSessionLineMinimal for condensed/separators layouts - Interactive CLI preview shows selected layout style - All 87 tests pass 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * feat: add interactive HUD preview and folder icon - Add live preview that updates as config options are selected - Show initial preview on startup based on existing/default config - Add folder icon (📁) in front of project path - Extract preview generation to separate module for reuse 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * docs: update README with folder icon and live preview - Add folder icon (📁) to all path examples - Document live preview feature in interactive CLI section 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * feat: add menu-based navigation to configure CLI - Replace linear flow with main menu loop - Show current values in menu (layout, path levels, git status, etc.) - Users can edit any section and return to menu - Preview updates after each section change - Save & Exit or Exit without saving options 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: update tests for folder icon and config structure - Update integration test expected output with folder icon - Make config test environment-independent (validates structure, not specific values) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * test: add comprehensive config loading tests Add 23 new tests for config system validation: - DEFAULT_CONFIG structure (layout, gitStatus, 8 display options) - Layout validation (default, condensed, separators) - PathLevels validation (1, 2, or 3) - Git status configuration defaults - Display configuration (booleans, defaults to true, count) - loadConfig behavior (complete fields, valid values) - getConfigPath structure tests 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * feat: add usage API, config enhancements, and bug fixes This PR combines and enhances the config system from PR #32 with new features and bug fixes addressing the owner's review feedback. ## New Features - Usage API integration showing 5h/7d limits for Pro/Max/Team users - Interactive `/claude-hud:configure` skill for in-Claude-Code configuration - Hybrid showUsage toggle (env var + config for privacy control) ## Bug Fixes (addressing #32 review feedback) - Fix git status spacing: `main*↑2↓1` → `main* ↑2 ↓1` - Fix root path rendering: show `/` instead of empty folder icon - Fix Windows path normalization in truncatePath - Fix duplicate dependencies key in package.json - Fix multiSelect for mutually exclusive options in configure skill ## Credits - Config system, layouts, path levels, git toggle, CLI by @Tsopic (PR #32) - Usage API, configure skill, bug fixes by @melon-hub 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> Co-Authored-By: Tsopic <Tsopic@users.noreply.github.com> * fix: move configure command to correct location - Move configure.md from .claude-plugin/skills/ to commands/ - Remove skills array from plugin.json (commands are auto-discovered) Commands must be in the commands/ directory at plugin root, not inside .claude-plugin/. This matches the existing setup.md pattern. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: layout order, remove condensed, redesign configure flow Render fixes (per PR feedback): - Fix element order: model first, project second - Remove condensed layout (only default/separators remain) - Separators: single line below header only when activity exists - Delete project-line.ts (no longer needed) - Remove renderSessionLineMinimal() function Configure skill redesign: - Context-aware tab order (returning users start on Turn Off) - Explicit Turn Off/Turn On questions (no toggle ambiguity) - Git Style question for dirty/ahead-behind options - Combined Layout/Reset tab for returning users - Duration now toggleable - Guards against empty submissions 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * docs: rename 'Returning User' to 'Update Config' in configure flow 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * test: fix tests for new element order and removed function - Update render-basic.txt expected output (model first, project second) - Remove renderSessionLineMinimal import and test (function was deleted) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * docs: update documentation for usage API, config flow, and troubleshooting - Remove stale CLAUDE_HUD_SHOW_USAGE env var references (now config-based) - Add usage API data sources to CLAUDE.md - Add new source files to file structure (config.ts, git.ts, usage-api.ts) - Update README with usage limits section and requirements - Add troubleshooting sections for config, git, and usage issues - Standardize output examples across all documentation files - Remove condensed layout references (only default/separators now) - Update configure skill reference (npx CLI → /claude-hud:configure) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: remove dist/ from PR and update outdated comment - Reset dist/ to main branch (dist will be built by CI after merge) - Update comment: "requires env var opt-in AND config" → "shown when enabled in config" 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * chore: remove internal design doc from release 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * chore: remove CLI and runtime dependency - Remove src/bin/configure.ts and src/bin/preview.ts - Remove @inquirer/prompts dependency (plugins don't run npm install) - Remove bin field from package.json - Users configure via /claude-hud:configure skill instead 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * chore: bump version to 0.0.4 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: use file-based cache for usage API HUD runs as a new process every ~300ms, so in-memory cache was useless. Now caches to ~/.claude/plugins/claude-hud/.usage-cache.json. This reduces API calls from ~10,800/hour to max 60/hour. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: use consistent homeDir/now in getUsage Avoids potential divergence if deps functions are non-deterministic. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * test: add real tests for usage API file cache - Test credential parsing with mock HOME directory - Test cache TTL behavior (success and failure) - Test apiUnavailable flag handling - Replace placeholder assert.ok(true) with actual assertions 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> --------- Co-authored-by: Martin Kask <martin@industrial.ninja> Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com> Co-authored-by: melon-hub <melon-hub@users.noreply.github.com> Co-authored-by: Tsopic <Tsopic@users.noreply.github.com> Co-authored-by: Jarrod Watts <jarrod@cubelabs.xyz>
13 KiB
Claude HUD
Real-time statusline showing context usage, active tools, running agents, and todo progress.
For Humans
Step 1: Add the marketplace
/plugin marketplace add jarrodwatts/claude-hud
Step 2: Install the plugin
/plugin install claude-hud
Step 3: Configure the statusline
/claude-hud:setup
Done. The HUD appears immediately — no restart needed.
For LLM Agents
If you're an LLM agent helping a user install or work with Claude HUD, follow these steps.
<agent_workflow>
Step 1: Check Prerequisites
Verify Claude Code version is 1.0.80 or later:
claude --version
If not installed or outdated, direct user to https://claude.ai/code
Step 2: Add the Marketplace
Run this command in Claude Code:
/plugin marketplace add jarrodwatts/claude-hud
Step 3: Install the Plugin
Run this command in Claude Code:
/plugin install claude-hud
Step 4: Configure the Statusline
Run this command in Claude Code:
/claude-hud:setup
This adds the statusLine configuration to the user's settings.json.
Step 5: Inform User
Tell the user:
- Installation complete
- The statusline appears immediately — no restart needed
- It shows: context usage, active tools, running agents, and todo progress
Step 6: Ask About Starring (Optional)
Ask the user: "Would you like to star the repository to support the project?"
Only if they explicitly agree, run:
gh repo star jarrodwatts/claude-hud
Never run this automatically without user consent.
</agent_workflow>
Reference
Technical documentation for agents who need to understand, modify, or debug Claude HUD.
Claude HUD Real-time statusline showing context usage, active tools, running agents, and todo progress. Always visible below your input, zero config required. github.com/jarrodwatts/claude-hud MIT Node.js 18+ or Bun v1.0.80 or later TypeScript 5, ES2022 target, NodeNext modules Claude HUD is a statusline plugin invoked by Claude Code every ~300ms. It reads data from two sources, renders up to 4 lines, and outputs to stdout.<data_flow> Claude Code invokes the plugin → Plugin reads JSON from stdin (model, context, tokens) → Plugin parses transcript JSONL file (tools, agents, todos) → Plugin reads config files (MCPs, hooks, rules) → Plugin renders lines to stdout → Claude Code displays the statusline </data_flow>
<data_sources> <stdin_json description="Native accurate data from Claude Code"> Current model name (Opus, Sonnet, Haiku) Current token count Maximum context size Path to session transcript JSONL file Current working directory </stdin_json>
<transcript_jsonl description="Parsed from transcript file">
<item>tool_use blocks → tool name, target file, start time</item>
<item>tool_result blocks → completion status, duration</item>
<item>Running tools = tool_use without matching tool_result</item>
<item>TodoWrite calls → current todo list</item>
<item>Task calls → agent type, model, description</item>
</transcript_jsonl>
<config_files description="Read from Claude configuration">
<item>~/.claude/settings.json → mcpServers count, hooks count</item>
<item>CLAUDE.md files in cwd and ancestors → rules count</item>
<item>.mcp.json files → additional MCP count</item>
</config_files>
</data_sources>
<file_structure> Reads stdin, parses transcript, counts configs, calls render. Exports main() for testing with dependency injection. Reads and validates Claude Code's JSON input. Returns StdinData with model, context, transcript_path. Parses the session transcript file line by line. Extracts tools, agents, todos, and session start time. Matches tool_use to tool_result by ID to calculate status. Counts CLAUDE.md files, rules, MCP servers, and hooks. Searches cwd, ~/.claude/, and project .claude/ directories. Reads config.json from ~/.claude/plugins/claude-hud/. Validates and merges user settings with defaults. Exports HudConfig interface and loadConfig function. Gets branch name, dirty state, and ahead/behind counts. Uses execFile with array args for safe command execution. Reads OAuth credentials from ~/.claude/.credentials.json. Calls api.anthropic.com/api/oauth/usage endpoint (opt-in). Caches results (60s success, 15s failure). StdinData, ToolEntry, AgentEntry, TodoItem, TranscriptData, RenderContext.
Calls each line renderer and outputs to stdout. Conditionally shows lines based on data presence. Renders: [Model | Plan] █████░░░░░ 45% | project git:(branch) | 2 CLAUDE.md | 5h: 25% | ⏱️ 5m Context bar colors: green (<70%), yellow (70-85%), red (>85%). Renders: ◐ Edit: auth.ts | ✓ Read ×3 | ✓ Grep ×2 Shows running tools with spinner, completed tools aggregated. Renders: ◐ explore [haiku]: Finding auth code (2m 15s) Shows agent type, model, description, elapsed time. Renders: ▸ Fix authentication bug (2/5) Shows current in_progress task and completion count. Functions: green(), yellow(), red(), dim(), bold(), reset(). Used for colorizing output based on status/thresholds.<output_format> [Model | Plan] █████░░░░░ 45% | project git:(branch) | 2 CLAUDE.md | 5h: 25% | ⏱️ 5m ◐ Edit: auth.ts | ✓ Read ×3 | ✓ Grep ×2 ◐ explore [haiku]: Finding auth code (2m 15s) ▸ Fix authentication bug (2/5) </output_format>
<context_thresholds> </context_thresholds>
<plugin_configuration> .claude-plugin/plugin.json <manifest_content> { "name": "claude-hud", "description": "Real-time statusline HUD for Claude Code", "version": "0.0.1", "author": { "name": "Jarrod Watts", "url": "https://github.com/jarrodwatts" } } </manifest_content> The plugin.json contains metadata only. statusLine is NOT a valid plugin.json field.
<statusline_config> The /claude-hud:setup command adds statusLine to ~/.claude/settings.json with an auto-updating command that finds the latest installed version. Updates are automatic - no need to re-run setup after updating the plugin. </statusline_config> </plugin_configuration>
git clone https://github.com/jarrodwatts/claude-hud cd claude-hud npm ci npm run build<test_commands> npm test # Run all tests npm run build # Compile TypeScript to dist/ </test_commands>
<manual_testing> # Test with sample stdin data: echo '{"model":{"display_name":"Opus"},"context_window":{"current_usage":{"input_tokens":45000},"context_window_size":200000}}' | node dist/index.js
# Test with transcript path:
echo '{"model":{"display_name":"Sonnet"},"transcript_path":"/path/to/transcript.jsonl","context_window":{"current_usage":{"input_tokens":90000},"context_window_size":200000}}' | node dist/index.js
</manual_testing>
Add new data extraction in transcript.ts or stdin.ts Add new interface fields in types.ts Create new render file in src/render/ or modify existing Update src/render/index.ts to include new line Run npm run build and test<modifying_thresholds> Edit src/render/session-line.ts to change context threshold values. Look for the percentage checks that determine color coding. </modifying_thresholds>
<adding_new_line> 1. Create src/render/new-line.ts with a render function 2. Import and call it from src/render/index.ts 3. Add any needed types to src/types.ts 4. Add data extraction logic to transcript.ts if needed </adding_new_line>
Plugin not installed or statusLine not configured Run: /plugin marketplace add jarrodwatts/claude-hud Run: /plugin install claude-hud Run: /claude-hud:setup Ensure Claude Code is v1.0.80 or later No stdin data received (normal on first invocation) This is expected briefly on startup, should resolve automatically Data comes directly from Claude Code - it's accurate The percentage is (input_tokens / context_window_size) * 100 No tools used yet or transcript not being parsed Lines only appear when there's data to show Ensure Node.js 18+ installed Run npm ci to reinstall dependencies Delete dist/ and node_modules/, then npm ci && npm run build<key_interfaces> transcript_path?: string cwd?: string model?: { id?: string, display_name?: string } context_window?: { context_window_size?: number, current_usage?: { input_tokens?: number } }
id: string name: string target?: string status: 'running' | 'completed' | 'error' startTime: Date endTime?: Date id: string type: string model?: string description?: string status: 'running' | 'completed' startTime: Date endTime?: Date content: string status: 'pending' | 'in_progress' | 'completed' stdin: StdinData transcript: TranscriptData claudeMdCount: number rulesCount: number mcpCount: number hooksCount: number sessionDuration: string<task_instructions> Follow the agent_workflow steps above.
If the user wants to modify Claude HUD: 1. Clone the repo or navigate to the plugin directory 2. Make changes following the file_structure section 3. Run npm run build to compile 4. Restart Claude Code to see changes If the user reports issues: 1. Check troubleshooting section first 2. Verify Claude Code version (needs v1.0.80+) 3. Check if plugin is listed: claude /plugin list 4. Test manually with echo command from development section If the user asks how something works: 1. Reference the architecture and data_flow sections 2. Point to specific files in file_structure 3. Explain the data sources and how they're combined