跳到正文
claudemods

Usage Meter:在输入框上方显示 Claude Code 用量限额

在 Claude Code 输入框上方用小横条显示 5 小时与 7 天套餐用量、重置倒计时和会话花费。

权限

  • 修改界面在 Claude Code 界面中绘制内容:横条、面板、状态文字、弹出通知(ui.render / $.ui.*)。
实测版本
v2.1.291
最近实测
需要
Claude Code ≥ 2.1.287
显示位置
输入框上方、弹出通知

在 Claude Code 中安装:

/plugin install usage-meter --marketplace hamzafer/claude-code-mods
全部安装方式 ↓

这个插件能做什么?

Usage Meter 是一款显示 Claude Code 用量限额的社区插件,作者是 Hamza Zafar(hamzafer),出自他的 claude-code-mods 合集。它在 Claude Code 输入框上方绘制一行,显示你所用套餐的速率限制窗口和本次会话的花费,例如 ⏱ 5h █▆▁▁▁ 34% · resets 2h10 · 7d ███▁▁ 61% · $0.42 session。

每个窗口都有一个由方块字符组成的五格横条,部分填充的格子能表现出比整块更细的刻度。横条和百分比在低于 75% 时为绿色,75% 起为黄色,90% 起为红色。第一个窗口(通常是 5 小时窗口)始终显示何时重置。其他窗口,例如 7 天窗口或花费上限,只有在用量偏高时才显示重置时间。倒计时每分钟更新一次。重置时间已过的窗口会被隐藏,直到 Claude Code 报告新的读数,所以你永远不会看到过时的 100%。

当某个窗口超过 90% 时,通知会在每个重置周期内提醒你一次,例如 5h usage limit at 92%, resets in 1h05。在较窄的终端中,这一行会先省略次要窗口,再省略花费,确保主窗口始终放得下。没有订阅时(使用 API 密钥的会话),不存在套餐窗口,只显示花费。

如果你已经在用我们的 上下文仪表,两者重叠的部分是 5 小时与 7 天的数字以及花费。上下文仪表 以文字形式把它们写进状态栏,并额外显示上下文窗口占用;Usage Meter 则在输入框上方把它们画成横条,加上实时倒计时,不显示上下文。作者的 README 要求 Claude Code 2.1.287 或更高版本。

演示

录屏中,我们启动加载了该插件的 Claude Code,发送一条简短提示,并在这一轮结束后展示输入框上方的那一行:5 小时与 7 天套餐窗口以小横条和百分比显示,还有距离 5 小时窗口重置的时间以及会话花费。之所以出现套餐横条,是因为演示账号登录的是 Claude 订阅。

安装

使用安装区块中的任意一种方式;它们都直接从作者自己的插件市场安装。无需任何配置。

$ install usage-meter

需要 Claude Code ≥ 2.1.287

从作者自己的 marketplace 安装: hamzafer/claude-code-mods

  1. 1.在 Claude Code 中一行安装

    /plugin install usage-meter --marketplace hamzafer/claude-code-mods

    粘贴到正在运行的会话中(v2.1.275+)。Claude Code 会先询问是否添加该插件市场。

  2. 2.从终端安装

    claude plugin marketplace add hamzafer/claude-code-mods
    claude plugin install usage-meter@claude-code-mods

    然后在所有已打开的会话中运行 /reload-plugins。

  3. 3.免安装试用

    git clone https://github.com/hamzafer/claude-code-mods
    claude --plugin-dir ./claude-code-mods/mods/usage-meter

    仅在当前会话中加载该插件,不会写入你的设置。

工作原理

以下是 hooks/register.tsx 中负责获取读数的两个钩子:

on('session.start', async ($, e, next) => {
  const result = await next(e)
  // Moves the reset countdown on while a window has a reset time.
  timer?.cancel()
  timer = $.clock.every(TICK_MS, () => { /* bumps the tick atom */ })
  const usage = await $.session.usage().catch(() => null)
  if (usage) await take($, usage.rateLimits, usage.cost?.usd).catch(() => {})
  return result
})

on('session.measure', async ($, e, next) => {
  const result = await next(e)
  await take($, e.rateLimits, e.cost?.usd).catch(() => {})
  return result
})

take 保留百分比为有限值的窗口,把它们存入由宿主持有的 $.state 原子,并调用 warn。对于达到或超过 90%、且在当前重置周期内尚未提醒过的窗口,warn 会弹出通知。重置时间向后推移超过半小时就算作一个新周期。AbovePrompt 上的 ui.render 钩子读取快照和一个由 60 秒定时器递增的 tick 原子,因此不需要新读数也能重绘倒计时。纯函数 build、fit、bar、colorFor 和 countdown 负责生成各个片段,作者的测试覆盖了它们。

自定义

/config 中没有选项,也没有斜杠命令。register.tsx 顶部的常量控制各项细节:CELLS(横条宽度,5)、TICK_MS(倒计时刷新间隔,60 秒)、WARN_AT(通知阈值,90),以及窗口名称 LABELS(5h、7d、spend)。

权限与安全

在运行之前,我们读过了插件可以执行的每一个文件:hooks/hooks.json、hooks/register.tsx、类型声明以及测试。没有 package.json、安装脚本或打包后的代码。

修改界面对应的是输入框上方的那一行和 90% 时的通知。插件通过 $.session.usage 和 session.measure 事件读取 Claude Code 已经在统计的用量数据,并保存在 $.state 中。它不运行命令、不读写文件、不使用网络、不读取环境变量,也不调用模型。claude plugin validate 没有报告任何错误或警告,作者的 11 个测试在 Claude Code 2.1.291 上全部通过。

修改界面
在 Claude Code 界面中绘制内容:横条、面板、状态文字、弹出通知(ui.render / $.ui.*)。

兼容性与故障排除

已在 macOS 上使用 Claude Code 2.1.291 检查(validate 和测试)。如果这一行没有出现:

  • claude --version 为 2.1.287 或更高版本。
  • 你使用的是 Claude 订阅。使用 API 密钥时只会出现花费,而且要等花费超过 $0.00 之后。
  • 在模型第一次响应之前,Claude Code 可能还没有用量数据。发送一条提示,这一行就会填充出来。
  • 输入框上方正打开着问卷;问卷关闭后这一行会回来。

常见问题

Usage Meter 会为了查用量而发送请求吗?
不会。它读取的是 Claude Code 已经掌握的数字:会话开始时通过 $.session.usage,之后通过 session.measure 事件。插件自身不发出任何网络请求。
如果我用的是 API 密钥而不是订阅呢?
那样 Claude Code 不会报告任何套餐窗口,这一行只会在会话花费大于零之后显示花费。没有可显示的内容时,这一行会隐藏。
它什么时候提醒我?
当某个窗口超过 90% 时,会弹出类似 "5h usage limit at 92%, resets in 1h05" 的通知,每个窗口在每个重置周期内只提醒一次。
颜色分别代表什么?
低于 75% 为绿色,75% 起为黄色,90% 起为红色。7 天窗口在达到 75% 后也会显示它的重置时间。
它和 上下文仪表(cm-context-meter)有什么区别?
上下文仪表 以文字形式把上下文百分比、套餐窗口和花费写进状态栏,并在上下文达到 80% 时提醒。Usage Meter 在输入框上方绘制横条,加上实时的重置倒计时,在套餐窗口达到 90% 时提醒,但不显示上下文占用。
上下文仪表 在 Claude Code 中运行精选

上下文仪表

在状态栏显示上下文窗口占用、5 小时与 7 天套餐用量和会话花费,并在接近上限时发出提醒。

  • 状态栏
  • 弹出通知
  • 修改界面

已在 v2.1.310 实测

更多 上下文、额度与费用、状态栏与提示栏。