Spend-limit cutoff is indistinguishable from a real model reply, with no resume
Spend-limit cutoff is indistinguishable from a real model reply, with no resume
What happens today. When an account's usage limit is hit mid-run, the CLI delivers the
cutoff as an ordinary assistant turn: stop_reason: "stop_sequence", with message text such as
*"You've hit your monthly spend limit · raise it at claude.ai/settings/usage?from=cc_cli_limit_message
· your weekly limit resets ..."*. Nothing in the turn's shape marks it as a platform event rather
than a model choice — stop_sequence is the same field a model uses when it legitimately stops on
a configured sequence. There is no distinct error type, no retryable status, and no resume token.
Measured impact (one incident, 2026-09-17). A parent session had launched a tree of background
subagents. The account hit its limit mid-run. Every live agent — the parent and its children alike
— received the identical synthetic turn at its own next turn boundary, over a roughly 3-minute
window. The parent itself was blocked the same way for those 3 minutes, then resumed on its own
with no user action visible in the transcript. Of the children still running when the limit hit,
several never got a chance to call their SubagentHandback-equivalent function before their turn was
replaced by the cutoff text — their work was silently lost, not paused. The parent's own account
of it: one whole research category "never got covered (... hit the same limit before finishing)",
and it re-did that work from scratch rather than recovering any partial output. Tens of millions of
tokens (mostly cached context, but six figures of genuinely fresh output) were spent producing work
that was never delivered anywhere, purely because the cutoff gave no code path to pause and resume.
Ask. A typed, structurally distinct signal for this condition — not stop_reason: stop_sequence
carrying human-readable text — so an orchestrator can tell "the model stopped" apart from "the
platform stopped you," and a documented resume path (even a simple "retry after limit reset" token)
so a subagent tree that was mid-flight when a limit trips can be paused and continued instead of
discarded and redone.