claude Code 和 CodeX 是当前最火的 Code Agent,两者通过Harness控制,减少其犯错,提高鲁棒性和安全性,进而增强LLM在软件工程等任务上的能力。
本节拆解一下Cluade Code的设计理念,学习一下最先进Agent架构是如何设计。
Claude Code 的核心不是“写死一个工作流”,而是给模型搭一个 Harness:循环、工具、上下文、记忆、权限、子智能体和外部协议,让模型自己决定下一步行动。
Claude Code = Claude 模型 + 一个面向软件工程的高质量 Harness。
Harness
Harness 直译是“挽具、马具、安全带、线束”,在 Agent 语境里可以理解成:
把模型接到真实世界、并让它安全工作的运行框架。
模型本身会推理、会写代码、会决定下一步。但它不能天然读你的文件、跑测试、调用数据库、记住项目规范、控制权限。Harness 就是包在模型外面的那一整套工程系统。
Agent 产品 = 模型 + Harness
Harness = 工具 + 上下文 + 记忆 + 权限 + 执行环境 + 反馈循环
可以对 LLM-only 和 LLM+Harness 做如下对比:
LLM only
调用 LLM -> 得到回答
调用 LLM
-> LLM 请求工具
-> 校验参数
-> 检查权限
-> 执行工具
-> 截断/摘要结果
-> 回填给 LLM
-> 继续循环
-> 直到任务完成
架构
Claude Code 分为4层,表现层、编排层、能力层、基础设施层:
(一)表现层:CLI 与终端交互
Claude Code 首先是一个命令行产品。表现层负责:
- 解析用户输入
- 渲染对话、工具调用、进度、错误
- 处理 REPL、快捷键、中断、状态展示
(二)编排层:Agent Loop 是心脏
Claude Code 最核心的是一个循环:
用户输入
-> messages[]
-> 调用模型
-> 模型返回文本或 tool_use
-> 如果有 tool_use,执行工具
-> 把 tool_result 追加回 messages[]
-> 再次调用模型
-> 直到模型停止调用工具
也就是说,Claude Code 不是由外部代码替模型规划每一步,而是让模型通过 tool_use 驱动循环。Harness 只是负责执行、回填、约束和维护上下文。
(三)能力层
- 工具系统:工具系统把文件系统、Shell、搜索、编辑、浏览器、任务等能力暴露给模型。Claude Code对工具系统做了包括输入 schema 校验、权限检查、工具并发控制、输出截断和摘要。
- 技能Skill:Claude Code 不会把所有知识一次性塞进 system prompt,而是按需加载。Skill系统可以构建不同能力,模型可以根据skill描述按需加载。
- 子智能体:当任务变大时,主 Agent 可以派生子 Agent。子 Agent 的关键不是“另一个模型”,而是:独立 messages、独立任务目标、完成后只返回摘要给主 Agent。通过子agent完成细节任务,主agent关注核心流程。
(四)基础设施层
- 记忆:比如 CLAUDE.md,保存项目规范、用户偏好、长期约定。
- 上下文管理:Agent Loop 会不断把消息、工具结果、错误日志、文件内容塞进 messages[],所以迟早会撞上上下文窗口限制。因此 Claude Code 有上下文压缩系统:对超长工具结果做截断或清理、对旧工具输出做 microcompact、上下文接近上限时 auto-compact等。
- 状态、日志与恢复:记录很多运行状态,当前会话、消息历史、工具调用历史、后台任务状态、子 Agent 状态、错误日志等。
- 权限:文件路径是否越界、是否需要用户审批、工具是否允许联网等。
Claude Code设计理念
1. Claude Code 的核心哲学:少编排,多授权
很多 Agent 框架喜欢写复杂流程:
先分析 -> 再规划 -> 再选工具 -> 再执行 -> 再总结
Claude Code 更像是:
把工具、上下文、权限边界给模型
让模型自己决定下一步
也就是说,它不是用外部程序替模型思考,而是相信模型本身的推理能力。工程代码主要负责提供行动空间和安全护栏。
2. 它最重要的抽象是 messages[]
Claude Code 的大部分状态都可以理解为不断增长的消息数组:
用户输入
助手思考/回答
工具调用
工具结果
系统提醒
压缩摘要
任务状态
模型每一轮都基于这些消息继续推理。所以 Claude Code 的执行不是传统程序里的“流程图驱动”,而是“上下文驱动”。
这点很关键:messages[] 就是 Agent 的短期工作记忆。
3. 工具调用是 Claude Code 的行动接口
Claude Code 不是直接让模型操作系统,而是通过工具抽象:
Read
Write
Edit
Bash
Glob
Grep
TodoWrite
Task/Subagent
MCP tools
每个工具都像一个受控 API。模型只提出工具调用,真正执行由 Harness 完成。所以工具系统是 Claude Code 最核心的生产能力之一:工具越好,模型能做的事越稳定。
4. TodoWrite 不是小功能,是工作流支架
TodoWrite 看起来只是任务列表,但它实际解决的是 Agent 长任务里的一个大问题:模型容易在长任务中失去目标。
Todo 系统让模型可以:
- 把大任务拆成小步骤
- 标记当前正在做什么
- 完成后更新进度
- 在上下文变长时仍保留任务结构
- 给用户一个可观察的执行轨迹
所以 TodoWrite 不是“待办事项 UI”,而是 Claude Code 的轻量计划系统,即轻量级的Planer。
5. 子 Agent 的意义是隔离噪声
主 Agent 如果要探索大量文件、阅读日志、尝试很多方向,主上下文会很快变脏。子 Agent 可以去做脏活:
主 Agent:请调查认证模块为什么失败
子 Agent:读取文件、跑搜索、看日志、总结原因
主 Agent:只接收最终摘要
这样主 Agent 保持清晰,子 Agent 承担上下文消耗。
这就是所谓 Fork 模式:复制一份任务上下文,独立工作,最后把结果汇总回来。
6. 上下文压缩决定 Agent 能不能跑长任务
短 demo 不需要上下文管理,生产 Agent 一定需要。Claude Code 需要截断、摘要、压缩、transcript 持久化。否则 Agent 很快会被自己的历史淹没。
7. 权限系统是 Claude Code 产品化的关键
Claude Code 能跑命令、改文件,这意味着它天然危险。所以它需要权限模式,例如只读操作自动放行、写文件可能需要确认、外部系统调用需要授权等。
这让 Claude Code 从“聪明脚本”变成“可被信任的工具”。
8. MCP 让 Claude Code 从代码工具变成通用工作台
MCP 的价值是扩展边界。
没有 MCP,Claude Code 主要操作本地代码库。
有了 MCP,它可以接入:
GitHub
数据库
浏览器
Slack
Notion
监控系统
工单系统
这样 Claude Code 的模型不变,但行动空间扩大了。
这也是 Harness 思想的体现:换工具和环境,就能把同一个模型放到不同领域里工作。