# d-llm-tool-idempotency-skill

A decision-protocol skill for making side-effectful agent tools idempotent so that a retried LLM tool call (transport timeout, framework resume, model duplicate-emission, or user re-run) becomes a no-op instead of a double-send. The load-bearing premise is that the language model can only promise *at-least-once* delivery, so the tool must engineer *at-most-once* execution via a caller-supplied idempotency key plus dedup at the execution boundary. It is framework-agnostic — covering LangGraph node bodies that re-run on resume, MCP tools, OpenAI/Anthropic tool-calling retries, CrewAI delegated invocations, and direct HTTP wrappers — and ships eight operation models (OP-1..OP-8), four worked dilemma cases, an anti-pattern list, and a cross-framework comparison table. Every load-bearing claim is traced to a real source (Stripe idempotency docs, AWS SQS/S3, PostgreSQL, Temporal, the microservices saga pattern, and the sibling LangGraph SOP) in `references/`.
