Anthropic stopped charging for Claude Code's safety classifier — unless your LLM gateway drops one request field
TL;DR: Claude Code 2.1.278, released 19 September 2026, moves auto mode’s safety classifier server-side and stops charging for it on the Claude API, Enterprise plans, Claude Platform on AWS, Amazon Bedrock, Google Cloud’s Agent Platform and Microsoft Foundry. Pro, Max and Team were never charged. The catch is in the eligibility rule: the server’s checks have to reach your session. An LLM gateway or proxy that strips unrecognised body fields such as safeguards, rewrites the anthropic-beta header, or drops response keys such as safeguard_results, breaks the handshake — and Claude Code silently falls back to its own billed classifier requests. You get one notice per session, and acknowledging a named gateway suppresses it for 24 hours. Check with /status → the Auto mode server row. The fix is a gateway that forwards traffic unchanged; CLAUDE_CODE_AUTO_MODE_SERVER=0 only silences the notice. The wider lesson: gateways fail loudly on function and quietly on money.
The one-line release and the documentation page that gives it away
The changelog entry for Claude Code 2.1.278 is a sentence. Auto mode for Claude API and Enterprise users now defaults to the server-side classifier, “which does not charge for classifier overhead,” plus a new /status row showing whether the session’s classifier runs server-side.
Shipped alongside it: a dedicated documentation page titled Auto mode classifier request charges, whose subtitle is about resolving a notice telling you that your session isn’t eligible. Vendors do not write troubleshooting pages for features that work. The page exists because Anthropic knew, before release, that a large number of its paying customers would hit the unhappy path — and it is worth reading the whole thing, because it is unusually candid about what that path costs.
Here is the mechanism. When auto mode became the default on 14 August, it replaced the permission prompt with a second model that screens shell commands, network calls and agent messages before they execute. On Pro, Max and Team plans Anthropic ate the cost of those screening calls. Everywhere else — the API, Enterprise, and every cloud provider — they were billed as ordinary token usage, because each one sends a slice of the transcript plus the pending action to a model for review.
From 2.1.278, Claude Code asks the server to fold those checks into the session’s own model requests instead, and does not bill for them. That is a real, unambiguous price cut on a safety feature, and it deserves to be recorded as one.
Eligibility is a network fact, not a plan entitlement
The interesting part is what determines whether you get it.
Not your plan. Not your contract. Not your region, mostly. What decides it is whether the request that leaves your machine and the response that comes back survive the journey unmodified.
Anthropic’s own words:
When the server’s checks can’t reach your session, Claude Code keeps using its own classifier requests instead, and those requests are billed as they were before.
And on the cause:
The most common cause is an LLM gateway or proxy between Claude Code and the API: one that strips or rewrites request headers, drops request fields it doesn’t recognize, or edits responses, for example by rewriting IDs or dropping keys from streaming events.
That is a description of most corporate LLM gateways. Routing every model call through a central proxy for logging, cost attribution, key custody, PII redaction and policy enforcement is the standard enterprise pattern — it is what a platform team is supposed to build. And the design instinct of nearly every such proxy is to normalise: parse the request into a known schema, drop what it does not recognise, reconstruct the response with the headers it knows about. That instinct is precisely what breaks this.
The specific contract is narrow enough to state in full. The gateway must forward the safeguards request body field it has never heard of, forward the anthropic-beta header verbatim rather than allowlisting values, and return the safeguard_results response field and streaming event keys without dropping or rewriting them. Anthropic’s gateway guide is blunt about the general rule: treat headers and body fields as open lists, because “a gateway pinned to an observed list strips the next capability’s header or field and breaks it on the release that introduces it.”
Gateways fail loudly on function and quietly on money
This is the part that generalises past one release, and it is the reason this is worth your attention rather than a config note.
Read Anthropic’s own feature pass-through table and sort it by failure mode. Context management, beta tool fields, effort and structured outputs all pair a beta header with a body field, and when a gateway forwards one half without the other the result is a hard 400. Somebody’s build breaks, somebody files a ticket, somebody fixes the gateway. The system is self-correcting because the failure is loud.
Now look at the two rows that do not error. Prompt caching: a gateway that converts block-form system content to plain strings or drops cache_control markers produces no error — the conversation simply “bills as uncached input on every turn.” Token counting: no error, Claude Code just falls back to a character-based estimate. And now classifier billing joins them: no error, auto mode keeps working perfectly, and you keep paying for something that became free.
The pattern is consistent. When a lossy middlebox breaks a capability, you find out immediately. When it breaks an economy — caching, metering, a waived charge — you find out at invoice time, if ever. Nothing in the stack is instrumented to notice that a bill failed to go down.
This is the third time in five weeks that the metered surface of an agent has turned out to be somewhere other than where buyers were looking. Anthropic’s on-demand compaction changed which usage fields were the bill. Claude Code’s weekly limits were cut against a base that was never published. Projects shipped with Opus at high effort as the thread default. In every case the headline capability was fine and the accounting moved underneath it.
It is already happening
Within a day of the release, issues opened against third-party gateway and router projects describing exactly this. The clearest is 9router #4196, filed 20 September: users see the ineligibility notice naming the gateway, classifier requests keep being charged, and the maintainers’ own diagnosis is that the router replaces the client’s anthropic-beta header instead of unioning it, discards unknown request body fields such as safeguards during translation, and reconstructs responses with a fixed header set so upstream headers never reach the client. Similar reports landed against local-routing switchers and self-hosted proxy projects the same day.
None of this is a defect unique to those projects. They implemented the reasonable thing — a pinned allowlist — and the reasonable thing is wrong here. Anyone who has built an internal proxy on the same instinct should assume they are in the same position until /status says otherwise.
What to check this week
Run /status in an auto-mode session on every path you use. The Auto mode server row reads Enabled or Disabled. Do it once from a developer laptop on the direct API, once through the corporate gateway, and once on each cloud provider you route to. This takes ten minutes and is the entire diagnostic.
Treat a named-gateway notice as a platform ticket, not a developer annoyance. The 24-hour acknowledgment window means the first person to hit it will press Enter and never see it again, and nobody upstream will learn that a fleet is on the billed path. If your gateway is in the path, ask for the pass-through fix explicitly: union the beta header, preserve unknown body fields, forward upstream response headers.
Do not reach for CLAUDE_CODE_AUTO_MODE_SERVER=0 first. It suppresses the notice and locks you onto billed classifier requests. It is the right call only when the gateway genuinely cannot be fixed, and even then it is temporary by Anthropic’s own description.
If you are on Bedrock, Agent Platform or Foundry, check your model list too. Auto mode works there only on Claude Sonnet 5, Opus 4.7 or later, and the Fable models. A pinned older model means no auto mode at all, which makes the billing question moot and raises a different one.
Measure before and after. Compare per-session cost on a representative tool-heavy workload across an eligible path and your gateway path. That number, not a blog post, tells you what the gateway fix is worth.
The pattern
Buying an AI coding agent used to mean evaluating a model and a price. It now means evaluating a model, a price, a harness, a set of defaults, and — as of this week — the fidelity of every piece of middleware between your developers and the endpoint.
That last item has no owner in most organisations. The platform team that runs the gateway measures it on uptime and policy coverage; nobody measures it on protocol faithfulness, because until recently there was no such thing as a request field whose removal costs money. There is now, and there will be more, because this is how vendors are choosing to negotiate capabilities: new body fields, new beta values, new response keys, all of which a normalising proxy eats by default.
The same logic showed up in a different coat when Grok 4.6 arrived on Bedrock at a different price than the first-party endpoint — the channel you buy through is now a pricing variable, not just a paperwork one. The difference is that a price list is visible. A dropped header is not.
For developers comparing harnesses, this does not move the coding tools shortlist or change the Cursor versus Claude Code calculus, and it should not. Anthropic made a thing cheaper and documented the exception honestly, which is more than the category usually manages. But it added one question to every enterprise Claude rollout that nobody had on the list: does our gateway pass through fields it has never heard of?
If the answer is no, you are paying for the safety net that everyone else stopped paying for — and the product will not tell you again after the first day.
Frequently asked questions
What exactly changed in Claude Code 2.1.278?
In auto mode, a classifier model screens actions such as shell commands and network requests before they run. Until this release, Claude Code made those classifier calls itself, and on the Claude API, Enterprise plans and the cloud providers they were billed as ordinary token usage. From v2.1.278, released 19 September 2026, Claude Code instead asks the server to perform those checks as part of the session's own model requests — and Anthropic does not charge for them when the server performs them. The changelog line is terse: auto mode now defaults to the server-side classifier, 'which does not charge for classifier overhead'. Pro, Max and Team plans are unaffected because they were never charged for the classifier in the first place. Nothing about what the classifier allows or blocks changed; this is a billing and plumbing release, not a safety-policy one.
Who gets the free classifier and who still pays?
Claude Code v2.1.278 or later requests server-side checks by default on Enterprise plans, on accounts using the Claude API, and on Claude Platform on AWS, Amazon Bedrock, Google Cloud's Agent Platform and Microsoft Foundry. Two caveats sit behind that list. First, Anthropic states that whether a given platform or region actually performs the checks depends on that platform's rollout — inclusion in the list is not a guarantee for your region today. Second, and more important operationally, the checks have to physically reach the session. If anything in the network path prevents that, Claude Code reverts to its own classifier requests and bills them exactly as before. To see where a session stands, run /status in an auto-mode session and read the 'Auto mode server' row: it reads Enabled while the server's checks are deciding actions, and Disabled once the session has fallen back.
What is the notice, and what do the two answers actually do?
Before the first action it would have to check the billed way, Claude Code holds that action and prints: 'We're changing auto mode to no longer charge for classifier requests in Claude Code. However, this session isn't eligible.' When it can identify a gateway or proxy in the path, the notice names it. Pressing Enter continues — the held action and the rest of the session use Claude Code's own billed classifier requests, and if the notice named a gateway, acknowledging it suppresses the notice on that machine for 24 hours. Pressing Esc or Ctrl+C cancels the held action and stops the turn, leaving the session in auto mode. The notice appears once per session at most. In headless mode with -p it goes to stderr; in stream-json output it arrives as a system warning message that Agent SDK applications can read; in the VS Code extension it appears as a conversation notice with nothing to acknowledge. That 24-hour suppression is the detail worth noting: the default path leads to a quiet, recurring charge that stops announcing itself.
The notice names our gateway. What has to be fixed?
The gateway has to pass requests and replies through unchanged. Concretely, per Anthropic's gateway compatibility guide: forward request headers and body fields byte-for-byte including ones the gateway does not recognise, such as the safeguards request field; forward the anthropic-beta header verbatim rather than matching it against an allowlist, because the set of values changes with every Claude Code release; and return responses and streaming events without dropping keys such as safeguard_results or rewriting tool-use IDs. A gateway that rewrites or redacts request bodies for content inspection breaks the same pairing that stripping does, so inspection has to be read-only. If the gateway genuinely cannot do this, set CLAUDE_CODE_AUTO_MODE_SERVER=0 in the shell or the env settings key before starting the session: classifier requests are then always Claude Code's own and billed as before, and the notice stops appearing. That variable is a suppression, not a fix — Anthropic labels it temporary and says it may be removed in a later release, and it is ignored on a direct connection to the Anthropic API.
Is the classifier overhead big enough to care about?
Anthropic has not published a figure, and no honest estimate can be given without measuring your own traffic — so measure it rather than modelling it. What the documentation does establish is the shape. Classifier calls send a slice of the transcript plus the pending action, and they fire on shell commands and network requests, not on reads or ordinary working-directory edits. So the overhead scales with how tool-heavy and shell-heavy your agents are, not with how much code they write. A session that greps, builds, runs tests and hits APIs in a loop generates far more classifier traffic than one that edits files. Classifier requests also skip the rest of Claude Code's system prompt, which caps the per-call size. The practical move is to compare per-session cost on the same workload before and after upgrading to 2.1.278, on both an eligible path and your gateway path, and let the delta decide how much engineering the gateway fix is worth.
Should this change which channel we buy Claude through?
On its own, no — the classifier delta is unlikely to outweigh the reasons organisations route through Bedrock, Agent Platform or Foundry in the first place, which are usually contractual, data-residency or committed-spend reasons. What it should change is how the channel is evaluated on an ongoing basis. The cloud providers are on Anthropic's server-side-checks list, so the split here is not first-party versus marketplace; it is protocol-faithful path versus lossy middleware. The thing to write into the evaluation is a standing requirement that whatever sits between your developers and the model forwards unknown headers and body fields unchanged, and a periodic check that it still does after Claude Code releases. One further constraint applies specifically to the cloud providers and signed-in Claude apps gateway sessions: auto mode only works there on Claude Sonnet 5, Opus 4.7 or later, and the Fable models.
Sources
- Anthropic — Claude Code CHANGELOG, v2.1.278
- Claude Code docs — Auto mode classifier request charges
- Claude Code docs — Gateway compatibility guide (feature pass-through)
- Claude Code docs — Choose a permission mode
- 9router issue #4196 — Auto mode classifier requests still billed: gateway breaks Claude Code's feature pass-through contract
Related tool reviews
Questions or corrections? Email Pick Right. Want the full list? See all news.