headroom について
headroomは、コーディングエージェント向けにサブスクリプションの上限やローカルモデルプールの制限を読み取るデーモン兼MCPサーバーです。作業の開始、待機、振り分けを判断し、複数ジョブ間の容量予約を調整します。
主な機能
- 01報告された上限とリセット時刻の取得
- 02作業の可否判定、ゲート、振り分け
- 03協調的な容量予約の調整
- 04MCPとコマンドラインでの上限確認
- 05履歴の記録とリセット検出
活用シーン
- 01コーディングジョブの開始前にアカウント容量を確認
- 02上限に達した際の代替アカウント選択
- 03並行するエージェントジョブ間の容量調整
MCP 対応
headroomは、エージェントが上限と作業可否を確認するためのMCPツールを提供し、Claude Codeにサーバーを登録できます。MCP非対応のエージェントはコマンドラインを利用できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
17掲載時のツール一覧 · 4 日前に更新
このツールにパラメーターはありません。
詳細
コーディングエージェントは、ジョブを開始する前に Claude と Codex の利用上限を確認します。
headroomd は、サブスクリプションで報告される5時間および週単位の利用上限を読み取り、CLI または MCP 経由で、続行、待機、または別の経路への切り替えを判断します。
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
macOS、Linux、Windows(実験段階)に対応しています。テレメトリーはありません。実行時の依存関係はありません。
headroomlabs-ai/headroom(コンテキスト圧縮プロジェクト)とは関係ありません。
インストール
Node 22.13 以降が必要です。npm パッケージは headroomd、Homebrew のフォーミュラは
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 は Claude Code 独自の /usage を最大 10 分ごとに実行します(ステータスラインでは取得できないスコープ別の使用状況を追加します。ステータスラインは 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 plugin を参照してください。
すでに Claude Code や別のエージェントを実行していますか?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 に対応していないエージェント(たとえば Codex)は、CLI を呼び出します。その後、エージェントに For agents の手順を伝えてください。MCP ツールと呼び出し例については、 docs/mcp-and-agents.md を参照してください。
手動セットアップとオプション設定
上記の 3 つのコマンドが最短の手順です。検出だけを行う場合:
headroom accounts discover # finds Claude, Codex, Antigravity, Grok and Kimi logins
macOS と Linux では、brew install apertur3/tap/headroom により同じパッケージがインストールされ、
brew services start headroom サービスが追加されます。
手動の場合も、同じ手順を 1 つのコマンドで実行できます:
headroom setup # discovery, doctor, service, MCP registration -- asks before each change
headroom notify configure を実行して、通知チャンネル、プリセット、上書き設定を選択します。headroom update は
新しいパッケージをインストールすると決めたときだけ実行してください。headroom uninstall は
セットアップを元に戻し、headroom completion <bash|zsh|fish|pwsh> はシェル補完スクリプトを出力します。
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 を編集してください。
任意で 2 つ目のプロファイルを追加する場合、ポーリングせずにログアウト状態にしておくには、そのプロファイルの [[accounts]] ブロックに
enabled = false を追加するか、headroom accounts disable <name> を実行します。
設定は保持され、headroom accounts enable <name> で再び有効にできます。
各手順で付与される権限とその理由を含む詳細なガイドについては、docs/quickstart.md を参照してください。
status/doctor は npm レジストリを 1 日に最大 1 回確認し(headroomd の
バージョンを取得する単純な GET で、アカウントデータは送信しません)、新しい headroomd が公開されている場合は 1 行の通知を表示します。インストールするには
headroom update を実行してください(自動更新は行われません)。確認を無効にするには、~/.headroom/policy.toml に
update_check = false を設定してください。詳しくは
最新状態を保つ を参照してください。
エージェント向け
エージェントが読み込む CLAUDE.md または AGENTS.md にこれを貼り付け、プレースホルダーを独自のアクションクラス、メーター、エージェント名に置き換えてください。エージェントは、作業を割り当てる前に 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`.
各ターンでエージェントの前に現在のクォータを表示するには、headroom hook install --agent claude を実行するか(または headroom setup で「はい」と回答してください)、各 Claude Code プロンプトに、デーモンが最後にポーリングした際に書き込んだ1行が、その経過時間とともに含まれるようになります。1ターンあたり約60トークンを使用します。任意のエージェントで同じ行を表示するには、headroom line を実行してください。現時点では macOS および Linux 上の Claude Code のみが対象です。Windows、Codex、Gemini のフックにはまだ対応していません。
単純な can は参考情報です。予約すると、Headroom を利用する他のエージェントにポイントが確保されたことを知らせますが、ジョブ自体が消費するポイントを制限するものではなく、Headroom を利用しないツールを停止することもできません。ペース状態、リース、予約について詳しくは、skills/headroom/SKILL.md をご覧ください。
プラットフォームの対応状況と既知の制限事項
| 7 読み取り対象のソース | 3 CI でテスト済みの OS | 1 ローカルデーモン、判断ごとに1回呼び出し | 0 テレメトリー(オプトアウト可能な更新確認が1件) |
ソース:5つのサブスクリプションサービス(Claude、Codex、Kimi、実験的な Antigravity と Grok)と2種類のローカルサーバー(vLLM と llama.cpp)。読み取りデータが古い場合や読み取りに失敗した場合は、数値ではなく常に UNKNOWN と表示されます。詳細な説明 · 再現方法
| プラットフォーム | 状況 |
|---|---|
| macOS | 主な対象プラットフォームです。1台のマシンで日常的に使用し、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 のドキュメント化されていないチャットプロキシエンドポイントを読み取り、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 マシン 1 台。毎日使用する環境はこれのみです | | パッケージ化した 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` シムがブロックされます。`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) で実施)。シェルコマンドを実行できるエージェントであれば、CLI と `--json` を介して利用できます。その他の MCP クライアントは未テストです | | Antigravity | 実験的です。macOS 14 以降のみ対応し、ベンダーが変更する可能性のある非公開のローカルエンドポイントに依存します | | ベンダーエンドポイント | 非公開で、バージョン管理されていません。Headroom はエンドポイントを固定し、秘匿化したフィクスチャを記録し、形式が変更された場合は UNKNOWN を出力しますが、動作が継続することは保証できません |理由
複数のジョブに処理を振り分けるエージェントには、まず 2 つの答えが必要です。このアカウントでジョブを実行できるか、そして、ほかのどのジョブがすでに容量を予約しているかです。ベンダーの画面では、プログラムがこのどちらの答えも得られません。また、古い読み取り値を使うと、すでに容量がないアカウントにさらに作業を送ってしまう可能性があります。Headroom はベンダーの読み取り値と協調的な予約を組み合わせます。読み取り値が古い場合や失敗した場合は数値ではなく UNKNOWN を表示し、--allow-unknown を渡さない限り、can はその状態に対して NO を返します。
1 つのデーモンが Claude、Codex、Antigravity、Grok、Kimi、ローカルの vLLM または llama.cpp プール全体のクォータを読み取り、履歴を保持してリセットを検出します。Antigravity と Grok のサポートは実験的です。
合成データです。端末では、scripts/render-demo-animated.mjsで生成されたモックホームに対して、実際のCLIを実行しています。
インストール · エージェント向け · 理由 · デモ · 設計原則 · ドキュメント
使用量アナライザーとの違い
ccusageなどの使用量アナライザーは、ローカルの使用量ファイルを読み取り、推定コストを報告します。Headroomは、ベンダーが提供する使用量と上限を、ベンダー自身の使用量エンドポイントから読み取り、作業開始前に答えを返します。作業を割り振るエージェント向けに、can、gate、route、リース、受信箱を提供します。これらは異なる問いに答えるもので、併用できます。
使用前と使用後
確認せずにいると、エージェントはタスクの途中で上限に達し、それを知ることになります。Headroomを使えば、事前に確認し、答えが「いいえ」の場合はフォールバックリストの次のクラスを試します。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を使うほかのエージェントから、その容量は使用中に見えます。その後、コマンドを実行して予約を解放します。合成データを使った実行可能な例はexamples/にあります。
機能
| 実際の上限を読み取ります Claude、Codex、Antigravity、Grok、Kimiが報告するサブスクリプションの使用状況と上限に加え、ローカルのvLLMまたはllama.cppプールの利用可能状況と負荷も読み取ります。 | 割合だけでなくペースも把握します 各ウィンドウの状態をHARVEST、NORMAL、CONSERVE、FREEZE、UNKNOWNで示します。リセット後の猶予期間を設けたうえで、一定のペースで消費すると想定して判定します。 | 実行、待機、経路変更を判断しますcan、gate、route、plan、fill、waitが、ジョブの開始前に答えを返します。 |
| 予約 リースとメーターごとの予約により、Headroom( run、can --lease)を使うエージェント間で容量を調整します。 | 安全側に倒します 読み取りが古い場合や失敗した場合は、数値ではなくUNKNOWNを出力します。デフォルトでは、 canはその場合にNOと回答します。 | ローカルのみ 0600ソケット(Windowsでは名前付きパイプ)上で動作するデーモン、OSのストアに保存するHeadroom独自のシークレット、テレメトリーなし。CLIは1日に最大1回、npmで新しいバージョンを確認します。 update_check = falseで無効にできます。 |
| 読み取り対象 | Claude · Codex · Antigravity(実験的)· Grok(実験的)· Kimi · ローカルのvLLM · ローカルのllama.cpp |
| 呼び出し元 | MCP経由のClaude Code(テスト済み)、シェルコマンドを実行できる任意のエージェント(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、シェルのcompletion |
Headroomはルーターではありません。どのモデルが何を得意とするかは人それぞれの見解であり、月ごとに変わります。設定は
~/.headroom/routing.tomlに記述してください。Headroomは予算に基づいてフォールバックリストを絞り込むだけです。また、リクエスト経路に介在することはありません。
ダッシュボード
合成データ。生成スクリプト:scripts/render-dashboard-demo.mjs。
人間向けダッシュボードとブラウザーレポート
ターミナルの概要を開くか、ローカルのブラウザースナップショットをエクスポートします。
headroom dashboard
headroom dashboard --once --ascii
Tab キーでメーターを選択し、v で詳細を、e でイベントを表示します。どちらのグラフビューにも、記録された残容量が表示されます。読み取り値が欠落している場合や、信頼できない場合は空白になります。
同じ記録履歴をブラウザーで開くには、次のコマンドを実行します。
headroom dashboard --html report.html
生成されたファイルをブラウザーで開きます。レポートには、サブスクリプションの使用状況とリセット時刻の概要が表示され、ウィンドウグラフを選択したり、サンプルの詳細を確認したりできます。ライトテーマとダークテーマに対応しており、外部へのリクエストは行いません。これはスナップショットです。新しい読み取り値を反映するには、再生成してください。--force を指定しない限り、既存のファイルは保持されます。Unix のパーミッションに対応したシステムでは、新しいファイルのモードは 0600 になります。
設計原則
以下はすべて、コードで適用され、テストで保証されるルールです。それぞれに、実際に発生した過去の障害という理由があります。
- 安全側に倒す:偽の数値は出しません。 読み取り値が欠落、古い、または矛盾している場合は UNKNOWN になり、
--allow-unknownを明示的に指定しない限り、canは NO を返します。 - 無効にできない、古いレーンのカナリア。 6 時間にわたって新しい読み取り値がないレーンは、通知設定の内容にかかわらずアラートを発します。
- Headroom が起動したと確実に証明できるものだけを終了します。 macOS と Linux では、記録された pid、コマンド、起動時刻が現在も一致する場合に限り、プロセスにシグナルを送ります。
- シークレットはそれぞれの保存先に保管します。 通知トークンは OS のシークレットストアに保存します。ベンダーの認証情報は使用時にベンダー独自のストアまたは認証情報ファイルから読み込み、コピーはしません。出力では機密情報を伏せます。
- 過去の障害ごとに、機密情報を伏せたフィクスチャを用意します。 現場で確認された Antigravity の障害パターンにはすべて、フィクスチャとテストがあります。
それぞれが適用・テストされる箇所
- **フェイルクローズ:偽の数値は決して使いません。** 読み取り値が欠落している、古くなっている、保留中である、または一貫性がない場合はUNKNOWNになり、`--allow-unknown`を渡さない限り、`can`はNOを返します([`freshnessGate`, `canConsume`](src/policy.ts)、[`store-policy.test.ts`](test/store-policy.test.ts)でテスト済み)。使用量を報告しないAntigravityレーンは、数値を補完せず、ブロック中、アイドル、または不明に分類されます([`antigravity-lanes.ts`](src/antigravity-lanes.ts)、[`antigravity-lane-classifier.test.ts`](test/antigravity-lane-classifier.test.ts))。 - **黙らせることができず、人に通知を送りすぎない、古いレーンのカナリア。** 6時間(設定可能)新しい読み取り値がないメーターレーンは、受信箱と`headroom doctor`にアラートを出します。通知設定の前に、また通知設定とは独立して実行されるため、通知チャネルをミュートしても、`events_off`にしても、このアラートは隠れません。外部チャネルにはレーンごとの通知は送信されず、1回の事象につきプリンシパルごとに平易なメッセージを最大1件、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))。ウォッチドッグとPID・開始時刻の確認は、Windowsでは有効になりません。 - **シークレットはそれぞれのストアに保管します。** 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のtarballも、非公開の住所、メールアドレス、ホームディレクトリのパスが含まれていないかスキャンします([`privacy-sweep.sh`](scripts/privacy-sweep.sh)、CIで実行)。Headroom の仕組み
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 のままです。実際の割合を含むアイドル状態のウィンドウでも、リセット時刻が人為的なものに見える場合は、疑義を示すマーカーが付くことがあります。成功したレスポンスに
5 時間のウィンドウがまったく含まれない場合(実際にアイドル状態のローリングウィンドウ)は、UNKNOWN
ではなく n/a と表示され、予算チェックもブロックされません。エンドポイントの仕様とネイティブ
リーダーは、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 を
使うエージェント間の調整はできますが、サブスクリプションを消費する無関係なツールを停止することはできません。
例
合成データを使って実行でき、ログインは不要です。一度ビルドし、シード済みのホームディレクトリを 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 に触れることはありません。また、グローバルな headroom ではなく、リポジトリの
ビルド成果物(dist/cli.js)を呼び出します。使用するバイナリも表示します。
スクリプトと、スターター用の accounts.toml、policy.toml、routing.toml については
examples/ を参照してください。
ドキュメント
- docs/claude-code-plugin.md:Claude Code プラグインのインストール、クォータ行、MCP、アンインストール
- docs/quickstart.md:インストールから実態を示す最初の行まで。macOS、Linux、Windows に対応
- docs/concepts.md:プリンシパル、メーター、ウィンドウ、観測値、ペース状態、リース、イベント
- docs/mcp-and-agents.md:MCP ツール、呼び出し例、オーケストレーターによる使用方法
- docs/json-contract.md:すべての
--json出力と MCP ツール結果の、バージョン管理されたフィールドごとの形式と互換性の保証 - docs/vendors.md:Headroom がベンダーごとに読み取る情報と、既知の実運用上の制限
比較と読み取り対象
Headroom はコストトラッカーではありません。ccusage はローカルログから支出を推定し、headroomd はベンダーが適用する上限を読み取ります。両者は併用できます。
Headroom は非公式です。デフォルトでは Claude Code 自体を通じて Claude の情報を読み取ります。それ以外のリーダーは、ユーザー自身のログイン情報を使って、文書化されていないベンダーのエンドポイントを利用します。ベンダーのエンドポイントとアカウントを参照してください。
ベンダーのエンドポイントとお使いのアカウント
独立したオープンソースプロジェクトであり、Anthropic、OpenAI、Google、xAI、Moonshot AI とは提携、後援、推奨の関係にありません。複数の連携機能では、お使いのログイン情報を使用して、ベンダーが公開していないエンドポイントにアクセスします。詳しくはベンダーのエンドポイントとお使いのアカウントをご覧ください。Claude、Codex、Antigravity、Grok、Kimi はそれぞれの所有者の商標であり、ここでは Headroom が読み取るサービスの名称としてのみ使用しています。これは npm パッケージの headroomd(リポジトリ Apertur3/headroom)であり、コンテキスト圧縮ライブラリ headroomlabs-ai/headroom など、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分に1回、お使いの claude -p "/usage" を実行します。最新のステータスラインのスナップショットの有無は問いません。モデルターンや費用は発生しません | Headroom は取り扱いません。Claude Code が自身のログイン情報を使用します | はい。Agent SDK のリファレンスに usage_report の記載があります(実験的機能と明記) |
Claude、使用状況のプローブ(オプトイン:policy.toml で claude_probe = true) | GET api.anthropic.com/api/oauth/usage | macOS Keychain または .credentials.json にある Claude Code の OAuth トークン | いいえ。User-Agent: headroomd/<version> を送信します |
| Codex | GET 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 のウェブゲートウェイ | ご自身で 0600 のファイル(デフォルトは ~/.kimi/auth.token)に保存する kimi-auth ウェブセッショントークン | いいえ |
| 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をご覧ください。
ステータス
リリースはnpmにheadroomdとして公開されます。CHANGELOG.mdには、各リリースでの変更点が記載されています。ベンダーのエンドポイントは非公開で、予告なく変更されるため、Headroomはエンドポイントを固定してフィクスチャを記録し、401、403、429ではバックオフし、古い数値の代わりにUNKNOWNを表示します。検証済みの内容と未検証の内容については、プラットフォームのサポートと既知の制限をご覧ください。AntigravityにはmacOSと、デーモンが保持するagyが必要です。ベンダーの設定をご覧ください。
貢献を歓迎します。CONTRIBUTING.mdと、good first issueラベルが付いたイシューをご覧ください。
MITライセンスです。サードパーティに関する通知はTHIRD_PARTY_NOTICES.mdをご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。