@atomicmail/agent-skill-openclaw 0.3.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +182 -0
- package/SKILL.md +206 -0
- package/esm/_dnt.polyfills.d.ts +101 -0
- package/esm/_dnt.polyfills.d.ts.map +1 -0
- package/esm/_dnt.polyfills.js +127 -0
- package/esm/lib/agent/auth/agent-auth-http.d.ts +26 -0
- package/esm/lib/agent/auth/agent-auth-http.d.ts.map +1 -0
- package/esm/lib/agent/auth/agent-auth-http.js +85 -0
- package/esm/lib/agent/auth/agent-jwt.d.ts +12 -0
- package/esm/lib/agent/auth/agent-jwt.d.ts.map +1 -0
- package/esm/lib/agent/auth/agent-jwt.js +27 -0
- package/esm/lib/agent/auth/agent-pow.d.ts +5 -0
- package/esm/lib/agent/auth/agent-pow.d.ts.map +1 -0
- package/esm/lib/agent/auth/agent-pow.js +49 -0
- package/esm/lib/agent/jmap/agent-help-content.d.ts +2 -0
- package/esm/lib/agent/jmap/agent-help-content.d.ts.map +1 -0
- package/esm/lib/agent/jmap/agent-help-content.js +2 -0
- package/esm/lib/agent/jmap/agent-jmap-blob-limits.d.ts +27 -0
- package/esm/lib/agent/jmap/agent-jmap-blob-limits.d.ts.map +1 -0
- package/esm/lib/agent/jmap/agent-jmap-blob-limits.js +166 -0
- package/esm/lib/agent/jmap/agent-jmap-blob-upload.d.ts +24 -0
- package/esm/lib/agent/jmap/agent-jmap-blob-upload.d.ts.map +1 -0
- package/esm/lib/agent/jmap/agent-jmap-blob-upload.js +104 -0
- package/esm/lib/agent/jmap/agent-jmap-email-charset.d.ts +8 -0
- package/esm/lib/agent/jmap/agent-jmap-email-charset.d.ts.map +1 -0
- package/esm/lib/agent/jmap/agent-jmap-email-charset.js +61 -0
- package/esm/lib/agent/jmap/agent-jmap-run.d.ts +52 -0
- package/esm/lib/agent/jmap/agent-jmap-run.d.ts.map +1 -0
- package/esm/lib/agent/jmap/agent-jmap-run.js +260 -0
- package/esm/lib/agent/jmap/agent-jmap-verify.d.ts +9 -0
- package/esm/lib/agent/jmap/agent-jmap-verify.d.ts.map +1 -0
- package/esm/lib/agent/jmap/agent-jmap-verify.js +50 -0
- package/esm/lib/agent/jmap/agent-jmap.d.ts +89 -0
- package/esm/lib/agent/jmap/agent-jmap.d.ts.map +1 -0
- package/esm/lib/agent/jmap/agent-jmap.js +373 -0
- package/esm/lib/agent/jmap/agent-vars.d.ts +30 -0
- package/esm/lib/agent/jmap/agent-vars.d.ts.map +1 -0
- package/esm/lib/agent/jmap/agent-vars.js +96 -0
- package/esm/lib/agent/jmap/help-content/auth.d.ts +2 -0
- package/esm/lib/agent/jmap/help-content/auth.d.ts.map +1 -0
- package/esm/lib/agent/jmap/help-content/auth.js +33 -0
- package/esm/lib/agent/jmap/help-content/cron.d.ts +6 -0
- package/esm/lib/agent/jmap/help-content/cron.d.ts.map +1 -0
- package/esm/lib/agent/jmap/help-content/cron.js +159 -0
- package/esm/lib/agent/jmap/help-content/index.d.ts +6 -0
- package/esm/lib/agent/jmap/help-content/index.d.ts.map +1 -0
- package/esm/lib/agent/jmap/help-content/index.js +61 -0
- package/esm/lib/agent/jmap/help-content/installation.d.ts +2 -0
- package/esm/lib/agent/jmap/help-content/installation.d.ts.map +1 -0
- package/esm/lib/agent/jmap/help-content/installation.js +47 -0
- package/esm/lib/agent/jmap/help-content/jmap-cheatsheet.d.ts +2 -0
- package/esm/lib/agent/jmap/help-content/jmap-cheatsheet.d.ts.map +1 -0
- package/esm/lib/agent/jmap/help-content/jmap-cheatsheet.js +230 -0
- package/esm/lib/agent/jmap/help-content/multi-account.d.ts +2 -0
- package/esm/lib/agent/jmap/help-content/multi-account.d.ts.map +1 -0
- package/esm/lib/agent/jmap/help-content/multi-account.js +49 -0
- package/esm/lib/agent/jmap/help-content/overview.d.ts +2 -0
- package/esm/lib/agent/jmap/help-content/overview.d.ts.map +1 -0
- package/esm/lib/agent/jmap/help-content/overview.js +49 -0
- package/esm/lib/agent/jmap/help-content/presets.d.ts +2 -0
- package/esm/lib/agent/jmap/help-content/presets.d.ts.map +1 -0
- package/esm/lib/agent/jmap/help-content/presets.js +51 -0
- package/esm/lib/agent/jmap/help-content/tools.d.ts +2 -0
- package/esm/lib/agent/jmap/help-content/tools.d.ts.map +1 -0
- package/esm/lib/agent/jmap/help-content/tools.js +49 -0
- package/esm/lib/agent/jmap/help-content/troubleshooting.d.ts +2 -0
- package/esm/lib/agent/jmap/help-content/troubleshooting.d.ts.map +1 -0
- package/esm/lib/agent/jmap/help-content/troubleshooting.js +65 -0
- package/esm/lib/agent/session/agent-credentials-store.d.ts +45 -0
- package/esm/lib/agent/session/agent-credentials-store.d.ts.map +1 -0
- package/esm/lib/agent/session/agent-credentials-store.js +121 -0
- package/esm/lib/agent/session/agent-resolve-config.d.ts +29 -0
- package/esm/lib/agent/session/agent-resolve-config.d.ts.map +1 -0
- package/esm/lib/agent/session/agent-resolve-config.js +71 -0
- package/esm/lib/agent/session/agent-session-for-dir.d.ts +8 -0
- package/esm/lib/agent/session/agent-session-for-dir.d.ts.map +1 -0
- package/esm/lib/agent/session/agent-session-for-dir.js +33 -0
- package/esm/lib/agent/session/agent-session.d.ts +89 -0
- package/esm/lib/agent/session/agent-session.d.ts.map +1 -0
- package/esm/lib/agent/session/agent-session.js +320 -0
- package/esm/lib/agent/session/inbox-id-to-mailbox-email.d.ts +6 -0
- package/esm/lib/agent/session/inbox-id-to-mailbox-email.d.ts.map +1 -0
- package/esm/lib/agent/session/inbox-id-to-mailbox-email.js +21 -0
- package/esm/lib/core/consts.d.ts +17 -0
- package/esm/lib/core/consts.d.ts.map +1 -0
- package/esm/lib/core/consts.js +28 -0
- package/esm/lib/core/jmap-hints.d.ts +3 -0
- package/esm/lib/core/jmap-hints.d.ts.map +1 -0
- package/esm/lib/core/jmap-hints.js +6 -0
- package/esm/lib/core/messages.d.ts +6 -0
- package/esm/lib/core/messages.d.ts.map +1 -0
- package/esm/lib/core/messages.js +19 -0
- package/esm/lib/core/read-npm-package-readme.d.ts +6 -0
- package/esm/lib/core/read-npm-package-readme.d.ts.map +1 -0
- package/esm/lib/core/read-npm-package-readme.js +81 -0
- package/esm/lib/core/shared-assets.d.ts +6 -0
- package/esm/lib/core/shared-assets.d.ts.map +1 -0
- package/esm/lib/core/shared-assets.js +46 -0
- package/esm/lib/core/types.d.ts +2 -0
- package/esm/lib/core/types.d.ts.map +1 -0
- package/esm/lib/core/types.js +2 -0
- package/esm/lib/core/utils.d.ts +12 -0
- package/esm/lib/core/utils.d.ts.map +1 -0
- package/esm/lib/core/utils.js +29 -0
- package/esm/lib/integrations/create-agent-session.d.ts +25 -0
- package/esm/lib/integrations/create-agent-session.d.ts.map +1 -0
- package/esm/lib/integrations/create-agent-session.js +36 -0
- package/esm/lib/integrations/key-value-credential-store.d.ts +21 -0
- package/esm/lib/integrations/key-value-credential-store.d.ts.map +1 -0
- package/esm/lib/integrations/key-value-credential-store.js +71 -0
- package/esm/lib/integrations/n8n-credential-store.d.ts +18 -0
- package/esm/lib/integrations/n8n-credential-store.d.ts.map +1 -0
- package/esm/lib/integrations/n8n-credential-store.js +62 -0
- package/esm/lib/mod.d.ts +23 -0
- package/esm/lib/mod.d.ts.map +1 -0
- package/esm/lib/mod.js +22 -0
- package/esm/lib/network/auth-client.d.ts +57 -0
- package/esm/lib/network/auth-client.d.ts.map +1 -0
- package/esm/lib/network/auth-client.js +210 -0
- package/esm/package.json +3 -0
- package/esm/skill/cli.d.ts +3 -0
- package/esm/skill/cli.d.ts.map +1 -0
- package/esm/skill/cli.js +321 -0
- package/package.json +45 -0
- package/presets/list_inbox.json +46 -0
- package/presets/reply.json +97 -0
- package/presets/send_mail.json +70 -0
- package/presets/send_mail_attachment.json +92 -0
- package/presets/send_mail_blob_attachment.json +74 -0
- package/shared/consts.json +11 -0
- package/shared/fixtures/pow_vectors.json +32 -0
- package/shared/help/fragments/inbox_cron_agent_prompt.md +1 -0
- package/shared/help/fragments/post_register_cron_reminder.md +5 -0
- package/shared/help/readme_stub.md +3 -0
- package/shared/help/topics/auth.md +8 -0
- package/shared/help/topics/cron.md +217 -0
- package/shared/help/topics/installation.md +35 -0
- package/shared/help/topics/jmap_cheatsheet.md +19 -0
- package/shared/help/topics/multi_account.md +9 -0
- package/shared/help/topics/overview.md +27 -0
- package/shared/help/topics/presets.md +12 -0
- package/shared/help/topics/tools.md +16 -0
- package/shared/help/topics/troubleshooting.md +6 -0
- package/shared/manifest.json +31 -0
- package/shared/messages/errors.json +68 -0
- package/shared/messages/hints.json +8 -0
- package/shared/presets/list_inbox.json +46 -0
- package/shared/presets/reply.json +97 -0
- package/shared/presets/send_mail.json +70 -0
- package/shared/presets/send_mail_attachment.json +92 -0
- package/shared/presets/send_mail_blob_attachment.json +74 -0
- package/shared/skill/SKILL.template.md +202 -0
- package/shared/skill/manifest.json +89 -0
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
# Atomic Mail
|
|
2
|
+
|
|
3
|
+
Atomic Mail exposes a programmable inbox over JMAP with PoW signup and JWT
|
|
4
|
+
rotation. This skill ships a single CLI entrypoint with three commands:
|
|
5
|
+
**`register`**, **`jmap_request`**, and **`help`** — matching the MCP server.
|
|
6
|
+
|
|
7
|
+
## When to use this skill
|
|
8
|
+
|
|
9
|
+
- Register a new inbox or log in with an existing API key.
|
|
10
|
+
- Send JMAP batches (inline JSON or preset files).
|
|
11
|
+
- Read built-in documentation (JMAP cheatsheet, presets, troubleshooting) or the
|
|
12
|
+
package README (`atomicmail help --topic readme`).
|
|
13
|
+
|
|
14
|
+
**Call `atomicmail help` early and often** — before guessing
|
|
15
|
+
placeholders, `using` URNs, or cron setup. Start with `help --topic overview`,
|
|
16
|
+
then `presets` before custom `jmap_request` calls and `cron` after `register`.
|
|
17
|
+
If installed behavior disagrees with docs elsewhere, trust help from the running
|
|
18
|
+
package.
|
|
19
|
+
|
|
20
|
+
## Commands
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
{{ATOMICMAIL_CLI}} register --username "myagent"
|
|
24
|
+
|
|
25
|
+
{{ATOMICMAIL_CLI}} jmap_request --ops-file list_inbox.json
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Run **`atomicmail --help`** or **`atomicmail <command> --help`** for flags.
|
|
29
|
+
|
|
30
|
+
## Defaults
|
|
31
|
+
|
|
32
|
+
- `authUrl`: `https://auth.atomicmail.ai`
|
|
33
|
+
- `apiUrl`: `https://api.atomicmail.ai`
|
|
34
|
+
- credentials directory: `{{CREDENTIALS_DIR_DEFAULT}}`
|
|
35
|
+
|
|
36
|
+
## Workflow
|
|
37
|
+
|
|
38
|
+
### 1. Register (new account)
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
{{ATOMICMAIL_CLI}} register \
|
|
42
|
+
--username "alice"
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Writes `credentials.json`, `session.jwt`, `capability.jwt`. Prints JSON
|
|
46
|
+
including `inbox` and `accountId`.
|
|
47
|
+
|
|
48
|
+
**Required next step:** after register, arrange hourly inbox polling per your
|
|
49
|
+
runtime (see [Hourly inbox polling](#hourly-inbox-polling-after-register)).
|
|
50
|
+
Native cron hosts schedule an **agent** job with `list_inbox.json`; hosts
|
|
51
|
+
without native cron should ask the operator or remind manual fetch. Do not cron
|
|
52
|
+
`atomicmail jmap_request` alone.
|
|
53
|
+
|
|
54
|
+
Usernames must be 5–21 characters (local-part of your `@atomicmail.ai`
|
|
55
|
+
address).
|
|
56
|
+
|
|
57
|
+
If credentials already exist for a different username, register fails by
|
|
58
|
+
default to protect the old account. To add another inbox without replacing the
|
|
59
|
+
current one, pass a separate `--credentials-dir` (MCP: `credentials_dir` on
|
|
60
|
+
`register` / `jmap_request`). Use `--forced` only when you intend to replace
|
|
61
|
+
credentials in the **same** directory (after backing it up).
|
|
62
|
+
|
|
63
|
+
### 2. Register (existing API key, in case losing the credentials file)
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
{{ATOMICMAIL_CLI}} register \
|
|
67
|
+
--api-key "..."
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### 3. JMAP request
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
{{ATOMICMAIL_CLI}} jmap_request \
|
|
74
|
+
--ops '[["Mailbox/get", {"accountId": "$ACCOUNT_ID"}, "m0"]]'
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
`$ACCOUNT_ID`, `$INBOX`, `$INBOX_MAILBOX_ID`, `$UPLOAD_URL`, and `$DOWNLOAD_URL`
|
|
78
|
+
resolve from the session/credentials. Other placeholders such as `$TO` or
|
|
79
|
+
`$SUBJECT` require `--vars` with a JSON object of strings (same substitution
|
|
80
|
+
applies to `--ops` and `--ops-file`).
|
|
81
|
+
|
|
82
|
+
Preset file:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
{{ATOMICMAIL_CLI}} jmap_request \
|
|
86
|
+
--ops-file list_inbox.json
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
With custom placeholders:
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
{{ATOMICMAIL_CLI}} jmap_request \
|
|
93
|
+
--ops-file send_mail.json \
|
|
94
|
+
--vars '{"TO":"alice@example.com","SUBJECT":"Hello","BODY":"Hi there"}'
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Bundled presets (no local file creation required):
|
|
98
|
+
|
|
99
|
+
- `send_mail.json` (`$TO`, `$SUBJECT`, `$BODY`)
|
|
100
|
+
- `send_mail_attachment.json` (`$TO`, `$SUBJECT`, `$BODY`, `$ATTACHMENT_BASE64`,
|
|
101
|
+
`$ATTACHMENT_TYPE`, `$ATTACHMENT_NAME`)
|
|
102
|
+
- `send_mail_blob_attachment.json` (`$TO`, `$SUBJECT`, `$BODY`; pair with
|
|
103
|
+
repeatable **`--attachment PATH`** for RFC 8620 upload →
|
|
104
|
+
`$ATTACHMENT_0_BLOB_ID`, …)
|
|
105
|
+
- `list_inbox.json` (latest 50; uses `$INBOX_MAILBOX_ID`) — **used for hourly inbox polling**
|
|
106
|
+
- `reply.json` (`$MAIL_ID`, `$BODY`)
|
|
107
|
+
|
|
108
|
+
## Hourly inbox polling (after register)
|
|
109
|
+
|
|
110
|
+
Registration only creates credentials. Inbound mail should be fetched and
|
|
111
|
+
triaged about once per hour between interactive sessions.
|
|
112
|
+
|
|
113
|
+
**Choose the path that matches your runtime — do not mix platforms.**
|
|
114
|
+
|
|
115
|
+
### If your host supports scheduled jobs
|
|
116
|
+
|
|
117
|
+
OpenClaw, Hermes, atomic-agent, and similar hosts with native cron: set up an
|
|
118
|
+
hourly **agent** job after the first successful `register`. Wire Atomic Mail MCP
|
|
119
|
+
or AgentSkill into that agent. The scheduled turn should call `list_inbox.json`
|
|
120
|
+
inside the agent prompt.
|
|
121
|
+
|
|
122
|
+
### If your host does **not** support scheduled jobs
|
|
123
|
+
|
|
124
|
+
Claude, Pi, Cursor, and other chat agents without a cron API: **do not spend
|
|
125
|
+
tokens trying to work around this** — no wrapper scripts, OS crontab/LaunchAgent
|
|
126
|
+
setup, or scheduling on a different platform.
|
|
127
|
+
|
|
128
|
+
After register, either **ask your operator** to set up hourly polling on a
|
|
129
|
+
capable host (share the examples below), or **remind your operator** to fetch
|
|
130
|
+
mail manually when needed.
|
|
131
|
+
|
|
132
|
+
### Forbidden: cross-platform scheduling
|
|
133
|
+
|
|
134
|
+
Do not register in one runtime and schedule the cron job on another (e.g. Pi
|
|
135
|
+
runs `register`, then creates an OpenClaw cron job).
|
|
136
|
+
|
|
137
|
+
**Do not** cron `atomicmail jmap_request` alone (no agent). **Do not** use
|
|
138
|
+
headless one-shot CLIs (`claude -p`, `pi -p`, `codex exec`) if you want to
|
|
139
|
+
continue the thread.
|
|
140
|
+
|
|
141
|
+
### Scheduling examples (capable hosts or operators)
|
|
142
|
+
|
|
143
|
+
| Your setup | Approach |
|
|
144
|
+
| --- | --- |
|
|
145
|
+
| OpenClaw | `openclaw cron add` with `--announce` |
|
|
146
|
+
| Hermes | `hermes cron create` or `/cron` with `--deliver` |
|
|
147
|
+
| Atomic Bot | Same as OpenClaw or Hermes |
|
|
148
|
+
| atomic-agent | `atomic-agent task create --cron` |
|
|
149
|
+
| No native cron (Claude, Pi, Cursor, …) | Ask operator to schedule on a capable host, or remind manual fetch |
|
|
150
|
+
|
|
151
|
+
Full options, agent prompt, and operator OS-scheduling notes: `atomicmail help
|
|
152
|
+
--topic cron` or MCP `help` topic `cron`.
|
|
153
|
+
|
|
154
|
+
### Agent prompt (all workflows)
|
|
155
|
+
|
|
156
|
+
```text
|
|
157
|
+
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.
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### Built-in cron examples
|
|
161
|
+
|
|
162
|
+
**OpenClaw** — [cron docs](https://docs.openclaw.ai/automation/cron-jobs): isolated
|
|
163
|
+
session, `--announce` for delivery.
|
|
164
|
+
|
|
165
|
+
**Hermes** — [cron docs](https://hermes-agent.nousresearch.com/docs/user-guide/features/cron):
|
|
166
|
+
`--deliver origin` (or `telegram`, `discord`, `email`, …); not `--no-agent`.
|
|
167
|
+
|
|
168
|
+
**atomic-agent** — `atomic-agent task create --cron "0 * * * *" --message "<prompt>"`
|
|
169
|
+
|
|
170
|
+
For operator OS-scheduling patterns on terminal hosts, see `help --topic cron`.
|
|
171
|
+
|
|
172
|
+
### 4. Help
|
|
173
|
+
|
|
174
|
+
```bash
|
|
175
|
+
{{ATOMICMAIL_CLI}} help
|
|
176
|
+
{{ATOMICMAIL_CLI}} help --topic jmap_cheatsheet
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
## Security
|
|
180
|
+
|
|
181
|
+
- `credentials.json` holds the API key (mode `0600`). Do not commit it.
|
|
182
|
+
- JWT files are bearer secrets — do not log them.
|
|
183
|
+
|
|
184
|
+
## Attachments and blobs
|
|
185
|
+
|
|
186
|
+
Use **`send_mail_attachment.json`** (in-band base64) or **`send_mail_blob_attachment.json`**
|
|
187
|
+
with repeatable **`--attachment PATH`** (RFC 8620 upload — same flow as MCP
|
|
188
|
+
**`attachments`**). Rules, limits, and `Blob/upload` JSON shape:
|
|
189
|
+
**`atomicmail help --topic jmap_cheatsheet`**.
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
{{ATOMICMAIL_CLI}} jmap_request \
|
|
193
|
+
--ops-file send_mail_attachment.json \
|
|
194
|
+
--vars '{"TO":"you@example.com","SUBJECT":"Hi","BODY":"See file","ATTACHMENT_BASE64":"SGVsbG8=","ATTACHMENT_TYPE":"text/plain","ATTACHMENT_NAME":"note.txt"}'
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
## Overriding defaults
|
|
198
|
+
|
|
199
|
+
- Endpoints: `--auth-url`, `--api-url` or `ATOMIC_MAIL_AUTH_URL`,
|
|
200
|
+
`ATOMIC_MAIL_API_URL`
|
|
201
|
+
- Credentials path: `--credentials-dir` or `ATOMIC_MAIL_CREDENTIALS_DIR`
|
|
202
|
+
- PoW salt: `--scrypt-salt` or `ATOMIC_MAIL_SCRYPT_SALT`
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "atomicmail",
|
|
3
|
+
"description": "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.",
|
|
4
|
+
"author": "Atomic Mail",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"platforms": ["macos", "linux", "windows"],
|
|
7
|
+
"credentialsDir": {
|
|
8
|
+
"default": "~/.atomicmail",
|
|
9
|
+
"hermes": "~/.hermes/atomicmail"
|
|
10
|
+
},
|
|
11
|
+
"cliInvocations": {
|
|
12
|
+
"npm": "npx --package=@atomicmail/agent-skill-gh-pages atomicmail",
|
|
13
|
+
"bundledBody": "{baseDir}/scripts/atomicmail",
|
|
14
|
+
"hermesBlueprint": "${HERMES_SKILL_DIR}/scripts/atomicmail"
|
|
15
|
+
},
|
|
16
|
+
"openclaw": {
|
|
17
|
+
"requires": { "bins": ["node"] },
|
|
18
|
+
"homepage": "https://atomicmail.ai"
|
|
19
|
+
},
|
|
20
|
+
"hermes": {
|
|
21
|
+
"tags": ["Productivity", "Email", "Communication", "blueprint"],
|
|
22
|
+
"config": [
|
|
23
|
+
{
|
|
24
|
+
"key": "atomicmail.credentials_dir",
|
|
25
|
+
"description": "Directory for Atomic Mail credentials and JWT files",
|
|
26
|
+
"default": "~/.hermes/atomicmail",
|
|
27
|
+
"prompt": "Atomic Mail credentials directory"
|
|
28
|
+
}
|
|
29
|
+
],
|
|
30
|
+
"blueprint": {
|
|
31
|
+
"schedule": "0 * * * *",
|
|
32
|
+
"deliver": "origin",
|
|
33
|
+
"no_agent": false,
|
|
34
|
+
"prompt": "Use {{CLI_HERMES_BLUEPRINT}} jmap_request --ops-file list_inbox.json to fetch my inbox. Summarize new messages, highlight what needs a reply, and stay available — I may ask you to reply, forward, search, or dig into something important."
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
"requiredEnvironmentVariables": [
|
|
38
|
+
{
|
|
39
|
+
"name": "ATOMIC_MAIL_CREDENTIALS_DIR",
|
|
40
|
+
"prompt": "Atomic Mail credentials directory",
|
|
41
|
+
"help": "Default on Hermes is ~/.hermes/atomicmail (not ~/.atomicmail). The skill launcher sets ATOMIC_MAIL_CREDENTIALS_DIR when unset. Override only for multi-account setups.",
|
|
42
|
+
"required_for": "register and jmap_request credential paths"
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"name": "ATOMIC_MAIL_AUTH_URL",
|
|
46
|
+
"prompt": "Atomic Mail auth service URL",
|
|
47
|
+
"help": "Override default https://auth.atomicmail.ai",
|
|
48
|
+
"required_for": "custom auth endpoint"
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"name": "ATOMIC_MAIL_API_URL",
|
|
52
|
+
"prompt": "Atomic Mail JMAP API URL",
|
|
53
|
+
"help": "Override default https://api.atomicmail.ai",
|
|
54
|
+
"required_for": "custom API endpoint"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"name": "ATOMIC_MAIL_SCRYPT_SALT",
|
|
58
|
+
"prompt": "Atomic Mail PoW scrypt salt override",
|
|
59
|
+
"help": "Only override when directed by Atomic Mail support",
|
|
60
|
+
"required_for": "PoW registration salt override"
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"name": "ATOMIC_MAIL_API_KEY",
|
|
64
|
+
"prompt": "Atomic Mail API key",
|
|
65
|
+
"help": "Optional — use register with --api-key or store in credentials.json",
|
|
66
|
+
"required_for": "existing-account login without credentials.json"
|
|
67
|
+
}
|
|
68
|
+
],
|
|
69
|
+
"requiredCredentialFiles": [
|
|
70
|
+
{
|
|
71
|
+
"path": "atomicmail/credentials.json",
|
|
72
|
+
"description": "Atomic Mail API key and account metadata (created by register)"
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"path": "atomicmail/session.jwt",
|
|
76
|
+
"description": "JMAP session JWT (created by register)"
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"path": "atomicmail/capability.jwt",
|
|
80
|
+
"description": "JMAP capability JWT (created by register)"
|
|
81
|
+
}
|
|
82
|
+
],
|
|
83
|
+
"platformNotes": [
|
|
84
|
+
"**Credentials directory:** Default `~/.hermes/atomicmail` on Hermes (not `~/.atomicmail`). The bundled skill launcher sets `ATOMIC_MAIL_CREDENTIALS_DIR` when unset; operator env or `atomicmail.credentials_dir` config overrides it.",
|
|
85
|
+
"**After register:** On Hermes, accept the hourly inbox blueprint via `/suggestions` — do not skip inbox polling setup.",
|
|
86
|
+
"**Never cron raw CLI:** Do not schedule `{{ATOMICMAIL_CLI}} jmap_request` alone without an agent turn. The Hermes blueprint uses `no_agent: false` so each run is a full agent session with `list_inbox.json`.",
|
|
87
|
+
"**Multi-account:** Pass `--credentials-dir` on `register` / `jmap_request` only when operating multiple inboxes at once — not needed for the default single-inbox flow."
|
|
88
|
+
]
|
|
89
|
+
}
|