Transport
Network retry of the same HTTP request. Stripe SDKs and similar clients largely cover this.
Mostly solvedFindings Research note
Research note · Jul 2026
When an AI agent times out on a write and retries as a new tool call, provider SDKs often mint a fresh idempotency key. The first call may already have succeeded. The second creates a duplicate side effect. That gap sits above the tool — and it is showing up in primary sources.
Action integrity for agents requires three things most stacks do not ship together:
Teams treat “idempotency key” as one concept. In practice there are three layers. Only the first is usually handled well.
Network retry of the same HTTP request. Stripe SDKs and similar clients largely cover this.
Mostly solvedFramework or model re-invokes the tool after timeout, crash, or replan — often with a new session key.
Often brokenCanonical intent: refund this order once, open one ticket for this incident. Rarely productized.
UnderservedClaim/SKIP ledgers and transport keys stop some duplicates, but they do not reconcile an unknown timeout against live provider state.
Durable workflow rewrites (Temporal and peers) solve long-running orchestration. Most agent teams hitting this bug have 2–3 dangerous tools — not a platform migration.
Protect-style SDKs ask customers to write observe logic. That destination knowledge is the hard part agent builders do not want to reinvent.
MCP security gateways focus on auth, allow/deny, and approvals. They decide if a call is allowed — not whether it already happened.
Afterstate is the outcome layer for dangerous agent tools: business operation identity, destination observers, and next-step receipts at the tool/MCP boundary — without forcing a durable-workflow rewrite.
We are not claiming the category is empty. We are claiming the default for agent builders is still missing.
If you have seen a duplicate charge, ticket, or message after a timeout, we want to hear the story.
Request early access