Why this one is different: untrusted input
Email is attacker-controllable and prompt-injectable, so triage runs propose-only: the agent gets the mailboxro and cannot write or send
directly. It emits proposal cards — record (a task/note), draft, send (external) — a human
approves, and trusted code applies. A send stays gated until you approve it.
Fire a triage on a new email
An integration delivers the email as anevent.v1 event carrying a plan:
Approve the proposals
The dispatch emitsproactive-card.v1 frames on its Stream. Approving a record
commits it to the workspace (a trusted applier does the write); approving a send executes it through the
integration. Nothing leaves your control without that approval.
Make it standing
To triage automatically for every inbound message, bind a triage routine to the email integration so eachemail.received event dispatches the agent — the inbound trigger replaces the manual POST /events call
above. See Integrations and AI routines.