关于 email-triage
email-triage 是一项使用 joelclaw email CLI 处理 Front 邮件的技能,供需要整理收件箱的人使用。它涵盖重要性分类、会话阅读与归档,并提供查询和批量操作指南。
主要功能
- 01扫描并筛选收件箱会话
- 02按重要性分类邮件
- 03读取会话与附件缓存
- 04按 ID 或查询批量归档
- 05提供 Front 搜索筛选指南
适用场景
- 01找出需要回复或采取行动的邮件
- 02整理低价值通知和营销邮件
- 03检查特定发件人或日期范围的邮件
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ joelhooks/ joelclaw --skill email-triage安装后在 Claude Code 中输入/email-triage确认已加载。
附带文件agents/openai.yamlassets/small-logo.svg
详细介绍
邮件分类
扫描 Joel 的电子邮件收件箱(Front),按重要性对会话进行分类,归档无关邮件,并找出需要关注的项目。所有操作均使用 joelclaw email CLI。
标准邮件接口
- Front 是 joelclaw 中所有邮件分类操作的标准接口。
- 切勿使用
gog gmail进行邮件分类——[email protected]、VIP 会话和所有收件箱都在 Front 中。 - 使用
gog执行 Google Workspace 操作(Calendar、Drive、Docs 等),而非邮件分类。
Front 搜索 API 参考
搜索端点为 GET /conversations/search/{url_encoded_query}。
结果按最后活动日期排序(不可配置)。
有效的 is: 状态
open、archived、assigned、unassigned、snoozed、trashed、unreplied、waiting、resolved
没有 is:unread。 对于最后一条消息为收到的消息的会话,请使用 is:unreplied。
状态冲突(不能组合使用):
archived↔open↔trashed↔snoozed(互斥)assigned↔unassigned(互斥)
日期筛选器——仅限 UNIX 时间戳
before:<unix_seconds>— 在此时间戳之前创建的消息/评论after:<unix_seconds>— 在此时间戳之后创建的消息/评论during:<unix_seconds>— 与此时间戳同一天的消息/评论
Front 不接受 before:YYYY-MM-DD——务必转换为 Unix 秒数。
CLI 的 --before 和 --after 标志接受 YYYY-MM-DD 并自动转换。
收件人筛选器
from:<handle>— 发件人(电子邮件、社交账号)to:<handle>— 收件人(包括 to/cc/bcc)cc:<handle>、bcc:<handle>— 指定字段recipient:<handle>— 任意角色(from、to、cc、bcc)- 相同类型的多个筛选器采用 OR 逻辑:
from:[email protected] from:[email protected]→ 任意一个 - 不同类型的筛选器采用 AND 逻辑:
from:[email protected] to:[email protected]→ 两者都匹配
实体筛选器(使用 ID,而非名称)
inbox:<inbox_id>— 例如inbox:inb_41w25tag:<tag_id>— 例如tag:tag_13o8r1assignee:<teammate_id>— 例如assignee:tea_hjx3participant:<teammate_id>、author:<teammate_id>、mention:<teammate_id>、commenter:<teammate_id>contact:<contact_id>、link:<link_id>custom_field:"<name>=<value>"
自由文本
不带前缀的词语会搜索主题和正文。短语请使用引号:"exact phrase"。
不支持否定
Front 搜索不支持否定——没有 -from:、NOT 或排除运算符。
每条查询最多 15 个筛选器。
CLI 命令
扫描收件箱
joelclaw email inbox # default: is:open, 50 results
joelclaw email inbox -n 100 # more results
joelclaw email inbox -q "is:open is:unreplied" # awaiting reply
joelclaw email inbox --from [email protected] # by sender
joelclaw email inbox --before 2026-02-01 # auto-converts to unix ts
joelclaw email inbox --after 2026-01-15 # auto-converts to unix ts
joelclaw email inbox --page-token "TOKEN" # pagination (from previous response)
可组合使用标志:
joelclaw email inbox --from [email protected] --after 2026-02-01 -n 20
归档单条会话
joelclaw email archive --id cnv_xxx
按 ID 批量归档(快速、并行、分批)
joelclaw email archive-ids --ids cnv_abc,cnv_def,cnv_ghi
会运行 10 个并发请求。适合对一页搜索结果进行分类——找出无关邮件的 ID 并批量归档。
按查询批量归档(默认仅模拟运行)
joelclaw email archive-bulk -q "is:open from:[email protected]" # dry run — shows count + sample
joelclaw email archive-bulk -q "is:open from:[email protected]" --confirm # execute
joelclaw email archive-bulk -q "is:open from:[email protected]" --limit 100 --confirm # batch size
阅读会话
joelclaw email read --id cnv_xxx
joelclaw email read --id cnv_xxx --refresh # bypass local cache
joelclaw email read 使用本地会话和附件缓存(默认 TTL:60 分钟)。缓存路径:~/.cache/joelclaw/email/。使用 --refresh 可绕过缓存,强制从 Front 重新获取。
阅读结果结构 + jq 模式
joelclaw email read 返回:
result.conversation: {id, subject, status, from: {name, email}, date, tags}
result.messages[]: {id, from: {name, email}, date, is_inbound, body_preview (or body), attachments[]}
result.attachment_summary: {total, cached, metadata_only, cache_errors}
result.cache: {hit, source, cache_path, age_seconds, ttl_seconds}
目前消息内容位于 body_preview 中,正在迁移到 body。为保持向后兼容,请将两者都视为有效字段。
正确的提取模式(当前字段):
joelclaw email read --id cnv_xxx 2>&1 | jq '.result.messages[] | {from: .from.email, date: .date, body: .body_preview}'
兼容新旧字段的提取模式:
joelclaw email read --id cnv_xxx 2>&1 | jq '.result.messages[] | {from: .from.email, date: .date, body: (.body // .body_preview)}'
列出收件箱
joelclaw email inboxes
分类工作流
1. 加载收件箱状态
joelclaw email inbox -n 50
解析 JSON 结果。每个会话包含:id、subject、from(姓名 + 电子邮件)、date、status、tags。
实用的后续查询:
joelclaw email inbox -q "is:open is:unreplied" -n 50 # awaiting reply
joelclaw email inbox --before 2026-01-01 -n 50 # old stuff to clean
joelclaw email inbox --from [email protected] # CI noise check
2. 根据推断分类
阅读每段对话,并根据发件人、主题和上下文判断其类别。不要使用硬编码的域名列表。请酌情判断:
- 需要回复 — 期待回复的真实人物。包括同事、合作者、朋友,以及发来私人消息的业务联系人。留意回复邮件线程(
Re:)、问题、针对具体会议的邀请和请求。 - 稍后阅读 — 值得保存的有趣内容。Joel 主动订阅的新闻简报(The Information、Astral Codex Ten、Lenny's Newsletter)、行业新闻和技术深度文章。
- 需要操作 — 需要采取行动,但无需回复。账单、安全提醒、即将到期的试用、税务文件、真实订单的配送更新,以及需要 RSVP 的日历邀请。
- 归档 — 没有价值的内容。营销垃圾邮件、促销优惠、冷邮件推销、重复通知、已解决的提醒、无人阅读的自动报告,以及供应商的追加销售。
3. 呈现分类摘要
为 Joel 整理结果。优先呈现重要内容:
## 🔴 Reply needed (N)
- **Name** — Subject (why it needs a reply)
## ⚡ Actionable (N)
- **Sender** — Subject (what action)
## 📖 Read later (N)
- **Source** — Subject
## 🗑️ Archive candidates (N)
- Count by type (e.g., "14 marketing, 8 CI failures, 5 duplicate notifications")
4. 执行决策
**最快清理噪声的方法:**扫描一页,收集噪声 ID,然后使用 archive-ids:
joelclaw email archive-ids --ids cnv_aaa,cnv_bbb,cnv_ccc,cnv_ddd
**按发件人清理:**使用带有 from: 筛选条件的 archive-bulk:
joelclaw email archive-bulk -q "is:open from:[email protected]" --limit 100 --confirm
**速率限制:**Front 允许约 50 req/s。归档大量邮件(>200)时,请在批次之间添加暂停,否则可能遇到 429 错误。CLI 会为 archive-ids 分批处理(并发数为 10),但 archive-bulk 会逐页迭代,处理极大量邮件时可能触及限制。
先阅读,再做决定:
joelclaw email read --id cnv_xxx
重要背景
- Joel 在 8 个 Front 收件箱中收件,分别对应 [email protected]、[email protected]、[email protected]、[email protected]、[email protected]、LinkedIn、DM 和 Inngest
joelclaw email inboxes会列出所有收件箱及其 ID- Joel 的队友 ID:
tea_hjx3 - CLI 会通过
secrets lease front_api_token自动处理 Front API 身份验证 - 回复应先起草,再等待批准——绝不要直接发送
- Front 搜索结果最终才会保持一致——最近归档的项目可能还会在搜索结果中显示几分钟
- 分页:有更多结果时,响应会包含
next_page_token;通过--page-token传入 - 主题前缀
[aih]表示来自[email protected]Google Group 的 AI Hero 项目邮件线程。关键参与者:Alex Hillman([email protected])、Matt Pocock([email protected])、Amy Hoy([email protected])。将其视为 VIP:始终突出显示,绝不归档。
“需要回复”的信号
这些是判断依据,不是规则。请逐一酌情判断:
- 以
Re:开头,且发件人是真实人物(而非机器人或 noreply 地址) - 以
[aih]开头——来自[email protected]的 AI Hero 合作邮件(Alex Hillman、Matt Pocock、Amy Hoy)。VIP:始终突出显示,绝不归档。 - 主题行中有直接提问
- 来自熟人的会议邀请
- Joel 是上一封邮件的发件人,且有人回复了他
- Slack 通知摘要(可能表示有错过、值得查看的对话)
“归档”的信号
- 发件人为
noreply@、no-reply@、notifications@,且内容无需采取行动 - 营销主题模式:“LAST chance”、“% off”、“deal”、“unlock”、“limited time”
- 重复的对话(同一发件人发送的相同主题邮件——除最新一封外全部归档)
- 已解决的监控提醒(主题中包含
RESOLVED) - 超过 24h 的 CI 失败通知(已过时——可能已经修复,也可能不会修复)
- 未知发件人使用推销话术发送的冷邮件
常见噪声发件人(批量归档候选项)
这些发件人历史上发送量大,但信号价值低。使用带有 from: 筛选条件的 archive-bulk:
[email protected] — CI failures, dependabot, PR notifications
[email protected] — resolved uptime alerts
[email protected] — neighborhood spam
务必先试运行,确认查询结果符合预期。