jarrodwatts/claude-hudPublic

A Claude Code plugin that shows what's happening - context usage, active tools, running agents, and todo progress

AI summary: A visual heads-up display plugin for Claude Code that tracks context, agents, and active tools.

Stars
28.3K
+30 today
Forks
1.3K
Watchers
41
Open issues
11
Open PRs
22
Contributors
~117
Commits
771
Branches
60

JavaScriptMITCreated Jan 2, 2026Last push 3d agoLatest release v0.8.0+128 stars this week+471 this month

Quick answers

What is claude-hud?
A visual heads-up display plugin for Claude Code that tracks context, agents, and active tools.
What does claude-hud do?
Claude HUD is a highly functional plugin designed to enhance the Claude Code CLI by overlaying a persistent, visual status line interface. It provides developers with immediate, real-time insights into exactly what the agent is doing under the hood, including current context usage, active tool executions, and running subprocesses. By surfacing this critical telemetry directly below the user's input prompt, it eliminates the mystery of long-running operations. The plugin heavily focuses on an unobtrusive, minimalist user experience that dramatically improves operational efficiency and debuggability when working with autonomous AI loops.
Who is claude-hud for?
Claude HUD is tailored for software developers and power users who heavily utilize Claude Code for autonomous coding tasks. It requires an existing installation of Claude Code and basic familiarity with CLI plugin architectures.
How do I get started with claude-hud?
/plugin marketplace add jarrodwatts/claude-hud
How popular is claude-hud on GitHub?
jarrodwatts/claude-hud has 28,263 stars and 1,312 forks on GitHub, and gained 128 stars in the last 7 days.
What license does claude-hud use?
jarrodwatts/claude-hud is released under the MIT license.

Star history

since Jul 29, 2026
010K20KJul 2026Aug 2026Sep 2026Oct 2026
28.3K stars as of Oct 2, 2026. Measured daily since Jul 29, 2026; GitHub no longer exposes earlier star timestamps.

Contribution activity

commits per day, last 52 weeks
SepOctNovDecJanFebMarAprMayJunJulAugSepMonWedFri2025-09-27: 0 commits2025-09-28: 0 commits2025-09-29: 0 commits2025-09-30: 0 commits2025-10-01: 0 commits2025-10-02: 0 commits2025-10-03: 0 commits2025-10-04: 0 commits2025-10-05: 0 commits2025-10-06: 0 commits2025-10-07: 0 commits2025-10-08: 0 commits2025-10-09: 0 commits2025-10-10: 0 commits2025-10-11: 0 commits2025-10-12: 0 commits2025-10-13: 0 commits2025-10-14: 0 commits2025-10-15: 0 commits2025-10-16: 0 commits2025-10-17: 0 commits2025-10-18: 0 commits2025-10-19: 0 commits2025-10-20: 0 commits2025-10-21: 0 commits2025-10-22: 0 commits2025-10-23: 0 commits2025-10-24: 0 commits2025-10-25: 0 commits2025-10-26: 0 commits2025-10-27: 0 commits2025-10-28: 0 commits2025-10-29: 0 commits2025-10-30: 0 commits2025-10-31: 0 commits2025-11-01: 0 commits2025-11-02: 0 commits2025-11-03: 0 commits2025-11-04: 0 commits2025-11-05: 0 commits2025-11-06: 0 commits2025-11-07: 0 commits2025-11-09: 0 commits2025-11-10: 0 commits2025-11-11: 0 commits2025-11-12: 0 commits2025-11-13: 0 commits2025-11-14: 0 commits2025-11-15: 0 commits2025-11-16: 0 commits2025-11-17: 0 commits2025-11-18: 0 commits2025-11-19: 0 commits2025-11-20: 0 commits2025-11-21: 0 commits2025-11-22: 0 commits2025-11-23: 0 commits2025-11-24: 0 commits2025-11-25: 0 commits2025-11-26: 0 commits2025-11-27: 0 commits2025-11-28: 0 commits2025-11-29: 0 commits2025-11-30: 0 commits2025-12-01: 0 commits2025-12-02: 0 commits2025-12-03: 0 commits2025-12-04: 0 commits2025-12-05: 0 commits2025-12-06: 0 commits2025-12-07: 0 commits2025-12-08: 0 commits2025-12-09: 0 commits2025-12-10: 0 commits2025-12-11: 0 commits2025-12-12: 0 commits2025-12-13: 0 commits2025-12-14: 0 commits2025-12-15: 0 commits2025-12-16: 0 commits2025-12-17: 0 commits2025-12-18: 0 commits2025-12-19: 0 commits2025-12-20: 0 commits2025-12-21: 0 commits2025-12-22: 0 commits2025-12-23: 0 commits2025-12-24: 0 commits2025-12-25: 0 commits2025-12-26: 0 commits2025-12-27: 0 commits2025-12-28: 0 commits2025-12-29: 0 commits2025-12-30: 0 commits2025-12-31: 0 commits2026-01-01: 0 commits2026-01-02: 29 commits2026-01-03: 107 commits2026-01-04: 9 commits2026-01-05: 8 commits2026-01-06: 2 commits2026-01-07: 7 commits2026-01-08: 3 commits2026-01-09: 2 commits2026-01-10: 0 commits2026-01-11: 2 commits2026-01-12: 4 commits2026-01-13: 3 commits2026-01-14: 9 commits2026-01-15: 0 commits2026-01-16: 0 commits2026-01-17: 0 commits2026-01-18: 0 commits2026-01-19: 10 commits2026-01-20: 0 commits2026-01-21: 0 commits2026-01-22: 0 commits2026-01-23: 0 commits2026-01-24: 0 commits2026-01-25: 0 commits2026-01-26: 0 commits2026-01-27: 0 commits2026-01-28: 0 commits2026-01-29: 0 commits2026-01-30: 0 commits2026-01-31: 0 commits2026-02-01: 0 commits2026-02-02: 0 commits2026-02-03: 9 commits2026-02-04: 0 commits2026-02-05: 0 commits2026-02-06: 1 commit2026-02-07: 0 commits2026-02-08: 1 commit2026-02-09: 0 commits2026-02-10: 0 commits2026-02-11: 0 commits2026-02-12: 0 commits2026-02-13: 0 commits2026-02-14: 0 commits2026-02-15: 0 commits2026-02-16: 2 commits2026-02-17: 0 commits2026-02-18: 0 commits2026-02-19: 0 commits2026-02-20: 0 commits2026-02-21: 0 commits2026-02-22: 0 commits2026-02-23: 0 commits2026-02-24: 0 commits2026-02-25: 0 commits2026-02-26: 0 commits2026-02-27: 0 commits2026-02-28: 0 commits2026-03-01: 0 commits2026-03-02: 0 commits2026-03-03: 20 commits2026-03-04: 0 commits2026-03-05: 10 commits2026-03-06: 5 commits2026-03-07: 0 commits2026-03-08: 1 commit2026-03-09: 7 commits2026-03-10: 0 commits2026-03-11: 0 commits2026-03-12: 0 commits2026-03-13: 2 commits2026-03-14: 15 commits2026-03-15: 1 commit2026-03-16: 0 commits2026-03-17: 0 commits2026-03-18: 0 commits2026-03-19: 2 commits2026-03-20: 14 commits2026-03-21: 0 commits2026-03-22: 0 commits2026-03-23: 27 commits2026-03-24: 2 commits2026-03-25: 2 commits2026-03-26: 1 commit2026-03-27: 1 commit2026-03-28: 1 commit2026-03-29: 1 commit2026-03-30: 1 commit2026-03-31: 0 commits2026-04-01: 2 commits2026-04-02: 0 commits2026-04-03: 5 commits2026-04-04: 44 commits2026-04-05: 4 commits2026-04-06: 1 commit2026-04-07: 1 commit2026-04-08: 0 commits2026-04-09: 0 commits2026-04-10: 1 commit2026-04-11: 3 commits2026-04-12: 8 commits2026-04-13: 1 commit2026-04-14: 0 commits2026-04-15: 4 commits2026-04-16: 7 commits2026-04-17: 0 commits2026-04-18: 2 commits2026-04-19: 0 commits2026-04-20: 36 commits2026-04-21: 2 commits2026-04-22: 10 commits2026-04-23: 4 commits2026-04-24: 6 commits2026-04-25: 2 commits2026-04-26: 2 commits2026-04-27: 1 commit2026-04-28: 2 commits2026-04-29: 6 commits2026-04-30: 9 commits2026-05-01: 1 commit2026-05-02: 0 commits2026-05-03: 0 commits2026-05-04: 0 commits2026-05-05: 0 commits2026-05-06: 2 commits2026-05-07: 5 commits2026-05-08: 2 commits2026-05-09: 3 commits2026-05-10: 0 commits2026-05-11: 4 commits2026-05-12: 6 commits2026-05-13: 6 commits2026-05-14: 2 commits2026-05-15: 0 commits2026-05-16: 0 commits2026-05-17: 0 commits2026-05-18: 0 commits2026-05-19: 0 commits2026-05-20: 0 commits2026-05-21: 0 commits2026-05-22: 7 commits2026-05-23: 1 commit2026-05-24: 0 commits2026-05-25: 1 commit2026-05-26: 3 commits2026-05-27: 0 commits2026-05-28: 4 commits2026-05-29: 4 commits2026-05-30: 0 commits2026-05-31: 0 commits2026-06-01: 0 commits2026-06-02: 3 commits2026-06-03: 2 commits2026-06-04: 3 commits2026-06-05: 0 commits2026-06-06: 1 commit2026-06-07: 1 commit2026-06-08: 0 commits2026-06-09: 7 commits2026-06-10: 1 commit2026-06-11: 4 commits2026-06-12: 3 commits2026-06-13: 1 commit2026-06-14: 0 commits2026-06-15: 4 commits2026-06-16: 0 commits2026-06-17: 0 commits2026-06-18: 5 commits2026-06-19: 12 commits2026-06-20: 0 commits2026-06-21: 0 commits2026-06-22: 0 commits2026-06-23: 0 commits2026-06-24: 0 commits2026-06-25: 0 commits2026-06-26: 0 commits2026-06-27: 0 commits2026-06-28: 0 commits2026-06-29: 0 commits2026-06-30: 0 commits2026-07-01: 0 commits2026-07-02: 0 commits2026-07-03: 0 commits2026-07-04: 0 commits2026-07-05: 0 commits2026-07-06: 0 commits2026-07-07: 0 commits2026-07-08: 0 commits2026-07-09: 0 commits2026-07-10: 0 commits2026-07-11: 0 commits2026-07-12: 3 commits2026-07-13: 17 commits2026-07-14: 2 commits2026-07-15: 5 commits2026-07-16: 4 commits2026-07-17: 2 commits2026-07-18: 0 commits2026-07-19: 0 commits2026-07-20: 10 commits2026-07-21: 2 commits2026-07-22: 0 commits2026-07-23: 0 commits2026-07-24: 1 commit2026-07-25: 0 commits2026-07-26: 1 commit2026-07-27: 1 commit2026-07-28: 0 commits2026-07-29: 0 commits2026-07-30: 2 commits2026-07-31: 1 commit2026-08-01: 1 commit2026-08-02: 2 commits2026-08-03: 0 commits2026-08-04: 9 commits2026-08-05: 0 commits2026-08-06: 0 commits2026-08-07: 9 commits2026-08-08: 0 commits2026-08-09: 0 commits2026-08-10: 0 commits2026-08-11: 3 commits2026-08-12: 0 commits2026-08-13: 0 commits2026-08-14: 0 commits2026-08-15: 0 commits2026-08-16: 0 commits2026-08-17: 4 commits2026-08-18: 5 commits2026-08-19: 0 commits2026-08-20: 0 commits2026-08-21: 0 commits2026-08-22: 0 commits2026-08-23: 0 commits2026-08-24: 0 commits2026-08-25: 0 commits2026-08-26: 0 commits2026-08-27: 0 commits2026-08-28: 10 commits2026-08-29: 0 commits2026-08-30: 0 commits2026-08-31: 0 commits2026-09-01: 0 commits2026-09-02: 0 commits2026-09-03: 0 commits2026-09-04: 0 commits2026-09-05: 0 commits2026-09-06: 0 commits2026-09-07: 0 commits2026-09-08: 0 commits2026-09-09: 0 commits2026-09-10: 0 commits2026-09-11: 0 commits2026-09-12: 0 commits2026-09-13: 0 commits2026-09-14: 0 commits2026-09-15: 0 commits2026-09-16: 0 commits2026-09-17: 0 commits2026-09-18: 0 commits2026-09-19: 0 commits2026-09-20: 0 commits2026-09-21: 0 commits2026-09-22: 0 commits2026-09-23: 0 commits2026-09-24: 0 commits2026-09-25: 0 commits2026-09-26: 0 commits
676 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Widely adopted

    28,263 stars

  • Very active

    676 commits in 52 weeks

  • Community-driven

    ~117 contributors

  • Well documented

    High community health score

  • Permissive license

    MIT

  • Continuous integration

    Automated checks passing

  • Repeat trending

    5 trending appearances

What claude-hud does

Claude HUD is a highly functional plugin designed to enhance the Claude Code CLI by overlaying a persistent, visual status line interface. It provides developers with immediate, real-time insights into exactly what the agent is doing under the hood, including current context usage, active tool executions, and running subprocesses. By surfacing this critical telemetry directly below the user's input prompt, it eliminates the mystery of long-running operations. The plugin heavily focuses on an unobtrusive, minimalist user experience that dramatically improves operational efficiency and debuggability when working with autonomous AI loops.

Claude HUD is tailored for software developers and power users who heavily utilize Claude Code for autonomous coding tasks. It requires an existing installation of Claude Code and basic familiarity with CLI plugin architectures.

  • Real-time context tracking: Displays exact token usage and context window consumption directly on the screen to prevent unexpected limits.
  • Active tool monitoring: Visually surfaces which specific tools, bash commands, or file reads the agent is currently executing in the background.
  • Persistent status line: Overlays an unobtrusive, always-visible dashboard immediately below the CLI prompt without disrupting normal terminal flow.
  • Todo progress visualization: Tracks and updates the status of multi-step implementation plans so developers know exactly what remains.
  • Zero-restart installation: Installs quickly via the plugin marketplace and applies immediately via a simple reload command.

Where teams use it

Debugging Agent Loops

Developers use the HUD to instantly identify when an agent is stuck in an infinite loop or repeatedly calling a failing tool without throwing an error.

Managing Context Limits

Engineers monitor the real-time context usage gauge to proactively clear history before the agent exhausts its available token window on large codebases.

Tracking Complex Refactors

Project leads use the todo progress visualization to ensure the agent is correctly following a multi-file refactoring plan step-by-step.

Optimizing API Costs

Users keep an eye on active tool executions to quickly intervene and cancel operations if the agent begins taking an overly expensive or inefficient path.

Getting started: /plugin marketplace add jarrodwatts/claude-hud

README

main branch

Claude HUD

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

License Stars

Claude HUD in action

🌐 English | 中文文档

Install

Inside a Claude Code instance, run the following commands:

Step 1: Add the marketplace

/plugin marketplace add jarrodwatts/claude-hud

Step 2: Install the plugin

⚠️ Linux users: Click here if install fails with an EXDEV error

On older Claude Code versions, /tmp being a separate filesystem (tmpfs) caused plugin installation to fail with:

EXDEV: cross-device link not permitted

This Claude Code bug has since been fixed — if you hit it, update Claude Code first. If you can't update, set TMPDIR before installing:

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

Then run the install command below in that session.

/plugin install claude-hud

After that, reload plugins (no restart needed):

/reload-plugins
Prefer the terminal?

Steps 1–2 can also be done outside a session with the Claude Code CLI:

claude plugin marketplace add jarrodwatts/claude-hud
claude plugin install claude-hud@claude-hud

Then run /reload-plugins inside your session (or start a new one).

Step 3: Configure the statusline

/claude-hud:setup
⚠️ Windows users: Click here if setup says no JavaScript runtime was found

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:

winget install OpenJS.NodeJS.LTS

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

Done! Claude Code reloads settings automatically — the HUD appears after your next message, no restart needed. If it doesn't show up, restart Claude Code (older versions require a restart to pick up statusLine changes).


What is Claude HUD?

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

What You See Why It Matters
Project path Know which project you're in (configurable 1-3 directory levels)
Context health Know exactly how full your context window is before it's too late
Tool activity Watch Claude read, edit, and search files as it happens
Agent tracking See which subagents are running and what they're doing
Todo progress Track task completion in real-time

What You See

Default (2 lines)

[Opus] │ my-project git:(main*)
Context █████░░░░░ 45% │ Usage ██░░░░░░░░ 25% (1h 30m / 5h)
  • Line 1 — Model, provider label when positively identified (for example Bedrock, Vertex, MiniMax), project path, git branch
  • Line 2 — Context bar (green → yellow → red) and usage rate limits

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

◐ 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.

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
  • Re-renders after each interaction (new assistant messages, /compact, permission changes, vim-mode toggles), debounced at 300ms

Configuration

Customize your HUD anytime:

/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

Preset What's Shown
Full Everything enabled — tools, agents, todos, git, usage, duration
Essential Activity lines + git status, minimal info clutter
Minimal Core 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, display.hourCycle, and display.promptCacheTtlSeconds. Running /claude-hud:configure preserves those manual settings while still letting you change language, layout, and the common guided toggles.

If you run several Claude config directories via CLAUDE_CONFIG_DIR and symlink plugins/ to a shared location, plugins/claude-hud/config.json is the same physical file for all of them. Put per-directory settings in $CLAUDE_CONFIG_DIR/claude-hud.json instead - it uses the same shape, only needs the keys it changes, and is layered on top of the shared config at load time:

For example, put this in ~/.config/claude/work/claude-hud.json:

{ "display": { "customLine": "Work Team" } }

Simplified and Traditional Chinese HUD labels are available as explicit opt-ins. English stays the default unless you choose a Chinese locale in /claude-hud:configure or set language in config. The zh alias maps to Simplified Chinese, and zh-TW maps to Traditional Chinese. Guided config writes the canonical zh-Hans or zh-Hant value.

Options

Option Type Default Description
language en | zh | zh-Hans | zh-Hant | zh-TW en HUD label language. Use zh or zh-Hans for Simplified Chinese and zh-Hant or zh-TW for Traditional Chinese.
lineLayout string expanded Layout: expanded (multi-line) or compact (single line)
pathLevels 1-3 | full 1 Directory levels to show in project path, or full to show the entire absolute path
maxWidth number | null null Optional fallback width used only when terminal width detection fails completely
forceMaxWidth boolean false Always use maxWidth when it is set, even if terminal width detection returns a smaller value
elementOrder string[] ["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.
projectLineOrder string[] [] Optional leading order of segments within the first line, in both layouts. Visibility stays with the display.show* flags, and omitted segments retain their existing renderer order. model covers provider + model + effort (plus the context bar in compact mode); project covers path + added dirs + git as one segment. Example: ["project","model"] puts the project/git block before the model badge.
display.mergeGroups string[][] [["context","usage"]] Expanded-mode groups that should share a line when adjacent. Set [] to disable merged lines.
display.rightAlign string[] [] Starts a right-aligned suffix at the first listed element in a merged row, preserving elementOrder and padding the gap with spaces. Requires the anchor to be in a display.mergeGroups group that actually renders on one line. Ignored when the terminal width is unknown, the anchor is first, or there is no room for padding. Example: ["context"] with a ["project","context","usage"] group keeps project/git left and pins context + usage right.
gitStatus.enabled boolean true Show git branch in HUD
gitStatus.showDirty boolean true Show * for uncommitted changes
gitStatus.showAheadBehind boolean false Show ↑N ↓N for ahead/behind remote
gitStatus.pushWarningThreshold number 0 Color the ahead count with the warning color at or above this unpushed-commit count (0 disables it)
gitStatus.pushCriticalThreshold number 0 Color the ahead count with the critical color at or above this unpushed-commit count (0 disables it)
gitStatus.showFileStats boolean false Show file change counts !M +A ✘D ?U
gitStatus.branchOverflow truncate | wrap truncate Keep current truncation behavior or let the git block wrap onto its own line boundary when possible
jjStatus.enabled boolean false Opt in to jj (Jujutsu) status. When enabled and a real .jj directory is found, jj is used instead of git for that repo — never both
jjStatus.showDirty boolean true Show * when the working-copy commit differs from its parent
jjStatus.showConflicts boolean true Show a !conflict marker when the working-copy commit has an unresolved conflict
display.showModel boolean true Show model name [Opus]
display.modelSource stdin | auto | transcript stdin Controls which source the model name comes from. stdin preserves the default behavior and always uses what Claude Code reports. auto opts into proxy redirect detection by using transcript models only for non-Claude models. transcript always uses the model from the API response. Transcript model values are terminal-sanitized and capped at 80 characters
display.showProvider boolean false Show the provider label before the model name, e.g. [Bedrock | Opus 4.6]. Useful when a custom proxy serves identically-named models from different providers. When off, an auto-detected provider still trails the model as before
display.providerName string "" Explicit provider label used with display.showProvider, e.g. for a custom proxy that can't be auto-detected. Falls back to the auto-detected provider (Bedrock/Vertex/MiniMax/Enterprise) when empty; capped at 40 chars
display.showAddedDirs boolean true Show 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.addedDirsLayout inline | line inline inline 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.showContextBar boolean true Show visual context bar ████░░░░░░
display.contextValue percent | tokens | remaining | both percent Context display format (45%, 45k/200k, 55% remaining, or 45% (45k/200k))
display.autoCompactWindow number | null null When 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.showConfigCounts boolean false Show CLAUDE.md, rules, MCPs, hooks counts
display.showCost boolean false Show session cost using Claude Code's native cost.total_cost_usd when available, with a local estimate fallback for direct Anthropic sessions
display.showRoutedCost boolean false Also show cost for routed providers (Bedrock/Vertex), which showCost hides by default. Requires showCost too. Uses the native cost.total_cost_usd when positive (Cost), otherwise the token estimate (Est.)
display.showDailyCost boolean false Show today's cumulative spend across sessions as Today $12.34, accumulated from the native cost.total_cost_usd into a small per-day ledger in the plugin data directory. Resets at local midnight. Independent of showCost
display.showOutputStyle boolean false Show the active Claude Code outputStyle from settings files as style: <name>
display.showDuration boolean false Show session duration ⏱️ 5m
display.showSpeed boolean false Show output token speed out: 42.1 tok/s
display.showUsage boolean true Show Claude subscriber usage limits when available
display.usageValue percent | remaining percent Usage display format (25% used, or 75% remaining)
display.usageBarEnabled boolean true Display usage as visual bar instead of text
display.usageCompact boolean false Display usage in a shorter text form such as 5h: 25% (1h 30m); takes precedence over display.usageBarEnabled
display.showResetLabel boolean true Show the resets in prefix before usage countdowns
display.showModelScopedUsage boolean true Show the per-model weekly windows (model_scoped, e.g. Fable), whether they arrive on stdin or from the external usage snapshot. Set to false to render the usage line as if the payload carried none of them
display.timeFormat relative | absolute | both | elapsed | elapsedAndAbsolute relative How 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.hourCycle auto | h11 | h12 | h23 | h24 auto Hour cycle for wall-clock reset times (absolute/both/elapsedAndAbsolute modes). auto defers to the system locale; h23 forces 24-hour time (14:30) regardless of locale
display.showClockSeconds boolean false Show seconds in wall-clock reset times, e.g. at 14:30:07
display.sevenDayThreshold 0-100 80 Show 7-day usage when >= threshold (0 = always)
display.externalUsagePath string "" Optional absolute path to a local usage snapshot file. Relative paths are ignored. When stdin rate_limits are present, balance_label is appended and model_scoped windows fill in when stdin lacks them; when stdin windows are missing, valid usage windows can be used as a fallback
display.externalUsageWritePath string "" 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.externalUsageFreshnessMs number 300000 Maximum allowed age for the external usage snapshot before it is ignored
display.showTokenBreakdown boolean true Show token details at high context (85%+)
display.showTools boolean false Show tools activity line
display.showSkills boolean false Show active Skills detected from Skill tool invocations
display.showMcp boolean false Show active MCP servers detected from mcp__server__tool invocations
display.toolNameMaxLength number 0 Maximum displayed tool-name length. 0 keeps full names; MCP names may shorten to their final segment when truncating
display.toolsMaxVisible number 4 Maximum completed tools shown on the tools line. 0 means unlimited
display.showAgents boolean false Show agents activity line
display.showTodos boolean false Show todos progress line
display.showSessionName boolean false Show session slug or custom title from /rename
display.showAuth boolean false Show the auth method (subscription plan) of the current login as its own segment at the end of the first line, e.g. Claude Max 20x. Derived from the oauthAccount block in {CLAUDE_CONFIG_DIR}.json; shows API Key when there is no OAuth login but ANTHROPIC_API_KEY is set
display.showAuthUser boolean false Show the logged-in account (email local part, falling back to profile display name) next to the auth method
display.authUserLength number 8 Maximum characters of the account name to display before truncating with …. 0 shows the full name
display.showAdvisor boolean false Inline 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.advisorOverride string "" Optional manual override for the displayed advisor label. When non-empty, replaces transcript-driven detection. Also sanitised and capped at 64 chars
display.showSessionStartDate boolean false Show the transcript session start timestamp
display.showLastResponseAt boolean false Show how long ago the last assistant response was written
display.showCompactions boolean false Show 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.showEffortLevel boolean false Show the current reasoning effort in the model badge. Ultracode renders as ultracode(xhigh), detected from the session transcript so it tracks /effort changes made at runtime
display.effortFormat full | symbol | text full How the effort renders when display.showEffortLevel is on: symbol and level text (◑ high), symbol only (◑), or level text only (high). Ultracode keeps the full ◕ ultracode(xhigh) form under symbol so the marker is not lost, and levels without a known symbol fall back to the level text
display.showClaudeCodeVersion boolean false Show the installed Claude Code version, e.g. CC v2.1.81
display.showMemoryUsage boolean false Show an approximate system RAM usage line in expanded layout
display.showPromptCache boolean false Show the wall-clock time the session's prompt cache expires, read from the transcript
display.promptCacheTtlSeconds number 300 Compatibility fallback used only when the transcript has not reported a 5-minute or 1-hour cache tier
colors.context color value green Base color for the context bar and context percentage
colors.usage color value brightBlue Base color for usage bars and percentages below warning thresholds
colors.warning color value yellow Warning color for context thresholds and usage warning text
colors.usageWarning color value brightMagenta Warning color for usage bars and percentages near their threshold
colors.critical color value red Critical color for limit-reached states and critical thresholds
colors.model color value cyan Color for the model badge such as [Opus]
colors.project color value yellow Color for the project path
colors.git color value magenta Color for git wrapper text such as git:( and )
colors.gitBranch color value cyan Color for the git branch and branch status text
colors.label color value dim Color for labels and secondary metadata such as Context, Usage, counts, and progress text
colors.custom color value 208 Color for the optional custom line
colors.barFilled string █ Character used for the filled portion of progress bars
colors.barEmpty string ░ 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. Set display.showRoutedCost: true (alongside showCost) to opt into cost for those providers anyway: the native cost.total_cost_usd is shown as Cost when positive, otherwise ClaudeHUD falls back to a token-based Est. from the Anthropic pricing table.

display.showDailyCost is fully opt-in and answers a different question than showCost: what has the whole day cost across sessions, not just the current conversation. On each render ClaudeHUD folds the native cost.total_cost_usd into a small daily-cost.json ledger in the plugin data directory, keyed by session_id, and shows the day's cumulative spend as Today $12.34. The first sighting of a session records a baseline so only spend from that point counts, the counter resets at local midnight, sessions spanning midnight contribute only the current day's part, and entries unseen for more than 24 hours are dropped so the file stays bounded. It only uses the native field (no estimate fallback), so sessions that never render the statusline are not counted, counting starts when the option is enabled, and totals are per machine. Routed providers (Bedrock/Vertex) are excluded unless display.showRoutedCost is also enabled, matching showCost.

Official MiniMax Anthropic-compatible endpoints receive a MiniMax provider label. MiniMax M2.7 can use its published token and cache prices for local estimates; M3 pricing depends on each request's context tier, which cumulative session tokens cannot safely infer, so ClaudeHUD does not guess an M3 estimate.

display.showPromptCache is fully opt-in. When enabled, ClaudeHUD shows the wall-clock time the session's prompt cache expires (e.g. Cache ⏱ until 14:30), or expired once that time has passed. It follows display.hourCycle and display.showClockSeconds like every other clock time in the HUD. If the transcript has no main-session response yet, the cache element stays hidden.

It shows an expiry time rather than a countdown because the statusline only repaints while Claude Code is active. Between turns — exactly when the cache is draining — a countdown freezes at whatever it last displayed and keeps reporting it; a clock time stays true no matter how stale the render is.

ClaudeHUD detects the cache tier from the transcript when possible. The existing display.promptCacheTtlSeconds setting remains a fallback for older or proxied transcripts that do not expose tier details:

  • The TTL is detected. Every cache write records the tier it used (usage.cache_creation.ephemeral_5m_input_tokens vs ephemeral_1h_input_tokens), so a 1-hour session counts down against an hour, and a session that changes tier mid-run is followed. Detected values take precedence over the configured fallback.
  • The clock starts at the request, not at the response it produced, because that is when the cache is read or written. Anchoring on the response would hand the session however long that response took to generate.
  • Subagent responses are ignored. A subagent runs against its own cache and does not refresh the main session's.

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 path must be absolute. The snapshot must be fresh enough (display.externalUsageFreshnessMs) and include valid updated_at, plus a five_hour window, seven_day window, balance_label, or model_scoped array. balance_label is optional text for prepaid provider balances; it is trimmed, length-limited, and sanitized before display. Relative paths, invalid JSON, stale files, or invalid timestamps are ignored quietly.

The snapshot may also carry model_scoped windows using the same shape Claude Code defines for stdin (display_name, utilization on the 0-100 scale, ISO resets_at). They render exactly like stdin scoped windows (see the model-scoped usage section) and stdin always wins when it carries its own model_scoped data. This lets a local feeder surface per-model weekly quotas (e.g. Fable) that the statusline payload does not include yet:

{
  "updated_at": "2026-07-24T14:12:37Z",
  "model_scoped": [
    { "display_name": "Fable", "utilization": 89, "resets_at": "2026-07-27T11:00:00Z" }
  ]
}

One zero-credential way to produce such a snapshot is Claude Code's own get_usage control request, which returns rate_limits.model_scoped without spending tokens; a scheduled job can pipe it through jq into the snapshot file. The HUD itself never fetches anything: it only reads the file.

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%):

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.

Wall-clock reset times (absolute/both/elapsedAndAbsolute) default to your system locale for 12- vs 24-hour formatting. Set display.hourCycle to h23 to force 24-hour time regardless of locale, or to h12/h11 to force 12-hour time with AM/PM. Set display.showClockSeconds to true to include seconds in the wall-clock time, e.g. at 14:30:07.

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.

Set display.showModelScopedUsage to false to hide the per-model weekly windows (e.g. Fable). The usage line then renders exactly as it would for an account that has none: the 5h/7d windows stay, snapshot windows are hidden along with the stdin ones, and a hidden window no longer counts toward a configured usage threshold, so it can no longer keep the line on screen by itself.

Security Notes

ClaudeHUD is local-only by design. It does not make network requests, scrape credentials, or call undocumented Claude APIs. It reads the statusline JSON from stdin, the current session transcript path supplied by Claude Code, selected Claude configuration files under ~/.claude, and git metadata for the current workspace.

HUD cache files are written under ~/.claude/plugins/claude-hud with private permissions on POSIX filesystems. The cache stores derived display metadata such as context percentages, token counters, activity names, and the resolved Claude Code version.

--extra-cmd is disabled unless CLAUDE_HUD_ALLOW_EXTRA_CMD=1 (or true, yes, on) is present in the HUD process environment. Treat this option as arbitrary code execution: it runs the supplied shell command with your user privileges on statusline refreshes. Do not use commands copied from untrusted sources.

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)
  • Bedrock and Vertex AI models hide cost estimates by default (billing differs from Anthropic direct); opt in with display.showRoutedCost
  • 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:

{
  "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

{
  "language": "zh",
  "lineLayout": "expanded",
  "pathLevels": 2,
  "elementOrder": ["project", "tools", "skills", "mcp", "context", "usage", "memory", "environment", "agents", "todos", "sessionTime"],
  "projectLineOrder": ["project", "model"],
  "gitStatus": {
    "enabled": true,
    "showDirty": true,
    "showAheadBehind": true,
    "showFileStats": true
  },
  "jjStatus": {
    "enabled": true,
    "showDirty": true,
    "showConflicts": 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

Jujutsu (jj) support

Set jjStatus.enabled to true to opt in. When a real .jj directory is found in (or above) the working directory, the HUD shows jj-native status instead of git — the two are mutually exclusive per invocation, even in a colocated jj+git repo. If jj cannot be queried safely, a colocated repository falls back to its existing git status.

With a bookmark: [Opus] │ my-project jj:(mybookmark)

Anonymous change (no bookmark at @): [Opus] │ my-project jj:(wrulwzyw)

Dirty working copy: [Opus] │ my-project jj:(mybookmark*)

Unresolved conflict: [Opus] │ my-project jj:(mybookmark !conflict)

Ahead/behind counts and per-file change stats are git-only in this version — jj's equivalent requires more expensive revset queries against remote_bookmarks(), so they're left out to keep the jj status fetch to a single subprocess call.

The HUD runs jj in prompt-safe, read-only mode: it disables the pager, ignores the live working copy, and reads the current operation without reconciling it. That avoids snapshotting files or mutating repository state during statusline refreshes. As a result, the dirty marker reflects jj's most recent working-copy snapshot and can remain stale until another jj command records new changes.

Auto-Refresh

Claude Code only re-runs the statusline after an interaction (a new assistant message, /compact finishing, a permission-mode change, or a vim-mode toggle), so time-based HUD info — session duration, usage reset countdowns, the prompt-cache countdown — goes stale between messages. To keep it ticking, add refreshInterval (seconds, minimum 1) to the statusLine entry in ~/.claude/settings.json:

{
  "statusLine": {
    "type": "command",
    "command": "...",
    "refreshInterval": 5
  }
}

/claude-hud:setup offers this during installation. Each refresh re-runs the HUD command, so 5 seconds is a good default; use 1 second only if you want visibly smooth countdowns.

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:

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, 3, or full; 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

jj status missing, or seeing git:(...) in a jj repo?

  • Verify a .jj directory exists at or above the working directory
  • Set jjStatus.enabled to true in config (jj support is opt-in)
  • Verify the jj binary is installed and on PATH

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?

  • Send any message — settings reload automatically, but the statusline only renders after your next interaction
  • If it still doesn't appear, restart Claude Code (fully quit and run claude again) — older Claude Code versions require a restart to pick up statusLine changes
  • 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

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

View on GitHub

Recent activity

commits and pull requests

Releases and announcements

18 total
  1. v0.8.0v0.8.0Aug 18, 2026

    ### Added - Load optional per-config-directory overrides from `$CLAUDE_CONFIG_DIR/claude-hud.json` while preserving shared plugin settings (#714). - `display.effortFormat` option (`full` | `symbol` | `text`) to render the effort indicator as symbol only or level text only; `full` keeps the current output (#691). ### Security - Bound config file size and nesting, reject symlinked or prototype-sensitive config input, and sanitize terminal-bound config labels (#714).

  2. v0.7.2v0.7.2Aug 17, 2026

    ### Fixed - Anchor prompt-cache expiry to the main-session request, ignore subagent cache writes, and detect 5-minute or 1-hour cache tiers while preserving the configured fallback (#702). ### Security - Bound transcript request identifiers before grouping prompt-cache writes (#702). ### Dependencies - Update the development-only `@types/node` package from 26.1.2 to 26.2.0 (#711).

  3. v0.7.1v0.7.1Aug 11, 2026

    ### Fixed - Remove completed agents on the next HUD refresh after one minute and keep completed history from displacing running agents (#704). ### Security - Sanitize, validate, and bound agent labels before terminal output (#704).

  4. v0.7.0v0.7.0Aug 7, 2026

    ### Added - Read bounded model-scoped usage windows from an optional external snapshot while preserving explicit empty stdin snapshots (#690). - Configure wall-clock hour cycles and optional seconds without changing the locale-driven default (#692). - Right-align an ordered suffix of merged expanded rows with `display.rightAlign` (#693). - Price Claude Opus 5, Sonnet 5, and Fable 5 in local cost estimates, including Sonnet's time-limited introductory rate (#694). - Detect the official MiniMax Anthropic-compatible endpoints and estimate MiniMax M2.7 token/cache cost without guessing MiniMax M3's request-tier pricing (#696). - Surface bounded MCP server failures when MCP activity or config counts are enabled, clearing a failure after a later successful result (#699). - Cache derived opt-in authentication labels against the source profile identity (#700). ### Fixed - Prevent short-lived Windows statusline processes from orphaning their owned Git process trees, with bounded output, timeouts, and non-interactive read-only Git behavior (#703). - Silence `/dev/tty` probe failures during setup command execution (#686). - Treat Unicode variation selectors as zero-width in terminal-cell ca

  5. v0.6.0v0.6.0Jul 20, 2026

    ### Added - Support `pathLevels: "full"` to show the entire absolute working directory in the project badge, instead of being capped at the last 3 segments (#678). - Allow users to reorder visible first-line segments with `projectLineOrder` while preserving the existing default output (#680). ### Fixed - Show each agent's resolved runtime model when the launch input omits a model alias, while preserving unknown and provider-qualified model identifiers (#679). ### Security - Keep full working-directory paths terminal-safe across compact, expanded, and reordered layouts by stripping control and bidirectional characters before rendering (#678, #680).

Code frequency

additions and deletions
+20.7K-20.7KWeek of 2025-12-28: +20,720 linesWeek of 2025-12-28: -17,363 linesWeek of 2026-01-04: +6,645 linesWeek of 2026-01-04: -1,994 linesWeek of 2026-01-11: +1,892 linesWeek of 2026-01-11: -516 linesWeek of 2026-01-18: +825 linesWeek of 2026-01-18: -94 linesWeek of 2026-01-25: +0 linesWeek of 2026-01-25: -0 linesWeek of 2026-02-01: +1,298 linesWeek of 2026-02-01: -808 linesWeek of 2026-02-08: +7 linesWeek of 2026-02-08: -7 linesWeek of 2026-02-15: +24 linesWeek of 2026-02-15: -16 linesWeek of 2026-02-22: +0 linesWeek of 2026-02-22: -0 linesWeek of 2026-03-01: +3,954 linesWeek of 2026-03-01: -812 linesWeek of 2026-03-08: +2,091 linesWeek of 2026-03-08: -388 linesWeek of 2026-03-15: +4,322 linesWeek of 2026-03-15: -3,715 linesWeek of 2026-03-22: +4,145 linesWeek of 2026-03-22: -3,790 linesWeek of 2026-03-29: +5,341 linesWeek of 2026-03-29: -1,856 linesWeek of 2026-04-05: +697 linesWeek of 2026-04-05: -157 linesWeek of 2026-04-12: +2,020 linesWeek of 2026-04-12: -140 linesWeek of 2026-04-19: +4,743 linesWeek of 2026-04-19: -1,261 linesWeek of 2026-04-26: +1,444 linesWeek of 2026-04-26: -325 linesWeek of 2026-05-03: +690 linesWeek of 2026-05-03: -120 linesWeek of 2026-05-10: +1,142 linesWeek of 2026-05-10: -285 linesWeek of 2026-05-17: +516 linesWeek of 2026-05-17: -120 linesWeek of 2026-05-24: +1,633 linesWeek of 2026-05-24: -127 linesWeek of 2026-05-31: +537 linesWeek of 2026-05-31: -73 linesWeek of 2026-06-07: +1,734 linesWeek of 2026-06-07: -267 linesWeek of 2026-06-14: +2,560 linesWeek of 2026-06-14: -786 linesWeek of 2026-06-21: +0 linesWeek of 2026-06-21: -0 linesWeek of 2026-06-28: +0 linesWeek of 2026-06-28: -0 linesWeek of 2026-07-05: +0 linesWeek of 2026-07-05: -0 linesWeek of 2026-07-12: +3,993 linesWeek of 2026-07-12: -1,699 linesWeek of 2026-07-19: +2,772 linesWeek of 2026-07-19: -338 linesWeek of 2026-07-26: +494 linesWeek of 2026-07-26: -35 linesWeek of 2026-08-02: +2,876 linesWeek of 2026-08-02: -286 linesWeek of 2026-08-09: +289 linesWeek of 2026-08-09: -57 linesWeek of 2026-08-16: +1,437 linesWeek of 2026-08-16: -193 linesWeek of 2026-08-23: +1,379 linesWeek of 2026-08-23: -125 linesWeek of 2026-08-30: +0 linesWeek of 2026-08-30: -0 linesWeek of 2026-09-06: +0 linesWeek of 2026-09-06: -0 linesWeek of 2026-09-13: +0 linesWeek of 2026-09-13: -0 linesWeek of 2026-09-20: +0 linesWeek of 2026-09-20: -0 linesDec 28, 2025Sep 20, 2026
+82.2K lines added, -37.8K removed over the last year.

Commits per week

last 52 weeks
1360Week of 2025-09-27: 0 commitsWeek of 2025-10-04: 0 commitsWeek of 2025-10-11: 0 commitsWeek of 2025-10-18: 0 commitsWeek of 2025-10-25: 0 commitsWeek of 2025-11-01: 0 commitsWeek of 2025-11-09: 0 commitsWeek of 2025-11-16: 0 commitsWeek of 2025-11-23: 0 commitsWeek of 2025-11-30: 0 commitsWeek of 2025-12-07: 0 commitsWeek of 2025-12-14: 0 commitsWeek of 2025-12-21: 0 commitsWeek of 2025-12-28: 136 commitsWeek of 2026-01-04: 31 commitsWeek of 2026-01-11: 18 commitsWeek of 2026-01-18: 10 commitsWeek of 2026-01-25: 0 commitsWeek of 2026-02-01: 10 commitsWeek of 2026-02-08: 1 commitsWeek of 2026-02-15: 2 commitsWeek of 2026-02-22: 0 commitsWeek of 2026-03-01: 35 commitsWeek of 2026-03-08: 25 commitsWeek of 2026-03-15: 17 commitsWeek of 2026-03-22: 34 commitsWeek of 2026-03-29: 53 commitsWeek of 2026-04-05: 10 commitsWeek of 2026-04-12: 22 commitsWeek of 2026-04-19: 60 commitsWeek of 2026-04-26: 21 commitsWeek of 2026-05-03: 12 commitsWeek of 2026-05-10: 18 commitsWeek of 2026-05-17: 8 commitsWeek of 2026-05-24: 12 commitsWeek of 2026-05-31: 9 commitsWeek of 2026-06-07: 17 commitsWeek of 2026-06-14: 21 commitsWeek of 2026-06-21: 0 commitsWeek of 2026-06-28: 0 commitsWeek of 2026-07-05: 0 commitsWeek of 2026-07-12: 33 commitsWeek of 2026-07-19: 13 commitsWeek of 2026-07-26: 6 commitsWeek of 2026-08-02: 20 commitsWeek of 2026-08-09: 3 commitsWeek of 2026-08-16: 9 commitsWeek of 2026-08-23: 10 commitsWeek of 2026-08-30: 0 commitsWeek of 2026-09-06: 0 commitsWeek of 2026-09-13: 0 commitsWeek of 2026-09-20: 0 commitsSep 27, 2025Sep 20, 2026
676 commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 1 commitsSun 1:00 — 2 commitsSun 2:00 — 0 commitsSun 3:00 — 1 commitsSun 4:00 — 0 commitsSun 5:00 — 0 commitsSun 6:00 — 0 commitsSun 7:00 — 0 commitsSun 8:00 — 0 commitsSun 9:00 — 1 commitsSun 10:00 — 2 commitsSun 11:00 — 0 commitsSun 12:00 — 2 commitsSun 13:00 — 1 commitsSun 14:00 — 1 commitsSun 15:00 — 0 commitsSun 16:00 — 0 commitsSun 17:00 — 2 commitsSun 18:00 — 1 commitsSun 19:00 — 3 commitsSun 20:00 — 5 commitsSun 21:00 — 6 commitsSun 22:00 — 2 commitsSun 23:00 — 6 commitsMon 0:00 — 5 commitsMon 1:00 — 2 commitsMon 2:00 — 1 commitsMon 3:00 — 6 commitsMon 4:00 — 6 commitsMon 5:00 — 2 commitsMon 6:00 — 1 commitsMon 7:00 — 6 commitsMon 8:00 — 14 commitsMon 9:00 — 12 commitsMon 10:00 — 7 commitsMon 11:00 — 6 commitsMon 12:00 — 14 commitsMon 13:00 — 21 commitsMon 14:00 — 7 commitsMon 15:00 — 2 commitsMon 16:00 — 4 commitsMon 17:00 — 1 commitsMon 18:00 — 8 commitsMon 19:00 — 2 commitsMon 20:00 — 3 commitsMon 21:00 — 3 commitsMon 22:00 — 0 commitsMon 23:00 — 6 commitsTue 0:00 — 0 commitsTue 1:00 — 1 commitsTue 2:00 — 4 commitsTue 3:00 — 4 commitsTue 4:00 — 2 commitsTue 5:00 — 1 commitsTue 6:00 — 1 commitsTue 7:00 — 1 commitsTue 8:00 — 2 commitsTue 9:00 — 6 commitsTue 10:00 — 6 commitsTue 11:00 — 3 commitsTue 12:00 — 11 commitsTue 13:00 — 3 commitsTue 14:00 — 15 commitsTue 15:00 — 3 commitsTue 16:00 — 4 commitsTue 17:00 — 5 commitsTue 18:00 — 0 commitsTue 19:00 — 1 commitsTue 20:00 — 0 commitsTue 21:00 — 2 commitsTue 22:00 — 0 commitsTue 23:00 — 6 commitsWed 0:00 — 5 commitsWed 1:00 — 1 commitsWed 2:00 — 0 commitsWed 3:00 — 1 commitsWed 4:00 — 0 commitsWed 5:00 — 1 commitsWed 6:00 — 1 commitsWed 7:00 — 1 commitsWed 8:00 — 2 commitsWed 9:00 — 3 commitsWed 10:00 — 11 commitsWed 11:00 — 5 commitsWed 12:00 — 2 commitsWed 13:00 — 1 commitsWed 14:00 — 1 commitsWed 15:00 — 0 commitsWed 16:00 — 4 commitsWed 17:00 — 1 commitsWed 18:00 — 1 commitsWed 19:00 — 2 commitsWed 20:00 — 2 commitsWed 21:00 — 3 commitsWed 22:00 — 1 commitsWed 23:00 — 7 commitsThu 0:00 — 3 commitsThu 1:00 — 2 commitsThu 2:00 — 2 commitsThu 3:00 — 0 commitsThu 4:00 — 0 commitsThu 5:00 — 0 commitsThu 6:00 — 0 commitsThu 7:00 — 2 commitsThu 8:00 — 4 commitsThu 9:00 — 6 commitsThu 10:00 — 10 commitsThu 11:00 — 2 commitsThu 12:00 — 3 commitsThu 13:00 — 0 commitsThu 14:00 — 2 commitsThu 15:00 — 3 commitsThu 16:00 — 4 commitsThu 17:00 — 2 commitsThu 18:00 — 8 commitsThu 19:00 — 1 commitsThu 20:00 — 2 commitsThu 21:00 — 4 commitsThu 22:00 — 1 commitsThu 23:00 — 4 commitsFri 0:00 — 11 commitsFri 1:00 — 2 commitsFri 2:00 — 2 commitsFri 3:00 — 3 commitsFri 4:00 — 2 commitsFri 5:00 — 0 commitsFri 6:00 — 6 commitsFri 7:00 — 2 commitsFri 8:00 — 4 commitsFri 9:00 — 6 commitsFri 10:00 — 13 commitsFri 11:00 — 8 commitsFri 12:00 — 6 commitsFri 13:00 — 11 commitsFri 14:00 — 6 commitsFri 15:00 — 8 commitsFri 16:00 — 4 commitsFri 17:00 — 9 commitsFri 18:00 — 2 commitsFri 19:00 — 0 commitsFri 20:00 — 0 commitsFri 21:00 — 1 commitsFri 22:00 — 1 commitsFri 23:00 — 11 commitsSat 0:00 — 10 commitsSat 1:00 — 0 commitsSat 2:00 — 4 commitsSat 3:00 — 9 commitsSat 4:00 — 0 commitsSat 5:00 — 0 commitsSat 6:00 — 2 commitsSat 7:00 — 34 commitsSat 8:00 — 19 commitsSat 9:00 — 4 commitsSat 10:00 — 8 commitsSat 11:00 — 5 commitsSat 12:00 — 11 commitsSat 13:00 — 9 commitsSat 14:00 — 13 commitsSat 15:00 — 3 commitsSat 16:00 — 0 commitsSat 17:00 — 7 commitsSat 18:00 — 4 commitsSat 19:00 — 4 commitsSat 20:00 — 8 commitsSat 21:00 — 13 commitsSat 22:00 — 4 commitsSat 23:00 — 10 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.

Who is committing

last 52 weeks
Maintainer commits387 (50%)
Community commits384 (50%)

771 commits in total over the last year.

DateListRankStars gained
Mar 22, 2026daily#21+207
Mar 21, 2026daily#12+257
Mar 20, 2026daily#13+188
Mar 19, 2026daily#7+258
Mar 18, 2026daily#14+206
  • affaan-m/ECC

    The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.

    272.8K stars · JavaScript

  • NousResearch/hermes-agent

    The agent that grows with you

    251.2K stars · Python

  • react/react

    The library for web and native user interfaces.

    250.9K stars · JavaScript

  • n8n-io/n8n

    Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.

    206.7K stars · TypeScript

  • yt-dlp/yt-dlp

    A feature-rich command-line audio/video downloader

    195.5K stars · Python

  • microsoft/vscode

    Visual Studio Code

    193.5K stars · TypeScript