Skip to main content
Install @openmail/openclaw and mail to the agent’s address wakes it. Replies go out in the same thread.

Before you start

  • OpenClaw 2026.9.2 or newer.
  • An OpenMail API key from the console. Any scope works.

Install

1

Install the plugin

Reinstalling? Run openclaw plugins enable openmail first; OpenClaw keeps uninstalled plugins disabled.
2

Add the channel

Picks your inbox, or creates one.
3

Restart the gateway

Look for OpenMail: enabled, configured, running, connected.
Email the agent and it answers in the thread. Or ask it on your usual chat:
  • “What’s in the inbox since this morning?”
  • “Reply to Marc that Thursday works, and cc Jonas.”
  • “Sign up for the Linear newsletter and give me the confirmation code.”
Something off? openclaw logs | grep openmail.

Modes

Default is channel. Change it with --mode notify on channels add, or per inbox. Only mail from a person gets a reply. Notifications and verification codes reach the agent as information, so it never answers noreply@. Spam never reaches it.

Who can email the agent

Anyone, by default. Restrict it under Allow/Block List in the console or with the CLI:
Blocked mail is dropped on the server; the agent never sees it.

Prompt injection

Replies go to the sender OpenMail recorded, not one the message claims. The bundled CLI takes credentials from the channel config and rejects --api-key and --base-url, so a forged mail can’t point the agent at another account. The agent can still start new threads; to stop that, make the inbox’s outbound policy an allowlist.

What the agent can do

The plugin bundles the CLI and a skill that teaches the agent to use it. Every command runs with the channel’s credentials, on the gateway host even if the agent is sandboxed. Keep the --:
New threads also work through openclaw message send --channel openmail --to a@b.com "…"; the first line becomes the subject.

Several inboxes

One account per inbox. Each has its own key and can be bound to a different agent.
One account per pod. Covers every inbox in the pod, including ones the agent creates later. Needs a pod or account key.
Each sender gets a conversation per inbox; replies leave from the inbox that received the mail. Set modes per inbox under channels.openmail.inboxes in openclaw.json:

Attachments

Text from PDF, DOCX, XLSX, PPTX, CSV, and images (OCR) reaches the agent inline, up to 8k characters per file and 24k total. Files without text arrive as files, so a vision model sees the picture; mediaMaxMb caps the total per email (default 20).

Configuration reference

channels add writes channels.openmail in openclaw.json. If you gave it an account key, it stores a narrower pod key instead. No environment variables.
channels add flags: --mailbox-name sales creates sales@omail.sh, --display-name sets the sender name, --inbox-id picks an inbox when the key sees several, --pod runs a whole pod, --account names the account, --mode sets the mode.

Upgrading from the CLI bridge

Before @openmail/cli 0.7.0, openmail setup ran a WebSocket bridge as a system service. Those commands are gone.
1

Stop the old bridge

2

Install the plugin

Follow Install with the key from ~/.openclaw/openmail.env.
3

Remove the old files

Delete ~/.openclaw/openmail.env, ~/.openclaw/skills/openmail/, and the skills.entries.openmail and OpenMail hooks.mappings entries in openclaw.json.