Skip to main content
目錄 目錄(7 節)

Wangxiaoming

 · 

HEY CLI:让 AI 替你收拾邮箱

一千多封邮件,我一条命令没敲,只跟 Claude Code 说了几句中文。1 小时:86 封广告删掉,20 个营销发件人永久拒收,揪出 2 封钓鱼邮件。背后是 HEY 官方为 AI agent 设计的 hey-cli。

我的 HEY 邮箱里攒了一千多封邮件。昨天花了一个小时左右,让 Claude Code 通过 HEY 官方的命令行工具帮我清理,结果是:

  • Paper Trail 里 86 封 广告和推广被删掉,16 封过期的域名提醒也清掉了;
  • 20 个 只发广告的发件人被直接拒收,以后他们的邮件根本进不来;
  • 两封冒充加拿大税务局和 DocuSign 的 钓鱼邮件 被识别出来,标成了垃圾邮件;
  • Imbox 的 46 封”New For You”压到 9 封真正要我动手的;
  • 8 篇 SemiAnalysis 长文被总结成一篇笔记,存进了 Obsidian。

更意外的是,它在翻 Hetzner 邮件时发现,我服务器上的 PostgreSQL 一直暴露在公网上,德国联邦信息安全局每个月都发报告,我一直没看。顺着这条线,把 4 台服务器都修好了。

这一切靠的是 Basecamp 开源的 hey-cli。

先说清楚:命令不是我敲的

下文会出现不少命令,但 整个过程我只亲手敲了一条:hey auth login,因为登录要在浏览器里点授权。其余全是我用中文跟 Claude Code 说一句话,它自己决定跑什么命令、跑完把结果整理给我看。

这是当天的原话,以及它在背后实际做的事:

我说的话(原话) AI 在背后做的事
把 hey.com cli 用起来 找到官方项目,下载最新版并校验,安装 agent skill
paper_trail 里面无关紧要的邮件列出来,我想批量删除 hey box view --all 拉出 189 封,按发件人分成三类列给我看
1 选第 1 个方案:hey trash 删 86 封,再拉一次列表核对
还可以自动删除吗 查 hey screener history,比对哪些地址也寄账单,列出可以拒收的 20 个
要 hey screener deny 拒收这 20 个,再核对状态
8 个总结内容 hey thread read 逐封读 Screener 里待审的 8 封,认出 2 封钓鱼
只要处理这些:New for you 判断哪些已过期、已付款,hey seen 和 hey move 归档,只留 9 封
处理一下 aside 删广告,凭证移到 Paper Trail,待读的留着
SemiAnalysis 做个总结吧,详细一点,然后保存到 obsidian 读 8 篇长文,写成笔记,存进 Obsidian
这个你帮我记一下,这两天我去更新发布一个 hey todo add 加一条待办,日期设在两天后

我的工作只有三种:提要求、看清单、说”要”或”不要”。命令行是给 AI 用的接口,不是给人用的。

hey-cli 是什么

hey-cli 是 HEY 官方的命令行工具(GitHub 上的 basecamp/hey-cli,MIT 协议),既是 CLI,也带一个终端界面(hey tui)。它能做的事基本覆盖了网页版:

  • 看邮箱、读邮件、搜索、回复、写信、转发
  • 管理 Screener(放行或拒收发件人)
  • 移动、归档、删除、标记已读
  • 标签、收藏夹、草稿、附件
  • 日历、待办、日记

但它真正的设计目标写在官方说明里:主要给 AI agent 和脚本用。

为什么它特别适合 AI

我用下来,有三点设计特别对 agent 友好。

1. 默认输出结构化 JSON。 每条命令都返回 ok、data、summary,还有一个 breadcrumbs 字段,告诉你”下一步通常做什么”。比如没登录时,它直接提示下一步是 hey auth login。AI 不用去猜输出格式。

2. 内置 jq 过滤。 不用装 jq,直接 --jq:

hey box view imbox --limit 10 \
  --jq '.data.postings[] | "\(.active_at[0:10]) \(.name)"'

另外还有 --markdown(读邮件时输出成 Markdown 文档)、--ids-only(只输出 ID,方便接管道)、--count。

3. 每条命令都带”给 agent 的说明”。 hey commands 会输出完整的命令目录,很多命令附有 agent_notes,把边界情况写得很清楚。比如:

  • trash 用的是邮箱条目的 ID,不是邮件主题的 ID;
  • 一个 bundle 行不是邮件,删它”返回成功但什么都没改”;
  • todo add 不带 --date 时,按 HEY 账户的时区算”今天”。

这些细节,正是 AI 最容易踩坑的地方。

五分钟上手

安装。 macOS 用 Homebrew,Arch/Omarchy 用 yay -S hey-cli,其他平台下载 GitHub release 的压缩包。我这边是让 Claude 装的:它下载最新的 release,校验 SHA-256 后放进 ~/.local/bin,不需要 sudo。

登录。 这一步要你自己来,因为要在浏览器里授权:

hey auth login

会打开浏览器走 OAuth(PKCE),凭证存进系统 keyring,自动续期。

装 agent skill。

hey skill install

它会把内置的 SKILL.md 装到 ~/.claude/skills/hey,Claude Code 之类的 agent 立刻就知道怎么用 HEY。

几个场景,以及背后的命令

下面的命令都是 AI 自己选、自己跑的。列出来是让你知道它在背后做了什么,你不需要记住它们。

整个过程就是一个循环:AI 拉数据、分类、列清单,我确认,它再执行和核对。

按发件人批量清理

先把一个邮箱的全部邮件拉下来,按发件人统计:

hey box view paper_trail --all \
  --jq '.data.postings[] | .creator.email_address' | sort | uniq -c | sort -rn

AI 按”营销推广 / 过期通知 / 凭证收据”三类列给我看,我确认后:

hey trash <id1> <id2> ...

删掉的邮件进 Trash,后悔还能捡回来。

一劳永逸:在 Screener 拒收

删邮件是治标。HEY 的精髓是 Screener:拒收一个发件人,他以后的邮件就进不来了。hey-cli 能查到你过去每一个放行或拒收的决定(clearance),还能直接改:

hey screener history --all          # 历史上所有放行/拒收决定
hey screener deny <clearance-id>    # 改成拒收
hey screener deny <id> --spam       # 拒收并标成垃圾邮件,顺带训练过滤器

我的 Screener 里攒了 1,884 个这样的决定。按年份一看,趋势很明显:

这里有个讲究:有些地址既发广告也发账单(比如 Cloudflare、Spotify)。AI 先比对”这个地址有没有发过我要保留的邮件”,有冲突的就不拒收。这一步人工做很烦,交给 AI 刚好。

清空”New For You”

hey seen <id>...          # 过期活动、已付款的收据,标成已读
hey move <id>... --to paper_trail

最后只留下真正要处理的:孩子的缴费截止日、开发者账号保活、教堂排班。

把邮件变成知识

hey thread read <topic-id> --markdown

把 newsletter 输出成干净的 Markdown,交给 AI 总结,再写进 Obsidian。8 篇 SemiAnalysis,十分钟变成一篇带数据表格的精读笔记。

顺手记待办

hey todo add "Google Play:11-21 前发布更新" --date 2026-11-05

几个踩过的坑

前两个是 AI 自己撞上、自己查文档绕过去的,我是事后看记录才知道。

  • 两种 ID 别搞混。 一封邮件有 topic_id(主题)和 id(它在某个邮箱里的条目 ID)。trash、move、seen 要的是后者。
  • 邮件移动过以后,条目 ID 可能就变了。 遇到 not found,重新拉一次列表就好。
  • ! 跑的是非交互终端。 在 Claude Code 里用 ! 跑需要交互输入的命令会失败,这时换个终端窗口,或者用 --token、环境变量的方式。
  • 删除和拒收都要人确认。 我的做法是:AI 列清单、给建议,我回一个”要”它才动手;删的东西进 Trash,拒收也随时可以改回放行。

结论

邮件客户端的发展方向,可能不是更漂亮的界面,而是 一个能被 AI 安全调用的接口。hey-cli 是我见过做得最认真的一个:结构化输出、agent_notes、一条命令装好 skill,都是为 agent 时代设计的。

邮箱这种”每天都在累积、又不值得花整块时间处理”的东西,最适合交给 AI。你说人话,做决定;它敲命令,跑腿。

— 汪晓明(蓝莲花)

Download Pickful App

Better experience on mobile

iOS

Android

APK