ProtonMail Email
Send emails from your custom domain — no daemon, no bridge, just an SMTP token
The add-protonmail skill adds a send_email tool to your agent.
It uses ProtonMail's SMTP submission tokens — available for custom domain addresses
like hello@clawdie.si — to send authenticated emails directly from chat.
A ProtonMail account with a custom domain (e.g. hello@clawdie.si).
Standard @proton.me / @protonmail.com addresses
do not support SMTP submission tokens — a custom domain is required.
Setup
1. Enable SMTP submission and generate a token
- Log in to Proton Mail
- Go to Settings → All Settings → Proton Mail → SMTP submission
- Enable SMTP submission for your domain
- Click Generate token next to your address
- Copy the token — it will not be shown again
SMTP tokens are separate from your login password. They are address-specific, can be revoked individually, and do not grant access to your inbox. Revoking a token does not affect your account or other tokens.
2. Add to .env
PROTONMAIL_SMTP_USER=hello@clawdie.si
PROTONMAIL_SMTP_TOKEN=your_smtp_token_here
3. Apply the skill
npx tsx scripts/apply-skill.ts .agent/skills/add-protonmail
# Rebuild the jail agent runner
cd jail/agent-runner && npm install && npm run build
The agent now has a send_email tool. No restart needed.
Available tools
| Tool | Parameters | Description |
|---|---|---|
send_email |
to, subject, body,
cc?, reply_to? |
Send a plain-text email from your ProtonMail address |
The tool is only registered when both PROTONMAIL_SMTP_USER
and PROTONMAIL_SMTP_TOKEN are set. If either is absent, the skill is inert.
Example conversations
Outbound notification
"Send John a confirmation that his order shipped"
→ send_email(to: "john@example.com", subject: "Your order shipped", body: "Hi John...")
Composed reply
"Reply to Sarah's pricing question"
→ Agent drafts a response, calls send_email with your address as From
Scheduled sends
"Email the weekly report every Monday at 9am"
→ Agent schedules a task that generates and sends the report automatically
Team broadcasts
"Send the outage notice to the team list"
→ Agent composes and sends to multiple recipients
How it works
The send_email tool is implemented in
jail/agent-runner/src/protonmail-tools.ts
and registered into the existing ipc-mcp-stdio MCP server —
the same server used for task scheduling and message sending.
No additional daemons, no Proton Bridge required.
Outbound mail goes to smtp.protonmail.ch:587 via STARTTLS using nodemailer.
The SMTP token authenticates the connection.
PROTONMAIL_SMTP_USER and PROTONMAIL_SMTP_TOKEN are passed
to the jail via encrypted stdin (JailAgentInput.secrets),
never via environment variables or mounted files.
Limitations
This skill is send-only.
- The agent cannot read the ProtonMail inbox
- Incoming emails do not trigger the agent automatically
- No threading — replies are new emails, not IMAP thread continuations
ProtonMail's SMTP submission feature is designed for custom domain email sending
(transactional mail, CRM integration, etc.). Standard ProtonMail addresses
(@proton.me) require Proton Bridge for SMTP access.
Roadmap: full inbound channel
The full version of this skill will add a ProtonmailChannel that:
- Polls the ProtonMail inbox via IMAP (through Proton Bridge headless daemon)
- Delivers incoming emails to the main group automatically
- Enables full reply threading — the same pattern as
add-gmail
This requires Proton Bridge running as a FreeBSD service. Bridge is a Go binary — FreeBSD headless support is being evaluated. Once confirmed, the skill will be extended without breaking the current send-only setup.
| Feature | v1 (current) | v2 (Bridge) |
|---|---|---|
| Send emails | ✓ SMTP token | ✓ SMTP via Bridge |
| Read inbox | ✗ | ✓ IMAP via Bridge |
| Auto-trigger on inbound | ✗ | ✓ |
| Daemon required | ✗ | ✓ Bridge as rc.d service |
| FreeBSD native | ✓ | TBD |