Why reconciliation exists
When an API call returns an unknown outcome, the agent faces a dilemma:- Retry → risk a duplicate side effect if the first attempt already succeeded
- Don’t retry → risk leaving the action incomplete if the first attempt failed
How it works
Unknown outcome detected
A tool call returns an ambiguous result — a timeout, a dropped connection, or an HTTP 5xx with no confirmation.Invoke marks the execution as
unknown and does not allow a retry yet.Live state check
Invoke calls
POST /outcomes/reconcile with the action context and a snapshot of current live state.For a Stripe charge, that means querying whether the charge already exists on the customer. For a CRM write, that means fetching the current record. For a Linear issue, that means checking whether the title already exists.Example: Stripe charge timeout
write-once-checkable.
Calling the reconcile endpoint directly
Next steps
- Execution Records — the commit record that makes reconciliation possible
- Tool Safety Classes — which tools trigger reconciliation
- POST /outcomes/reconcile — full API reference