Consumer Terms Gate
What happens when an account must accept updated Consumer Terms and Privacy Policy at claude.ai before the API will serve it: instead of retrying forever, the session stops cleanly, says exactly what is wrong, and that account is kept out of the pool so other sessions are unaffected. Covers the four-step fix and why the detection is deliberately narrow.
What it is
When Anthropic updates its Consumer Terms & Privacy Policy, every account must accept the new terms at claude.ai before the API will serve requests. Until accepted, the API returns a specific 400 error. Omniscio detects this error automatically — instead of retrying in a loop, it stops the session cleanly, tells you exactly what happened, and keeps the gated account out of the session pool so other sessions aren't affected.
You'll see this as a session that transitions to "Needs You" with a message like: "The Anthropic account you@example.com needs to accept updated Terms & Privacy Policy. Open claude.ai, sign in, accept the terms, then Continue this session." An inbox card also appears with the same guidance (its button offers a Restart Omniscio path).
Where to find it
You do not go looking for this — it comes to you. The session that hit the gate turns amber in the sidebar with the word "Needs You" and carries the explanation in its chat, and the same wording also arrives as a card in your inbox. The card's button offers to restart the app for you, which is the last step of the fix.
How it behaves
How to fix it
- Open claude.ai in a browser
- Sign in with the account shown in the error message
- Accept the updated terms when prompted
- Restart Omniscio — the account re-enters the pool automatically
No settings change is needed. The gated state is in-memory only, so restarting Omniscio clears it once the terms are accepted.
How it works
The Claude CLI wraps API errors as "synthetic placeholder" events — assistant messages with model: "<synthetic>" and zero output tokens. Normally, Omniscio's placeholder-stuck watchdog auto-replays these as empty turns. But the Consumer-Terms 400 can never succeed via replay (it's a server-side gate), so the watchdog would loop until it exhausts retries, then show a misleading generic error.
The fix adds a guard that fires before the retry counter:
- Detection:
isConsumerTermsGate400matches the specific error text ("consumer terms" + "accept them in claude.ai") in the synthetic event. A turn flag (turnHadConsumerTermsGate) carries the detection forward. - Terminal sink:
fireAccountNeedsTermskills the CLI, emits a clear system message, and transitions the session toneeds_you/recovery_failed. No auto-replay, no cross-account fallback. - Pool exclusion: The account is flagged in-memory. The load-balancer and pre-spawn picker skip it via
needsTermsAcceptanceonAccountWithUsage, so new sessions land on other accounts. - Inbox card: One deduped alert per gated account explains what to do.
The detection is intentionally narrow — only the specific Consumer-Terms text matches. Generic 400 errors fall through to the existing placeholder-stuck path (fail-open).
For agents
Where it lives in code
src/shared/providers/provider-models.ts—isConsumerTermsGate400detection predicate (pure, renderer-safe)src/main/process/recovery-sinks.ts—fireAccountNeedsTermsterminal sinksrc/main/process/ndjson-event-handlers.ts— detection intryFilterPlaceholderEvent, clear-on-healthy-turnsrc/main/process/ndjson-placeholder-recovery.ts— guard before retry countersrc/main/process/ndjson-types.ts— theturnHadConsumerTermsGateturn flag onStreamSession(initialised instream-session-factory.ts, reset inprocess-manager.ts)src/shared/account-pool.ts—needsTermsAcceptancefield + capacity guardssrc/main/services/rate-limit-recovery-service.ts— in-memory gated-accounts setsrc/main/services/auth/terms-gate-alert.ts— inbox alert modulesrc/main/process/account-selection.ts— pre-spawn picker wiring
Related
The nearest neighbour in behaviour is aborted response recovery, which uses the same shape — a specific synthetic event detected and routed to a terminal sink rather than replayed. The pool exclusion rides on the account model described on the account pool page, and the other state an account can be parked in, a rate limit, is covered by account relogin.
- Account Terms Gate Contract
- Aborted Response Recovery — similar pattern (synthetic event detection + terminal sink)
Last verified 2026-09-23