Outbound messaging is a consequential side effect. The assistant must distinguish retrying its internal work from sending another copy to a person.
An AI assistant may decide to send a reminder, appointment request, customer update, recruiter outreach, or confirmation. The send crosses several asynchronous boundaries: the model proposes content, policy and approval are evaluated, a worker calls a provider or drives a messaging interface, the provider queues delivery, carriers or platform services process it, and callbacks report changing status.
Every boundary can repeat or fail ambiguously. A task event may be delivered twice. Two workers may race. The provider may accept the message while its response is lost. A status callback may arrive more than once or out of order. The worker may crash after send but before writing the provider identifier. The recipient may reply before local state catches up.
Naive systems treat each event as a fresh instruction and every missing response as a reason to send again. Duplicate-safe messaging treats the user's intended communication as a durable operation. It assigns message identity before calling the provider, grants only one worker ownership of the send, stores provider evidence, deduplicates callbacks, and keeps delivery-state updates separate from the decision to create another outbound message.
This is not the same as suppressing all repeated content. A user may intentionally send a second reminder tomorrow. The system must distinguish a new communication intent from a repeated attempt to fulfill the old one. That distinction depends on recipient, channel, purpose, content version, campaign or task, approval, and time boundary.
For a text-message AI assistant, the message thread is both an interface and an external side effect. Clear identity, state, and receipts keep the convenience of texting from hiding operational ambiguity.