mcpField
G
gmail-label

gmail-label

github.com/aiagentwithdhruv生产力2055 次安装15 周前更新
代码仓库

关于 gmail-label

gmail-label 是一项将收件箱邮件分为 Action Required、Waiting On 和 Reference,并通过 Gmail API 批量添加标签的技能。它将邮件分块交由多个子 Agent 并行分类,再合并结果后应用标签。

主要功能

  1. 01以紧凑 JSON 获取邮件摘要
  2. 02拆分邮件批次以并行分类
  3. 03将邮件分为三种标签类别
  4. 04合并分类分块为单一文件
  5. 05通过 Gmail API 批量应用分类标签

适用场景

  1. 01将收件箱邮件分组以便处理
  2. 02用并行子 Agent 分类大量邮件
  3. 03为账户收件箱统一应用标签

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/aiagentwithdhruv/skills --skill gmail-label

安装后在 Claude Code 中输入/gmail-label确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

scripts/
gmail_label_apply.py
gmail_label_fetch.py
gmail_label_merge.py
gmail_label_split.py

详细介绍

Gmail 自动标签

目标

获取收件箱邮件,通过并行子 Agent 将其分类为 Action Required / Waiting On / Reference,然后通过 Gmail API 批量应用标签。

脚本

  • ./scripts/gmail_label_fetch.py - 将邮件摘要作为紧凑的 JSON 获取
  • ./scripts/gmail_label_split.py - 将邮件拆分为 N 个区块,以便并行分类
  • ./scripts/gmail_label_merge.py - 将已分类的区块合并为单个 labels.json
  • ./scripts/gmail_label_apply.py - 批量应用邮件分类标签

子 Agent

  • email-classifier — 定义于 .claude/agents/email-classifier.md
  • 模型:Sonnet 4.5(快速且经济高效的分类)
  • 每个子 Agent 读取一个区块,并写入一个分类结果文件

流程(并行 — 默认)

步骤 1:获取邮件
python3 .claude/skills/gmail-label/scripts/gmail_label_fetch.py \
  --account ACCOUNT --query "in:inbox" --limit 100 --output .tmp/emails.json
步骤 2:拆分为区块
python3 .claude/skills/gmail-label/scripts/gmail_label_split.py \
  --input .tmp/emails.json --chunks 10 --output-dir .tmp/chunks
步骤 3:并行分类(启动 10 个子 Agent)

在后台启动 10 个 email-classifier 子 Agent,每个负责一个区块。每个子 Agent:

  • 读取 .tmp/chunks/chunk_N.json
  • 对每封邮件进行分类
  • 写入 .tmp/chunks/classified_N.json

使用 run_in_background: true 和 model: "sonnet" 的 Task 工具。一次性在同一条消息中启动全部 10 个,以实现真正的并行:

For each chunk 0-9, spawn a Task with:
  subagent_type: "email-classifier"
  model: "sonnet"
  run_in_background: true
  prompt: "Read /absolute/path/.tmp/chunks/chunk_N.json, classify each email, write results to /absolute/path/.tmp/chunks/classified_N.json"

重要:不要使用 TaskOutput 读取子 Agent 的结果。 子 Agent 会将结果写入文件 — 主 Agent 无需查看分类数据。读取 TaskOutput 会占满上下文窗口,并在批次较大(500 封以上邮件)时导致“提示词过长”错误。

请改为轮询文件是否存在:

# Wait until all classified files exist (timeout after 120s)
for i in $(seq 0 9); do
  while [ ! -f ".tmp/chunks/classified_$i.json" ]; do sleep 2; done
done

然后直接继续步骤 4(合并)。

步骤 4:合并分类结果
python3 .claude/skills/gmail-label/scripts/gmail_label_merge.py \
  --input-dir .tmp/chunks --output .tmp/labels.json
步骤 5:应用标签
python3 .claude/skills/gmail-label/scripts/gmail_label_apply.py \
  --account ACCOUNT --input .tmp/labels.json

分类指南

Action Required:

  • 需要核实的安全警报
  • 即将到期且有截止日期的信用卡/域名续订
  • 提出问题的 Slack @提及
  • 需要问候的新团队成员(Slack 加入通知)
  • 需要回复的客户邮件
  • 商家信息更新(Google Business Profile、Bing Places)
  • Stripe 需要采取操作的通知

Waiting On:

  • 等待回复的外发销售邮件
  • 等待解决的支持工单
  • 已发送、等待回复的提案

Reference:

  • 营销简报(DigitalMarketer 等)
  • 慈善/非营利组织简报(RAPS 等)
  • Google Business Profile 绩效报告
  • 促销优惠(Blinkist、销售等)
  • 平台更新通知(Google Play、Apify 等)
  • 确认码(已使用)
  • 房地产简报(Westbank 等)
  • 游戏账号邮件(Riot Games 等)
  • 资讯类安全警报(已开启 2FA 等)
  • 健康提示
  • 法律/政策更新通知

账号注册表

账号存储在工作区根目录的 gmail_accounts.json 中。每个账号需要:

  • email - Gmail 地址
  • token_file - OAuth 令牌路径

添加新账号

python3 .claude/skills/gmail-inbox/scripts/gmail_multi_auth.py --account ACCOUNT_NAME --email EMAIL

性能

  • 串行流程:100 封邮件约需 36 秒(获取 1 秒 + 分类 34 秒 + 应用 1 秒)
  • 并行流程:100 封邮件约需 30 秒(分类 19 秒 + 合并不到 1 秒 + 应用约 10 秒)
  • 分类是瓶颈;10 个并行子 Agent 可将耗时从 34 秒缩短至 19 秒(提速约 1.8 倍)
  • Agent 启动开销(约 4 秒的错峰启动)限制了理论收益
  • 应用步骤的耗时可能因 Gmail API 限流而有所不同

架构

输入
名称类型必填描述
accountstring是注册表中的 Gmail 账号名称
querystring否Gmail 搜索查询(默认:'in:inbox')
limitinteger否要分类的邮件数量上限(默认:100)
chunksinteger否并行分类区块数(默认:10)
输出
名称类型描述
labels_appliedobject各类别的数量:Action Required、Waiting On、Reference
凭据
名称来源
credentials.json文件
token_*.json文件(自动生成)
可组合使用

与此工具适合串联使用的技能:gmail-inbox

费用

用于分类的 Claude Sonnet API

评论

支持 Markdown