mcpField
H
headroom

headroom

本地服务
github.com/Apertur3AI 与智能体315 天前更新

关于 headroom

headroom 是供编码 Agent 使用的守护进程和 MCP 服务,可读取订阅额度及本地模型池限制。它判断任务能否开始、应等待还是改用其他账户,并通过协作预留协调并发任务。

主要功能

  1. 01读取报告的额度与重置时间
  2. 02检查、门控和路由任务
  3. 03协调协作式容量预留
  4. 04通过 MCP 和命令行提供额度检查
  5. 05记录历史并检测重置

适用场景

  1. 01派发编码任务前检查账户容量
  2. 02额度不足时选择备用账户
  3. 03协调并发 Agent 任务的容量

MCP 相关

headroom 提供 MCP 工具,供 Agent 查询额度和任务是否可执行;可向 Claude Code 注册该服务。无法使用 MCP 的 Agent 可通过命令行操作。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"apertur3-headroom": {
"command": "npx",
"args": [
"-y",
"headroomd"
]
}
}
}
启动命令npx -y headroomd

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmheadroomd0.2.15

工具

17

收录的工具列表 · 更新于 4 天前

此工具无需参数。

详细介绍

headroom:AI 编码 Agent 的燃料表

你的编码 Agent 会在开始工作前检查 Claude 和 Codex 的限额。

headroomd 会读取订阅显示的 5 小时和每周限额,并通过命令行或 MCP 给出继续、等待或改道的建议。

终端演示:Headroom 检查 Claude 和 Codex 配额,在需要时等待或改道,并在任务开始前预留容量

npm install -g headroomd   # or: brew install apertur3/tap/headroom
headroom setup
headroom can claude-fable --owner me && echo go

然后安装 Claude Code 插件(需要先安装上面的 headroomd):

claude plugin marketplace add Apertur3/headroom
claude plugin install headroom@headroom

CI npm 版本 MIT 许可证

支持 macOS、Linux、Windows(实验性)。无遥测。零运行时依赖。

与 headroomlabs-ai/headroom(上下文压缩项目)无关。


安装

需要 Node 22.13 或更高版本。npm 包为 headroomd;Homebrew formula 为 apertur3/tap/headroom。两者都会安装 headroom 命令。

npm install -g headroomd
# or, on macOS and Linux: brew install apertur3/tap/headroom
# finds your logins, runs the doctor, asks before each change
headroom setup
# one block per account: percent used, reset time and pace state per window
headroom

Claude 的用量信息来自 Claude Code 的状态栏。将以下内容添加到 ~/.claude/settings.json(或其他每个配置文件的 settings.json),或者使用 headroom statusline --chain '<your command>' 串接现有状态栏命令:

{ "statusLine": { "type": "command", "command": "headroom statusline" } }

此外,Headroom 最多每 10 分钟运行一次 Claude Code 自带的 /usage(它会补充状态栏未提供的特定范围用量信息;状态栏在 claude -p 下不会运行,因此两次运行之间的数据可能会过时)。headroom doctor 和 headroom status 会显示当前使用哪种方式。Headroom 绝不会编辑你的 Claude 设置文件。

对于 Claude Code,请先通过 npm 或 Homebrew 安装 headroomd,再安装插件:

claude plugin marketplace add Apertur3/headroom
claude plugin install headroom@headroom

插件包含 Headroom 技能、MCP 服务注册,以及每次提示词中显示的配额信息。 同时使用它和 headroom hook install 不会重复打印配额信息。 有关要求和卸载命令,请参阅 Claude Code 插件。

已经在运行 Claude Code 或其他 Agent?将 skills/headroom/SKILL.md 复制到其技能目录,并说“set up headroom”。

如果不使用插件,headroom setup 会提供选项,为默认的 Claude Code 配置文件注册 MCP 服务。若要手动注册,或在其他配置文件中注册:

claude mcp add --scope user headroom -- headroom mcp
CLAUDE_CONFIG_DIR=~/.claude-work claude mcp add --scope user headroom -- headroom mcp

不支持 MCP 的 Agent(例如 Codex)可调用 CLI。然后向你的 Agent 提供 面向 Agent 的说明。MCP 工具和调用示例见 docs/mcp-and-agents.md。

手动设置和可选配置

上述三个命令是最简捷的方式。也可以单独执行发现:

headroom accounts discover   # finds Claude, Codex, Antigravity, Grok and Kimi logins

在 macOS 和 Linux 上,brew install apertur3/tap/headroom 会安装相同的包,并添加 brew services start headroom 服务。

手动操作时,只需运行一条命令即可完成相同步骤:

headroom setup                # discovery, doctor, service, MCP registration -- asks before each change

运行 headroom notify configure 以选择通知渠道、预设和覆盖项。仅在你决定安装较新版本的包时运行 headroom update;headroom uninstall 会撤销设置,而 headroom completion <bash|zsh|fish|pwsh> 会输出 shell 补全脚本。

accounts discover 会显示它写入的内容(Wrote ~/.headroom/accounts.toml (4 accounts). Next: headroom doctor),并在首次运行时从 examples/ 初始化 ~/.headroom/policy.toml 和 routing.toml,以便 headroom can <class> --owner <your-agent-name> 立即适用于示例操作类别(claude-fable、codex-build、 gemini-bulk)——编辑 routing.toml 以匹配你的账号。

如果要保留一个刻意登出的可选第二配置文件,且不对其进行轮询,请在其 [[accounts]] 区块中添加 enabled = false,或运行 headroom accounts disable <name>。 该配置仍会保留,并可通过 headroom accounts enable <name> 恢复。

完整操作指南(包括每个步骤会授予什么权限以及原因):docs/quickstart.md。

status/doctor 每天最多检查一次 npm registry(仅对 headroomd 版本执行普通 GET 请求,不涉及账号数据),并在有更新版本的 headroomd 时打印一行提示;运行 headroom update(绝不会自动运行)即可安装。将 ~/.headroom/policy.toml 中的 update_check = false 设为关闭检查——请参阅 保持更新。


面向 Agent

将以下内容粘贴到 Agent 会读取的 CLAUDE.md 或 AGENTS.md 中,并将占位符替换为你自己的操作类别、计量项和 Agent 名称。之后,Agent 会在分派工作前检查 Headroom,而不是询问你。

## Usage limits (Headroom)

Check Headroom before you start work on a subscription. Do not ask me about usage or reset times.

- `headroom can <class> --owner <your-name>`: exit 0 means go, exit 2 means no. Any other exit
  is an error: treat it as no. Classes are the `[consumes]` entries in `~/.headroom/routing.toml`.
- On no, try the next class in your fallback list. If none has room, run
  `headroom wait --meter <meter> --until-reset --max 6h` (exit 3 means it timed out), then run
  `headroom can` again before you start anything.
- Start a job with
  `headroom run --meter <meter> --need <window>:<points> --owner <your-name> -- <command>`,
  for example `--need 5h:10` for 10 percent of the 5-hour window. It reserves the points, runs
  the command and releases them when it exits. Exit 2 means refused; otherwise it returns the
  command's own exit code.
- UNKNOWN means there is no trustworthy reading. Treat it as no. Never pass `--allow-unknown`
  unless I ask for it.
- For the full picture, read `headroom --json`, not the human view.
- In Claude Code with the Headroom MCP server, `quota_can` answers the same question as
  `headroom can`.

若要在每一轮都向 Agent 提供实时配额,请运行 headroom hook install --agent claude(或在 headroom setup 中回答 yes)。此后,每条 Claude Code 提示词都会附带一行由守护进程在上次轮询时写入的信息,并标明信息的时效;每轮约消耗 60 个 token。headroom line 会为任何 Agent 打印同一行。目前仅支持 macOS 和 Linux 上的 Claude Code;暂不支持 Windows、Codex 和 Gemini 钩子。

单独使用 can 仅供参考。预留会告知其他使用 Headroom 的 Agent 这些点数已被占用;它不会限制任务本身的消耗,也无法阻止不使用 Headroom 的工具。更详细的说明,包括节奏状态、租约和预留,请参阅 skills/headroom/SKILL.md。


平台支持和已知限制

7
已读取的来源
3
在 CI 中测试的操作系统
1
本地守护进程,每项决策调用一次
0
遥测(有一项可选择退出的更新检查)

来源:五种订阅服务(Claude、Codex、Kimi,以及实验性的 Antigravity 和 Grok)和两种本地服务类型(vLLM 和 llama.cpp)。读取结果过期或失败时会显示 UNKNOWN,绝不会显示数字。完整说明 · 复现步骤

平台状态
macOS主要平台:在一台机器上日常使用,并通过 CI 测试。Antigravity 需要 macOS 14 或更高版本
Linux在 Ubuntu 上通过 CI 测试;也已手动检查 ARM64 上的全新安装
Windows**实验性。**测试在 CI 中运行。在 Windows 11 上,headroom install-service 会注册一个立即启动的「Headroom Daemon」任务,并提供一个仅以哈希命名的每用户命名管道。headroom uninstall --home 会通过该管道请求正在运行的守护进程关闭,移除任务和主目录,然后以状态码 0 退出。就地升级后,headroom install-service 会将守护进程重启至新版本;但若守护进程由 0.2.6 或更早版本启动,则没有关闭请求功能,必须手动停止一次(在任务管理器中结束 node.exe)。已在 Windows 11 上验证:MCP 注册(claude mcp add --scope user headroom -- headroom mcp 显示 Connected)以及实际的 Claude 登录读取(首次轮询时数据是最新的)。尚未在 Windows 上验证:缓慢停止(27 秒等待仅由单元测试覆盖)、登录时启动以及重启后启动。详细信息见下文
Antigravity实验性。依赖供应商可能更改的私有本地端点
Grok实验性。读取 Grok CLI 未公开文档的 chat-proxy 端点,并将自身呈现为 Grok CLI
完整表格:测试、CI、安装检查、Windows、供应商端点 | | | |---|---| | 测试 | `npm test`(vitest),每次推送时都会在 macOS、Ubuntu 和 Windows 上运行;部分测试仅适用于 POSIX,因此会在 Windows 上跳过。当前测试数量见 CI 日志;方法和限制:[docs/verification.md](docs/verification.md) | | CI 平台 | macOS、Ubuntu 和 Windows(`macos-latest`、`ubuntu-latest`、`windows-latest`):lint、测试、构建、`npm pack --dry-run`、隐私检查、`npm audit` | | 日常使用 | 一台 macOS 机器;这是个人每天使用的唯一环境 | | 从打包的 tarball 安装 | 脚本化冷安装冒烟测试([`smoke-cold.sh`](scripts/smoke-cold.sh))会在发布工作流中运行;也已在 macOS 和 Linux ARM64 上手动检查 | | Windows | **实验性。**在 Windows 11 上,`headroom install-service` 会注册一个名为 "Headroom Daemon" 的任务,该任务会立即启动,并提供一个名称仅为哈希值的每用户命名管道。`headroom uninstall --home` 会通过该管道请求正在运行的守护进程关闭,移除任务和主目录,并以 0 退出。在原地升级后,`headroom install-service` 会将守护进程重启至新版本,但由 0.2.6 或更早版本启动的守护进程除外,因为它不支持关闭请求,必须手动停止一次(在任务管理器中结束 node.exe)。已在 Windows 11 上验证:MCP 注册(运行 `claude mcp add --scope user headroom -- headroom mcp` 后显示 Connected)以及实际 Claude 登录读取(首次轮询时为最新数据)。尚未在 Windows 上验证:缓慢停止(27 秒等待仅由单元测试覆盖),以及登录时启动和跨重启启动。此前,已在 Windows 11 上安装 0.2.4,并验证 `accounts discover`、`doctor`、`status` / `can` / `gate` / `dashboard`(UNKNOWN,绝不伪造数字)以及 HTML 报告权限。进程看门狗在 Windows 上处于非活动状态。PowerShell 的默认执行策略会阻止 `npm` 和 `headroom` 的 `.ps1` shim;请使用 `cmd`,或放宽策略 | | 兼容对象 | 通过 MCP 使用 Claude Code(使用 `claude mcp add` 注册,由 [`mcp-registration.test.ts`](test/mcp-registration.test.ts) 和 [`daemon-mcp.test.ts`](test/daemon-mcp.test.ts) 覆盖);任何能够运行 shell 命令的 Agent,都可通过 CLI 和 `--json` 使用。其他 MCP 客户端:未经测试 | | Antigravity | 实验性;仅支持 macOS 14 或更高版本,且依赖供应商可能更改的私有本地端点 | | 供应商端点 | 私有且未进行版本管理。Headroom 会固定这些端点、记录脱敏后的 fixture,并在数据结构发生变化时显示 UNKNOWN,但无法保证这些端点会持续可用 |

原因

需要同时启动多个任务的 Agent 首先要回答两个问题:此账户是否有能力承担这些任务,以及其他哪些任务已经预留了容量?供应商界面无法以编程方式回答这两个问题,而过时的读数可能会导致向容量已不足的账户分配更多工作。Headroom 将供应商读数与协作式预留结合起来。读数过期或获取失败时,它会显示 UNKNOWN,而不是数字;对于此类读数,can 会回答 NO,除非你传入 --allow-unknown。

一个守护进程会读取 Claude、Codex、Antigravity、Grok、Kimi 以及本地 vLLM 或 llama.cpp 池的配额,保留历史记录并检测重置。Antigravity 和 Grok 支持为实验性功能。

终端卡片:headroom 为每个账户打印一个区块,显示已用百分比、重置时间和各时间窗口的速率状态,然后 headroom can codex-build 回答 NO

### 演示

动画终端:两个燃料条耗尽至本周剩余额度;headroom can 对进度超前的 Codex 本周额度显示 NO,对 Claude 显示 YES;随后 headroom run 预留容量并运行任务

合成数据。终端使用真实 CLI,在模拟的主目录上运行;该目录由 scripts/render-demo-animated.mjs 生成。

安装  ·  面向 Agent  ·  为何如此  ·  演示  ·  设计原则  ·  文档

与用量分析器有何不同

ccusage 等用量分析器会读取本地用量文件并报告估算费用。Headroom 从供应商自己的用量端点读取其报告的用量和限制,并在工作开始前给出答案:can、gate、route、租约和收件箱,供负责分派工作的 Agent 使用。它们回答的问题不同,可以并行使用。


使用前后对比

如果不进行检查,Agent 会在任务执行过程中撞上限额才发现问题。使用 Headroom 后,它会先检查;若答案为 NO,则尝试回退列表中的下一个类别。can 只进行检查;当多个任务同时启动时,请使用 headroom run,让每个任务都预留所需容量。

不使用 Headroom

# weekly limit reached mid-task, work stops half done
codex exec "refactor the billing module"

使用 Headroom

if headroom can codex-build --owner builder; then
  codex exec "refactor the billing module"
elif headroom can claude-fable --owner builder; then
  claude -p "refactor the billing module"
else
  # no class has room: wait for a reset, then check again before dispatching
  headroom wait --meter codex-main:main --until-reset --max 6h
fi

headroom run --meter ... --need ... --owner ... -- <command> 更进一步:它会先检查,再为任务运行期间预留容量,让其他使用 Headroom 的 Agent 看到该容量已被占用;随后运行命令并释放预留。examples/ 中提供了使用合成数据的可运行示例。


功能

读取实际限额
订阅用量和限额以 Claude、Codex、Antigravity、Grok 和 Kimi 报告的数据为准,并显示本地 vLLM 或 llama.cpp 池的可用性和负载。
不只看百分比,更关注节奏
根据重置后宽限期内的直线消耗速率,为每个时间窗口判定 HARVEST、NORMAL、CONSERVE、FREEZE 或 UNKNOWN。
继续、等待或重新路由
can、gate、route、plan、fill 和 wait 会在任务开始前给出答案。
预留
租约和按计量项划分的预留容量,可在使用 Headroom(run、can --lease)的 Agent 之间协调容量。
失败时默认拒绝
读取数据过期或失败时,会显示 UNKNOWN,而不会显示数字。默认情况下,can 会对此返回 NO。
仅限本地
守护进程使用 0600 权限的套接字(Windows 上使用命名管道),Headroom 的机密信息存储在操作系统密钥库中,不收集遥测数据。CLI 每天最多检查一次 npm 是否有新版本;使用 update_check = false 关闭此功能。
读取对象Claude · Codex · Antigravity(实验性)· Grok(实验性)· Kimi · 本地 vLLM · 本地 llama.cpp
调用方式通过 MCP 从 Claude Code 调用(已测试);任何能运行 shell 命令的 Agent 均可通过 CLI 和 --json 调用。其他 MCP 客户端:未测试。
完整功能列表
服务商和计量项Claude 的 all、fable、routines 及报告的范围计量项;Codex 的 main、spark、credits;Antigravity 的 gemini、claude-gpt;Grok、Kimi;以及本地 vLLM 或 llama.cpp 的 capacity 池
节奏根据重置后宽限期内的直线消耗速率,为每个时间窗口判定 HARVEST、NORMAL、CONSERVE、FREEZE 或 UNKNOWN
决策can、gate、route、plan、fill、wait、租约、按计量项划分的预留容量和支出记录,共同协调共享容量和使用节奏
视图和自动化终端状态、dashboard/top(以及 --html <path> 浏览器报告)、statusline --render、usage --paste 或 --clipboard、JSON 契约输出、本地守护进程和 MCP 工具
运维交互式 setup;带有 calm、quiet 和 everything 预设选项的 notify configure 选择器;inbox;将数据导出为 JSON 或 CSV 的 export;doctor --bundle;update;uninstall;以及 shell completion

Headroom 不是路由器。哪个模型擅长什么是个人判断,而且每月都会变化。请将配置保存在 ~/.headroom/routing.toml 中;Headroom 只会根据预算筛选备用列表。它也绝不会进入 请求路径。


仪表板

Headroom 浏览器仪表板:两个订阅及其 5 小时和每周时间窗口、每个计量项的状态,以及一张剩余容量图表,其中包含匀速使用参考线和预留容量下限

合成数据,由 scripts/render-dashboard-demo.mjs 生成。

人工控制面板和浏览器报告

打开终端概览,或导出本地浏览器快照:

headroom dashboard
headroom dashboard --once --ascii

使用 Tab 选择一个仪表,按 v 查看详情,按 e 查看事件。两种图表视图都显示记录的剩余容量;读数缺失或不可信时,图表会出现空缺。

要在浏览器中打开相同的记录历史:

headroom dashboard --html report.html

在浏览器中打开生成的文件。报告会在概览中显示订阅用量和重置时间,并提供可选择的时间窗口图表和样本详情。报告支持浅色和深色主题,且不会发出外部请求。这是一份快照;要查看更新的读数,请重新生成报告。除非传入 --force,否则会保留现有文件;在支持 Unix 权限的系统上,新文件的权限模式为 0600。


设计原则

每一条都是代码强制执行、测试覆盖的规则。过去实际发生的问题正是制定每条规则的原因。

  • 失败时从严处理:绝不提供虚假数字。 缺失、过时或不一致的读数会标记为 UNKNOWN;对此类读数,can 会返回 NO,除非你明确传入 --allow-unknown。
  • 无法静音的过时通道预警。 通道连续 6 小时没有新鲜读数时,无论通知配置如何,都会触发警报。
  • 只终止 Headroom 确认启动的进程。 在 macOS 和 Linux 上,只有记录的 pid、命令和启动时间仍匹配时,才会向进程发送信号。
  • 机密信息保存在各自的存储中。 通知令牌保存在操作系统的机密信息存储中;供应商凭据在使用时从供应商自己的存储或凭据文件中读取,绝不会复制。输出内容经过脱敏处理。
  • 每种过往故障都有一份脱敏样本。 在实际使用中遇到的每一种 Antigravity 故障形态,都有对应的样本和测试。
各项原则的执行和测试位置 - **失败时默认关闭:绝不伪造数字。** 缺失、过期、被暂挂或不一致的读数会变为 UNKNOWN,除非传入 `--allow-unknown`,否则 `can` 对其返回 NO([`freshnessGate`、`canConsume`](src/policy.ts),由 [`store-policy.test.ts`](test/store-policy.test.ts) 测试)。对于报告无用量的 Antigravity 通道,会将其归类为 blocked、idle 或 unknown,绝不会填入虚构值([`antigravity-lanes.ts`](src/antigravity-lanes.ts)、[`antigravity-lane-classifier.test.ts`](test/antigravity-lane-classifier.test.ts))。 - **无法静音且不会骚扰人的过期通道金丝雀。** 如果计量通道 6 小时内(可配置)没有新读数,就会向收件箱和 `headroom doctor` 发出警报。它会在通知配置读取前运行,且独立于通知配置,因此静音的渠道或 `events_off` 都无法隐藏该警报。外部渠道不会收到每个通道的单独通知;每个主体在每次事件中最多收到一条通俗易懂的消息,且仅在 24 小时后发送,并会在静默时段暂缓发送([`canary.ts`](src/canary.ts)、[`stale-lane-canary.test.ts`](test/stale-lane-canary.test.ts))。 - **进程管理规范:只终止 Headroom 能确证由其启动的进程。** 只有当记录的证据(Headroom 启动进程时记录的 pid、命令和启动时间)仍与运行中的进程匹配时,才会向进程发送信号;每次发送前都会立即重新检查,因此绝不会误伤已被复用的 pid。超时监控程序会清理运行时间超过限制的 Headroom 启动的 `agy` 进程([`process-tree.ts`](src/process-tree.ts)、[`agy-watchdog.ts`](src/agy-watchdog.ts)、[`antigravity-keepalive-stop-recycled-pid.test.ts`](test/antigravity-keepalive-stop-recycled-pid.test.ts)、[`agy-watchdog.test.ts`](test/agy-watchdog.test.ts))。如果测试套件启动的任何进程在运行结束后仍未退出,测试套件本身也会失败([`global-leak-gate.ts`](test/global-leak-gate.ts))。Windows 上不会启用超时监控程序以及 pid 和启动时间检查。 - **机密信息保存在各自独立的存储中。** Headroom 自身的凭据(通知令牌)会在使用时从 macOS Keychain 读取(Linux 上使用 `secret-tool`,Windows 上使用 Credential Manager),绝不会写入磁盘;供应商令牌会在调用时从供应商自己的存储或凭据文件读取(对于 Kimi 的手动令牌和 Moonshot 密钥,则使用你自行保存的 0600 文件),随后立即丢弃。输出和日志都会进行脱敏([`notify.ts`](src/notify.ts)、[`security.ts`](src/security.ts)、[`security.test.ts`](test/security.test.ts)、[SECURITY.md](SECURITY.md))。 - **每种过往故障都配有脱敏样例。** 现场出现过的每种 Antigravity 故障形式都有对应的样例(录制并脱敏,或合成生成),并有测试将其通过实际代码路径运行([`test/fixtures/antigravity/`](test/fixtures/antigravity)、[`record-antigravity-fixture.sh`](scripts/record-antigravity-fixture.sh))。该代码库还会扫描自身及打包后的 npm 压缩包,检查是否含有私人地址、电子邮件和主目录路径([`privacy-sweep.sh`](scripts/privacy-sweep.sh),在 CI 中运行)。

运行原理

Headroom 的运行原理:账户、适配器、守护进程和 Agent

Headroom 通过原生 TypeScript 适配器读取 Claude、Codex、Grok 和 Kimi。 Antigravity 为实验性支持,且仅支持 macOS 14 或更高版本:需要登录的 agy 和正在运行的 Headroom 守护进程。npm 和 Homebrew 软件包包含通用 macOS 读取器,使用前会通过 SHA-256 验证。消费者订阅无需也不支持 Gemini CLI; Google 于 2026 年 6 月 18 日结束了消费者使用 Gemini CLI 的权限。

对于 Antigravity 配额,捆绑的 macOS 读取器会在进程列表中查找正在运行的 Antigravity 语言服务器 (由守护进程保留的 agy),获取其本地端口;如果进程命令行中包含本地 CSRF 令牌,也会一并获取, 然后向 127.0.0.1 上的该服务器请求配额摘要。它不会读取 agy 的 OAuth 或会话凭据。守护进程还会读取 ~/.gemini/antigravity-cli/log 下 agy 最新日志的末尾部分,但仅用于查找登录状态标记。Headroom 绝不会读取 Gemini CLI 的 OAuth 文件。 缺失或读取失败的摘要会显示为 UNKNOWN。如果空闲窗口包含实际比例值,但其重置时间看起来是合成的, 则可能会带有存疑标记。若一次成功响应中完全没有五小时窗口(表示滚动窗口确实空闲),则显示 n/a 而不是 UNKNOWN,且不会阻止预算检查。端点契约和原生读取器基于 CodexBar(MIT)构建。

启动作业前检查预算

此合成示例的用量为 20%,另一个所有者预留了 75%。剩余容量不足以承载另一个 10 点的作业, 因此不会启动子命令:

$ headroom run --meter claude-main:all --need wk:10 --owner builder -- codex exec "Run the tests"
wk needs 10 more but only 0.0 left after 75.0% already leased before the 10% reserve

容量充足时,run 会预留容量、启动命令,并在命令结束时释放预留。检查和预留在多个进程间以原子方式执行。 普通的 can 或 gate 仅提供建议;启动工作时请使用 run 或 can --lease。这些预留用于协调使用 Headroom 的 Agent; 它们无法阻止无关工具消耗订阅额度。

示例

可直接使用合成数据运行,无需登录。构建一次,然后将 CLI 指向已填充数据的主目录:

npm run build
# sets HEADROOM_HOME to a throwaway demo home
eval "$(node scripts/demo-home.mjs)"
# walks a fallback list, dispatches on the first class with room
bash examples/orchestrator-loop.sh
# refuses a job the budget cannot cover (exit 1)
bash examples/ci-gate.sh
# the MCP call a client sends, over stdio
bash examples/mcp-quota-can.sh

除非 HEADROOM_HOME 指向该演示主目录,否则脚本不会运行,因此不会触碰真实的 ~/.headroom;它们调用的是仓库构建产物(dist/cli.js),而不是全局安装的 headroom。它们会打印所用的 二进制文件。

脚本以及初始版 accounts.toml、policy.toml 和 routing.toml 文件请参见 examples/。


文档

对比与读取内容

Headroom 不是成本追踪器:ccusage 根据本地日志估算支出,而 headroomd 读取供应商执行的限额。两者可以并行使用。

Headroom 是非官方工具。默认情况下,它通过 Claude Code 本身读取 Claude;其他读取器使用你自己的登录信息访问未公开的供应商端点。请参阅供应商端点和你的账户。

厂商端点与您的账户

这是一个独立的开源项目,与 Anthropic、OpenAI、Google、xAI 或 Moonshot AI 无关联、未获其赞助,也未获其认可。若干集成会使用需要您自行登录的厂商未公开端点:请参阅 厂商端点与您的账户。Claude、Codex、Antigravity、Grok 和 Kimi 是各自所有者的商标,在此仅用于指代 Headroom 读取数据的服务。这是 npm 包 headroomd(代码仓库 Apertur3/headroom),与其他名为 Headroom 的项目无关,例如上下文压缩库 headroomlabs-ai/headroom。

若干适配器会读取厂商未作为公共 API 公开文档的用量端点。Headroom 使用您自己的凭据调用这些端点;凭据取自您在同一台机器上安装并登录的厂商 CLI,且仅用于读取用量:它不会发送提示词、修改任何账户设置,也绝不会写入其他工具的凭据存储。仅可将其用于您拥有的账户。厂商条款可能限制此类访问,厂商也可能随时更改或封锁端点;使用风险由您自行承担。Headroom 不会轮换凭据以绕过封锁或限制。仅可使用您拥有的账户;Headroom 不会帮助规避厂商限制。

每个请求都会标明自身身份为 headroomd/<version>。默认设置(claude_probe = false)无需令牌,也不会调用未公开端点:Headroom 会读取状态栏快照,或运行 Claude Code 自带的 /usage,且绝不会读取 Claude 的 Keychain 项或调用 Anthropic。将 claude_probe = true 设为启用状态,即表示选择使用最后手段:仅在没有其他可用读取方式时,Headroom 才会读取 Claude Code 的 OAuth 令牌并调用 Anthropic 的未公开端点;Anthropic 的条款规定,此登录仅供日常使用 Claude Code。

来源Headroom 调用的内容凭据厂商是否提供文档
Claude,状态栏快照(默认,优先使用)不发起网络调用:读取 Claude Code 传递给其 statusLine 命令的 JSON无不适用(本地)
Claude,/usage 回退方式(默认)每个配置文件最多每 10 分钟运行一次您自己的 claude -p "/usage",无论是否有新的状态栏快照;不进行模型轮次,不产生费用Headroom 不处理凭据:Claude Code 使用其自身的登录信息是,usage_report 收录于 Agent SDK 参考文档中(标记为实验性)
Claude,用量探测(选择启用:在 policy.toml 中设置 claude_probe = true)GET api.anthropic.com/api/oauth/usageClaude Code 的 OAuth 令牌,来自 macOS Keychain 或 .credentials.json否。发送 User-Agent: headroomd/<version>
CodexGET chatgpt.com/backend-api/wham/usage 和 .../wham/rate-limit-reset-credits;以及 Codex CLI 的本地会话日志~/.codex/auth.json 中的 ChatGPT 令牌否。发送 User-Agent: headroomd/<version>
Antigravity 配额(实验性)127.0.0.1 上 agy 的本地语言服务器agy 的本地 CSRF 令牌(若存在,则从其进程命令行获取);不是 agy 的 OAuth 或会话凭据否(私有本地端点)
Grok(实验性)GET cli-chat-proxy.grok.com/v1/billing?format=credits 和 /v1/settings~/.grok/auth.json 中的 Bearer 令牌(由 grok login 写入)否。发送 User-Agent: headroomd/<version>
Kimi,CLI 凭据GET api.kimi.com/coding/v1/usages~/.kimi-code/credentials/kimi-code.json 中的访问令牌否。发送 User-Agent: headroomd/<version>
Kimi,手动令牌www.kimi.com/apiv2 Web 网关您自行保存到权限为 0600 的文件中的 kimi-auth Web 会话令牌(默认路径:~/.kimi/auth.token)否
Kimi,可选余额GET api.moonshot.ai/v1/users/me/balance您自行保存到权限为 0600 的 moonshot.key 文件中的 Moonshot API 密钥是(Moonshot 平台 API)
本地 vLLM、llama.cpp您配置的 base_url 对应的自有服务不涉及厂商凭据不适用
每个供应商的详细信息:docs/vendors.md。

安全性

Headroom 绝不会将供应商凭据或通知令牌写入磁盘,并会从输出中删去机密信息。在 macOS 上启用 claude_probe = true 时,随附的辅助程序 headroom-claude-probe 会运行 /usr/bin/security 来读取 Claude Code 的 Keychain 令牌;Keychain 项目自身的访问控制列表允许此操作。辅助程序会将令牌保存在自身内存中,并自行发起用量请求,因此令牌不会传递给 Node,也不会出现在 Headroom 的输出中。在 macOS 26.5 上使用 Claude Code 2.1.263 时,无需显示 Keychain 对话框。该辅助程序以通用二进制文件的形式包含在 npm 软件包中,每次使用前都会根据记录的 SHA-256 校验其完整性。其他情况下,令牌会在调用时从供应商自身的凭据文件中读取,并在请求后立即丢弃。守护进程在 macOS 和 Linux 上监听权限为 0600 的本地套接字。在 Windows 上,它使用命名管道,通信双方都必须证明持有每个守护进程专属的会话令牌;该令牌保存在 HEADROOM_HOME 下权限为 0600 的文件中。没有遥测功能。除了你配置的供应商和启用的通知渠道外,Headroom 唯一会主动发出的请求是上文提到的每日 npm 版本检查,它是一个不包含账户数据的普通 GET 请求(设置 update_check = false 可将其关闭);只有在你运行 headroom update 和 headroom engine install 时,它们才会联系 npm 和 GitHub。引擎版本已固定并通过校验和验证,每次查询都会写入审计日志。详情请见 SECURITY.md。

状态

版本以 headroomd 的名称发布到 npm;CHANGELOG.md 列出了每个版本的变更。供应商端点不公开且可能随时更改:Headroom 会固定端点、记录测试样本、在收到 401、403 和 429 响应时退避,并在数据过时时显示 UNKNOWN。有关已验证和未验证的内容,请参阅平台支持与已知限制。Antigravity 需要 macOS 和由守护进程保管的 agy;请参阅供应商设置。

欢迎贡献:请参阅 CONTRIBUTING.md 和标记为适合初次贡献者的问题。

MIT。第三方声明见 THIRD_PARTY_NOTICES.md。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。