Blog
Email for OpenClaw that keeps working
An email to your agent’s Pidgeon address starts an OpenClaw conversation, one per email thread. The agent’s answer goes back as a reply in that thread, and a reply to the reply carries on the same conversation.
Updated 25 October 2026
Install it
openclaw plugins install @pidgeon-ai/openclaw
openclaw config set channels.pidgeon '{}' --strict-json
openclaw channels login --channel pidgeon
The last line opens Pidgeon's sign-in in your browser. You choose what the channel can do and which addresses it reaches; it needs only read and send. On a server with nobody there to sign in, put an API key in PIDGEON_API_KEY and skip the login. Then check it:
openclaw channels status --channel pidgeon --probe
What reaches your agent
- The text a person would see. Pidgeon Firewall removes hidden text before the agent reads anything, and never hands it raw HTML.
- Not spam, and not what the Firewall flags. Mail asking the agent to send mail elsewhere, or addressed to an AI, waits in the inbox instead of becoming a turn.
channels statuscounts it. - An allowed sender only when it really is them. With an allowlist, a message from an allowed address counts only when it passes DMARC, because anyone can forge a From line.
- Replies only. The agent answers the email in front of it. It cannot write to a new recipient or start a thread, so a prompt hidden in one email cannot send mail anywhere.
Why it keeps working
It is pure TypeScript with no native code, built for OpenClaw 2026.10, and run end to end on macOS and installed on Linux x64 and arm64. A compatibility job runs it against every new OpenClaw release; it is green on 2026.10.7 and 2026.10.10-beta.3.
It reads new mail from a cursor kept in OpenClaw's state store and queues each message before the cursor moves, so a restart resumes where it stopped, and mail that arrived while the Gateway was down is answered when it is back. channels status says recovering with the reason, or blocked when it is not signed in. It never says running while nothing arrives.
Switching from AgentMail's plugin, in two minutes
- Turn theirs off:
openclaw plugins disable agentmail, oropenclaw plugins uninstall agentmailto remove it. - Install this one with the three lines above.
- Carry your sender rules over. AgentMail's channel denies everyone not on
allowFromby default; this one starts open. To keep the same behaviour, setchannels.pidgeonto{"dmPolicy": "allowlist", "allowFrom": [...]}with the same addresses (@customer.comallows a whole domain). - Restart the Gateway:
openclaw gateway restart.
Your agent's address changes from @agentmail.to to a Pidgeon one, unless the mail is on your own domain: then point the domain's MX records at Pidgeon and the address stays.
The full setup, every setting and named accounts are in the OpenClaw guide. The plugin is on ClawHub and npm.