AgentOwl

Email

Give your agent an email address, receive messages, and learn about reviewed sending setup.

Every workspace can receive email on its own subdomain of agentowl.dev. Mail is received by AgentOwl's SMTP server and checked for sender authentication. You can read it in the dashboard Inbox before connecting a runtime, or deliver new messages to your endpoint as events.

Outbound sending is a separate, reviewed pilot and is not generally available on Free today. If your account has been enabled, Overview shows the sending setup and status for its hosted address. You can then compose one-to-one email in the dashboard or create a key scoped to that exact address for your agent. Enabled Free accounts can submit to 10 recipients per account per UTC day; a rolling one-minute limit also applies. A receiving service accepting a message does not prove Inbox placement. See the Quickstart for the current receiving flow.

Addresses

Addresses take the form:

<name>@<workspace>.agentowl.dev

For example, the workspace acme can use hello@acme.agentowl.dev, procurement@acme.agentowl.dev, and so on. Each address you want to receive mail on needs its own binding. Free workspaces can have up to 3 bindings.

Add an address

For the first address, create an agent identity with Email selected, then choose Activate email Inbox on Overview. This activates receiving without a webhook. To deliver new messages to your agent, use Connect runtime with a public HTTPS URL. For more addresses, use Webhooks → Create Binding with provider SMTP (Email), create a route to an endpoint, and activate routing; see the Quickstart.

With the CLI:

agentowl email bind acme procurement@acme.agentowl.dev --provider smtp
agentowl route create --tenant acme --binding <binding_id> --endpoint <endpoint_id>
agentowl config publish acme

Mail to an address without an active binding, or before you activate receiving, isn't delivered. Inbox-only receiving does not run an agent or send replies. Connecting a runtime later affects new messages; earlier Inbox messages are not automatically replayed.

Custom domains

Reviewed pilot accounts can set up sending from their own domain through the dashboard. Prepare the domain, publish its ownership record, choose an exact From address, then publish the displayed SPF, DKIM, and DMARC records. AgentOwl checks DNS and finishes sending setup when the account is enabled. Your domain can remain with your current DNS provider. Sending-only setup does not move your existing MX or mailbox.

Receiving on your own domain is a separate setup. It requires an active exact address binding, a delivery route, and an MX change after recipient checks. It is not a domain-wide SMTP catch-all. Keep your existing MX if you only want AgentOwl to send.

Sending is separate from inbound webhooks; creating a workspace or endpoint does not automatically enable it. Follow Set up your email domain for the displayed records and verification steps. An older direct SMTP integration can still need operator-managed credentials.

AgentOwl operational routing

AgentOwl's own support address uses a platform-managed Cloudflare Email Routing rule. Tenant email bindings use the SMTP receiver; the API and CLI do not provision Cloudflare routing rules. Historical Cloudflare events use provider: "cloudflare" and provider_event_type: "email.received" so the inbound handler can continue to read them.

Hosted inbox page

Each workspace has an authenticated, read-only page at https://<workspace>.agentowl.dev/inbound/email that shows email received in the last 24 hours. Access requires operator credentials with permission for that workspace; the URL is not a public inbox. Use the dashboard Inbox for a browser-based test before your webhook is ready.

Event payload

Email events have channel: "email", provider: "smtp", and provider_event_type: "email.inbound". The message is in payload.inline:

{
  "headers": {
    "from": [{ "name": "Alice", "address": "alice@example.com" }],
    "to": [{ "name": null, "address": "procurement@acme.agentowl.dev" }],
    "subject": "Order 42",
    "messageId": "<CAF...@mail.example.com>",
    "date": "2026-10-05T14:03:11Z"
  },
  "body": {
    "text": "Hi, can you confirm the delivery date for order 42?",
    "html": "<p>Hi, can you confirm the delivery date for order 42?</p>",
    "truncated": false
  },
  "attachments": [
    { "filename": "invoice.pdf", "content_type": "application/pdf", "size_bytes": 48211 }
  ],
  "auth": {
    "spf": "pass",
    "dkim": "pass",
    "dkimDomains": ["example.com"],
    "dmarc": "pass",
    "dmarcPolicy": "reject",
    "trustLevel": "high"
  },
  "envelope": {
    "mailFrom": "alice@example.com",
    "rcptTo": ["procurement@acme.agentowl.dev"],
    "helo": "mail.example.com"
  }
}
FieldDescription
headersParsed from, to, subject, messageId, and date
body.text, body.htmlMessage body. Either can be null.
body.truncatedtrue if the text, HTML, or subject was cut to fit the limits below
attachmentsName, type, and size of each attachment
authSender authentication results; see below
envelopeSMTP envelope sender, recipients, and HELO name

Attachments

The event lists attachments by name, content type, and size, up to 20 per message. Attachment contents are not included inline. Managed email attachment retrieval is available for participating agent-work endpoints with scoped credentials. Self-hosted deployments need the private storage configuration. See attachment access and retention. Baseline receivers should not assume attachment bytes are available through the API.

Sender authentication

AgentOwl checks every message with SPF, DKIM, and DMARC and reports the results in payload.inline.auth:

FieldValues
spfpass, fail, softfail, neutral, none, temperror, permerror
dkimpass, fail, none, …
dkimDomainsDomains with a valid DKIM signature
dmarcpass, fail, none
dmarcPolicyThe sender domain's published policy: none, quarantine, reject
trustLevelAgentOwl's summary: high, medium, low, untrusted

Messages are delivered whatever the result. Before your agent acts on an email, especially one asking it to send money, share data, or change settings, check trustLevel and dmarc. A From address alone proves nothing.

Limits

LimitValue
Inbound SMTP message size1 MB (1,000,000 bytes) for the complete MIME message, including headers and encoded attachments. Larger messages are rejected.
Recipients per message50
Text body1 MB, then truncated
HTML body2 MB, then truncated
Subject1,000 characters, then truncated
Attachments listed20
Messages per day100 on the Free plan

October 16 email storage update

For messages accepted after the October 16, 2026 release, the complete inbound message limit is 1 MB (1,000,000 bytes). New stored email content and managed attachments expire after 30 days. Save content you need before its expiry. Expired content cannot be downloaded, replayed, or used as a reply source, even if background deletion is still pending.

Messages received before this rollout keep their existing storage rules. Earlier seven-day attachments or externalized payloads are not extended or restored. Operational delivery records, runtime work, logs, and backups follow separate schedules; this is not a universal 30-day deletion promise. Copies already downloaded, forwarded, or delivered to your receiver follow that recipient's policy.

On this page