Overview
Point rousseau at a dedicated mailbox (triage@example.com). Every inbound message becomes a rousseau session; the agent inspects attached logs / patches / stack traces and replies via SMTP. Ideal for a low-volume support inbox where every message deserves a first-pass response.
Prerequisites
- A dedicated mailbox with IMAP (port 993, TLS) and SMTP (port 465 with implicit TLS, or 587 with STARTTLS — currently 465).
- App-passwords for Gmail / Outlook, or a plain password for self-hosted Postfix + Dovecot.
- Any provider —
anthropicrecommended because prompt-cache markers cut cost on long email threads.
Config
provider: anthropic
anthropic:
model: claude-sonnet-4-6
max_tokens: 4096
agent:
system_prompt: |
You reply to inbound support email. Keep replies under 300 words.
If the request needs human judgment (billing, security, legal),
say so explicitly and set an "escalate: yes" flag at the top.
approver:
mode: pattern
default: deny
allow:
- {tool: read, match: ".*"}
- {tool: grep, match: ".*"}
deny:
- {tool: bash, match: ".*"}
email:
imap_addr: imap.example.com:993
imap_username: triage@example.com
imap_password: "$IMAP_PW"
smtp_addr: smtp.example.com:465
smtp_username: triage@example.com
smtp_password: "$SMTP_PW"
from: triage@example.com
mailbox: INBOX
poll_interval: 60s
reply_header: ""
bash is denied outright — email triage should never spawn shells.
Launch
export IMAP_PW='…' SMTP_PW='…' ANTHROPIC_API_KEY='sk-ant-…'
rousseau email
For production, wrap under systemd like the on-call Slack triage recipe.
Verification
-
rousseau doctorreports the provider asanthropicwith the key present (masked). - Send an email to
triage@example.comfrom another account. - Within
poll_intervalseconds, a reply arrives fromtriage@example.com. - The IMAP mailbox marks the source message as SEEN (verify via a mail client).
Failure modes
- Duplicate replies — rousseau is not marking messages read. Verify with
rousseau doctorand IMAP debug logs. Some servers require explicit UID flags. - Bounced replies — SPF / DKIM misconfigured. Sending from
triage@example.comrequires the domain to authorise your SMTP host. - Empty replies — the agent has nothing to say. Look at the source message; short pings ("thanks") should be dropped by a filter, not answered.