关于 email
通过 `autark mail` 命令行收发和阅读 AgentMail 邮件的技能,涵盖草稿检查、邮件格式选择及外联记录与潜在客户关联。
主要功能
- 01通过命令行发送和回复
- 02读取邮件线程与附件
- 03检查邮件草稿
- 04将外联记录关联到潜在客户
- 05选择 HTML 或纯文本
适用场景
- 01发送关联潜在客户的外联邮件
- 02在现有邮件线程中回复
- 03查看收件箱邮件和附件
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ kiluazen/ kstack --skill email安装后在 Claude Code 中输入/email确认已加载。
附带文件agents/openai.yaml
详细介绍
电子邮件
每位 autark 用户在完成入职设置时,都会获得一个专属的 AgentMail 收件箱。所有邮件操作——发送、回复、读取收件箱——都通过 autark mail CLI 完成,该 CLI 已通过 ~/.autark/credentials.json 完成身份验证。不要直接调用 api.agentmail.to。不要使用 agentmail npm CLI。
身份验证
每次调用时,autark mail 都会从 ~/.autark/credentials.json 读取收件箱令牌和地址。无需设置环境变量或传入身份验证标志。如果命令报错 missing agentmail_token,说明用户尚未完成设置——运行一次 autark mail setup --prefix <name>。
如果设置了以下环境变量,AGENTMAIL_API_KEY / AGENTMAIL_EMAIL / AGENTMAIL_INBOX_ID 会作为覆盖值生效——仅在使用非默认收件箱时有用。
纯文本与 HTML——选择合适的标志
CLI 同时接受 --text 和 --html,遵循 AgentMail / Mailgun / SendGrid / Resend / Postmark 的惯例。
--text @file— 以text/plain格式发送。收件人会原样看到字节内容。任何 HTML 标签(<div>、<p>、<br>、<a>等)都会以纯文本形式显示在收件人的收件箱中。--html @file— 以text/html格式发送。收件人的电子邮件客户端会将其呈现为带样式的邮件,并显示实际的锚点、段落分隔等。
外联邮件签名规则:如果在邮件签名或页脚中放入链接,链接必须嵌入文字中(例如,名称「kushal」本身就是可点击链接),绝不能单独占一行、直接显示 URL。autark 发送的签名不应采用裸 URL 的形式。
要使用嵌入链接的签名,必须使用 --html——--text 会让 Gmail / Outlook 将 <a href> 标记作为纯文本显示。这就是 2026-05-28 出现问题的原因:6 封冷邮件通过 --text 发送了 <a href="https://autark.sh">kushal</a>,所有收件人都在 Gmail 中看到了原始标记。事后分析请参阅 autark/docs/email-html-in-text-incident.md。
如果发送的邮件没有签名链接(注册验证、测试 ping、系统消息),使用纯文本 --text 即可。
发送前检查每封草稿
在执行 autark mail send 前,先对每封草稿(包括发送邮件和回复)运行 autark mail lint:
autark mail lint --body @draft.txt
退出码为 0 = 无问题。退出码为 1 = 以 JSON 格式打印违规项,每项包含 rule、detail 和 why。请把输出视为反馈,而不是硬性门槛。这些规则用于捕捉常见的 AI 痕迹;有时也会误判实际没问题的草稿。阅读每条 why,判断规则是否适用于你的具体邮件,修复确实适用的问题,对不适用的问题则忽略。标准不是“lint 退出码为 0”,而是“这封邮件读起来像真人写的,能否打动收件人?”
Lint 只检查内容质量——AI 痕迹、模棱两可的措辞、长度、签名格式。它不检查标记语法(这由上文的约定和你自己的判断负责)。检查即将发送的正文:如果发送 --html,就检查 HTML 文件;如果发送 --text,就检查文本文件。Lint 无论哪种格式都会读取正文。
Lint 检查项:
- structure-word — 正文中的 AI 痕迹词汇(
structurally、fundamentally、specifically、essentially、the key insight、that's exactly等)。写冷邮件的真人不会用这些词。直接描述事物。 - em-dash — 任何
—字符。在外联邮件中,这是明显的 AI 痕迹。请使用逗号、句号或换行。(如果收件人的写作中也使用破折号,且你是在模仿其语气,则可以忽略。) - body-url — 不在 Markdown
[name](url)或 HTML<a href>锚点中的任何 URL。产品链接应放在签名锚点中;在正文中直接放 URL,会像是在测试 A/B 版本。 - too-many-questions — 多于一个
?。选出能让你获得最多信息的那个问题。(如果是在回复中回答多个直接提问,可以忽略。) - compound-question — “are you X or Y...?” 这类句式。去掉
or,选更具体的一项。 - too-long — 签名前超过 400 个字符(约 4–6 行短句)。超过这个长度,你就是在解释,而不是在提问。
- no-anchor-sig — 签名中没有可点击的姓名链接。如果签名里没有
<a href>/[name](url),收件人就无法快速了解你的身份。
如果大多数违规项都确实适用,而你重写 2 次后仍写不出合格草稿,问题可能出在正则表达式之外。请重新阅读 ~/.claude/skills/outreach/SKILL.md,并考虑是否应该发送。
发送消息 — 冷外联(HTML,签名中嵌入链接)
autark mail send \
--to [email protected] \
--subject "Subject" \
--html @./body.html \
--lead-id $LEAD_ID
body.html:
<p>Hi Karl,</p>
<p>one sentence quoting them.</p>
<p>one sentence on what you built.</p>
<p>one specific question?</p>
<p>best,<br><a href="https://autark.sh">kushal</a></p>
收件人会看到一封带样式的邮件,其中的 “kushal” 是指向 autark.sh 的可点击链接。这是发送任何冷外联邮件的默认格式。
外联邮件始终传入 --lead-id。 一个命令会原子性地完成三件事:发送邮件、在潜在客户记录上添加一次 touch(方向为 out,thread_ref = AgentMail 线程),并将潜在客户状态从 ready 更新为 contacted。发送邮件本身就会完成记录工作,无需另行执行状态更新或日志记录命令。随后,工作线程会轮询该线程(针对状态为 contacted 和 replied 的潜在客户),并自动记录收到的回复。可通过 autark lead list <slug> / autark lead show <id> 获取潜在客户 ID,也可在仪表板中获取(点击任意潜在客户行即可复制其 ID;带有 ?lead=<id> 的链接也包含该 ID)。
--run-id 仍然可用,但它属于旧版 v1 操作日志——不会更新潜在客户表,仪表板会将这些行视为历史记录。不要用它来针对表格中的潜在客户进行外联。
其他标志:--cc、--bcc、--reply-to、--label、--attachment(每个标志都可重复使用或用逗号分隔),以及用于打印负载但不发送的 --dry-run。
响应为 JSON,包含 message_id、thread_id,以及(传入 --lead-id 时)touch / 潜在客户记录。请保存此响应。
发送消息 — 非外联(纯文本,无链接)
对于注册验证、测试通知、系统消息,或任何无需担心签名链接的发送:
autark mail send \
--to [email protected] \
--subject "Subject" \
--text @./body.txt
此处使用纯 --text 即可。无需传入 --lead-id,因为没有对应的潜在客户,不会有记录写入表格。
在线程中回复
autark mail reply \
--message-id "$MESSAGE_ID" \
--html @./reply.html \
--lead-id $LEAD_ID
同样遵循格式规则:如果回复包含签名链接,请使用 --html。如果是用一句话回复一句话,且不含签名链接,则可以使用 --text。
$MESSAGE_ID 是你要回复的邮件 ID(收到的邮件,或你自己之前发送的邮件)。这是 mail send / mail message / mail thread 返回的 ID。
**对方尚未回复时跟进:**普通回复会发给目标邮件的发件人,也就是你自己,因此邮件会发到你自己的收件箱。跟进自己发出的最后一封邮件时,请显式传入 --to [email protected]。
使用 autark mail reply-all 回复所有收件人;使用 autark mail forward --message-id <id> --to <addr> [--html @body.html] 转发邮件。
查看收件箱
autark mail threads [--limit 30] # list threads
autark mail thread <thread_id> # one thread + all messages
autark mail messages [--limit 30] # flat message list
autark mail message <message_id> # single message
autark mail raw <message_id> # full raw payload
autark mail attachment --message-id <id> --attachment-id <id> [--out file]
所有输出均为 JSON。无需传入身份验证标志——凭据会从磁盘读取。
应急方案
如果 AgentMail 发布了 autark mail 尚未封装的新端点:
autark mail request GET /inboxes/$EMAIL/some/new/endpoint
autark mail request POST /inboxes/$EMAIL/foo --body @payload.json
复用同一经过身份验证的会话。仅在没有适用的封装命令时使用。
规则
- 任何签名中包含链接的邮件发送,都请使用
--html,以便将链接嵌入姓名中。仅包含裸 URL 的签名不是 autark 的发送格式。 - 不含签名链接的邮件发送(注册验证、系统提示、测试邮件)可以使用纯文本
--text。 - 对每份草稿(发送和回复)都进行 lint 检查。将输出视为反馈,并忽略不适用的规则。
- 每次发送或回复触达潜在客户时,都传入
--lead-id,以便记录到潜在客户表中,并让回复扫描跟踪该邮件线程。 - 不要根据姓名和域名猜测邮箱地址组合。首次联系前请使用
email-finder技能,并通过具体来源(Apollo、GitHub 提交记录等)验证地址。 - 如果联系人价值较高,或来源不可靠,请用第二条线索交叉验证。
- 如果邮件地址硬退信,请将其列入抑制名单并继续处理。不要尝试相近的地址。
- 如果需要通过浏览器进行注册、验证链接操作或 Apollo 调研,请使用
chrome-relay技能。 - 潜在客户的触达记录是权威记录——
autark lead show <id>会按顺序列出每次发送和回复。mail send的响应(message_id+thread_id)可用于之后在正确的邮件线程中回复。