一个 Claude Code 插件,常驻在输入框下方,实时显示上下文用量、使用率限制、正在运行的工具、子代理以及待办进度。
🌐 English | 中文文档
在 Claude Code 中运行:
/plugin marketplace add jarrodwatts/claude-hud
/plugin install claude-hud
/reload-plugins
/claude-hud:setup
/claude-hud:setup 会把状态栏指向 HUD。Claude Code 会自动重新加载设置,HUD 会立即出现。想要自定义,直接告诉 Claude,或运行 /claude-hud:configure。
更喜欢用终端?
claude plugin marketplace add jarrodwatts/claude-hud
claude plugin install claude-hud@claude-hud然后在会话中运行 /reload-plugins 和 /claude-hud:setup。
Windows:setup 提示找不到 JavaScript 运行时
安装 Node.js LTS(winget install OpenJS.NodeJS.LTS),重启 shell,然后再次运行 /claude-hud:setup。
更新: 默认情况下,Claude Code 不会自动更新第三方插件。要开启自动更新,运行 /plugin,打开 Marketplaces,选择 claude-hud,然后选择 Enable auto-update。如果没有这个选项,或者收不到更新,可以在终端中手动更新:
claude plugin marketplace update claude-hud
claude plugin update claude-hud@claude-hud然后在已打开的会话中运行 /reload-plugins。无需再次运行 setup。
默认显示两行:
[Opus] │ my-project git:(main*)
Context █████░░░░░ 45% │ Usage ██░░░░░░░░ 25% (resets in 1h 30m)
- 第 1 行:模型、检测到时的提供商标签(
Bedrock、Vertex、MiniMax)、项目路径和 git 分支。 - 第 2 行:上下文用量(随占用依次变为绿、黄、红)以及订阅用户的使用率限制。
可选行,通过 /claude-hud:configure 开启:
◐ Edit: auth.ts | ✓ Read ×3 | ✓ Grep ×2 ← 工具
◐ explore [haiku]: Finding auth code (2m 15s) ← 子代理
▸ Fix authentication bug (2/5) ← 待办
Claude HUD 是一个状态栏命令。Claude Code 通过 stdin 传入会话数据(模型、上下文窗口、费用、使用率限制、prompt cache)并显示它的输出。部分可选元素(例如工具、子代理和待办行)还会读取会话 transcript。不需要单独的窗口或 tmux,任何终端都能用。
/claude-hud:configure
引导流程涵盖布局、活动行、会话信息、使用率、git、语言和自定义行。保存前会预览改动,并保留它没有询问的所有设置。
其他设置位于 ~/.claude/plugins/claude-hud/config.json(或 $CLAUDE_CONFIG_DIR 下)。无效值会回退为默认值。
如果多个 CLAUDE_CONFIG_DIR 共用同一个 plugins/ 目录,可以把各目录专属的设置放进 $CLAUDE_CONFIG_DIR/claude-hud.json。它的结构相同,只需写要改的键,加载时叠加在共享配置之上:
{ "display": { "customLine": "Work Team" } }标签语言支持英文(默认)、简体中文(zh-Hans,别名 zh)和繁体中文(zh-Hant,别名 zh-TW)。
| 选项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
language |
en | zh | zh-Hans | zh-Hant | zh-TW |
en |
HUD 标签语言。设为 zh 或 zh-Hans 启用简体中文,设为 zh-Hant 或 zh-TW 启用繁体中文 |
lineLayout |
string | expanded |
布局:expanded(多行)或 compact(单行) |
showSeparators |
boolean | false | 在 compact 布局中,在会话行与活动行之间画一条分隔线 |
pathLevels |
1-3 | full |
1 | 项目路径显示的目录层级数,或设为 full 显示完整绝对路径 |
maxWidth |
number | null |
null |
可选的回退宽度,仅在终端宽度检测完全失败时使用 |
forceMaxWidth |
boolean | false | 当设置了 maxWidth 时始终使用它,即使终端宽度检测返回更小的值 |
elementOrder |
string[] | ["project","addedDirs","context","usage","promptCache","cacheHitRate","memory","environment","tools","skills","mcp","agents","todos","sessionTime"] |
展开模式下元素的顺序。省略的条目在展开模式下隐藏。现有配置会保留其显式顺序直到更新。sessionTokens 不在默认顺序中:加入后即可像其他元素一样放置 display.showSessionTokens 的摘要,例如与 project 放进同一个 display.mergeGroups 分组。未加入时,它仍单独显示在最后一行。cost 同理:未加入时,费用仍显示在第一行(可用 projectLineOrder 调整位置);加入后,它成为独立元素,例如在 elementOrder 中依次放入 "context","usage","cost",并在 display.mergeGroups 中使用 ["context","usage","cost"],即可把它放在上下文和用量旁边。 |
projectLineOrder |
string[] | [] |
可选的首行片段前置顺序,适用于两种布局。可见性仍由 display.show* 控制;省略的片段保持渲染器原有顺序。例如 ["project","model"] 会将项目和 Git 放到模型徽标之前 |
display.mergeGroups |
string[][] | [["context","usage"]] |
展开模式下相邻时应共享一行的元素分组。设为 [] 可禁用合并行 |
display.rightAlign |
string[] | [] |
以合并行中第一个列出的元素作为右对齐后缀的起点,保持 elementOrder 并用空格填充间隔。锚点必须位于实际合并渲染的 display.mergeGroups 分组中。终端宽度未知、锚点位于首位或空间不足时回退到普通的 │ 连接。示例:分组为 ["project","context","usage"] 时设为 ["context"],项目/git 保持在左侧,context 与 usage 靠右对齐。 |
gitStatus.enabled |
boolean | true | 在 HUD 中显示 git 分支 |
gitStatus.showDirty |
boolean | true | 显示 * 表示未提交的更改 |
gitStatus.showAheadBehind |
boolean | false | 显示 ↑N ↓N 表示领先/落后远程的提交数 |
gitStatus.pushWarningThreshold |
number | 0 | 当未推送提交数达到此值时,用警告色显示 ahead 计数(0 表示禁用) |
gitStatus.pushCriticalThreshold |
number | 0 | 当未推送提交数达到此值时,用严重色显示 ahead 计数(0 表示禁用) |
gitStatus.showFileStats |
boolean | false | 显示文件变更数量 !M +A ✘D ?U |
gitStatus.showWorktree |
boolean | false | 在关联的 git worktree 中,于分支后显示其名称,例如 git:(feat/x) ⎇ feat-x |
gitStatus.branchOverflow |
truncate | wrap |
truncate |
保持当前截断行为,或在可能时让 git 块以自己的换行边界单独换到下一行 |
jjStatus.enabled |
boolean | false | 显式启用 jj(Jujutsu)状态。启用后若找到真实的 .jj 目录,该仓库将显示 jj 而不是 git,二者不会同时运行 |
jjStatus.showDirty |
boolean | true | 当 jj 工作副本提交与其父提交不同时显示 * |
jjStatus.showConflicts |
boolean | true | 当 jj 工作副本提交包含未解决冲突时显示 !conflict |
display.showModel |
boolean | true | 显示模型名称 [Opus] |
display.showProject |
boolean | true | 显示项目路径 |
display.modelSource |
stdin | auto | transcript |
stdin |
控制模型名称来源。stdin 保持默认行为;auto 仅在 transcript 返回非 Claude 模型时切换,用于检测代理路由;transcript 始终使用 API 响应中的模型。Transcript 模型值会清理终端转义字符并截断为 80 个字符 |
display.modelFormat |
full | compact | short |
full |
compact 去掉 (1M context) 这类上下文窗口后缀;short 还会去掉开头的 Claude |
display.modelOverride |
string | "" |
用这段文字代替模型名称(最多 80 个字符) |
display.showProvider |
boolean | false | 在模型名称之前显示提供商标签,例如 [Bedrock | Opus 4.6]。自定义代理提供同名模型时有用。关闭时,自动检测的提供商仍跟在模型后面 |
display.providerName |
string | "" |
与 display.showProvider 一起使用的显式提供商标签,例如无法自动检测的自定义代理。为空时回退到自动检测(Bedrock/Vertex/MiniMax/Enterprise);上限 40 字符 |
display.showAddedDirs |
boolean | true | 显示来自 /add-dir 的额外工作区目录(如 +sparkle +lib-foo);空数组不显示任何内容。在两种布局中最多渲染 5 个目录(溢出显示为 +N more),基名截断为 24 个字符并加 … |
display.addedDirsLayout |
inline | line |
inline |
inline 将目录放在项目名称旁边,每个目录带 +name 前缀;line 在单独的 Added dirs: name1, name2 行渲染(无 + 前缀,逗号分隔) |
display.showContextBar |
boolean | true | 显示可视化上下文进度条 ████░░░░░░ |
display.contextValue |
percent | tokens | remaining | both |
percent |
上下文显示格式(45%、45k/200k、剩余 55% 或 45% (45k/200k)) |
display.autoCompactWindow |
number | null |
null |
设为正数(如 200000)时,按此自动压缩窗口而不是完整模型上下文窗口计算上下文百分比,以匹配 /context。留空或 null 保持默认全窗口行为 |
display.showConfigCounts |
boolean | false | 显示 CLAUDE.md、rules、MCPs、hooks 数量 |
display.environmentThreshold |
number | 0 | 配置计数总和达到此值前隐藏(0 = 始终显示) |
display.showCost |
boolean | false | 显示 Claude Code 上报的会话费用(cost.total_cost_usd) |
display.showRoutedCost |
boolean | false | 同时为 Bedrock 和 Vertex 会话显示费用。它们通过云服务商计费,因此 showCost 默认隐藏其费用。需同时开启 showCost |
display.showDailyCost |
boolean | false | 显示当天跨会话累计花费,格式为 Today $12.34,从原生 cost.total_cost_usd 写入插件数据目录中的按日账本。本地午夜重置。与 showCost 独立 |
display.showWeeklyCost |
boolean | false | 显示自每周额度窗口开始以来的累计花费,格式为 Week $123.45,与 showDailyCost 使用同一账本。仅订阅用户可用:需要 7 天用量窗口 |
display.showOutputStyle |
boolean | false | 显示当前输出风格,格式为 style: <名称> |
display.showDuration |
boolean | false | 显示会话已运行的时长,例如 ⏱️ 5m |
display.showSpeed |
boolean | false | 显示最近一次响应的输出 Token 速度 out: 42.1 tok/s |
display.showUsage |
boolean | true | 显示 Claude 订阅用户的使用率限制(可用时) |
display.usageValue |
percent | remaining |
percent |
使用率显示格式(已使用 25%,或剩余 75%) |
display.usageBarEnabled |
boolean | true | 将使用率显示为可视化进度条而非文本 |
display.usageCompact |
boolean | false | 以较短的文本形式显示使用率,如 5h: 25% (1h 30m);优先于 display.usageBarEnabled |
display.showResetLabel |
boolean | true | 在使用率倒计时前显示 resets in 前缀 |
display.showModelScopedUsage |
boolean | true | 显示按模型每周窗口(model_scoped,例如 Fable),无论其来自 stdin 还是外部用量快照。设为 false 后,使用率行的渲染效果等同于负载中本就没有这些窗口 |
display.usagePace |
boolean | false | 当使用率窗口按当前速度会在重置前用尽时,以琥珀色或红色显示并标记 ▲ |
display.timeFormat |
relative | absolute | both | elapsed | elapsedAndAbsolute |
relative |
控制使用率窗口时间的显示方式:仅倒计时(resets in 2h 30m)、墙钟重置时间(resets at 14:30)、两者同时显示、窗口已过百分比(53% elapsed),或已过百分比加墙钟重置时间 |
display.hourCycle |
auto | h11 | h12 | h23 | h24 |
auto |
墙钟重置时间(absolute/both/elapsedAndAbsolute 模式)的时制。auto 跟随系统区域设置;h23 强制使用 24 小时制(14:30),不受区域设置影响 |
display.showClockSeconds |
boolean | false | 在墙钟重置时间中显示秒数,如 at 14:30:07 |
display.usageThreshold |
0-100 | 0 | 任一窗口达到此百分比前隐藏使用率(0 = 始终显示) |
display.sevenDayThreshold |
0-100 | 80 | 当 7 天使用率 ≥ 阈值时显示(0 = 始终显示) |
display.externalUsagePath |
string | "" |
可选的本地使用率快照文件绝对路径。支持开头的 ~ 和 ${VAR}。相对路径会被忽略。stdin rate_limits 存在时会附加 balance_label,并在 stdin 缺少 model_scoped 窗口时用快照补齐;stdin 窗口缺失时可整体作为回退 |
display.externalUsageWritePath |
string | "" |
可选的绝对 .json 路径,父目录必须已存在。支持开头的 ~ 和 ${VAR}。当 stdin rate_limits 存在时,ClaudeHUD 会写入私有权限快照供其他本地工具读取。相对路径、非 json 文件和缺失父目录会被忽略 |
display.externalUsageFreshnessMs |
number | 300000 |
外部使用率快照允许的最长存活时间,超时后会被忽略 |
display.showTokenBreakdown |
boolean | true | 在高上下文时(85%+)显示 Token 详情 |
display.contextWarningThreshold |
0-100 | 70 | 上下文进度条变为警告色的百分比 |
display.contextCriticalThreshold |
0-100 | 85 | 上下文进度条变为严重色并显示 token 明细的百分比 |
display.showTools |
boolean | false | 显示工具活动行 |
display.showSkills |
boolean | false | 显示从 Skill 工具调用检测到的活动 Skills |
display.showMcp |
boolean | false | 显示从 mcp__server__tool 调用检测到的活动 MCP 服务器 |
display.toolNameMaxLength |
number | 0 |
工具名称最大显示长度。0 保留完整名称;截断 MCP 名称时可能缩短为最后一段 |
display.toolsMaxVisible |
number | 4 |
工具行最多显示的已完成工具数。0 表示不限制 |
display.skillsMaxVisible |
number | 4 |
Skills 行在 +N more 之前最多显示的 Skill 名称数。0 表示不限制 |
display.showAgents |
boolean | false | 显示 Agent 活动行 |
display.showTodos |
boolean | false | 显示待办进度行 |
display.showSessionName |
boolean | false | 显示会话名称:/rename 设置的名称,或 Claude Code 生成的标题 |
display.showSessionTokens |
boolean | false | 显示本会话累计的 token 总量,例如 Tokens 262k (in: 6k, out: 2k, cache: 254k) |
display.showAuth |
boolean | false | 在第一行末尾显示当前登录的认证方式(订阅计划),例如 Claude Max 20x。来自 ~/.claude.json(或覆盖配置目录时的 $CLAUDE_CONFIG_DIR/.claude.json)的 oauthAccount;无 OAuth 但设置了 ANTHROPIC_API_KEY 时显示 API Key |
display.showAuthUser |
boolean | false | 在认证方式旁显示已登录账号(邮箱本地部分,回退到资料显示名) |
display.authUserLength |
number | 8 |
账号名截断前的最大字符数,超出以 … 截断。0 显示全名 |
display.showAdvisor |
boolean | false | 在 project 行内联显示 Claude Code /advisor 配置的顾问模型,例如 Advisor: Opus 4.7。来自 Claude Code 写入每条 assistant transcript 记录的 advisorModel 字段;渲染前会做控制字符/双向标记/ANSI 过滤并截断到 64 字符 |
display.advisorOverride |
string | "" |
手动覆盖顾问显示文本。非空时优先于 transcript 检测,同样会做过滤和截断 |
display.showSessionStartDate |
boolean | false | 显示 transcript 会话开始时间戳 |
display.showLastResponseAt |
boolean | false | 显示最后一次 assistant 响应写入的时间距现在多久 |
display.showCompactions |
boolean | false | 显示本会话已发生的上下文压缩次数(手动 /compact 或自动压缩),从 transcript 的 compact_boundary 记录计数,例如 压缩次数: 2。第一次压缩前不显示 |
display.showEffortLevel |
boolean | false | 在模型徽章中显示当前推理力度。Ultracode 渲染为 ultracode(xhigh),从会话 transcript 检测,因此能跟踪运行时的 /effort 变更 |
display.effortFormat |
full | symbol | text |
full |
showEffortLevel 开启时的渲染方式:符号加级别文本(◑ high)、仅符号(◑)、或仅级别文本(high)。symbol 下 Ultracode 仍保持完整的 ◕ ultracode(xhigh),以免丢失标记;没有已知符号的级别回退到级别文本 |
display.showAgentEffort |
boolean | false | 配合 display.showAgents,在每个子 Agent 的模型旁显示其推理力度,例如 ◐ code-reviewer [haiku-4.5 ◔ medium],格式遵循 display.effortFormat。从子 Agent 自己的 transcript 读取,因此要等 Claude Code 记录下该 Agent 的 id(后台 Agent 在启动时,其他 Agent 在结束时)且它已有第一条回复后才会出现 |
display.showClaudeCodeVersion |
boolean | false | 显示当前运行的 Claude Code 版本,如 CC v2.1.81 |
display.showMemoryUsage |
boolean | false | 在展开布局中显示近似系统 RAM 使用行 |
display.showPromptCache |
boolean | false | 显示主会话 prompt cache 的过期时刻 |
display.showCacheHitRate |
boolean | false | 以 Cache hit X% 形式显示本会话的 prompt cache 命中率 |
display.customLine |
string | "" |
显示在第一行的自定义文字(最多 80 个字符) |
display.customLinePosition |
first | last |
last |
自定义文字放在第一行的开头还是结尾 |
colors.context |
颜色值 | green |
上下文进度条和百分比的基础颜色 |
colors.usage |
颜色值 | brightBlue |
使用率进度条和低于警告阈值时百分比的颜色 |
colors.warning |
颜色值 | yellow |
上下文阈值和使用率警告文本的警告颜色 |
colors.usageWarning |
颜色值 | brightMagenta |
使用率进度条和接近阈值时百分比的警告颜色 |
colors.critical |
颜色值 | red |
达到限制状态和严重阈值的颜色 |
colors.model |
颜色值 | cyan |
模型徽章颜色,如 [Opus] |
colors.project |
颜色值 | yellow |
项目路径的颜色 |
colors.git |
颜色值 | magenta |
Git 包装文本的颜色,如 git:( 和 ) |
colors.gitBranch |
颜色值 | cyan |
Git 分支和分支状态文本的颜色 |
colors.label |
颜色值 | dim |
标签和次要元数据的颜色,如 Context、Usage、计数和进度文本 |
colors.custom |
颜色值 | 208 |
可选自定义行的颜色 |
colors.barFilled |
string | █ |
进度条填充部分使用的字符 |
colors.barEmpty |
string | ░ |
进度条空白部分使用的字符 |
颜色可以是名称(dim、red、green、yellow、magenta、cyan、brightBlue、brightMagenta)、256 色编号(0-255)或十六进制(#rrggbb)。colors.barFilled 和 colors.barEmpty 只接受单个可见字符;emoji 等宽字符在部分终端中可能影响进度条对齐。
只要 Claude Code 发送了订阅用户的 rate_limits(会话中首个响应之后),就会显示使用率。API key、Bedrock 和 Vertex 会话没有订阅用户限额,因此不显示。7 天窗口在超过 display.sevenDayThreshold 后出现:
Context █████░░░░░ 45% │ Usage ██░░░░░░░░ 25% (resets in 1h 30m) | Weekly █████████░ 85% (resets in 1d)
开启 display.usagePace 后,消耗快于恢复的窗口会变为琥珀色(预计用到 90% 及以上)或红色(预计在重置前用尽),并加上 ▲。已用低于 10% 的窗口保持中性。
外部快照。 display.externalUsagePath 读取一个本地 JSON 文件。stdin 没有窗口数据时由它补上,它的 balance_label 或 model_scoped 窗口(例如按模型的每周额度)会附加到 stdin 的数据上。路径必须是绝对路径,且文件要比 display.externalUsageFreshnessMs 新:
{
"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" },
"balance_label": "¥6.35",
"model_scoped": [{ "display_name": "Fable", "utilization": 89, "resets_at": "2026-04-27T11:00:00Z" }]
}display.externalUsageWritePath 则反过来:把 stdin 的使用率限制写入一个已存在目录中的私有 .json 文件,供其他工具读取。
display.showCost 显示 Claude Code 自己计算的会话费用(按标价,或使用你的 modelPricing 表)。Bedrock 和 Vertex 通过云服务商计费,因此除非同时设置 display.showRoutedCost,否则不显示它们的费用。
display.showDailyCost 会加上今天所有会话的花费(Today $12.34)。它记录在插件数据目录中的一个小账本里,在本地午夜重置,并从首次看到该会话的渲染开始计数。display.showWeeklyCost 使用同一个账本,从 7 天额度窗口的开始计数,因此需要订阅用户会话。
display.showPromptCache 显示主会话 prompt cache 何时失效,例如 Cache ⏱ until 14:30,或 expired。它显示时刻而不是倒计时:状态栏在两个回合之间不会重绘,而那正是缓存流失的时候;时刻无论渲染多旧都仍然正确。display.showCacheHitRate 显示从缓存读取的输入 token 占比。
把 jjStatus.enabled 设为 true,在含有 .jj 仓库的目录中会显示 jj 状态(例如 jj:(mybookmark*) 或 jj:(wrulwzyw !conflict))而不是 git。HUD 以只读方式运行 jj,不会对工作副本做快照,因此脏标记反映的是 jj 最近一次快照。领先/落后计数和文件统计仅适用于 git。
{
"lineLayout": "expanded",
"pathLevels": 2,
"gitStatus": { "showAheadBehind": true, "showFileStats": true },
"display": {
"showTools": true,
"showAgents": true,
"showTodos": true,
"showDuration": true,
"showCost": true
},
"colors": { "context": "cyan", "custom": "#FF6600" }
}Claude Code 会在每条消息、/compact、权限或 vim 模式变化、使用率窗口重置以及 prompt cache 失效之后重新运行状态栏。若想在会话空闲时让倒计时和时长继续走动,在 ~/.claude/settings.json 的 statusLine 中加上 refreshInterval(秒)。
CLAUDE_HUD_DISABLE=1 claude除 0、false、off、no 之外的任何值都会在该会话中清空 HUD,无需修改 settings.json。
Claude HUD 只在本地运行。它不发起网络请求,从不读取凭据,也不调用未公开的 API。它读取 Claude Code 的 stdin、会话 transcript、Claude 配置文件以及当前目录的 git 或 jj 元数据。它唯一写入的是 ~/.claude/plugins/claude-hud 下的少量状态文件(输出速度和费用账本),并使用私有权限。
--extra-cmd 会在每次刷新时运行一条 shell 命令,并把输出显示在第一行。除非 HUD 的环境中设置了 CLAUDE_HUD_ALLOW_EXTRA_CMD=1,否则它会被忽略。请把它视为任意代码执行,切勿使用来源不可信的命令。
HUD 没有出现。 发送一条消息,状态栏会在交互之后渲染。确认 shell 中没有设置 CLAUDE_HUD_DISABLE。如果 Node 或 Bun 的路径变了(例如 nvm 或 mise 升级之后),重新运行 /claude-hud:setup。
配置没有生效。 检查 JSON 是否有语法错误:无效文件会回退为默认值。确认取值在范围内,选项表中列出了各项范围。
没有显示使用率。 使用率需要以 Claude 订阅用户身份登录,并在首个响应之后出现。检查 display.showUsage。
没有 git 或 jj 状态。 确认当前位于仓库中,并且开启了 gitStatus.enabled(或 jjStatus.enabled,且 jj 在 PATH 中)。
缺少某个活动行。 工具、子代理、待办、技能和 MCP 行默认关闭,并且只在有活动时显示。
- Claude Code v2.1.260 或更高版本
- macOS 或 Linux:Node.js 18+ 或 Bun
- Windows:Node.js 18+
git clone https://github.com/jarrodwatts/claude-hud
cd claude-hud
npm ci && npm test参见 CONTRIBUTING.md。
MIT,参见 LICENSE。
