コンテンツへスキップ
創業プロモーション:先行支援者にはOpenLimiter Proを50%OFFで提供

取り込み

3つの経路が、quotaのデータをOpenLimiterの前に置きます。3つとも、オフラインです。どれもネットワークに触れず、そのいずれかが動くまで、すべてのコマンドは正直にunknownを報告します。

1. Claude Codeのstatuslineペイロード

Claude Codeが組み込まれていれば、追加の作業が要らない経路です。Claude Codeは描画のたびにあなたのstatuslineコマンドを実行し、現在のセッションを表すJSONオブジェクトをそのコマンドの標準入力に書き込みます。そのオブジェクトがレート制限ブロックを含んでいる場合、openlimiter statuslineはそれを検証し、キャッシュに書き込み、同じ呼び出しの中で新しい数値を描画します。

それが読み取るブロック(Anthropic自身のstatuslineドキュメントより)
{
  "rate_limits": {
    "five_hour": { "used_percentage": 23.5, "resets_at": 1738425600 },
    "seven_day": { "used_percentage": 41.2, "resets_at": 1738857600 }
  }
}

used_percentageは、すでに使われたウィンドウの割合で、0から100までです。resets_atは日付の文字列ではなく、秒単位のUnixエポック数値です。フィールド名もエポックの符号化方式も、このプロジェクトではなくAnthropicが公開しているstatuslineドキュメントに由来しており、それぞれのウィンドウは互いに独立して任意です。片方だけを名指すペイロードは、部分的なmeterではなく、それ自体で完結した1つのmeterです。

  • rate_limitsが現れるのは、ProまたはMaxプランのClaude.ai加入者に限られ、しかもセッション最初のAPIレスポンスの後だけです。rate_limitsブロックのないペイロードは、エラーではなく、無料アカウントやまだAPIを呼び出していないセッションの通常の形です。
  • そのウィンドウにとってあり得ないほど先のリセット、たとえば5時間のウィンドウが数日先にリセットされるような場合は、信頼するのではなく、それ単体で取り除かれます。もう一方のウィンドウはそのまま数えられます。

セッションオブジェクトの中の他のものはすべて無視されます。検証に失敗したウィンドウは取り除かれ、もう一方のウィンドウはそのまま数えられます。

2. ディスク上の手動ドキュメント

状態ディレクトリの中にmanual.jsonを書き込めば、すべてのコマンドがそれを読み取ります。そのディレクトリが各プラットフォームのどこにあるかは設定を参照してください。

manual.json
{
  "version": 1,
  "meters": [
    { "name": "MONTHLY", "used_percent": 61.5, "reset_at": "2026-08-29T12:11:29.714Z" }
  ]
}

各行が満たすべきルール

  • nameは、文字で始まる、最大32文字までの大文字の識別子です。
  • used_percentは0から100までの数値です。
  • reset_atは未来を指すISO形式の日時です。
  • 最大10個までのmeterが読み取られます。11個目以降の行は無視されます。
  • これらのルールのいずれかを破る行は取り除かれ、残りの行はそのまま数えられます。何かが修復されることはありません。

ファイルをキャッシュに取り込むには、openlimiter snapshot --refreshを実行してください。

3. 汎用のingestコマンド

どんなスクリプトやエージェントでも、プロバイダー統合なしにOpenLimiterへドキュメントを手渡せます。このコマンドは標準入力か、--payloadで渡されたインラインのドキュメントを読み取ります。

ターミナル
echo '{"meters":[{"name":"AGENT_BUDGET","used_percent":12.5,"reset_at":"2026-08-09T13:11:30.141Z"}]}' | openlimiter ingest

openlimiter ingest --payload '{"meters":[{"name":"AGENT_BUDGET","used_percent":12.5,"reset_at":"2026-08-09T13:11:30.141Z"}]}'

providerフラグがない場合、そのドキュメントは手動ドキュメントとして扱われ、結果として得られるスナップショットはmanualの精度でラベルづけされます。--provider <id>を指定すると、そのドキュメントはそのconnector自身のパーサーへ渡され、そのconnectorのラベルを保ちます。

ターミナル
openlimiter ingest --provider codex --payload '{"rate_limits":{"primary_window":{"used_percent":33,"reset_at":"2026-08-09T14:11:30.264Z"}}}'

有効なプロバイダーidはclaudeopenroutercodexantigravityopencodemanualです。未知のidは使用エラーで、終了コード2になります。

データはどうなるか

取り込まれた行は、他のすべての書き込み側が使うのと同じロックのもとで、1つのキャッシュへマージされます。そのため、すでにキャッシュされているものが失われることはなく、異なるプロバイダーを観測する2つの書き込み側が、互いの行を静かに落とし合うこともありません。

  • 値は、書き込まれる前にスナップショットのスキーマに対して検証されます。
  • パーセンテージは0から100の範囲に収まります。その範囲外の値は、丸め込まれるのではなく、取り除かれます。
  • すべての書き込みはアトミックな置き換えを通じて行われるため、読み取る側は以前の内容か新しい内容のどちらかを見るだけで、部分的なファイルを見ることは決してありません。
  • 鮮度は、値が観測された時刻と期限切れになる時刻から導かれるため、古いデータは、現在のものとして静かに使い回されるのではなく、そのようにラベルづけされます。

何も検証を通らなかった場合はどうなりますか。そのコマンドは、範囲の定まったmeterが1つも残らなかったことを報告し、プレースホルダーを書き込むのではなく、失敗として終了します。