- The agent registers its own mailbox on atomicmail.ai and holds the keys to it. Your own inbox stays out of it.
- OpenClaw email setup is one prompt pasted into the chat: the agent runs it through npx and registers the address.
- Three routes reach the same inbox: the AgentSkill CLI, an OpenClaw MCP server, or the JMAP API.
- One address per agent, so every action traces back to one agent and you can shut one down on its own.
- Registration only creates the address. An OpenClaw cron job is what makes anyone read it, and it has to be set up separately.
What Is an OpenClaw Email Address?
An OpenClaw email address is an inbox the agent registers and owns. OpenClaw solves the signup challenge, holds the credentials, and sends and reads mail from it on its own. It is a different mailbox from the one where you read your own mail.
OpenClaw is an open source AI agent that runs as a gateway and takes tasks from a chat, whether that is its own web UI, Telegram, WhatsApp or Discord. It works through skills, folders with instructions and scripts the agent can call, and installs new ones from ClawHub, the public skill registry. A skill stays in the agent's workspace after the chat that installed it ends, so the mail setup you do today is still there next month.
A gateway that is not running reads no mail. Atomic Bot runs OpenClaw in the cloud around the clock, so the inbox always has someone checking it.
An inbox of its own gives the agent three things:
- Signups it can finish alone. Ordinary flows stop software with a phone number and a CAPTCHA, Atomic Mail asks for a calculation instead, and the agent handles the form and the code that comes back with nobody in between.
- Work that outlives a session. A chat ends and takes its context with it, while a mail thread sent today and answered on Tuesday is still there.
- A way to talk to other agents over plain email. Two agents on different platforms need no shared API, and you can read the whole thread afterwards.
OpenClaw and Gmail: Why Not Connect Your Main Inbox?
OpenClaw can connect to Gmail. Its Gmail Pub/Sub trigger pushes each new message into the agent, and the setup needs gcloud, the gog CLI and an HTTPS endpoint Google can reach. OpenClaw's own docs tell you to route that mail to a separate reader agent with no shell, browser or file access.
Handing the agent a mailbox you already own is the first thing anyone tries, and then your account serves two users at once: its mail goes out under your name, and nothing separates its messages from yours.
It also reads everything in there, including your verification codes and password reset links. Anyone can write to the agent, and a message can tell it what to do. A stranger can start a password reset on an account tied to the address and have the agent send the code back. Atomic Mail calls that a 2FA bypass and tells you never to connect an agent to your main inbox.
An agent email address of its own separates the two accounts by default. Each agent registers one and keeps its own credentials, so you can tell from the address alone which agent signed up where, and shutting one down leaves the others untouched.
That is what Atomic Mail, an email API for AI agents, is for: the agent solves the proof of work challenge, gets its address, and runs the mailbox from there. Accounts are free while the service is in open alpha.
Set Up Atomic Mail on OpenClaw with One Prompt
Atomic Mail's site hands the agent a prompt under "Tell your agent to use this code". For the OpenClaw email setup, add --watch scheduled and --credentials-dir ~/.openclaw/atomicmail to the register line and point the other commands at the same directory. Paste the prompt into the chat, and the agent comes back with its address.
npx fetches @atomicmail/agent-skill the first time a command runs, and OpenClaw already runs on Node, so there is nothing to install first. The keys land on disk and the address comes back in the chat.
OpenClaw Email Integration: Three Ways to Connect Atomic Mail
The prompt above is the first of three routes for an OpenClaw email integration. If your agent has no shell, or you would rather own the mailbox yourself, one of the other two fits, and they differ in what the agent already has to work with.
| Route | What the agent needs | Registration | Who owns the inbox |
|---|---|---|---|
| Method 1. The AgentSkill CLI | a shell and Node.js 20 or newer, nothing installed | Yes, one command | the agent |
| Method 2. An OpenClaw MCP server | an MCP host, no shell | Yes, one tool call | the agent, or your account on the hosted server |
| Method 3. The JMAP API | an HTTP client in any language | No register at all, four calls by hand | the agent |
Method 1. The AgentSkill CLI
Run it through npx. Atomic Mail's quickstart lists OpenClaw with the shell agents, and for those the CLI runs straight from npm.
Read what came back. The first call downloads the package, then prints the overview. register, jmap_request and help are the three commands, and help ships topic docs that match the version you run.

Method 2. An OpenClaw MCP Server
Add the local server to OpenClaw, as in Atomic Mail's local MCP docs. With an OpenClaw MCP server in place, the agent gets the same three as tools instead of commands.
add starts the server and checks it before saving, and the first npx run spends most of its time downloading the package. The default window is 5 seconds, so without --connect-timeout the command fails and nothing is saved. The probe then lists three tools, atomicmail__help, atomicmail__jmap_request and atomicmail__register.
Or point OpenClaw at the hosted server, https://mcp.atomicmail.ai/mcp, with no local files and OAuth sign in. The mailbox there belongs to your account rather than to the agent, which fits when a person should own the mail. Atomic Mail documents it on the hosted MCP server page.
This one saves without a check and asks for the login straight away. Until you finish the sign-in, openclaw mcp doctor atomicmail --probe reports that the server requires OAuth authorization. To take either server off later, the command is openclaw mcp unset atomicmail, since OpenClaw has no mcp remove. The other flags are in OpenClaw's MCP guide.
Method 3. The JMAP API
Authenticate yourself. The service is called directly over HTTP with no wrapper in between, so the proof of work and the two tokens are your job. The four calls are in the next section and on the REST authentication page.
Speak JMAP to https://api.atomicmail.ai with the capability token that flow returns. This is the longest route, and the only one where token rotation is yours.
Register the Agent's Inbox
Installing a route gives OpenClaw the commands and nothing to point them at. Registration creates the mailbox, and it is a different thing on each route.
On the CLI it is one command, run by you or by the agent:
--credentials-dir is not in the command on Atomic Mail's site. The CLI keeps its keys in ~/.atomicmail by default, and when OpenClaw runs in Docker only ~/.openclaw survives a rebuilt container. The key in there is the only way into the mailbox, so keep it where OpenClaw keeps its own state.
On MCP the same signup is a tool, and OpenClaw calls it with the two values as JSON:
Both wrappers want the same two things. The username runs 5 to 21 characters and becomes the part before the @. The watch value answers one question: once this inbox exists, what makes anyone look at it. scheduled means a recurring job wakes an agent to read it, on-demand means nothing does and mail sits there until a person asks. Leaving it out returns the requirement instead of an inbox. Running it again with the same username is safe while the keys are still on disk.
On the JMAP API there is no register at all. Ask https://auth.atomicmail.ai/api/v1/challenge for a challenge JWT, solve the scrypt proof of work, and post it back to /api/v1/session with {"powHex":"...","nonce":"...","username":"openclawdesk"} for a session JWT that lasts an hour. Trade that at /api/v1/capability for a capability JWT that lasts two minutes, and JMAP calls to https://api.atomicmail.ai carry that one. Nothing here asks you the watch question, and the refresh is yours. That is the work the other two routes are wrapping.
Back on the CLI, the rest takes about half a minute and nothing from you.

The address is openclawdesk@atomicmail.ai, and three files sit in that directory, credentials.json, session.jwt and capability.jwt, mode 0600. Keep the first, the two tokens rotate by themselves. A second inbox needs a directory of its own, since the CLI refuses to overwrite credentials that belong to a different username.
On Hermes, register prints a scheduler command filled in for the host. On OpenClaw it may not recognise the runtime, and then it prints the job name, the interval and the prompt instead of a command. The automation section below turns them into one command.
If you would rather own the mailbox yourself, create it in the Atomic Mail dashboard and sign the agent in with register --api-key, the same ownership as the hosted MCP server above.
Send the First Message
A welcome message lands as soon as the inbox exists, so the first check returns one.
To send email from OpenClaw, use the same command with the send preset.
EmailSubmission/set comes back with undoStatus: final, and the message has left openclawdesk.

The sent copy goes to the Sent folder, not the inbox, so the listing above shows only mail that arrived. To see what the agent sent, run the same command with --ops-file list_sent.json.
Send one to yourself, reply from your own mail, and run the listing again. Your reply in that list means both directions work. In chat you type neither command, you ask for it and OpenClaw uses the same presets.
Reply in the Same Thread
To answer a message instead of starting a new one, take its id from the listing and pass it to the reply preset:
The CLI looks the original up by that id and answers its sender with Re: in front of the subject. EmailSubmission/set comes back with undoStatus: final, and the reply lands in the same thread as the message it answers. In chat this is one sentence: ask OpenClaw to reply to that message. Replies are something you ask for; the scheduled job below stays read-only and never answers on its own.
Read a Verification Code
When the agent signs up somewhere, the code or confirmation link lands in this inbox. Ask for the newest message from that sender and read its body:
In chat this is one sentence: ask OpenClaw for the latest code from that sender. The message comes from a stranger, so the agent copies the code into the form and does nothing else the email asks.
OpenClaw Email Automation
Your agent has an address now, and nobody is reading it. For OpenClaw email automation, a job has to wake the agent on a schedule. Registration gave you the job name, the interval and the prompt, and atomicmail help --topic cron has the OpenClaw form of the command. The flags themselves are in OpenClaw's cron reference. In newer OpenClaw versions the same commands also answer to openclaw automations, and the cron spelling keeps working.
Set Up an OpenClaw Cron Job
The OpenClaw cron job runs the prompt register printed, and that prompt calls the CLI as plain atomicmail, which the npx route never puts on PATH. Change that one call to the full npx form and leave every other word as register printed it. The read-only wording is what keeps an unattended run from acting on mail written by strangers.
If you work in the web chat, skip the CLI for this one and ask OpenClaw in that chat to create the job. The in-chat automation tool binds the job to the conversation it was created from, and each run posts its summary back there with no channel set up. --session current from the shell does not do the same, because a shell command has no conversation to bind to and the job ends up isolated.
Then check it took, with openclaw cron list or in the Cron Jobs view:

--session isolated starts every run in a fresh session, so yesterday's mail does not pile up in the context. --tools exec leaves the job one tool, the shell it needs to run the CLI. Without it OpenClaw stores an unrestricted tool policy, and the job would wake every morning able to write files and create more jobs while it reads mail from strangers. --name is what you find it by.
--announce needs somewhere to announce to. Without --channel it falls back to the last channel you used, and on a gateway where the only chat is the web UI there is none. openclaw cron list then shows announce -> last (last -> no route, will fail-closed): the run reads the inbox, writes the summary and throws it away.
Then run it once by hand rather than waiting for the morning. The scheduled session inherits nothing from the one that ran register, so this is where a missing command or a wrong credentials directory shows up.

What runs is a full agent turn. OpenClaw reads the inbox through the list_inbox.json preset, summarises what came in and marks what needs an answer. The job needs nothing but the command in its prompt.
The schedule is 09:00 in the gateway's time zone, and on a cloud host that is usually UTC. Add --tz Europe/Berlin or your own zone, and pick the interval by how much mail the address actually sees.
Take it off later by its id:
Keep OpenClaw Watching the Inbox 24/7
A scheduled check runs only while OpenClaw is running. On a laptop, OpenClaw stops when you close the lid, and the 09:00 check never happens. The job needs a machine that stays on, such as a VPS for OpenClaw or a managed host.
Atomic Bot runs OpenClaw in the cloud 24/7, so every check fires on time whether or not you are at your computer. Start OpenClaw there, paste the Atomic Mail prompt into its chat, and ask it to create the job from the same chat. Each run posts its summary back into that chat. If the inbox gets a lot of mail, ask for an hourly job instead of a daily one.
Troubleshooting
You installed it from ClawHub instead
The same CLI is on ClawHub as @atomicmail/atomicmail, and openclaw skills install @atomicmail/atomicmail puts it in the agent's workspace. The launcher arrives without the execute bit and nothing lands on PATH, so a bare atomicmail exits with 127 and the launcher itself with 126. Run it as bash ~/.openclaw/workspace/skills/atomicmail/scripts/atomicmail (or the same path under your own workspace, if you changed it), or go back to npx. The short form clawhub/atomicmail returns Invalid skill slug on OpenClaw.
did not complete initialize within 5s
That is openclaw mcp add giving up on the local server while npx is still downloading it. Run the same command with --connect-timeout 120.
The scheduled run says atomicmail: not found
The job still carries the prompt exactly as register printed it, with the CLI called by its bare name. Edit the job and put the full npx --package=@atomicmail/agent-skill atomicmail in front of jmap_request, and change nothing else in the text.
register returns a requirement instead of an inbox
The watch value is missing, and there is no default. Pass scheduled or on-demand.
The username is refused
Either the name is outside 5 to 21 characters, or credentials for a different one already exist. Point the second inbox at its own --credentials-dir.
The OpenClaw cron job runs but the summary never arrives
Run openclaw cron list. No job means it was never created, so create it now. A delivery shown as announce -> last with no route, will fail-closed means the job runs every day and reports nowhere: recreate it with --channel and --to, or create it from the chat you want the summary in. openclaw cron runs --id <jobId> shows the summary each run produced, delivered or not.
When something you read elsewhere disagrees with what the tool does, atomicmail help --topic troubleshooting ships inside the installed version and matches it.
FAQ
How do I give OpenClaw an email address?
Paste the prompt from Atomic Mail's site into the OpenClaw chat and add --watch scheduled and --credentials-dir ~/.openclaw/atomicmail to the register line. OpenClaw solves the proof of work and comes back with an address on atomicmail.ai.
Can OpenClaw send emails?
Yes, once it has an address. The CLI sends through the send_mail.json preset and answers in a thread through reply.json, and in chat you ask for the email in plain words.
Can OpenClaw read my emails?
It reads the mail in its own inbox: the listing shows sender, subject and date, and the scheduled job summarises what came in. Your personal inbox goes through the Gmail trigger or the IMAP plugin instead.
Is there an OpenClaw email plugin?
OpenClaw ships an IMAP plugin that watches an existing mailbox and starts an isolated agent session for each new message, but it does not send mail. For an inbox the agent owns and can send from, the Atomic Mail CLI covers both.
Does registering one need a phone number or a CAPTCHA?
No. Both exist to keep software out, so an agent could never pass them. Atomic Mail asks for computation instead, about thirty seconds per signup, cheap for one inbox and unaffordable at a million.
How much does an OpenClaw email address cost?
Nothing today. Atomic Mail is in open alpha and the service is free, and no pricing has been announced.
How do I connect OpenClaw to Gmail?
Through its Gmail Pub/Sub trigger: openclaw webhooks gmail setup --account you@gmail.com wires new messages into the agent once gcloud, the gog CLI and a reachable HTTPS endpoint are in place. Route that mail to a restricted reader agent, as OpenClaw's docs advise, since the agent also sees your password resets and login codes.
Can I use my own domain?
An inbox the agent registers itself lands on atomicmail.ai. Your own domain is verified in the dashboard, DNS records and all, and inboxes on it are signed into with an API key.
Where do the credentials live?
In ~/.atomicmail by default, for the CLI and for MCP alike. This guide registers with --credentials-dir ~/.openclaw/atomicmail instead, because in Docker only ~/.openclaw survives a rebuilt container. Three files either way, and only credentials.json matters long term.
Can two agents share one inbox?
They can, and then nothing says which of them did what. One address each keeps the sender readable, and revoking its credentials stops that agent alone.
Is it safe to let OpenClaw read mail from strangers?
Yes, as long as reading is all it does unattended. Anyone can write to a public address, so the scheduled run is written read only and limited to the shell: summarise and flag, never act on what a message asks.



