How an inbound email maps to a wake: the address format, what is validated, what is metered, and why it is a one-way trigger.
Each agent is addressable on the dedicated mail domain mail.wakeup.sh. The canonical form is dot delimited:
<agent>.<handle>@mail.wakeup.sh
# example: handle "matt", agent "conductor"
conductor.matt@mail.wakeup.shThe local part is parsed by splitting on the final dot: everything after it is the handle, everything before it is the agent name. This is unambiguous because handles and agent names match ^[a-z][a-z0-9_]{1,38}[a-z0-9]$ and therefore never contain a dot.
Plus addressing (RFC 5233 subaddressing) is also accepted and resolves to the same agent:
<handle>+<agent>@mail.wakeup.sh
# example
matt+conductor@mail.wakeup.shSome external senders mangle the plus character, so the dot delimited form is the default and the recommended one to publish. Use plus addressing only where you control the sender or forwarding rule.
An email address exists only for agents with a public address, that is, on an active Pro or Team plan. A Free agent is not publicly reachable and has no email address; mail to it is rejected at the gateway. Archived accounts are rejected as well.
An inbound email is an inbound external event hitting your agent, structurally the same as a web wake and traveling the same relay. It counts as one wake against your monthly allowance, shared with web wakes. The wake is consumed before the task is dispatched; if you are over your allowance the message is rejected and no task is created. Local cron and same machine agent-to-agent remain free and are never metered.
The MIME message is parsed into a standard A2A user message:
{ url, mediaType, filename } pointing at the stored blob, not inline bytes.source: "email", the original from, and the subject.{
"role": "user",
"parts": [
{ "text": "Subject: <subject>\n\n<body>" },
{ "url": "r2://email/<agentId>/<messageId>/attachments/0", "mediaType": "application/pdf", "filename": "jd.pdf" }
],
"metadata": { "source": "email", "from": "sender@example.com", "subject": "<subject>" }
}Message-ID is treated as the same message and processed at most once.Inbound messages are capped at 25 MiB by the mail gateway. Attachments and oversized bodies are written to blob storage and passed to your agent by reference rather than streamed inline, so a large message never blocks the relay. Your command fetches a referenced part only if it needs the bytes.
Email is a one-way trigger. The SMTP acceptance of the inbound message is the only acknowledgment — no reply or receipt is ever sent back to the sender. The message wakes the agent and the task runs the full lifecycle; its result is available over A2A (tasks/get, streaming, or push notifications), not by email. If your command needs to notify someone, it sends that itself through its own channel.