你让 AI 帮忙查资料,通常会盯着它打开了什么网页,却未必想到:它敲门时,可能顺手递出你的邮箱。11 月 5 日,开发者 Taylor Edwards 在 GitHub 报告称,Claude Code 替他访问第三方网站时,把登录账户邮箱写进了网络请求。此事尚无抓包、复现步骤或 Anthropic 官方回应佐证,但它提出的问题很具体:编码 Agent 代表用户上网时,究竟会自动带走哪些身份信息?
邮箱藏在网页背后
Claude Code 是编码 Agent——一种能读取项目文件、运行命令并调用网络工具的 AI 助手。它替用户访问网站时,会发送 HTTP 请求;请求除了网页地址,还附带 HTTP header,也就是一组不一定显示在页面上、却能被服务器读取和记录的元数据。
争议集中在其中的 User-Agent。它原本是一段客户端身份说明,常用于告诉网站“谁在访问”。Edwards 指控,Claude Code 在网页搜索期间把他的邮箱写进了这个字段,未经许可发送给第三方。他报告的环境是 macOS(darwin)、tmux 终端和 Claude Code v2.1.318。
把联系方式写进爬虫身份并非全无来历。据慕尼黑大学课程资料和 IETF 的相关草案,早期网络爬虫曾被建议在 User-Agent 或 From header 中留下运营者邮箱,方便站长在爬虫失控时联系负责人。如今更受青睐的做法,是放一个说明网页,再由网页提供联系方式。问题在于,个人 Agent 如果沿用旧习惯,暴露的可能不是专用运营地址,而是毫不知情的最终用户邮箱。
默认保护为何没有拦住
该 issue 中,Claude Code 仓库一名贡献者表示,从 v2.1.317 起,产品已内置并默认启用 cc-plugin-privacy,目标是“确定性阻止”这类行为。用户可以在 /plugins 中关闭它。
但报告者使用的是更晚的 v2.1.318。若他的描述准确,焦点便不只是“为什么发送邮箱”,还包括默认保护层为何未能阻止。讨论中另有用户提出一种可能的缺口:保护机制似乎检查 shell 命令里是否出现账户邮箱;如果 Agent 先把邮箱写进脚本,再运行脚本,受检查的命令本身可能没有邮箱。还有用户称在自己的会话记录中找到两次对外请求,User-Agent 同时带有邮箱、项目或工具名称。不过这些补充同样来自社区陈述,材料没有提供可独立核验的完整证据。
这也说明,隐私风险不只是一行邮箱。项目名、任务名、查询内容和 IP 一旦在同次请求中出现,第三方网站可能把“谁在做什么”联系起来。即使删掉邮箱,具有辨识度的项目名称仍可能泄露工作上下文。
真正值得盯住的是数据流
编码 Agent 的价值来自权限:它能替你读文件、写代码、执行程序和访问外部资源。权限越接近真实工作环境,隐私边界就越不能只看设置页,而要看每次工具调用实际发送了什么。
这起报告因此值得关注。它把一个抽象问题变得可检查:Agent 从账户、项目和会话中看到了哪些信息;生成请求时又把哪些内容塞进 header;默认保护检查的是最终网络流量,还是仅检查某一种命令写法。说白了,可靠的隐私边界不能只要求 Agent“别说出去”,还要在数据真正离开本机前把关。
局限与未知
- 现有材料主要来自一个仍开放的 GitHub issue,缺少请求抓包、完整 User-Agent、稳定复现步骤、代码证据和 Anthropic 官方回应,不能把指控写成已确认漏洞。
- Edwards 称自己每天收到数十封诈骗邮件,并将其归因于邮箱外泄;目前没有证据证明邮件发送者通过这一渠道取得地址,因果关系无法成立。
- 大量 reaction 只能说明社区关注度高,不能替代独立复现;问题影响哪些版本、用户和网站,目前也不清楚。