Update docs to reflect stages 1-4 complete and working email reply
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -3,8 +3,7 @@
|
||||
> **Experimental** — this is a work in progress and the architecture is still evolving.
|
||||
|
||||
An IMAP bridge that forwards emails from a trusted sender as prompts to a running
|
||||
[Claude Code](https://claude.ai/code) instance. Send an email, get a response in
|
||||
your terminal.
|
||||
[Claude Code](https://claude.ai/code) instance, and sends replies back via email.
|
||||
|
||||
## How it works
|
||||
|
||||
@@ -12,16 +11,17 @@ your terminal.
|
||||
2. Filters by a configured sender address
|
||||
3. Formats the email as a prompt and dispatches it to Claude Code via an external
|
||||
paste utility
|
||||
4. Claude Code reads and responds in the terminal as normal
|
||||
4. Claude Code processes the message and replies via the CCC `send-email` action
|
||||
|
||||
## Dependencies
|
||||
|
||||
- [imapflow](https://imapflow.com/) — IMAP client
|
||||
- [mailparser](https://nodemailer.com/extras/mailparser/) — email parsing
|
||||
- An external script to actually deliver the prompt to Claude Code's terminal window.
|
||||
- An external script to deliver the prompt to Claude Code's terminal window.
|
||||
This tool has been tested with
|
||||
[claude-code-conduit](https://gitea.efforting.tech/mikael-lovqvists-claude-agent/claude-code-conduit)
|
||||
and a companion paste utility that targets the correct Konsole window via xdotool.
|
||||
CCC also provides the `send-email` action used for replies.
|
||||
|
||||
## Configuration
|
||||
|
||||
@@ -59,6 +59,5 @@ node mail-buddy.mjs
|
||||
falls back to 45s polling)
|
||||
- The paste mechanism steals window focus on every message; a cleaner PTY-based
|
||||
approach is planned
|
||||
- No email reply capability yet — Claude can only respond in the terminal for now
|
||||
- Sender filtering is substring-based, not cryptographically verified (DKIM
|
||||
checking is planned)
|
||||
|
||||
21
plan.md
21
plan.md
@@ -29,21 +29,22 @@ For now, `allowed_sender` substring match is sufficient for exploration. Worth a
|
||||
|
||||
## Implementation Stages
|
||||
|
||||
### Stage 1 — Explore the message object (current)
|
||||
### ✅ Stage 1 — Explore the message object
|
||||
Receive a message and `inspect()` the full imapflow msg object to understand what
|
||||
data is available (headers, body parts, envelope, flags, etc.).
|
||||
|
||||
### Stage 2 — Prompt construction
|
||||
Parse the message into a well-formed prompt: sender, subject, body. Prefix with
|
||||
instructions telling Claude to reply via the CCC `send-email` action.
|
||||
### ✅ Stage 2 — Prompt construction
|
||||
Parse the message into a well-formed prompt using `mailparser`. Use HTML body for
|
||||
better encoding/structure fidelity. Instruct Claude to reply via CCC per
|
||||
`email_protocol.md`.
|
||||
|
||||
### Stage 3 — CCC send-email action
|
||||
Extend `claude-code-conduit` with a `send-email` action (SMTP). Claude calls it as
|
||||
a tool with recipient, subject, and body.
|
||||
### ✅ Stage 3 — CCC send-email action
|
||||
`send-email` action already existed in `claude-code-conduit` with full SMTP,
|
||||
permission store, and topic-based access control. Tested and working end-to-end.
|
||||
|
||||
### Stage 4 — Wire it together
|
||||
Replace the `inspect()` call with `make_prompt` + `send_to_claude`. End-to-end flow:
|
||||
email in → Claude processes → email out.
|
||||
### ✅ Stage 4 — Wire it together
|
||||
`make_prompt` + `send_to_claude` wired up. Full flow working:
|
||||
email in → Claude processes → replies via CCC send-email → email out.
|
||||
|
||||
### Stage 5 — Adaptive polling
|
||||
High/low frequency mode: switch to fast polling (e.g. 10s) when a message arrives,
|
||||
|
||||
Reference in New Issue
Block a user