その他

Claude Code Max 20xで月額枠を87%残したまま200.98ドルを別請求された事故|原因はgitコミットの『HERMES.md』、1分で確認する手順

Claude CodeのMaxプラン(月額200ドルなど)を契約して使っているのに、
ある日いきなり「追加料金で200ドル使い切りました」のような請求が届く——この事故が、
過去のgit commit(コードの変更履歴に付ける1行メモ)に「HERMES.md」という文字列が紛れているだけで起きる、
という報告がGitHubに上がっています。

Issue #53262には、
月額200ドルのMax 20xプラン契約者が、
月額枠を86〜87%も残したまま別途200.98ドルを追加課金で吸われた実例が記録されています。

対処は、
過去のコミットメッセージから「HERMES.md」の文字を消すこと。
Claude Code自身に「過去のコミット履歴を全部見て、
大文字HERMES+ドット+小文字mdの組み合わせを探して」と頼めば1分で安全確認できます。

この記事はClaude CodeのMaxプラン(月額5xまたは20x)を契約してgitでコードを管理している人向け(gitの基本操作とClaude Codeを触ったことがあれば読めます)。

そもそも何が起きているのか

Claude Code公式リポジトリのGitHub Issue #53171(未解決)と #53262(クローズ済み)が、
2026年4月25日に独立して報告した内容を要約するとこうなります。

Literal "HERMES.md" in git commit messages triggers 400 "out of extra usage" on Max OAuth (content filter false-positive misclassified as quota error)

出典: GitHub Issue #53171

砕いて訳すと「git commitメッセージに HERMES.md が含まれていると、
MaxのOAuth(公式アプリやログイン経由で使う認証方式)で400エラーが返ってきて、
画面には『追加料金枠を使い切りました』と表示される。
実際は、
サーバー側で送信内容を検査して拒否しているだけなのに、
課金エラーとして誤って分類されている」。

これがやっかい。

Claude Codeは起動するたびに、
直近のgit commitメッセージをAIに渡す文脈情報(システムコンテキスト)として送る作りになっています。
だからMax 20xプランを契約していても、
コミット履歴に HERMES.md が1つ残っているだけで、
毎回のリクエストがMax枠ではなく追加料金枠(extra usage)に強制的に流される事故が起きうる、
ということです。

具体的に踏みやすい場面はこんな感じ。

  • 別のAIコーディングツール(Hermes Agentなど)を試して、Claude Codeとの比較メモをコミットメッセージに書いた
  • 3ヶ月前にHermes Agentの設定ファイルを追加して、コミットに「add HERMES.md」と書いた
  • 業務で複数のAIエージェントを切り替えて使っていて、過去のコミットに参照ファイル名が残っている

つまり「いま使ってない過去のコミットメッセージ」が地雷になる。

実際にいくら飛んだのか

Issue #53262の報告者は、
調査の流れと被害額をかなり細かく書いています。

HERMES.md in git commit messages causes requests to route to extra usage billing instead of plan quota

影響を受けたモデル: claude-opus-4-6[1m] および claude-opus-4-7

出典: GitHub Issue #53262

記録されている事実関係をまとめると以下です。

項目内容
契約プランMax 20x(月200ドル)
追加料金で消えた額200.98ドル(Max枠の外で別請求)
事故時のMax枠の残量86〜87%が未使用
Claude Codeのバージョンv2.1.119
OSmacOS(Apple Silicon)
原因の絞り込み方影響リポジトリを二分探索→履歴を持たない孤立ブランチで個別コミット検証→HERMES.mdを特定

月額200ドルを払って、
月の枠をほとんど消費していないのに、
追加料金枠から200ドル近く飛んだ計算です。

金額そのものより痛いのが、
使った量と請求がズレすぎて、
どこで何が起きたか追いかけられない構造であること。

どの文字列がアウトで、どの文字列はセーフか

Issue #53171と#53262の報告者は再現テストをずらっと並べていて、
大文字小文字の区別(case-sensitive、
大文字Aと小文字aを別物として扱う判定)がかなり細かいことが分かっています。

コミットメッセージの文字列結果
HERMES.md追加料金枠に飛ばされる(事故)
test HERMES.md test(文中混在)追加料金枠に飛ばされる(事故)
add HERMES.md(動詞+スペース)追加料金枠に飛ばされる(事故)
hermes.md(全部小文字)正常
Hermes.md(先頭だけ大文字)正常
HERMES(拡張子なし)正常
HERMES.txt(拡張子違い)正常
AGENTS.md正常
README.md正常
ディスクに HERMES.md ファイルがあるだけ(コミットには含まれない)正常
orphan branch(履歴を持たない孤立ブランチ)正常

大文字HERMES+ドット+小文字md、
この3点セットが揃って初めて発火する作り。

個人的には、
ここまで限定的な引き金が偶然踏まれているのは作為というより、
Hermes Agent(Nous Researchが開発するAIエージェント。
Claude Codeに似たコーディング支援ツール)が競合のように扱われて、
その指示ファイル名がフィルタで弾かれている、
と考えるのが自然です。
Hermes Agent公式ドキュメントは .hermes.md または HERMES.md を「プロジェクト指示ファイル」と定義していて、
Claude CodeにおけるCLAUDE.mdと同じ役割を持ちます。

最小再現コードはどう書かれているか

Issue #53171が示している最小再現コード(事故を起こす最も短い手順)はこれだけ。

mkdir /tmp/repro-hermes && cd /tmp/repro-hermes
git init -q
echo a > a.txt && git add .
git commit -m "HERMES.md"
claude
# > hi
# Result: API Error: 400 "You're out of extra usage..."

空の作業フォルダを作って、
適当なファイルを1個追加して、
コミットメッセージに HERMES.md と書いて、
Claude Codeを起動して「hi」と話しかけるだけ。
これで400エラーが出る、
という再現手順です。

正確なエラー本文も同Issueに記録されています。

API Error: 400 {"type":"error","error":{"type":"invalid_request_error","message":"You're out of extra usage. Add more at claude.ai/settings/usage and keep going."}}

出典: GitHub Issue #53171

気になるのは、
エラーの種類が invalid_request_error(リクエストが不正だった、
という意味のエラー)なのに、
表示されるメッセージが「追加料金枠を使い切りました」になっていること。
Issue #53171の報告者はこれを「サーバー側が拒否しているだけなのに、
ユーザーには課金エラーに見せている」と指摘していて、
私もこの見方が正しいと感じます。

原因が掴めないエラー設計です。

Anthropic公式は何と言っているのか

Anthropic公式ヘルプセンターの「Manage extra usage」ページでは、
追加料金枠の定義がこう書かれています。

Extra usage allows individuals subscribed to paid Claude plans (Pro, Max 5x, and Max 20x) to continue using Claude seamlessly after reaching their included usage limits.

Your subsequent usage will be billed at standard API pricing rates.

出典: Anthropic Help Center: Manage extra usage

つまり追加料金枠はサブスク料金とは別で、
API(プログラムから呼び出す時の通常レート)の標準価格で請求されます。
月200ドルのMax 20xを契約していても、
追加料金枠に流された分はAPI単価そのままの別請求、
という仕組みです。

そしてここが一番の問題。

Anthropic公式ドキュメントは「Using Claude Code with your Pro or Max plan」で「Claude WebアプリとClaude Codeの使用量は同じ枠で計算する(all activity in both tools counts against the same usage limits)」と明記しているのに、
送信内容のフィルタや課金枠の振り分け変更については一言も触れていません
Issue #53171・#53262の両方とも、
Anthropic社員の公式コメントは2026年4月27日時点でゼロ。
#53262はクローズされていますが、
修正コミットの記録もクローズの理由も書かれていません。

これは正直しんどい。

linux.do掲示板では「Anthropicは問題を確認したが返金しないと回答した」という個人投稿も流れていますが、
公式確認できないので「掲示板に書き込みがある」という事実だけ書いておきます。

1分で安全確認する手順(Claude Code自身にgit logを掘らせる)

これが今回の記事で一番伝えたい部分。
Claude Code自身に過去のコミット全部を、
大文字小文字を区別する設定で当たらせると、
自分のリポジトリが地雷を踏んでいるかどうか1分で分かります。

  1. STEP1: 対象のリポジトリ(コードの保管庫)に移動してClaude Codeを起動するcd ~/projects/your-repo のあと claude と打つだけ。
  2. STEP2: 自然な日本語でClaude Code自身に診断を頼む。例: 「git logの過去全コミットメッセージから、大文字HERMES+ドット+小文字mdの組み合わせを含むコミットを、大文字小文字を区別して検索して。見つかったコミットハッシュとメッセージを全部表示して」。
  3. STEP3: 念のためシェル(黒い画面)でも検証する。別のターミナルで git log --all --format="%H %s" | grep -c "HERMES\.md" と打って、結果が0なら安全。1以上ならそのリポジトリに該当コミットあり。
  4. STEP4: 該当コミットが見つかったら次セクションの書き換え手順に進む

STEP3で1つ注意点。
--all オプションを付けないと現在いるブランチ(作業の枝)しか見ないので、
別の枝に残っている履歴を取りこぼします。
複数のブランチを使い分けながら自然な英語や日本語でコミットを書く人は、
必ず付けてください。

該当コミットが見つかった時の書き換え手順

git公式(git-scm.com)の「Rewriting History」ページが示している方針に沿うと、
選択肢は2つあります。
チームと共有しているリポジトリか、
自分のローカル限定かで分岐します。

状況使うツール注意点
該当コミットが直近10件以内&まだpushしていない(リモートに送っていない)git rebase -i HEAD~N(インタラクティブリベース。コミット履歴を1個ずつ選んで編集できる対話モード)rewordを選ぶとメッセージだけ書き換えられる
該当コミットが古い/たくさんある/既にリモートにpush済みgit filter-repo(git公式が推奨する履歴書き換えツール)新しくクローンし直したまっさらなコピーで作業する。最後はforce push(強制プッシュ。リモートの履歴を上書きするpush)が必要

git公式が出している警告はこう。

One of the cardinal rules of Git is that, since so much work is local within your clone, you have a great deal of freedom to rewrite your history locally. However, once you push your work, it is a different story entirely, and you should consider pushed work as final unless you have good reason to change it.

Don't include any commit you've already pushed to a central server — doing so will confuse other developers by providing an alternate version of the same change.

出典: git-scm.com: Rewriting History

共同開発者がいるリポジトリでforce pushする場合は事前相談が必須。
これを飛ばすと他の開発者の手元のリポジトリが壊れます。

ちなみに git filter-branch(昔よく使われていた履歴書き換えコマンド)はgit公式が「使用は推奨しない(its use is not recommended)」と明言していて、
代わりにgit filter-repoを案内しています。
古い記事の手順を真似して filter-branch を使わないこと。

具体的に git rebase -i を使う場合は、
git公式の説明に沿うと次の流れになります。

  1. STEP1: 該当コミットの位置を確認するgit log --oneline | grep "HERMES\.md" でコミットIDと、いまから何件前のコミットなのかを把握。
  2. STEP2: 対話モードのリベースを起動するgit rebase -i HEAD~N(Nには該当コミットを含む遡り件数を入れる)。
  3. STEP3: 該当行のコマンドを pick から reword に書き換えて保存・終了。エディタが再度開くので、コミットメッセージから HERMES.md の文字を消して保存。
  4. STEP4: まだpushしていなければ完了。push済みなら、共同開発者に事前通知してから git push --force-with-lease(普通の --force より少し安全な強制プッシュ。誰かが先に変更を入れていたら止まる)。

1つ前提として、
書き換えたコミット以降に並ぶ全コミットのIDも変わります。
CIタグ・PRリンク・他のコミットメッセージがそのIDを参照している場合は壊れる可能性があるので、
走らせる前に確認すること。

HERMES.md以外にもトリガーはあるのか

Issue #53171の報告者は「必ず再現する原因を特定できた最初の報告」と書いていて、
これより前にあった同症状のIssue群(#45020、
#45033、
#45028、
#45095、
#45390)は原因が分からないまま終わっていた、
とも記録しています。

関連するGist(GitHubのコード断片共有機能)では、
別の文字列(session_search
skill_manage
MEDIA:/)でも同じ400エラーが再現するという報告があり、
回避策としてキーワードに * を1文字挟む手法(例: ses*sion*_sea*rch)が共有されています。
これは公式Issue化されていないので補足情報扱いですが、
出典はこちらのGistです。

つまり、
現時点で公開されている地雷文字列で確実なのは HERMES.md だけ。
残りは未確定です。
Anthropicがどんなパターンをフィルタで弾いているのかは公開されていない、
というのもIssue #53171の指摘の1つです。

Maxプランユーザーが今すぐやるべきこと

まとめると、
私が情報を読んで「これは順番にやっておくべき」と思った優先順位はこうなります。

  1. 1. すべてのプロジェクトのgit logを、大文字小文字を区別する設定で HERMES.md 検索(前述のClaude Code診断プロンプト or grepコマンド)
  2. 2. 該当コミットがあったら rebase -i または filter-repo で書き換え(共同開発者がいればforce push前に相談)
  3. 3. これからも自然な英語や日本語でコミットを書く運用を続けるなら、メッセージから「HERMES.md」「.MD系の固有ファイル名」を意識的に外す(暫定の回避策)
  4. 4. claude.ai/settings/usage で追加料金枠の月の上限額(spend cap)を低めに設定(仮にもう一度発生しても被害を限定)
  5. 5. Issue #53171(未解決)をWatchして公式コメントを待つ

4番目の上限設定はAnthropic公式ヘルプセンター記載の「Adjust limit」機能。
Unlimited(無制限)に設定していると先払い方式で1日あたり最大2,000ドルまで吸われる仕様なので、
Maxプランを仕事で毎日使っている人ほど、
最初に絞っておく方が安全寄り。

FAQ

Q. HERMES.mdをコミットしたファイル名で扱っているだけでも事故になりますか?

Issue #53171・#53262の再現テストでは、
ディスクに HERMES.md ファイルが置いてあるだけ・ファイルの中身に書いてあるだけ・CLAUDE.md本文に書いてあるだけ・環境変数に入っているだけでは発火しないと記録されています。
発火する条件は「git commitメッセージのバイト列に大文字HERMES+ドット+小文字mdが含まれること」だけ。

Q. Issue #53262がクローズ済みということは修正されたのでは?

断定できません。
Issue #53262はクローズされていますがAnthropic社員のコメントなし、
修正コミットの記録なしでクローズされており、
理由は不明です。
Issue #53171は2026年4月27日時点で未解決のままで公式コメントもありません。
手元のClaude Code v2.1.119で当該文字列が出るリポジトリを使っている人は、
修正アナウンスが出るまで暫定の回避策を続けるのが安全寄りです。

Q. 月200ドルのMax 20xを契約していれば追加料金枠は発生しないのでは?

Anthropic公式ヘルプセンターによれば、
追加料金枠(extra usage)はPro/Max 5x/Max 20x契約者がプランの使用量上限に達した後でも継続利用できる仕組みで、
API標準価格で請求されます。
今回のバグはMax枠を残したまま追加料金枠に強制的に流される動きで、
Issue #53262では86〜87%のMax枠を残したまま200.98ドルが別請求されたと記録されています。

Q. 返金は受けられますか?

linux.do掲示板では「Anthropicは問題を確認したが返金しないと回答した」という報告が流れていますが、
これは個人投稿で公式確認できません。
Anthropicの公式アナウンスもなし。
返金可否は問い合わせベースで個別対応になるはず、
というのが現状で言える範囲です。

Q. force pushすると何が壊れますか?

git公式の警告通り、
共同開発者がいるリポジトリでforce pushすると、
他の開発者の手元にある古い履歴と新しい履歴が衝突して、
彼らのローカルブランチが壊れます。
書き換える前にチームに通知して、
他の開発者にも新しい履歴をクローンし直してもらう運用が必須です。

Q. 過去のコミットメッセージに「HERMES.md」が混ざりやすい状況は?

典型的なのは「Hermes AgentとClaude Codeの比較検証をしてコミットメッセージに参照ファイル名を書いた」「Hermes Agentとの連携設定の変更をコミットした」「Hermes Agent公式ドキュメントへのリンクをコミット本文に貼った」あたり。
Hermes Agent以外のAIコーディングツール(Codex、
Cursor、
Continueなど)と並行して使っている人ほど、
過去のコミットに固有ファイル名を残しがちです。

用語ミニ辞書

このページに出てきた言葉

HERMES.md
Nous Research製AIエージェント「Hermes Agent」のプロジェクト指示ファイル。Claude CodeにおけるCLAUDE.mdと同じ役割
git commit
コードの変更履歴に1行メモを付けて記録するgitの操作
extra usage(追加料金枠)
Pro/Max 5x/Max 20xプランの月の使用量を超えた後、API標準価格で課金される仕組み
OAuth認証
Claude公式アプリやブラウザ経由でログインして使う認証方式。APIキーを直接打ち込む方式ではない、Maxサブスク利用時の標準ルート
コンテンツフィルタ
サーバー側で送信内容を検査して、特定のパターンを拒否する機構
ルーティング
リクエストをどの処理経路に流すかの振り分け。今回は「Max枠処理」と「追加料金枠処理」の振り分けが該当
case-sensitive
大文字と小文字を区別して検索や一致判定をする設定
git filter-repo
git公式が推奨するgit履歴書き換えツール。git filter-branchの後継
force push
git pushに --force オプションを付けてリモートの履歴を上書きするプッシュ。共同開発者の履歴を壊す危険あり
orphan branch
履歴を持たないgitの枝。git checkout --orphan で作成
fresh clone
対象リポジトリをcloneし直してまっさらな状態にしたローカルコピー。filter-repo実行時の前提
Hermes Agent
Nous Researchが開発するAIコーディング支援ツール。Claude Codeに似た役割を持つ別プロダクト

参考リンク

※この記事の内容は執筆時点のものです。AIは進化が速い分野のため、最新の仕様は公式サイトでご確認ください。

-その他
-

← 戻る