ポストモーテム:Claude Max + OpenClawにおける古いOAuthと孤立したCronジョブによる課金エラー

✍️ OpenClawRadar📅 公開日: May 12, 2026🔗 Source
ポストモーテム:Claude Max + OpenClawにおける古いOAuthと孤立したCronジョブによる課金エラー
Ad

Claude Maxを使用したセルフホスト型OpenClaw環境で、割り当てを十分に下回っているにもかかわらず、billing error — API key has run out of creditsが返されるようになりました。2日間のデバッグの結果、2つの根本原因と、エラーをランダムに見せるキルチェーンが明らかになりました。

根本原因1: 期限切れOAuthトークンがプロバイダ全体を汚染

auth-profiles.jsonには2つのエントリがありました。有効なanthropic:claude-cli OAuthプロファイルと、sk-ant-oat01-...トークンを持つanthropic:manualプロファイルです。手動トークンの期限が切れると、OpenClawはそのプロファイルを失敗させるだけでなく、プロバイダレベルの課金失敗として分類し、anthropicプロバイダ全体をブラックリスト化し、正常なOAuthプロファイルを含むすべてのモデルをスキップしました。ログには次のように表示されていました:

reason: "billing" errorPreview: "Provider anthropic has billing issue (skipping all models)" chain_exhausted

有効なリフレッシュトークンを持つ正常なOAuthプロファイルは試行されませんでした。

修正: anthropic:manualをauth-profiles.jsonとopenclaw.jsonから完全に削除します。anthropic:claude-cliのみを残します。

根本原因2: 分離されたcronジョブが別の課金バケットにヒット

OpenClawには2つの実行パスがあります:

  • メインセッション — /usr/bin/claudeバイナリを実行し、Max/Proサブスクリプションに請求されます ✅
  • 分離/組み込み実行 — Anthropic APIへの直接HTTP呼び出しで、Extra Usageバケットに請求されます ❌

sessionTarget: isolatedのcronジョブは、スタンドアロンの組み込みエージェントを起動し、HTTP経由でAnthropic APIを直接呼び出します — CLIが送信するClaude Codeヘッダーは含まれません。AnthropicはこれをExtra Usageバケットにルーティングし、これは完全に別の割り当てです。Extra Usageがオフの場合、すべての分離cron実行は400エラーを返します。OpenClawはさらに悪化させます: 1回の課金エラーでauth-state.jsonのdisabledUntilが約24時間先に設定され、クールダウンが発動するまで通常のチャットを含むすべてのリクエストをロックアウトします。ロックアウトはゲートウェイ再起動後も持続します。

Ad

完全なキルチェーン

  1. ゲートウェイ再起動 → 見逃されたcronジョブがキャッチアップのためにキューイングされる
  2. 分離エージェントが組み込みランナーを介して起動 → Anthropic APIへの直接HTTP呼び出し(CLIヘッダーなし)
  3. Extra Usageバケット → 400エラー
  4. OpenClawが認証プロファイルを約24時間ロック → 通常のチャットを含むすべてのリクエストがブロックされる

修正手順

  1. 課金ロックアウトを即座に解除:
    python3 -c "
    import json
    with open('/home/USER/.openclaw/agents/main/agent/auth-state.json') as f:
        d = json.load(f)
    if 'usageStats' in d:
        for profile in d['usageStats']:
            d['usageStats'][profile].pop('disabledUntil', None)
            d['usageStats'][profile].pop('failureCounts', None)
            d['usageStats'][profile].pop('errorCount', None)
            d['usageStats'][profile].pop('disabledReason', None)
            d['usageStats'][profile].pop('lastFailureAt', None)
    with open('/home/USER/.openclaw/agents/main/agent/auth-state.json', 'w') as f:
        json.dump(d, f, indent=2)
    print('クリア完了。')
    "
    openclaw gateway restart
  2. すべてのcronジョブをisolatedからmainに移動:
    python3 -c "
    import json
    with open('/home/USER/.openclaw/cron/jobs.json') as f:
        d = json.load(f)
    jobs = d if isinstance(d, list) else d.get('jobs', [])
    for j in jobs:
        if j.get('sessionTarget') == 'isolated':
            print(f'修正中: {j["name"]}')
            j['sessionTarget'] = 'main'
    with open('/home/USER/.openclaw/cron/jobs.json', 'w') as f:
        json.dump(d, f, indent=2)
    print('完了。')
    "

対象者: OpenClawをセルフホストし、Claude MaxまたはProを使用していて、割り当てを下回っているにもかかわらずランダムな課金エラーが発生するすべての人。

📖 全文ソースを読む: r/openclaw

Ad

👀 See Also

OpenClaw v2.0のアップデートは、インストール前に手動での確認が必要です。
Guides

OpenClaw v2.0のアップデートは、インストール前に手動での確認が必要です。

OpenClawの最新アップデートには、12の破壊的変更、新しいプラグインシステム、30以上のセキュリティパッチが含まれています。ユーザーが環境変数、状態ディレクトリ、ブラウザ自動化設定を確認せずにnpm updateを実行すると、このアップデートは設定を静かに破壊します。

OpenClawRadar
ClaudeのHaiku、Sonnet、Opusモデルを選択するための実践的フレームワーク
Guides

ClaudeのHaiku、Sonnet、Opusモデルを選択するための実践的フレームワーク

開発者がClaudeの3つのモデルを400行のExpress.jsリファクタリングタスクでテストし、重要な違いは知能ではなく推論の深さにあることを発見しました。Haiku 4.5は単純な部分を処理できましたが、ミドルウェアの順序付けを見落とし、Sonnet 4.6は順序付けの問題を捕捉してTypeScriptの型を追加し、Opus 4.6は認証ミドルウェアのセキュリティ上の欠陥を特定しました。

OpenClawRadar
OpenClaw v2026.3.13におけるサブエージェントが表示されない問題の修正
Guides

OpenClaw v2026.3.13におけるサブエージェントが表示されない問題の修正

OpenClaw v2026.3.13でカスタムサブエージェントがエージェントリストに表示されない問題の回避策: openclaw.jsonのエージェントリストをIDのみに簡略化し、runs.jsonでステータスを'idle'に設定して手動でエージェントを登録します。

OpenClawRadar
12の効率的なAIエージェントワークフロー向けOpenClawパワーユーザーのコツ
Guides

12の効率的なAIエージェントワークフロー向けOpenClawパワーユーザーのコツ

Redditの投稿では、OpenClawの使用を最適化するための実践的な戦略が概説されています。これには、会話をトピック別のスレッドに分割する、音声メモを入力に使用する、タスクに適したモデルを選択する、作業をサブエージェントに委任する、セキュリティレイヤーを実装するなどが含まれます。

OpenClawRadar