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-codeRust 工具链准备与首次 prompt 调用claw-code 的技术栈是 Rust PythonRust 负责核心运行时和工具调度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_KEYsk-你的key export ANTHROPIC_MODELqwen/qwen3.6-plus注意ANTHROPIC_MODEL这个变量名是 claw-code 沿用的约定值填你要用的模型 ID。如果你用 TaoToken 作为统一 Key/API 通道把 Base URL 指向https://taotoken.net/apiKey 换成 TaoToken 生成的即可模型 ID 按你实际调用的填。具体接入方式参考官网说明https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_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优先级高的会覆盖低的本地覆盖适合放不进版本库的私密配置。字段说明如下字段类型说明typestring传输类型stdio/http/sse/ws/sdk/claudeai-proxy省略时自动推断有 url 则为 httpcommandstringstdio 类型的可执行命令argsstring[]命令参数envobject环境变量urlstring远程服务 URLheadersobjectHTTP 请求头headersHelperstring辅助脚本路径toolCallTimeoutMsnumber工具调用超时毫秒oauthobjectOAuth 配置最常用的 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设为httpurl指向服务地址然后问「用 echo 工具回显 hello」。成功的话返回里会带hello。这一步能跑通说明传输层、鉴权头、超时设置都没问题。再验证 skills把 database-skills 放进工作区然后让 Agent「创建一个用户表按 skill 规范来」。观察它生成的 SQL 是否包含 skill 里定义的主键、外键、命名规范。如果生成结果符合 skill 约束说明 skill 被正确加载如果还是模型自由发挥检查 skill 目录层级是否和工作区约定一致。这一步的产出是一个可复现的验证动作注册 → 启动 → 提问 → 观察工具调用 → 核对结果。任何一环断了都能定位到具体配置项。5. 常见报错排查401、local proxy failed、reading choices、OAuth 失败接入过程中最容易撞上的几类报错逐个说。401 UnauthorizedKey 无效或没带上。检查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里的包没装。先用commandargs在终端手动跑一遍能跑通再写进配置。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_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentCoding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentAPI Keyshttps://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content如果你用 Claude Code 或类似工具把 Base URL、Key、Model ID 三件套配好就能接上claw-code 这边同理ANTHROPIC_MODEL填模型 IDKey 走环境变量Base URL 按文档指向对应端点。剩下的就是按你的业务写 skill、注册 MCP 工具让 Agent 从「能聊天」变成「能干活」。