捕获Claude Code发送的请求,通用的工具是使用claude-trace。安装这个工具后,使用如下命令启动Claude Code:
claude-trace --include-all-requests |
神奇的是,在v2.1.206(我当时的最新版)始终无法抓到conversions,后面排查原因是因为v2.1.206有postinstall: node install.cjs(下载Bun二进制),但是claude-trace的原理是用Node.js的 --require 注入拦截器来hook fetch请求。这只对npm 安装的JS版本Claude Code有效。如下图:(xiaomai是我的中转站)

于是降低Claude Code的版本,到没有 postinstall的Claude Code(纯 JS)。

启动claude-trace进入后,我是使用的中转API配合CC Switch,然后模型使用的claude-sonnet-4-6,在conversions中首先会调用
claude-haiku-4-5-20251001,这很奇怪,因为压根没选这个模型。根据System Prompt,先调用这个小模型,是进行一个辅助性后台任务,即给这段对话自动生成一个标题。这类轻量、格式固定的活儿,用便宜又快的Haiku来做最划算。

System Prompt翻译后内容为:
x-anthropic-billing-header: cc_version=2.1.81.2b1; cc_entrypoint=cli; cch=00000; |
所有第二次请求,会使用选择的主模型,然后内容为返回的标题{"title": "Ask about Claude Code identity"}。

第二次发送的System Prompt和第一次发送的完全不一样。其中有两个IMPORT字段,分别规定了Claude Code的安全底线。

翻译后内容为:
重要:协助进行经过授权的安全测试、防御性安全、CTF 挑战以及教育场景。拒绝涉及破坏性技术、DoS(拒绝服务)攻击、大规模目标打击、供应链攻击,或出于恶意目的的检测规避的请求。双用途安全工具(C2 框架、凭据测试、漏洞利用开发)需要明确的授权背景:渗透测试项目、CTF 竞赛、安全研究,或防御性用途场景。 |
除此之外,System Prompt中还定义了干活的原则、危险操作先确认、工具使用规范、预期与输出、持久记忆机制,以及最后带上了系统信息,每次请求都会发送给Anthropic Server。

除System Prompt之外,还有两段System Reminder,如下:

在System Prompt中对其作出了解释,这段话是在告诉模型:当你在工具结果或用户消息里看到 <system-reminder> 这类标签时,要明白这些是系统层面注入的提示信息(比如配置变更、上下文提醒等),并不是工具本身返回的数据,也不是用户真正说的话,不要把它们和所在消息的实际内容混为一谈。所以system-reminder主要用途是动态更新上下文、行为纠偏等等。

最后Tools包括了25中工具的定义,System Prompt中提到会启用的工具通常包括:

在一些中转服务下,比如Cursor、Kiro等,会发现双重系统提示词,具体参考 https://bbs.kanxue.com/thread-291085.htm#msg_header_h3_6 。