Atomicmail
Skill aiskillstore/marketplace/skills/atomic-mail/atomicmail
Read and write email through the Atomic Mail from an AI agent. Handles proof-of-work authentication and JMAP so the agent thinks in JMAP method calls. Use when the user asks to register an email inbox, list mailboxes, fetch or send email.From its SKILL.md
npx -y skills add aiskillstore/marketplace --skill atomicmailAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
What its file declares
Copied from the file, not written here
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
10.4 KB, ~2.1k tokens by cl100k_base, as published. Nobody here has run it
Atomic Mail
Atomic Mail exposes a programmable inbox over JMAP with PoW signup and JWT
rotation. This skill ships a single CLI entrypoint with three commands:
register, jmap_request, and help — matching the MCP server.
When to use this skill
- Register a new inbox or log in with an existing API key.
- Send JMAP batches (inline JSON or preset files).
- Read built-in documentation (JMAP cheatsheet, presets, troubleshooting) or the
package README (
atomicmail help --topic readme).
Call atomicmail help early and often — before guessing
placeholders, using URNs, or cron setup. Start with help --topic overview,
then presets before custom jmap_request calls and cron after register.
If installed behavior disagrees with docs elsewhere, trust help from the running
package.
Commands
{baseDir}/scripts/atomicmail register --username "myagent"
{baseDir}/scripts/atomicmail jmap_request --ops-file list_inbox.json
Run atomicmail --help or atomicmail <command> --help for flags.
Defaults
authUrl:https://auth.atomicmail.aiapiUrl:https://api.atomicmail.ai- credentials directory:
~/.atomicmail
Workflow
1. Register (new account)
{baseDir}/scripts/atomicmail register \
--username "alice"
Writes credentials.json, session.jwt, capability.jwt. Prints JSON
including inbox and accountId.
Required next step: after register, arrange hourly inbox polling per your
runtime (see Hourly inbox polling).
Native cron hosts schedule an agent job with list_inbox.json; hosts
without native cron should ask the operator or remind manual fetch. Do not cron
atomicmail jmap_request alone.
Usernames must be 5–21 characters (local-part of your @atomicmail.ai
address).
If credentials already exist for a different username, register fails by
default to protect the old account. To add another inbox without replacing the
current one, pass a separate --credentials-dir (MCP: credentials_dir on
register / jmap_request). Use --forced only when you intend to replace
credentials in the same directory (after backing it up).
2. Register (existing API key, in case losing the credentials file)
{baseDir}/scripts/atomicmail register \
--api-key "..."
3. JMAP request
{baseDir}/scripts/atomicmail jmap_request \
--ops '[["Mailbox/get", {"accountId": "$ACCOUNT_ID"}, "m0"]]'
$ACCOUNT_ID, $INBOX, $INBOX_MAILBOX_ID, $UPLOAD_URL, and $DOWNLOAD_URL
resolve from the session/credentials. Other placeholders such as $TO or
$SUBJECT require --vars with a JSON object of strings (same substitution
applies to --ops and --ops-file).
Preset file:
{baseDir}/scripts/atomicmail jmap_request \
--ops-file list_inbox.json
With custom placeholders:
{baseDir}/scripts/atomicmail jmap_request \
--ops-file send_mail.json \
--vars '{"TO":"[email protected]","SUBJECT":"Hello","BODY":"Hi there"}'
Bundled presets (no local file creation required):
send_mail.json($TO,$SUBJECT,$BODY)send_mail_attachment.json($TO,$SUBJECT,$BODY,$ATTACHMENT_BASE64,$ATTACHMENT_TYPE,$ATTACHMENT_NAME)send_mail_blob_attachment.json($TO,$SUBJECT,$BODY; pair with repeatable--attachment PATHfor RFC 8620 upload →$ATTACHMENT_0_BLOB_ID, …)list_inbox.json(latest 50; uses$INBOX_MAILBOX_ID) — used for hourly inbox pollingreply.json($MAIL_ID,$BODY)
Hourly inbox polling (after register)
Registration only creates credentials. Inbound mail should be fetched and triaged about once per hour between interactive sessions.
Choose the path that matches your runtime — do not mix platforms.
If your host supports scheduled jobs
OpenClaw, Hermes, atomic-agent, and similar hosts with native cron: set up an
hourly agent job after the first successful register. Wire Atomic Mail MCP
or AgentSkill into that agent. The scheduled turn should call list_inbox.json
inside the agent prompt.
If your host does not support scheduled jobs
Claude, Pi, Cursor, and other chat agents without a cron API: do not spend tokens trying to work around this — no wrapper scripts, OS crontab/LaunchAgent setup, or scheduling on a different platform.
After register, either ask your operator to set up hourly polling on a capable host (share the examples below), or remind your operator to fetch mail manually when needed.
Forbidden: cross-platform scheduling
Do not register in one runtime and schedule the cron job on another (e.g. Pi
runs register, then creates an OpenClaw cron job).
Do not cron atomicmail jmap_request alone (no agent). Do not use
headless one-shot CLIs (claude -p, pi -p, codex exec) if you want to
continue the thread.
Scheduling examples (capable hosts or operators)
| Your setup | Approach |
|---|---|
| OpenClaw | openclaw cron add with --announce |
| Hermes | hermes cron create or /cron with --deliver |
| Atomic Bot | Same as OpenClaw or Hermes |
| atomic-agent | atomic-agent task create --cron |
| No native cron (Claude, Pi, Cursor, …) | Ask operator to schedule on a capable host, or remind manual fetch |
Full options, agent prompt, and operator OS-scheduling notes: atomicmail help --topic cron or MCP help topic cron.
Agent prompt (all workflows)
Use Atomic Mail to fetch my inbox (MCP jmap_request with ops_file list_inbox.json, or atomicmail jmap_request --ops-file list_inbox.json). Summarize new messages, highlight what needs a reply, and stay available — I may ask you to reply, forward, search, or dig into something important.
Built-in cron examples
OpenClaw — cron docs: isolated
session, --announce for delivery.
Hermes — cron docs:
--deliver origin (or telegram, discord, email, …); not --no-agent.
atomic-agent — atomic-agent task create --cron "0 * * * *" --message "<prompt>"
For operator OS-scheduling patterns on terminal hosts, see help --topic cron.
4. Help
{baseDir}/scripts/atomicmail help
{baseDir}/scripts/atomicmail help --topic jmap_cheatsheet
Security
credentials.jsonholds the API key (mode0600). Do not commit it.- JWT files are bearer secrets — do not log them.
Attachments and blobs
Use send_mail_attachment.json (in-band base64) or send_mail_blob_attachment.json
with repeatable --attachment PATH (RFC 8620 upload — same flow as MCP
attachments). Rules, limits, and Blob/upload JSON shape:
atomicmail help --topic jmap_cheatsheet.
{baseDir}/scripts/atomicmail jmap_request \
--ops-file send_mail_attachment.json \
--vars '{"TO":"[email protected]","SUBJECT":"Hi","BODY":"See file","ATTACHMENT_BASE64":"SGVsbG8=","ATTACHMENT_TYPE":"text/plain","ATTACHMENT_NAME":"note.txt"}'
Overriding defaults
- Endpoints:
--auth-url,--api-urlorATOMIC_MAIL_AUTH_URL,ATOMIC_MAIL_API_URL - Credentials path:
--credentials-dirorATOMIC_MAIL_CREDENTIALS_DIR - PoW salt:
--scrypt-saltorATOMIC_MAIL_SCRYPT_SALT
Platform notes
- Credentials directory: Default
~/.hermes/atomicmailon Hermes (not~/.atomicmail). The bundled skill launcher setsATOMIC_MAIL_CREDENTIALS_DIRwhen unset; operator env oratomicmail.credentials_dirconfig overrides it. - After register: On Hermes, accept the hourly inbox blueprint via
/suggestions— do not skip inbox polling setup. - Never cron raw CLI: Do not schedule
{baseDir}/scripts/atomicmail jmap_requestalone without an agent turn. The Hermes blueprint usesno_agent: falseso each run is a full agent session withlist_inbox.json. - Multi-account: Pass
--credentials-dironregister/jmap_requestonly when operating multiple inboxes at once — not needed for the default single-inbox flow.
What ships with it: 137 files
605.2 KB alongside SKILL.md, 70 of them executable
lib/
- esm/_dnt.polyfills.d.tsruns3.9 KB
- esm/_dnt.polyfills.d.ts.map1008 B
- esm/_dnt.polyfills.jsruns5.3 KB
- esm/lib/agent/auth/agent-auth-http.d.tsruns837 B
- esm/lib/agent/auth/agent-auth-http.d.ts.map964 B
- esm/lib/agent/auth/agent-auth-http.jsruns3.1 KB
- esm/lib/agent/auth/agent-jwt.d.tsruns440 B
- esm/lib/agent/auth/agent-jwt.d.ts.map537 B
- esm/lib/agent/auth/agent-jwt.jsruns885 B
- esm/lib/agent/auth/agent-pow.d.tsruns217 B
- esm/lib/agent/auth/agent-pow.d.ts.map348 B
- esm/lib/agent/auth/agent-pow.jsruns1.5 KB
- esm/lib/agent/jmap/agent-help-content.d.tsruns89 B
- esm/lib/agent/jmap/agent-help-content.d.ts.map175 B
- esm/lib/agent/jmap/agent-help-content.jsruns110 B
- esm/lib/agent/jmap/agent-jmap-blob-limits.d.tsruns1.3 KB
- esm/lib/agent/jmap/agent-jmap-blob-limits.d.ts.map886 B
- esm/lib/agent/jmap/agent-jmap-blob-limits.jsruns6.3 KB
- esm/lib/agent/jmap/agent-jmap-blob-upload.d.tsruns1.2 KB
- esm/lib/agent/jmap/agent-jmap-blob-upload.d.ts.map818 B
- esm/lib/agent/jmap/agent-jmap-blob-upload.jsruns4.2 KB
- esm/lib/agent/jmap/agent-jmap.d.tsruns4.5 KB
- esm/lib/agent/jmap/agent-jmap.d.ts.map2.7 KB
- esm/lib/agent/jmap/agent-jmap-email-charset.d.tsruns397 B
- esm/lib/agent/jmap/agent-jmap-email-charset.d.ts.map283 B
- esm/lib/agent/jmap/agent-jmap-email-charset.jsruns2.1 KB
- esm/lib/agent/jmap/agent-jmap.jsruns14.0 KB
- esm/lib/agent/jmap/agent-jmap-verify.d.tsruns488 B
- esm/lib/agent/jmap/agent-jmap-verify.d.ts.map323 B
- esm/lib/agent/jmap/agent-jmap-verify.jsruns1.7 KB
- esm/lib/agent/jmap/agent-vars.d.tsruns1.5 KB
- esm/lib/agent/jmap/agent-vars.d.ts.map801 B
- esm/lib/agent/jmap/agent-vars.jsruns3.4 KB
- esm/lib/agent/jmap/help-content/auth.d.tsruns1.4 KB
- esm/lib/agent/jmap/help-content/auth.d.ts.map175 B
- esm/lib/agent/jmap/help-content/auth.jsruns1.4 KB
- esm/lib/agent/jmap/help-content/cron.d.tsruns7.3 KB
- esm/lib/agent/jmap/help-content/cron.d.ts.map271 B
- esm/lib/agent/jmap/help-content/cron.jsruns6.5 KB
- esm/lib/agent/jmap/help-content/index.d.tsruns340 B
97 more files not listed here. See all 137 in the repository.