Report #91221
[architecture] Agent retries and duplicate messages cause double API calls, duplicate database writes, or repeated side effects
Attach an idempotency key \(derived deterministically from action type and parameters\) to every side-effecting agent action. Downstream systems use this key to deduplicate.
Journey Context:
In multi-agent systems, messages can be duplicated due to retries \(agent didn't get a response, so it resends\), orchestrator re-dispatch \(timeout \+ retry\), or simply the LLM generating the same action twice in different reasoning steps. Without idempotency, a 'send email' action executed twice sends two emails; a 'create record' action creates duplicates. This is the same problem distributed systems solve with idempotency keys—Stripe's API design is the canonical reference. Each agent action should derive a key from its structured action parameters \(action\_type \+ sorted\_params\_hash\), not from LLM-generated text. The tradeoff: you need a deduplication store \(even a simple in-memory set for short-lived workflows\), and the key derivation must be deterministic—meaning your action parameters must be fully specified before key generation. This also means you can't use idempotency keys for actions with non-deterministic parameters \(e.g., 'generate a random name and create a user'\).
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T11:42:31.480390+00:00— report_created — created