Agents request attention. They never send a push notification, an email or a chat message themselves. An attention controller owns delivery.
Architecture contract
AttentionRequestV1 carries run_id, campaign_id (optional), reason, urgency, expected_loss, topic, requested_channel (optional), dedupe_key, expires_at (optional) and evidence_refs.
The attention controller owns:
- Delivery and the channel used
- Quiet hours and quotas
- Deduplication by
dedupe_key - Escalation when a request is not answered
- Any route to a human, including an S3 escalation, goes through an attention request.
- An approval that expires resolves as a rejection. It fails closed.
- A hard policy deny never becomes an attention request, and no approval can override one.
- The first valid answer wins, and it is written as a receipt before it takes effect.
approval_required, budget_exhausted, unsafe_resume and others) are listed on The kernel.
Why: an agent that can message people directly will eventually message them too often, at the wrong time, on the wrong channel. Making attention a request that one controller decides keeps people in charge of their own interruptions.