我一直在想,针对 Claude Code CLI 应用程序运行某种 HTTP 代理并了解其工作原理会很有趣。
Mario Zechner 刚刚发布了一个非常棒的版本。它的工作原理是:对global.fetch和Node HTTP 库进行 monkey-patching,然后使用 Node运行 Claude Code,并额外添加--require interceptor-loader.js
选项来注入补丁。
如果您已经安装并配置了 Claude Code,则可以通过 npx 轻松运行它,如下所示:
npx @mariozechner/claude-trace --include-all-requests
我刚刚尝试过,它将请求/响应对记录到.claude-trace
文件夹中,作为jsonl
文件和 HTML。
HTML 界面真的很棒。这里有一个跟踪示例——我在我的llm 签出中启动了所有运行,并要求 Claude“告诉我关于这个软件的信息”,然后“使用你的代理工具找出存储 API 密钥的代码在哪里”。
我在这里特别请求了“代理”工具,因为我注意到在工具定义中有一个称为dispatch_agent 的工具,它具有以下工具定义(重点是我):
启动一个可以访问以下工具的新代理:GlobTool、GrepTool、LS、View、ReadNotebook。当您搜索关键字或文件时,如果不确定能否一次性找到正确的匹配项,可以使用代理工具为您执行搜索。例如:
- 如果您正在搜索“config”或“logger”之类的关键字,那么 Agent 工具是合适的
- 如果要读取特定的文件路径,请使用 View 或 GlobTool 工具而不是 Agent 工具,以便更快地找到匹配项
- 如果您要搜索“class Foo”之类的特定类定义,请使用 GlobTool 工具,以便更快地找到匹配项
使用说明:
- 尽可能同时启动多个代理,以最大限度地提高性能;为此,请使用单个消息来使用多种工具
- 代理完成后,它会返回一条消息。代理返回的结果对用户不可见。为了向用户显示结果,您应该向用户发送一条包含结果简要摘要的文本消息。
- 每次代理调用都是无状态的。您将无法向代理发送其他消息,代理也无法在其最终报告之外与您进行通信。因此,您的提示应该包含代理自主执行的非常详细的任务描述,并且您应该明确指定代理应该在其最终且唯一的消息中返回哪些信息。
- 代理的输出通常应该值得信赖
- 重要提示:代理无法使用 Bash、Replace、Edit 和 NotebookEditCell,因此无法修改文件。如果您想使用这些工具,请直接使用,而不要通过代理。
我听说 Claude Code 使用了 LLM 调用其他 LLM 的模式——这也是它能如此快速地消耗代币的原因之一!看看它背后的工作原理很有意思——它是一种工具调用,旨在并发使用(通过同时触发多个工具的使用)。
Anthropic 特意选择不发布 Claude Code 使用的任何提示符。与其他隐藏的系统提示符一样,这些提示符本身主要充当一份缺失的手册,帮助您准确理解这些工具的功能及其工作原理。
标签:人类学、克劳德、人工智能代理、人工智能、法学硕士、提示工程、人工智能辅助编程、生成人工智能
原文: https://simonwillison.net/2025/Jun/2/claude-trace/#atom-everything