关于 email-triage
email-triage 是 Gmail Commander 的邮件分类技能,按类别和紧急程度整理近期邮件。它记录按需 `/digest` 工作流,并与独立运行的定时摘要服务加以区分。
主要功能
- 01将邮件分为三类
- 02按紧急程度从高到低排序
- 03通过 Gmail CLI 获取近期邮件
- 04过滤受污染的模型回复
- 05将结果整理为摘要
适用场景
- 01查看近期需要关注的邮件
- 02区分安全提醒与工作邮件
- 03在 Telegram 请求按需摘要
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ terrylica/ cc-skills --skill email-triage安装后在 Claude Code 中输入/email-triage确认已加载。
附带文件references/evolution-log.md
详细介绍
邮件分类
了解 Gmail Commander 如何整理近期邮件,筛选出需要关注的内容,以及每种摘要实际来自哪里。
自我演进技能:此技能会在使用过程中持续改进。如果指令有误、参数发生偏移,或需要采用变通方法,请立即修复此文件,不要拖延。仅针对真实且可复现的问题进行更新。
两种不同的摘要——请勿混淆
| 摘要 | 触发方式 | 代码 |
|---|---|---|
按需 /digest [hours] | 用户向机器人发送此命令(默认 6 h) | 此插件:scripts/lib/commands.ts + scripts/lib/triage.ts |
| 定时摘要 | 每天多次,无人值守运行 | 私有部署的 GmailDigest 服务——它有自己的实现 |
定时摘要运行在常开 Mac mini 上的私有 Restate 租户中,不会导入此插件的分类代码。其计划、提示词、告警和故障均通过该部署自己的仓库运维手册进行管理。
此插件不再提供定时摘要入口:笔记本上的 launchd 任务 com.example.gmail-commander-digest 已于 2026-09-24 停用;其 scripts/digest.ts(以及 scripts/lib/tts-client.ts 中 Kokoro 播客风格的语音简报)在 2026-09-26 确认无人导入后已移除。请勿重新创建这两者。
强制预检
步骤 1:检查分类代码是否存在
PLUGIN="$HOME/.claude/plugins/marketplaces/cc-skills/plugins/gmail-commander"
ls -la "$PLUGIN/scripts/lib/triage.ts" 2>/dev/null || echo "TRIAGE_NOT_FOUND"
步骤 2:验证 Gmail CLI 二进制文件(分类输入来自该文件)
ls -la "$HOME/.claude/plugins/marketplaces/cc-skills/plugins/gmail-commander/scripts/gmail-cli/gmail" 2>/dev/null || echo "BINARY_NOT_FOUND"
如果出现 BINARY_NOT_FOUND:使用已提交的 lockfile 构建:
cd "$HOME/.claude/plugins/marketplaces/cc-skills/plugins/gmail-commander/scripts/gmail-cli" && bun install --frozen-lockfile && bun run build
三分类系统
| 类别 | 示例 |
|---|---|
| 系统与安全 | Exchange 警报、2FA 验证码、密码重置、新设备登录 |
| 工作 | 截止日期、发票、合同、GitHub PR、专业请求 |
| 个人与家庭 | 朋友/家人消息、预约、车辆维修、健康 |
每个类别内部的紧急程度依次为:CRITICAL > HIGH > MEDIUM > LOW。如果没有符合条件的邮件,模型会准确返回 NO_SIGNIFICANT_EMAILS,机器人则会报告当前时段较为平静。
流程(/digest [hours])
fetchRecentEmails(hours)通过GMAIL_CLI_BIN运行gmail search newer_than:<hours>h -n 50 --json。formatEmailsForTriage()会整理邮件内容;随后会添加ANTI_SKILL_PREFIX,让模型忽略其上下文中的任何技能或工具列表。- 在
HAIKU_MODEL上调用一次 Agent SDK,并使用TRIAGE_SYSTEM_PROMPT(不使用工具,仅一轮)。 isSkillContaminated()会丢弃扮演技能而非执行邮件分类的响应。parseTriageResponse()会将文本转换为类型化条目,formatDigestHtml()则使用类别和紧急程度对应的表情符号映射来渲染这些条目。
源码索引
| 事项 | 文件 |
|---|---|
| 系统提示词、反技能前缀、解析器 | scripts/lib/triage.ts |
/digest 命令处理器 | scripts/lib/commands.ts |
| 类别/紧急程度表情符号映射、摘要 HTML | scripts/lib/telegram-format.ts |
| Gmail 获取 | scripts/lib/gmail-client.ts |
更改后检查清单
- YAML frontmatter 有效(description 中没有冒号)
- 触发关键词为最新版本
- 路径模式使用 $HOME,而非硬编码路径
-
lib/triage.ts导出内容的结构未变(机器人及其部署会导入这些内容)
执行后复盘
此技能完成后,请先进行复盘,再结束任务:
- 确认位置。 — 编辑前,找到此 SKILL.md 的规范路径。
- 出了什么问题? — 修复导致问题的指令。
- 有什么效果超出预期? — 将其推广为推荐做法。
- 有什么内容出现偏差? — 修复不再符合实际情况的脚本、参考资料或依赖项。
- 记录下来。 — 添加一条 Evolution-log 条目,包含触发条件、修复内容和证据。
请勿推迟。下一次调用会继承你留下的一切。