Claude Code Agent

0 阅读6分钟

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层,表现层、编排层、能力层、基础设施层:

image.png

(一)表现层:CLI 与终端交互

Claude Code 首先是一个命令行产品。表现层负责:

  • 解析用户输入
  • 渲染对话、工具调用、进度、错误
  • 处理 REPL、快捷键、中断、状态展示

(二)编排层:Agent Loop 是心脏

Claude Code 最核心的是一个循环:

用户输入
  -> messages[]
  -> 调用模型
  -> 模型返回文本或 tool_use
  -> 如果有 tool_use,执行工具
  -> 把 tool_result 追加回 messages[]
  -> 再次调用模型
  -> 直到模型停止调用工具

也就是说,Claude Code 不是由外部代码替模型规划每一步,而是让模型通过 tool_use 驱动循环。Harness 只是负责执行、回填、约束和维护上下文。

(三)能力层

  1. 工具系统:工具系统把文件系统、Shell、搜索、编辑、浏览器、任务等能力暴露给模型。Claude Code对工具系统做了包括输入 schema 校验、权限检查、工具并发控制、输出截断和摘要。
  2. 技能Skill:Claude Code 不会把所有知识一次性塞进 system prompt,而是按需加载。Skill系统可以构建不同能力,模型可以根据skill描述按需加载。
  3. 子智能体:当任务变大时,主 Agent 可以派生子 Agent。子 Agent 的关键不是“另一个模型”,而是:独立 messages、独立任务目标、完成后只返回摘要给主 Agent。通过子agent完成细节任务,主agent关注核心流程。

(四)基础设施层

  1. 记忆:比如 CLAUDE.md,保存项目规范、用户偏好、长期约定。
  2. 上下文管理:Agent Loop 会不断把消息、工具结果、错误日志、文件内容塞进 messages[],所以迟早会撞上上下文窗口限制。因此 Claude Code 有上下文压缩系统:对超长工具结果做截断或清理、对旧工具输出做 microcompact、上下文接近上限时 auto-compact等。
  3. 状态、日志与恢复:记录很多运行状态,当前会话、消息历史、工具调用历史、后台任务状态、子 Agent 状态、错误日志等。
  4. 权限:文件路径是否越界、是否需要用户审批、工具是否允许联网等。

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 思想的体现:换工具和环境,就能把同一个模型放到不同领域里工作。