Agentic Inbox

自托管 AI 邮件客户端,跑在 Cloudflare Workers 上,处理我两个域名(lakebbs.ca + tensorproxies.com)的来信。Email Routing + Durable Objects + R2 + Workers AI + Agents SDK。

Live · 个人生产环境 运营 · upstream 扩展者

背景

我有两个域名要真实收邮件 —— lakebbs.ca(社区平台)和 tensorproxies.com(代理基础设施产品)。两边都需要接 support / contact 邮件,都希望有 AI 协助分流,免得每天花一小时清收件箱。

Agentic Inbox 是基于 Cloudflare 官方 agentic-inbox fork + 扩展的自托管邮件客户端,全部跑在 Cloudflare Workers 上,AI agent 读会话并起草回复。自己跑 而不是把邮件交给第三方服务。

架构

整个产品跑在 Cloudflare。没有外部 SMTP,没有第三方 AI 供应商,没有独立数据库。所有东西都终止在一个账号内:

Browser (React SPA + Agent panel)


Hono Worker (API + SSR)

    ├──▶ MailboxDO ──── SQLite (per-mailbox) + R2 (附件)

    └──▶ EmailAgent DO (AIChatAgent) ──── Workers AI 工具调用
                                           ├── 读 inbox
                                           ├── 搜会话
                                           ├── 起草回复
                                           └── 发送(必须显式确认)

为什么这套栈跑得起来

  • Per-mailbox Durable Object 隔离 —— 每个地址(hello@tensorproxies.com, contact@lakebbs.ca 等)跑在自己独立的 DO 里,带自己的 SQLite 库。没有 noisy-neighbor 问题,也没有跨邮箱查询风险。
  • Email Routing 收入口 —— 每个域配 catch-all 规则直接把邮件管到 Worker。Worker 解析收件人 → mailbox DO → 写到那个 DO 的 SQLite。入站延迟亚秒级。
  • R2 存附件 —— 几 KB 以上的附件按 message ID 存 R2。SQLite 行只存引用,不存 blob。
  • Agents SDK 跑助手 —— AIChatAgent 类带 9 个邮件工具(读 / 搜 / 起草 / 发送 …)。Agent 只 起草,发送必须我在 UI 里显式确认。自动 fire-and-forget 在这产品里被故意拒绝。

我扩展了哪些

官方 repo 已经很扎实,但默认假设单域名。我需要它跨我两个域多租户,加一些日常使用感更顺手的修改:

  • 多域 DOMAINS 配置 —— wrangler.jsonc 设成 lakebbs.ca,tensorproxies.com,两边的 catch-all 都路由进同一个 Worker
  • 邮件模板 —— 预填常见回复(TCF 咨询 / 代理套餐问题 / ModBox 媒体询问),让 agent 第一稿就接近我的语气
  • 发件人 avatar —— 小 UI 改善;线程列表看起来不再是一堵主题文字墙
  • 任务级 inline 撰写 —— 回复 / 转发在线程内联打开,不弹全屏 modal。一次清 20 封时就该这样

安全模型

整个 app 在 Cloudflare Access 后面。唯一信任边界就是 Access policy:通过 policy 的用户可以访问所有 mailbox(也包括 /mcp MCP server,让 Claude Code 之类的外部 AI 工具通过 mailboxId 参数操作任一 mailbox)。我是 policy 唯一成员,所以现在 OK;要对外开放会先做 per-mailbox 授权。

POLICY_AUDTEAM_DOMAIN 是 Worker secrets,wrangler secret put 注入。每个请求都验 JWT。Worker 强制「生产必须配 Cloudflare Access」否则拒绝启动 —— 任何碰我邮件的东西都该这样 fail-loud。

技术栈与链接

前端: React 19 · React Router v7 · Tailwind · Zustand · TipTap · @cloudflare/kumo

后端: Hono · Cloudflare Workers · Durable Objects (SQLite) · R2 · Email Routing

AI: Cloudflare Agents SDK (AIChatAgent) · AI SDK v6 · Workers AI (@cf/moonshotai/kimi-k2.5) · react-markdown + remark-gfm

认证: Cloudflare Access JWT 验证(生产环境强制)

Upstream: github.com/cloudflare/agentic-inbox —— Apache 2.0