@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.
Files changed (154) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +182 -0
  3. package/SKILL.md +206 -0
  4. package/esm/_dnt.polyfills.d.ts +101 -0
  5. package/esm/_dnt.polyfills.d.ts.map +1 -0
  6. package/esm/_dnt.polyfills.js +127 -0
  7. package/esm/lib/agent/auth/agent-auth-http.d.ts +26 -0
  8. package/esm/lib/agent/auth/agent-auth-http.d.ts.map +1 -0
  9. package/esm/lib/agent/auth/agent-auth-http.js +85 -0
  10. package/esm/lib/agent/auth/agent-jwt.d.ts +12 -0
  11. package/esm/lib/agent/auth/agent-jwt.d.ts.map +1 -0
  12. package/esm/lib/agent/auth/agent-jwt.js +27 -0
  13. package/esm/lib/agent/auth/agent-pow.d.ts +5 -0
  14. package/esm/lib/agent/auth/agent-pow.d.ts.map +1 -0
  15. package/esm/lib/agent/auth/agent-pow.js +49 -0
  16. package/esm/lib/agent/jmap/agent-help-content.d.ts +2 -0
  17. package/esm/lib/agent/jmap/agent-help-content.d.ts.map +1 -0
  18. package/esm/lib/agent/jmap/agent-help-content.js +2 -0
  19. package/esm/lib/agent/jmap/agent-jmap-blob-limits.d.ts +27 -0
  20. package/esm/lib/agent/jmap/agent-jmap-blob-limits.d.ts.map +1 -0
  21. package/esm/lib/agent/jmap/agent-jmap-blob-limits.js +166 -0
  22. package/esm/lib/agent/jmap/agent-jmap-blob-upload.d.ts +24 -0
  23. package/esm/lib/agent/jmap/agent-jmap-blob-upload.d.ts.map +1 -0
  24. package/esm/lib/agent/jmap/agent-jmap-blob-upload.js +104 -0
  25. package/esm/lib/agent/jmap/agent-jmap-email-charset.d.ts +8 -0
  26. package/esm/lib/agent/jmap/agent-jmap-email-charset.d.ts.map +1 -0
  27. package/esm/lib/agent/jmap/agent-jmap-email-charset.js +61 -0
  28. package/esm/lib/agent/jmap/agent-jmap-run.d.ts +52 -0
  29. package/esm/lib/agent/jmap/agent-jmap-run.d.ts.map +1 -0
  30. package/esm/lib/agent/jmap/agent-jmap-run.js +260 -0
  31. package/esm/lib/agent/jmap/agent-jmap-verify.d.ts +9 -0
  32. package/esm/lib/agent/jmap/agent-jmap-verify.d.ts.map +1 -0
  33. package/esm/lib/agent/jmap/agent-jmap-verify.js +50 -0
  34. package/esm/lib/agent/jmap/agent-jmap.d.ts +89 -0
  35. package/esm/lib/agent/jmap/agent-jmap.d.ts.map +1 -0
  36. package/esm/lib/agent/jmap/agent-jmap.js +373 -0
  37. package/esm/lib/agent/jmap/agent-vars.d.ts +30 -0
  38. package/esm/lib/agent/jmap/agent-vars.d.ts.map +1 -0
  39. package/esm/lib/agent/jmap/agent-vars.js +96 -0
  40. package/esm/lib/agent/jmap/help-content/auth.d.ts +2 -0
  41. package/esm/lib/agent/jmap/help-content/auth.d.ts.map +1 -0
  42. package/esm/lib/agent/jmap/help-content/auth.js +33 -0
  43. package/esm/lib/agent/jmap/help-content/cron.d.ts +6 -0
  44. package/esm/lib/agent/jmap/help-content/cron.d.ts.map +1 -0
  45. package/esm/lib/agent/jmap/help-content/cron.js +159 -0
  46. package/esm/lib/agent/jmap/help-content/index.d.ts +6 -0
  47. package/esm/lib/agent/jmap/help-content/index.d.ts.map +1 -0
  48. package/esm/lib/agent/jmap/help-content/index.js +61 -0
  49. package/esm/lib/agent/jmap/help-content/installation.d.ts +2 -0
  50. package/esm/lib/agent/jmap/help-content/installation.d.ts.map +1 -0
  51. package/esm/lib/agent/jmap/help-content/installation.js +47 -0
  52. package/esm/lib/agent/jmap/help-content/jmap-cheatsheet.d.ts +2 -0
  53. package/esm/lib/agent/jmap/help-content/jmap-cheatsheet.d.ts.map +1 -0
  54. package/esm/lib/agent/jmap/help-content/jmap-cheatsheet.js +230 -0
  55. package/esm/lib/agent/jmap/help-content/multi-account.d.ts +2 -0
  56. package/esm/lib/agent/jmap/help-content/multi-account.d.ts.map +1 -0
  57. package/esm/lib/agent/jmap/help-content/multi-account.js +49 -0
  58. package/esm/lib/agent/jmap/help-content/overview.d.ts +2 -0
  59. package/esm/lib/agent/jmap/help-content/overview.d.ts.map +1 -0
  60. package/esm/lib/agent/jmap/help-content/overview.js +49 -0
  61. package/esm/lib/agent/jmap/help-content/presets.d.ts +2 -0
  62. package/esm/lib/agent/jmap/help-content/presets.d.ts.map +1 -0
  63. package/esm/lib/agent/jmap/help-content/presets.js +51 -0
  64. package/esm/lib/agent/jmap/help-content/tools.d.ts +2 -0
  65. package/esm/lib/agent/jmap/help-content/tools.d.ts.map +1 -0
  66. package/esm/lib/agent/jmap/help-content/tools.js +49 -0
  67. package/esm/lib/agent/jmap/help-content/troubleshooting.d.ts +2 -0
  68. package/esm/lib/agent/jmap/help-content/troubleshooting.d.ts.map +1 -0
  69. package/esm/lib/agent/jmap/help-content/troubleshooting.js +65 -0
  70. package/esm/lib/agent/session/agent-credentials-store.d.ts +45 -0
  71. package/esm/lib/agent/session/agent-credentials-store.d.ts.map +1 -0
  72. package/esm/lib/agent/session/agent-credentials-store.js +121 -0
  73. package/esm/lib/agent/session/agent-resolve-config.d.ts +29 -0
  74. package/esm/lib/agent/session/agent-resolve-config.d.ts.map +1 -0
  75. package/esm/lib/agent/session/agent-resolve-config.js +71 -0
  76. package/esm/lib/agent/session/agent-session-for-dir.d.ts +8 -0
  77. package/esm/lib/agent/session/agent-session-for-dir.d.ts.map +1 -0
  78. package/esm/lib/agent/session/agent-session-for-dir.js +33 -0
  79. package/esm/lib/agent/session/agent-session.d.ts +89 -0
  80. package/esm/lib/agent/session/agent-session.d.ts.map +1 -0
  81. package/esm/lib/agent/session/agent-session.js +320 -0
  82. package/esm/lib/agent/session/inbox-id-to-mailbox-email.d.ts +6 -0
  83. package/esm/lib/agent/session/inbox-id-to-mailbox-email.d.ts.map +1 -0
  84. package/esm/lib/agent/session/inbox-id-to-mailbox-email.js +21 -0
  85. package/esm/lib/core/consts.d.ts +17 -0
  86. package/esm/lib/core/consts.d.ts.map +1 -0
  87. package/esm/lib/core/consts.js +28 -0
  88. package/esm/lib/core/jmap-hints.d.ts +3 -0
  89. package/esm/lib/core/jmap-hints.d.ts.map +1 -0
  90. package/esm/lib/core/jmap-hints.js +6 -0
  91. package/esm/lib/core/messages.d.ts +6 -0
  92. package/esm/lib/core/messages.d.ts.map +1 -0
  93. package/esm/lib/core/messages.js +19 -0
  94. package/esm/lib/core/read-npm-package-readme.d.ts +6 -0
  95. package/esm/lib/core/read-npm-package-readme.d.ts.map +1 -0
  96. package/esm/lib/core/read-npm-package-readme.js +81 -0
  97. package/esm/lib/core/shared-assets.d.ts +6 -0
  98. package/esm/lib/core/shared-assets.d.ts.map +1 -0
  99. package/esm/lib/core/shared-assets.js +46 -0
  100. package/esm/lib/core/types.d.ts +2 -0
  101. package/esm/lib/core/types.d.ts.map +1 -0
  102. package/esm/lib/core/types.js +2 -0
  103. package/esm/lib/core/utils.d.ts +12 -0
  104. package/esm/lib/core/utils.d.ts.map +1 -0
  105. package/esm/lib/core/utils.js +29 -0
  106. package/esm/lib/integrations/create-agent-session.d.ts +25 -0
  107. package/esm/lib/integrations/create-agent-session.d.ts.map +1 -0
  108. package/esm/lib/integrations/create-agent-session.js +36 -0
  109. package/esm/lib/integrations/key-value-credential-store.d.ts +21 -0
  110. package/esm/lib/integrations/key-value-credential-store.d.ts.map +1 -0
  111. package/esm/lib/integrations/key-value-credential-store.js +71 -0
  112. package/esm/lib/integrations/n8n-credential-store.d.ts +18 -0
  113. package/esm/lib/integrations/n8n-credential-store.d.ts.map +1 -0
  114. package/esm/lib/integrations/n8n-credential-store.js +62 -0
  115. package/esm/lib/mod.d.ts +23 -0
  116. package/esm/lib/mod.d.ts.map +1 -0
  117. package/esm/lib/mod.js +22 -0
  118. package/esm/lib/network/auth-client.d.ts +57 -0
  119. package/esm/lib/network/auth-client.d.ts.map +1 -0
  120. package/esm/lib/network/auth-client.js +210 -0
  121. package/esm/package.json +3 -0
  122. package/esm/skill/cli.d.ts +3 -0
  123. package/esm/skill/cli.d.ts.map +1 -0
  124. package/esm/skill/cli.js +321 -0
  125. package/package.json +45 -0
  126. package/presets/list_inbox.json +46 -0
  127. package/presets/reply.json +97 -0
  128. package/presets/send_mail.json +70 -0
  129. package/presets/send_mail_attachment.json +92 -0
  130. package/presets/send_mail_blob_attachment.json +74 -0
  131. package/shared/consts.json +11 -0
  132. package/shared/fixtures/pow_vectors.json +32 -0
  133. package/shared/help/fragments/inbox_cron_agent_prompt.md +1 -0
  134. package/shared/help/fragments/post_register_cron_reminder.md +5 -0
  135. package/shared/help/readme_stub.md +3 -0
  136. package/shared/help/topics/auth.md +8 -0
  137. package/shared/help/topics/cron.md +217 -0
  138. package/shared/help/topics/installation.md +35 -0
  139. package/shared/help/topics/jmap_cheatsheet.md +19 -0
  140. package/shared/help/topics/multi_account.md +9 -0
  141. package/shared/help/topics/overview.md +27 -0
  142. package/shared/help/topics/presets.md +12 -0
  143. package/shared/help/topics/tools.md +16 -0
  144. package/shared/help/topics/troubleshooting.md +6 -0
  145. package/shared/manifest.json +31 -0
  146. package/shared/messages/errors.json +68 -0
  147. package/shared/messages/hints.json +8 -0
  148. package/shared/presets/list_inbox.json +46 -0
  149. package/shared/presets/reply.json +97 -0
  150. package/shared/presets/send_mail.json +70 -0
  151. package/shared/presets/send_mail_attachment.json +92 -0
  152. package/shared/presets/send_mail_blob_attachment.json +74 -0
  153. package/shared/skill/SKILL.template.md +202 -0
  154. 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
+ }