最近 Claude Code 圈子里爆了一个很大的雷。
Anthropic偷偷在Claude Code中植入了隐形代码,只为识别中国用户。
有国外黑客逆向 Claude Code 时发现:当你不是直连 Anthropic 官方接口,而是通过 API 中转站、公司代理、模型网关或者第三方 proxy 使用 Claude Code 时,Claude Code 可能会在系统提示词里偷偷塞入一个“肉眼几乎看不出来”的标记。

逆向后的代码:

这个标记不是一段明显的 telemetry,也不是一个叫 china_user: true 的字段。
它藏在一行看起来非常普通的话里:
Today's date is 2026-06-30.正常情况下,这句话只是告诉模型今天是哪一天。
但被曝出的逻辑是:Claude Code 会先看你有没有修改 ANTHROPIC_BASE_URL。如果没有修改,或者仍然是官方的 api.anthropic.com,那就按正常格式发送。
但如果你使用了第三方中转站、公司代理或者 proxy,它就会进一步检查:
你是不是中国时区,比如 Asia/Shanghai 或 Asia/Urumqi;
你的 base URL 是不是中国互联网公司域名、中国 AI 公司域名,或者某些 API 中转/转售服务域名;
域名里是否包含 deepseek、moonshot、minimax、zhipu、baichuan、stepfun、dashscope、volces 这类关键词。
然后,它不会弹窗提醒你,也不会在界面里告诉你。
它会改写这句系统提示里的两个细节。
第一,把 Today's 里的普通撇号 ' 换成另一个 Unicode 字符。看起来仍然像撇号,但底层字符已经变了。
U+2019: ’ U+02BC:ʼ U+02B9: ʹ
第二,如果识别到中国时区,把日期里的连字符 - 改成斜杠 /。
于是:
Today's date is 2026-06-30.可能会变成:
Today’s date is 2026/06/30.或者其他肉眼很难区分的 Unicode 撇号版本。
这就是争议最大的地方。
因为这句话会作为系统上下文的一部分,在每次请求里发给 Claude 模型。也就是说,模型端理论上可以根据这行“日期格式暗号”,知道你是不是用了代理、是不是中国时区、是不是来自某类中国公司或 AI lab。
至于 Anthropic 是否真的基于这个标记执行封号、限流、降智,外界目前不能仅凭这段客户端逻辑完全证明。
但开发者真正愤怒的点不止是“检测代理”。
检测滥用、检测转售、检测模型蒸馏,平台当然有自己的商业理由。
真正的问题是:它没有明说,而是把环境信息编码进系统提示里的标点和日期格式。
对于一个拥有本地文件系统、shell、git、代码修改权限的 AI 编程工具来说,这种“偷偷改 prompt”的行为,已经足够让人警觉。
更现实的是,很多中国开发者并不是在做灰产转售。
他们只是因为公司网络、内部网关、模型路由、成本优化,或者不得不用 API 中转服务,才修改了 base URL。
结果,他们可能被一起打上了标签。
目前的问题是:大家都知道有这个问题,但普通用户没有一个干净的解决办法
你可以改时区。
你可以换域名。
你也可以 patch Claude Code binary。
但这些办法都很脏。
改时区会影响系统环境。换域名不一定可控。patch 二进制文件更不适合普通开发者,也会随着版本更新失效。
真正合理的方案,应该满足三个条件:
第一,不改 Claude Code 本体。
第二,不改全局系统环境。
第三,在请求真正发出去之前,让用户能看到、能路由、能修正 Claude Code 发给模型的内容。
这就是 OpenAFW 出场的地方。
OpenAFW 是什么?
OpenAFW 是一个开源的本地 Agent Firewall。
开源地址:https://github.com/openafw/openafw
你可以把它理解成 Claude Code 和模型服务之间的一层本地 proxy。
它运行在你自己的电脑上,不是云服务,不需要把流量先发给另一个 SaaS 平台。
OpenAFW 原本的设计目标不是“反 Claude Code 标记”,而是保护 AI agent 的本地安全:看见每一次模型调用,做模型路由,防止密钥泄漏,检测危险命令,并在请求离开你的机器之前做 credential masking。
但这次 Claude Code 的争议刚好暴露了一个新需求:
AI agent 时代,我们不能只相信 agent 本身。
我们需要一个站在 agent 和模型之间的本地信任层。
Claude Code 说什么、发什么、走哪个模型、是否夹带了你不希望发送的信息,都应该能被用户自己看见和控制。
OpenAFW 正好处在这个位置。
它的核心逻辑是:
让 Claude Code 不再直接打到你的第三方中转站,而是先打到本机:
http://localhost:9877对 Claude Code 来说,这只是一个本地地址。
它不再直接看到你的真实中转站域名,也就绕开了“根据中国公司域名/AI 公司域名分类”的第一层判断。
然后,OpenAFW 再把请求路由到你真正想用的 Claude 模型中转站。
更关键的是,OpenAFW 有一个 Credential Mask 功能。
这个功能原本是为了防止 API key、钱包私钥、GitHub token、AWS key 等敏感信息泄漏给模型或 API relay。
但在这个场景下,它可以被用来把 Claude Code 暗藏标记的那句日期字符串改回正常格式。
也就是把:
Today’s date is 2026/06/30.修正回:
Today's date is 2026-06-30.注意,这不是魔法。
它只是让用户重新拿回了“本地 agent 发给模型的第一条消息”的可见性和控制权。
具体怎么做?
下面是一个最小可用流程。
1. 安装 Claude Code
如果你已经安装过 Claude Code,可以跳过。
macOS / Linux / WSL:
curl -fsSL https://claude.ai/install.sh | bash或者使用 npm:
npm install -g @anthropic-ai/claude-code2. 安装 OpenAFW
npm i -g @openafw/openafwopenafw v0.10.1+3. 打开 OpenAFW UI
openafw ui打开 UI 后,开始配置你的模型路由和 masking 规则。

4. 添加你的 Claude 模型中转站
进入:
Routing -> Model providers添加你的 Claude 模型中转站地址和模型名称。
这里填你平时使用的 Claude-compatible API endpoint。

5. 添加修复日期暗号的 Credential Mask
进入:
Guard -> Credential masking
新增一条规则:
Name: ant-todayPattern: Today[^A-Za-z0-9]*s date is (\d{4})/(\d{2})/(\d{2})Replace: Today's date is $1-$2-$3Role: userMessage: first message然后点击 save。
这条规则的意思是:
只处理第一条 user message;
匹配 Today’s date is YYYY/MM/DD 这种被改写后的格式;
把它替换回 Today's date is YYYY-MM-DD。
6. 选择你的 Claude 模型,并开启 ant-today
在 OpenAFW UI 里选择你刚刚配置的 Claude 模型。
然后开启 ant-today 这条 masking 规则。

7. 用 OpenAFW 启动 Claude Code
回到命令行,执行:
afw claude这一步很关键。
不要直接执行 claude,而是用 afw claude 启动。
这样 Claude Code 的流量会先经过 OpenAFW 本地 proxy。
8. 设置 Claude Code 路由
回到 OpenAFW UI:
Routing -> Routes把:
claude-code/*的 Route to 指向你刚刚添加的 Claude 模型。

9. 验证是否成功
在命令行里和 Claude Code 对话一次。
然后回到 OpenAFW UI,进入:
See -> Agents -> claude-code -> Task -> 第一个 Task查看第一个 user 消息里的日期行。
如果你看到的是:
Today's date is 2026-07-02注意日期中间是连字符 -,不是斜杠 /。
那就说明规则生效了。

这件事真正说明了什么?
表面上看,这是 Claude Code 的一次隐私争议。
但更深层的问题是:
AI agent 不是普通 App。
普通 App 偷偷发一点环境信息,已经让人不舒服。
但 AI agent 更危险,因为它不只是“发信息”。它会读你的代码、看你的文件、运行 shell、改你的 repo、提交 PR,甚至接入公司内部系统。
当 agent 变成你的真实工作执行层时,agent 本身就必须被监督。
以前我们讨论 AI 安全,总是假设风险来自模型:模型幻觉、模型越权、模型被 prompt injection。
但这次事件提醒我们:风险也可能来自 agent client。
也就是你本地运行的那个工具。
它可以在你看不到的地方改 prompt。
它可以决定哪些上下文发给模型。
它可以把某些信息编码进看似无害的自然语言句子里。
所以,未来真正重要的不是“你信不信某个 AI 公司”。
而是:
你有没有一个属于自己的本地信任层?
能不能看见 agent 发了什么?
能不能在请求离开机器前拦截?
能不能把敏感信息替换掉?
能不能把不同 agent 路由到不同模型?
能不能在 agent 做真实工作之前,给它戴上安全带?
这就是 OpenAFW 的价值。
它不只是这次 Claude Code 争议的临时补丁。
它代表了一种新范式:
AI agent 越强,越需要本地 agent firewall。
因为未来每个人都不会只用一个 agent。
你会有 Claude Code、Codex、OpenClaw、Hermes、Cursor、各种 MCP agent、各种公司内部 agent。
每一个 agent 都会向不同模型、不同中转站、不同工具链发请求。
如果没有一层本地 firewall,你根本不知道它们在发什么,也不知道谁在修改你的上下文。
OpenAFW 的意义就在这里:
它不是替代 Claude Code。
它是在 Claude Code 和模型之间,放一个你自己能控制的信任层。
最后
这次 Claude Code 被曝出的“日期暗号”,也许只是一个很小的标记。
但它戳破了一个更大的幻觉:
我们不能默认 AI agent client 是透明的、可信的、无害的。
AI agent 时代,真正的安全边界不在云端。
而在本地。
谁控制 agent 发出去的第一条消息,谁就控制了 agent 的真实行为边界。
如果你正在用 Claude Code,尤其是通过 API 中转站、公司代理或第三方模型网关使用 Claude Code,建议你至少检查一次自己的系统提示里到底发了什么。
目前最简单的办法,可能就是:
npm i -g @openafw/openafwopenafw uiafw claude让 agent 先过一遍你自己的本地防火墙。
不是为了对抗谁。
而是为了把本来就属于你的可见性和控制权,拿回来。
夜雨聆风