A circuit breaker is a state machine that wraps calls to a dependency. It stays closed while calls pass, flips open after a threshold of failures, and allows a single probe after a cooldown before returning to closed. The widely copied version comes from Michael Nygard's pattern catalog and is described in the agent circuit breaker pattern entry, which sets an example threshold of three failures and a 60 second cooldown.
All of that machinery lives in the orchestrator. The model never sees a state variable, a failure counter, or a diagnostic timestamp. What lands in the conversation is a single tool result: the content string that matches the tool call id, appended to the message history. Everything the harness cares about is invisible. Everything the model reasons over is in that string.
This matters because the harness, not the model, is where most of the engineering happens. Oracle's breakdown of the agent loop separates the model (inference) from the harness (context assembly, tool execution, constraints, state) and notes that most agent engineering work sits in the harness. The trip payload is a harness artifact. Treat it as an API for the model.
The failure mode we are trying to prevent is specific: the agent reads the blocked call as a transient problem and re-forms the same request with new wording. One practitioner quoted in a guide to timeout and breaker patterns for agent workflows described it plainly: per-call timeouts worked, but the agent treated a timeout as "try a different approach" and kept running. The breaker did its job at the infrastructure layer while the model's reasoning layer sailed past it.



