Show HN:一个用于过滤和阅读 Hacker Newsletter 等邮件的 AI 技能
该项目是一个 Codex 技能,可让用户按日期或日期范围从配置的 Gmail 发件人读取邮件简报,并将原始解码后的文本 MIME 部分交给模型处理。技能内置本地只读 Gmail 守护进程,依据链接过滤指令生成报告,支持反馈的本地保存与导出。
这是一个提交到 Hacker News 的开源项目,提供了一个名为 email-reader 的 Codex 技能,用于从 Gmail 中筛选并阅读配置好的邮件简报。项目以本地只读 Gmail 守护进程作为实现细节,用户通常只需用具体日期或日期范围调用技能,而不必直接与守护进程交互。技能会启动守护进程,获取指定时间段内来自配置发件人的全部邮件,把所有解码后的 text/plain 和 text/html MIME 部分传给模型,并调用 .agents/skills/email-reader/LINK_FILTERING_INSTRUCTIONS.md 中的规则来生成报告、选择链接、格式化输出以及收集反馈。
要使用该技能,可以在 Codex 中直接发出类似 $email-reader 2026-06-27 或 $email-reader 2026-06-01 2026-06-27 的命令。实际执行时,技能会运行 scripts/fetch_messages.py,脚本返回邮件元数据和原始解码后的文本 MIME 部分。模型负责解读这些内容并撰写报告;抓取脚本本身不会挑选、清理或改写邮件正文。生成的报告会把每个链接的反馈保存在浏览器 localStorage 中,也可以导出为 Report.feedback.json,以便后续更新用户的偏好。
配置方面,需要在项目根目录创建 .env 文件,设置 ALLOWED_SENDER、GMAIL_OAUTH_CREDENTIALS_PATH、HOST 和 PORT。OAuth 客户端文件需要从 Google Cloud Console 获取:启用 Gmail API、配置 OAuth 同意屏幕、在测试模式下添加自己的 Gmail 账号,然后创建“桌面应用”类型的客户端并下载 JSON,重命名为 gmail_client_secret.json 后放到项目根目录。项目强调必须使用已安装桌面应用的 OAuth 客户端 JSON,不能使用 API 密钥或服务账号 JSON。代码中使用的授权范围是 https://www.googleapis.com/auth/gmail.readonly,即只读 Gmail。
本地守护进程可以通过 uv sync --locked 安装依赖后运行,也可以直接用 UV_CACHE_DIR=/tmp/uv-cache uv run --locked python -m email_reader 启动。首次收到 /messages 请求时,守护进程会在默认浏览器中打开 OAuth 授权 URL;用户完成 Google 授权后,本地令牌会保存到 .gmail_token.json。如果 Google 拒绝过期或被撤销的令牌,守护进程会自动重新发起授权,并保留旧令牌作为备份。若 Google 页面提示“Access blocked: this app has not completed the Google verification process”,需要等待一段时间再试;新 OAuth 应用设置和测试用户变更最长可能需要 24 小时生效。API 可以通过 curl 直接访问,例如 curl 'http://127.0.0.1:4873/messages?start_date=2026-06-01&end_date=2026-06-27'。该项目以 MIT 许可证发布。