Claude Code's Billing Filter Reads Your Git History
A server-side content filter in Claude Code routes requests to extra-usage billing when specific strings appear in git commit history - including OpenClaw schemas and HERMES.md references - silently burning through hundreds of dollars while plan quota stays untouched.

Anthropic's billing system is reading your git commit messages.
Two GitHub issues filed on April 25, 2026, document a server-side content filter in Claude Code that silently routes API requests to extra-usage billing instead of the included plan quota when specific strings appear in a repository's recent commit history. One user burned through $200.98 in extra-usage credits. Their Max 20x plan capacity showed 86% remaining all through.
TL;DR
- The literal string
HERMES.md(case-sensitive, exact) in any recent git commit message causes Claude Code to return"You're out of extra usage"- even on Max plans with plenty of quota - Claude Code includes recent commits in its system prompt; Anthropic's server matches specific byte sequences in that context and reroutes the request to pay-as-you-go billing
- A separate tweet demonstrates the same behavior with OpenClaw schema strings (
openclaw.inbound_me...) in a commit on an otherwise empty repo - GitHub issues #53262 and #53171 confirm the mechanism; workarounds are available but Anthropic hasn't formally addressed the false-positive problem
- The error message gives no indication that git content is the cause, making diagnosis nearly impossible without a systematic bisect
The Filter Nobody Documented
How Claude Code reads your repository
Claude Code builds its system prompt from multiple sources: your CLAUDE.md files, project configuration, and recent git history. The git component is deliberately designed to give the model context about what's been happening in the repository - commit messages, authors, file changes. That context travels with every API request.
What Anthropic hasn't documented is that its servers run a filter against that context before processing the request. The filter matches specific byte sequences. If a match is found, the request is reclassified - not rejected outright, but quietly routed to a different billing lane.
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."}}
That error message appears even when the Max plan has plenty of quota. It appears in an empty test repository with a single commit. It appears before the model processes a single token of user input. The billing decision happens at the routing layer, not in the model.
What strings trigger it
The HERMES.md trigger is the most thoroughly documented. GitHub user @DUMPDUMPY ran a systematic binary search across commit message variants to isolate the exact pattern:
| Commit message | Result |
|---|---|
HERMES.md | Fails - routes to extra usage |
test HERMES.md test | Fails |
hermes.md (lowercase) | Works |
Hermes.md (mixed case) | Works |
HERMES (no extension) | Works |
HERMES.txt | Works |
README.md | Works |
File named HERMES.md on disk | Works |
The filter is a byte-level substring match. Case normalization doesn't happen. hermes.md passes cleanly; HERMES.md fails. The same content in a file on disk, or in a CLAUDE.md, or in an environment variable, passes without issue. Only the git log context triggers it.
A separately circulating screenshot shows the same behavior with an openclaw.inbound_me... schema string in a commit message on a completely empty repository. The author wrote: "This is an empty repo, I'm just calling Claude Code directly. Insanity." The error returned was identical.
A developer commits an OpenClaw schema string to an otherwise empty repo. Claude Code returns the extra-usage billing error before processing a single token.
Source: x.com
Who Gets Caught
Max plan subscribers with common commit patterns
The financial impact documented in issue #53262 is specific: $200.98 in extra-usage credits consumed while Max 20x plan capacity remained at 86%. The subscriber had no indication that commit content was the cause. The diagnostic path, as @DUMPDUMPY described it, required moving CLAUDE.md, clearing project entries, removing .git/, and ultimately bisecting commit messages word by word before isolating HERMES.md as the trigger.
That's hours of debugging for what amounts to a billing routing decision made before the model sees the query.
The fix is workable but manual. Rewriting the affected commit message clears the trigger. A shallow clone with --depth 1 or --depth 2 avoids surfacing older commits in the context. git filter-repo --message-callback can replace the string permanently across history. None of these are documented anywhere in Anthropic's official guidance.
OpenClaw users caught twice
GitHub issue #53262 documents the HERMES.md trigger in detail, with a full test matrix showing which commit message variants route to extra-usage billing.
Source: github.com
The timing is not coincidental. On April 4, 2026, Anthropic changed its billing policy to prevent Claude subscription OAuth tokens from being used in third-party tools, including OpenClaw. Subscription holders were told they'd need to pay for extra usage if they wanted to run OpenClaw against their plan.
That policy change appears to have been accompanied by server-side filters designed to detect third-party tool usage from git context. OpenClaw schema strings in commit messages - the kind that would appear naturally in a repository where someone had been working on OpenClaw integrations - now trigger the same billing reroute.
OpenClaw users who committed integration code before the policy change, and who are now using Claude Code for other work in the same repository, can find themselves routed to pay-as-you-go billing for requests that have nothing to do with OpenClaw.
The Error Message Problem
The deeper issue isn't the filter - it's the error.
"You're out of extra usage" is a billing message. It tells the user to add more money. It gives no indication that the root cause is a byte sequence in a commit message from three weeks ago. It doesn't distinguish between a genuine quota exhaustion and a content-based routing decision. Both produce identical output.
@DUMPDUMPY summarized the problem in issue #53171:
"The error message is wrong. Claims quota exhaustion when none exists, sending users to billing settings unnecessarily. Content-filter rejection misclassified as quota error."
The same surface error now covers at least three distinct causes: actual extra-usage exhaustion, phantom token inflation from Claude Code's v2.1.100 server-side additions, and content-filter rerouting based on git commit text. Users have no way to distinguish them at point of failure.
What Happens Next
Issue #53262 is closed. Anthropic hasn't publicly explained why, or whether the false-positive was acknowledged. Issue #53171 remains open. The community workarounds are functional: rewrite the commit, shallow clone, or filter the history. But they require knowing the filter exists and correctly diagnosing it as the cause.
Anthropic's previous quota investigation produced an acknowledgment that context windows were draining faster than expected and a mention of a possible 400K context default. The phantom token inflation was attributed to new server-side additions but not reversed. The pattern is consistent: billing anomalies in Claude Code get documented by the community, acknowledged in limited terms, and addressed incrementally.
The specific string HERMES.md is almost certainly not the only trigger. The systematic testing documented in the GitHub issues tested a narrow set of variants. What other strings route requests to extra-usage billing without warning or documentation is still unknown.
Sources:
