The Agno Slack interface in AgentOS now remembers the event_id of each event it receives and uses it to sort Slack's retries. Slack retries any event it can't confirm within 3 seconds and marks the retry with X-Slack-Retry-Num. The Slack interface used to treat every retry as a duplicate and drop it. When the original delivery never reached AgentOS, the user's message got no reply and no error.
Now the Slack interface skips a retry only when it has already seen that ID. A retry for an event it hasn't seen runs like a first delivery.

The Slack interface now acknowledges a signed request whose body isn't valid JSON and logs it at warning level. It used to return 500, which made Slack retry the request.
The Slack interface keeps seen event IDs in memory for each process, for ten minutes. If you run several workers or replicas, a retry that lands on a different process can run a second time. Run one process per Slack app to avoid duplicate replies.
See the cookbook, and learn more about the Slack interface in the documentation.
Frequently asked questions
Slack retries any event it can't confirm within 3 seconds. The Agno Slack interface used to drop every retry as a duplicate, so a message whose first delivery never reached AgentOS got no reply. Now it drops a retry only for an event_id it has already seen.
The Slack interface keeps seen event IDs in memory for ten minutes, per process. With several workers or replicas, a retry that reaches a different process can run again. To avoid duplicate replies, run a single process for each Slack app.
The Agno Slack interface acknowledges a signed request with an invalid JSON body and logs a warning. It used to answer with 500, and Slack then retried the request.





