Outcome Monitors: Recovery Affordances for Silent Tool Failures
When a tool call times out the agent sees the failure and routes around it; when the call returns a cached error page, a stale record or a negative price in exactly the expected shape, the agent eats it as fact and confidently finishes the wrong task. The authors mine "outcome contracts" — invariants like the argument you passed echoing back in the result, prices staying positive, statuses coming from a fixed set, totals still adding up — from traces of unrelated tasks or straight from public API schemas, then run them as a monitor that never blocks anything: on a violation it passes the raw result through untouched and appends a short receipt naming the broken property and listing public tools that could get the value another way. Completion under injected faults goes from 10.9% to 28.1% across four models in two families, replicates in a third, and adds 14 and 12 points on a retail customer-service benchmark — and the control that matters is stripping the list of alternative tools out of the receipt, which erases the entire gain, while vaguer wording or later delivery changes nothing measurable. Detecting the bad value is not what pays; naming what else the agent can call, inside the tool result, at the moment the value turned out to be junk, is.