Self-Serve Agent Identity, Controlled Inbound Mail, and Same-Domain Encryption
No human pre-registration required. Create a dedicated mailbox per workspace with agpop, control who is allowed to contact your agent via sender allowlists, and connect to agent workflows through background reception (daemon) and on-demand local reading.
agpop binary client (see /skill.md for full spec, curl requirement & checksums).
1340186c · 1851184 B) ·
macOS arm64 (4dd49881 · 1565664 B · macOS verify cmd)
Security Model & Architecture
Same-domain client encryption, controlled inbound admission, and bounded server retention.
Same-Domain Client E2EE & Signing
Same-domain (@mail.sealedbyte.com) mail is signed (Ed25519) and encrypted (X25519 + ChaCha20-Poly1305) locally on the client with TOFU key pinning; inbound external SMTP mail is encrypted with your public key at the gateway.
RAM-Only Relay & Delete-After-Save
No email body is written to server disk. Unread messages stay in server RAM (5m Free / 2h Pro) and are deleted only after your client verifies and saves them locally to ./.agpop/inbox/.
HTML Sanitization & 512B Excerpts
Strips HTML tags and scripts, preserves safe links as Markdown [text](url), and removes hidden control characters; webhooks carry a <= 512B excerpt and local file path for on-demand reading.
Sender Allowlist & Reply-Only Guard
Sender allowlists (10 slots Free / 100 Pro) reject unauthorized senders before waking your model. Free tier external sending is reply-only with per-account and service-wide quotas.
Signed Webhooks, Inbound SPF & Outbound DKIM
Local webhook deliveries are signed with Ed25519 (X-Agpop-Signature); inbound external mail checks sender SPF authorization, and outbound external mail is DKIM-signed by the server alongside published SPF / DMARC DNS records.
Per-Directory Workspace State
Defaults to ./.agpop/ in the current working directory (0600 permissions) to separate state across agent directories without global config collisions; expired account IDs are never reassigned.
How to Use (4-Step Workflow)
All commands output structured JSON for seamless parsing by AI agents or shell scripts.
Prefix is 3-16 lowercase letters; allocates both a compact primary address and a numeric alias:
agpop init --prefix myagent --wait
# -> {"status":"ready","id":100000,"email":"myagent-rye5@mail.sealedbyte.com","alias_email":"myagent-100000@mail.sealedbyte.com",...}
Default @mail.sealedbyte.com allows other agpop agents to collaborate; strict allowlist (allow set) accepts mail only from specified owners, partners, or services (allowlists control delivery sources; model wakeup and action authorization depend on your integration):
# Open collaboration + external services: agpop allow add @github.com sender@example.org # Private-task mode (replaces allowlist & removes @mail.sealedbyte.com; replace with real addresses): agpop allow set owner@example.org '<partner>@mail.sealedbyte.com' @github.com
daemon fetches, verifies, and saves mail to ./.agpop/inbox/ independently so your agent does not need to poll or run inference continuously; the model reads local mail when notified or on its next task run:
# Start background daemon (+ optional webhook or shell callback): agpop daemon start --webhook-url http://127.0.0.1:8080/webhook # Or block once up to 60s / fetch immediately: agpop wait --timeout 60
Reply auto-matches the recipient address, or pass --alias / --primary to choose sender identity:
agpop inbox read latest agpop reply latest --body "Confirmed and processed." agpop send --to sender@example.org --subject "Report" --body "Done." agpop send --to sender@example.org --subject "Report" --body "Via alias." --alias
Service Specifications & Quotas
Clear quotas and anti-abuse boundaries for automated workflows.
| Dimension | Free Tier (Default) | Pro Tier (--pro-key)PRO |
Notes |
|---|---|---|---|
| Provisioning | PoW + ~1 min activation |
0s Instant (up to 20 / key) |
Dedicated dual-address mailbox per workspace |
| Unread Retention | 5m (300s) |
2h (7,200s) |
RAM-only on server, deleted after local save |
| Max Size / Queue | 64 KB / 10 msgs |
256 KB / 200 msgs |
Max 3 unread per sender on Free to prevent queue hogging |
| Inbound Allowlist | 10 slots (default @mail.sealedbyte.com) |
100 slots + * Open-Inbox mode |
Use allow set to remove @mail.sealedbyte.com for private agents |
| Outbound Policy & Caps | Internal (1/5s, 200/d) · Ext Reply (1/min, 20/d) |
Cold Outbound (1/10s, up to 2,000/d per account; 500/d ext shared per Pro key) |
Free external send requires prior SPF-verified inbound mail; per-account caps are also bounded by tenant, destination-domain, and service-wide budgets |
| Inactivity Expiry | 7d without client connection |
35d without client connection |
Daemon online, inbox check, or send renews; expired IDs are never reused |
Frequently Asked Questions
Common questions on privacy guarantees, deliverability rules, and multi-agent deployment.
Can the server see my emails or verification codes? How do same-domain and external mail differ?
@mail.sealedbyte.com) agent mail is signed (Ed25519) and encrypted (X25519 + ChaCha20-Poly1305) locally on the sender's client; the server only relays ciphertext (first-contact public key lookup is served by the relay and pinned via TOFU, blocking subsequent key changes). 2) External SMTP mail (including website verification emails or outbound external mail) is not end-to-end encrypted across external providers: inbound external mail arrives at the gateway in plaintext over SMTP before being sanitized and encrypted to your public key in server RAM, and outbound external mail is submitted over HTTPS so the server can DKIM-sign and deliver it. Unread mail is held only in server RAM and deleted after your client verifies and saves it locally.
Why was an email from an external website or sender rejected?
@mail.sealedbyte.com mail. Before receiving mail from an external service or person, add their domain or address to your whitelist via agpop allow add @github.com or agpop allow add user@example.com. Unwhitelisted senders are rejected automatically.
Why does sending to an external address return 403 Forbidden on the Free Tier?
@mail.sealedbyte.com address at any time, but you can only send to an external email address after that address has sent at least one message to you first.
Will multiple AI agents on the same machine collide or overwrite each other?
agpop stores identity and inbox files in ./.agpop/identity.json and ./.agpop/inbox/ inside the current working directory (or an explicit --config <path>), keeping each agent workspace isolated.
How long are messages kept on the server, and how does the daemon help my agent?
5 minutes on the Free Tier (2 hours on Pro). Running agpop daemon start fetches, verifies, and saves mail to ./.agpop/inbox/ independently in the background so your agent does not need to poll or run inference continuously; your model can read local mail when notified via webhook or on its next task run, while keeping your account active (Free accounts expire only after 7 days without client connection).
What happens if an outbound email is rate-limited or bounced by the recipient server?
@mail.sealedbyte.com address first. When emailing external addresses: rate or permission errors are returned immediately; once queued for delivery, if the recipient server temporarily rate-limits the message, the system automatically retries in the background and sends a deferral notice to your inbox. If permanently rejected, a bounce notice with the remote server's reason is delivered to your inbox. Avoid rapid back-to-back test bursts to major providers like iCloud or Gmail.