1. 从 claw-code 看 Agent 骨架:Rust 重写 Claude Code 到底拆出了什么
claw-code 是一个用 Rust 重写的 Agent 工程,社区里常被拿来和 Claude Code 对比——它把原本几十万行 TypeScript 的 Agent 逻辑压缩到几万行 Rust,同时保留了模型切换、skills、plugins、MCP、session 管理这些核心能力。如果你正在找一个能跑起来、能改、能读源码的 Agent 骨架来理解「Agent 到底是什么」,claw-code 是个不错的样本。它适合三类人:想搞懂 Agent 启动链路的后端工程师、想把 MCP 工具接进自己业务的应用开发者、以及想用 Rust 写高性能 Agent 的折腾党。
我关注它主要因为两个热词:MCP 和 skills。MCP 现在基本成了模型和外部工具之间的标准协议,skills 则是把「企业规范」注入模型行为的手段。claw-code 把这两块都做成了可配置、可扩展的模块,而不是硬编码在业务逻辑里。这篇文章不会泛泛谈 Agent 概念,而是带你从本地编译开始,走一遍启动、工具注册、技能调用、MCP 工具验证的完整链路,最后给出可复制的配置片段和常见报错排查。读完你应该能自己判断:一个 Agent 骨架里,哪些是必须的,哪些是可以替换的。
先说结论:Agent 不是「更聪明的模型」,而是「模型 + 上下文管理 + 工具调用 + 会话状态」的组合体。claw-code 的价值在于它把这四件事拆得比较清楚,你能看到每一层在哪里、怎么接。下面按实际动手顺序展开。
2. 本地编译与启动 claw-code:Rust 工具链准备与首次 prompt 调用
claw-code 的技术栈是 Rust + Python,Rust 负责核心运行时和工具调度,Python 多用于部分脚本和 skill 实现。Rust 需要编译成二进制才能跑,所以第一步是把工具链装好。Windows 上直接去 rustup.rs 下载安装器,一路默认即可;macOS/Linux 用curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh。装完后rustc --version和cargo --version都能输出版本号,说明环境 OK。
拉代码并编译:
git clone <claw-code 仓库地址> cd claw-code cd rust/ cargo build --workspace cd ..cargo build --workspace会把 workspace 下所有 crate 都编一遍,第一次会比较慢,耐心等。编译完成后二进制在rust/target/debug/下,Windows 是claw.exe,类 Unix 是claw。debug 版本方便调试,正式用可以cargo build --release,产物在target/release/。
接下来配置模型接入。claw-code 支持多家模型切换,这里以阿里云百炼的 API Key 为例(其他兼容 Anthropic 协议的服务同理):
export DASHSCOPE_API_KEY="sk-你的key" export ANTHROPIC_MODEL="qwen/qwen3.6-plus"注意ANTHROPIC_MODEL这个变量名是 claw-code 沿用的约定,值填你要用的模型 ID。如果你用 TaoToken 作为统一 Key/API 通道,把 Base URL 指向https://taotoken.net/api,Key 换成 TaoToken 生成的即可,模型 ID 按你实际调用的填。具体接入方式参考官网说明:https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=
单次 prompt 调用:
./rust/target/debug/claw.exe --model "qwen/qwen3.6-plus" prompt "say hello" ./rust/target/debug/claw.exe --model "qwen/qwen3.6-plus" prompt "who r u?" ./rust/target/debug/claw.exe --model "qwen/qwen3.6-plus" prompt "give me a helloworld.c for learning c"直接不带参数启动就进入交互模式:
./rust/target/debug/claw.exe实测下来,Agent 启动后会先「认定自己是 Agent」而不是模型本身——它会加载系统提示、工具列表、当前工作区上下文,然后再把你的问题包装成结构化输入发给模型。这也是为什么多轮 session 之后 token 消耗明显偏高:每一轮都带着工具定义和历史上下文。理解这一点很关键,Agent 的「贵」往往不在模型本身,而在上下文管理策略。
3. 可复制配置:MCP 服务注册与 skills 目录结构
claw-code 的 MCP 服务通过 JSON 配置文件里的mcpServers字段注册。配置文件按优先级从低到高有三个位置:
- 用户级:
~/.claw.json或~/.claw/settings.json - 项目级:
<cwd>/.claw.json或<cwd>/.claw/settings.json - 本地覆盖:
<cwd>/.claw/settings.local.json
优先级高的会覆盖低的,本地覆盖适合放不进版本库的私密配置。字段说明如下:
| 字段 | 类型 | 说明 |
|---|---|---|
type | string | 传输类型:stdio/http/sse/ws/sdk/claudeai-proxy,省略时自动推断(有 url 则为 http) |
command | string | stdio 类型的可执行命令 |
args | string[] | 命令参数 |
env | object | 环境变量 |
url | string | 远程服务 URL |
headers | object | HTTP 请求头 |
headersHelper | string | 辅助脚本路径 |
toolCallTimeoutMs | number | 工具调用超时(毫秒) |
oauth | object | OAuth 配置 |
最常用的 stdio 本地进程方式,配置片段如下:
{ "mcpServers": { "my-stdio-server": { "command": "uvx", "args": ["mcp-server"], "env": { "TOKEN": "secret" }, "toolCallTimeoutMs": 30000 } } }远程 HTTP 方式:
{ "mcpServers": { "remote-http": { "type": "http", "url": "https://example.test/mcp", "headers": { "Authorization": "Bearer token" }, "headersHelper": "helper.sh", "oauth": { "clientId": "mcp-client", "callbackPort": 7777, "authServerMetadataUrl": "https://issuer.test/.well-known/oauth-authorization-server", "xaa": true } } } }SSE 和 WebSocket 方式:
{ "mcpServers": { "sse-server": { "type": "sse", "url": "https://example.test/mcp" }, "ws-server": { "type": "ws", "url": "wss://override.test/mcp", "headers": { "X-Env": "local" }, "headersHelper": "helper.sh" } } }SDK 名称方式和代理方式:
{ "mcpServers": { "sdk-server": { "type": "sdk", "name": "some-sdk-server-name" }, "proxy-server": { "type": "claudeai-proxy", "url": "https://api.anthropic.com/v2/session_ingress/shttp/mcp/123", "id": "server-id" } } }skills 则是放在工作区目录下的技能包,比如把 database-skills 下载后放进工作区,Agent 就能按 skill 里定义的规范去操作 PostgreSQL——比如强制自增主键、外键约束这些企业规范,模型本身不一定遵守,但 skill 可以约束它。skills 已经形成了社区市场(skills.sh),各家 Agent 都在复用同一批 skill,这也是为什么理解 skill 目录结构比记具体命令更重要。
4. 验证一次 MCP 工具调用:从注册到成功返回的完整链路
配置写好后,怎么确认 MCP 工具真的被 Agent 加载并调用了?最直接的办法是启动交互模式,然后问一个必须用工具才能回答的问题。假设你注册了一个提供时间查询的 MCP server,启动:
./rust/target/debug/claw.exe然后在交互里输入:
现在几点了?用你注册的工具查一下如果 MCP 注册成功,Agent 会先输出一段工具调用意图,类似「调用 get_current_time」,然后返回工具结果,再基于结果组织自然语言回答。你会在终端看到工具名、参数、返回内容这几段。如果只看到模型直接编了个时间,说明工具没被加载——回到配置文件检查mcpServers字段名是否拼错、JSON 是否合法、command路径是否可执行。
验证 HTTP 类型 MCP 时,可以用一个公开的 echo 服务,配置里type设为http,url指向服务地址,然后问「用 echo 工具回显 hello」。成功的话返回里会带hello。这一步能跑通,说明传输层、鉴权头、超时设置都没问题。
再验证 skills:把 database-skills 放进工作区,然后让 Agent「创建一个用户表,按 skill 规范来」。观察它生成的 SQL 是否包含 skill 里定义的主键、外键、命名规范。如果生成结果符合 skill 约束,说明 skill 被正确加载;如果还是模型自由发挥,检查 skill 目录层级是否和工作区约定一致。
这一步的产出是一个可复现的验证动作:注册 → 启动 → 提问 → 观察工具调用 → 核对结果。任何一环断了,都能定位到具体配置项。
5. 常见报错排查:401、local proxy failed、reading choices、OAuth 失败
接入过程中最容易撞上的几类报错,逐个说。
401 Unauthorized:Key 无效或没带上。检查DASHSCOPE_API_KEY或对应环境变量是否 export 成功,echo $DASHSCOPE_API_KEY看有没有值。如果用 TaoToken,确认 Key 是从 console 生成的、没被撤销,Base URL 指向https://taotoken.net/api。另外注意有些服务要求 Key 放在Authorization: Bearer头里,配置 MCP 的headers时要写全。
local proxy failed:通常是本地 MCP 子进程启动失败。原因可能是command指向的可执行文件不在 PATH 里,或者args里的包没装。先用command+args在终端手动跑一遍,能跑通再写进配置。uvx类命令要确认 uv 已安装。
reading choices 报错:多出现在模型返回格式不符合预期时,比如流式响应被截断、返回体不是合法 JSON。检查模型 ID 是否拼对、该模型是否支持 claw-code 用的调用协议。换一个已知可用的模型 ID 对比测试,能快速判断是模型侧还是配置侧问题。
OAuth 失败:HTTP 类型 MCP 配了oauth字段时,callbackPort被占用或authServerMetadataUrl不可达都会失败。换个端口,确认 metadata URL 能 curl 通。headersHelper脚本要有可执行权限,路径用绝对路径更稳。
排查顺序建议:先确认 Key 和 Base URL → 再确认 MCP 配置 JSON 合法 → 再手动跑 MCP 命令 → 最后看模型返回。大部分问题在前两步就能解决。
6. 把 claw-code 接进你的工作流:从模型对话到长期编码
跑通之后,claw-code 能做的事就比较清楚了:它是一个可改的 Agent 骨架,模型接入、工具注册、技能约束、会话管理都在你能碰到的位置。想快速验证模型对话效果,可以用模型对话入口直接试;想把 Agent 用在长期编码或自动化任务上,Coding Plan 更适合持续跑;需要管理 Key 和查看调用情况,去 API Keys 和接入文档。
- 模型对话:https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=
- Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=
- API Keys:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=
- 接入文档:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=
如果你用 Claude Code 或类似工具,把 Base URL、Key、Model ID 三件套配好就能接上;claw-code 这边同理,ANTHROPIC_MODEL填模型 ID,Key 走环境变量,Base URL 按文档指向对应端点。剩下的就是按你的业务写 skill、注册 MCP 工具,让 Agent 从「能聊天」变成「能干活」。