Same Work, Twice the Window: Why Your Claude Max Quota Drains Faster Under Hermes

Three in the afternoon, and you are squinting at the Claude usage panel: a few file edits in the terminal and your five-hour window is nearly half gone. No batch job, no second session. So where did the quota go?
Probably not into how much you did, but into the name you did it under. Claude Code stamps the caller’s identity into every request’s billing header, and subscriptions weight quota by that identity — claude -p and other non-interactive callers default to sdk-cli, which happens to sit in the surcharged bucket. Same work, different name, roughly half the bill.
One environment variable decides your rate
Here is the mechanism. Claude Code names its caller on every request — cc_entrypoint in the billing header, and again in the user agent. When you run claude -p, or call through the Agent SDK, that name defaults to sdk-cli. In subscription metering, sdk-* callers are counted at roughly twice the weight per token — much heavier than the interactive CLI, and heavier than a client running under its own name. The behavior has been reported repeatedly in Anthropic’s tracker (anthropics/claude-code#97074) and has never been documented officially.
That is the whole problem: your agent runs the same model, on the same context, as you typing claude in a terminal — and gets charged nearly double because it answers to the name sdk-cli.
The fix is small: run the child process as hermes-agent, overwriting any name inherited from a host (sdk-py, claude-desktop). This is not gaming the meter — it is showing up under the client’s own identity, which is the normal path Anthropic provides for third-party clients.
Measured: the same $2.19 costs 12% versus 7%
This is not an estimate. It is an A/B run on a real Max subscription, with the conditions stated precisely:
- Max plan, Opus 5.5, Claude Code 2.1.316;
- each arm sent four fresh ~43K-token requests (cache writes, nothing read from cache), output pinned to 16 tokens, about $1.09 list-equivalent per arm;
- arms alternated before, after, before, after; five-hour utilization was read with a Haiku probe 60 seconds after each arm;
- the window started at 3% with no other traffic on the account.
The result:
| Arm | Name on requests | Five-hour delta (two rounds) | Total for $2.19 |
|---|---|---|---|
| Before | sdk-cli |
+6% / +6% | 12% |
| After | hermes-agent |
+4% / +3% | 7% |
The same work used about 1.7x less of the window. The plugin maintainers measured this on October 31, 2026 and wrote it into the README — an official measurement, not a community rumor — and they flag the caveat themselves: Anthropic has not documented the weighting, so the benefit can change without notice.
There is a side effect, and a patch for it
Renaming is not free of consequences. When Claude Code sees a caller that is not an SDK, it enables native artifact eligibility, which appends a Scratchpad directory: … line to the environment message of every single request. On a per-token window, that is pure overhead — repeated on every call.
The plugin sets CLAUDE_CODE_DISABLE_ARTIFACT=1 to keep that line out. So the complete change is two things at once: run as hermes-agent, and disable the artifact line.
How to get the fix
It lives in the official plugin claude-subscription-directsdk, not in core. The plugin version is still 0.3.3, but the catalog pin moved from 20048e6 to 01fa168, which is the plugin repo’s PR #245.
If you already have it installed, one command re-pins:
hermes plugins update claude-subscription-directsdk
Catalog installs do not git pull on update — they reinstall at the reviewed SHA, which is exactly how the old commit gets replaced. To check what you are running first:
hermes plugins info claude-subscription-directsdk
The output shows the version and the pinned SHA. For a fresh install:
hermes plugins install claude-subscription-directsdk
It requires Hermes >=0.21.4 and a logged-in claude CLI on the machine. The plugin checks for it at load time, in the model pickers, and before every request — if it is missing, it refuses cleanly with an install hint instead of half-working.
Do not read this as “subscription means free”
Two misreadings are worth heading off.
First, this provider is not penalized. It draws quota at exactly the claude -p / Agent SDK rate, not a point more. The real gap is against the interactive TUI: measured on Sonnet 5 with the 1M context, interactive Claude Code draws usage at roughly 0.58x that rate. In other words, the same work typed by hand in the terminal stretches a five-hour window further; any -p/SDK-style harness should be planned at about 60% of the TUI’s throughput.
Second, the weighting is server-side; the plugin cannot change the rule. What you can do is show up under the right identity. What you cannot do is manufacture quota. If Anthropic adjusts the weights, that 1.7x becomes some other number — do not bake it into a budget model as a constant.
How to measure it yourself
Do not trust vibes on this. The method is as plain as the A/B above: fix one task, run it twice, read utilization once between rounds, and compare the percentage delta against the list-price equivalent. That is how the plugin’s numbers were produced, and you can apply the same comparison between Hermes’ /usage and Claude Code’s /cost on one task.
If you have not connected Hermes to your subscription yet, the Claude subscription provider guide covers installation and model selection. To see usage and cost side by side, usage windows and plans and cost tracking are the follow-ups.
One honest closing note: a fix like this is not valuable because the number looks good, but because it found a hidden cost that had nothing to do with how much work you did. You pay for one subscription; you should be metered at one rate.