Claude Code
架构设计
- 引擎层。负责调度,不包含任何逻辑实际操作,只做三件事:
1、拼prompt
2、调用tools
3、决策是继续循环还是结束对话 - 工具层。统一放置所有的tools,同时定义三个安全属性:这个工具是只读的还是会改东西的?它是否具有破坏性需要额外确认?它能不能和其他工具同时执行?
- 服务层。包括三样东西:调大模型 API(不管是谁要调,主循环也好、子 Agent 也好,都走这一层)、上下文压缩(后面会详细讲的五步压缩策略)、MCP 协议(和外部工具服务器通信的标准接口)
- 安全和治理层。权限系统决定哪些操作需要用户确认、哪些可以自动执行;Hook 系统允许在工具执行前后插入自定义行为(比如「每次 git push 前自动跑 lint」);Bash 安全模块会对 Shell 命令做语法级别的分析,检测命令注入、路径逃逸等危险模式,而不是简单地用正则匹配关键词。
Agent工作模式
Tool-Use Loop
- 节省了原本React中的thought步骤,通过模型直接选择输出仍需要继续调用的工具还是直接回答
优化点:减少上下文消耗 - API 原生支持 tool_use。 Claude 的 API 原生支持工具调用,模型可以直接返回 tool_use 类型的响应,不需要用正则表达式从文本中提取「Action」。这消除了 ReAct 的格式解析问题,应用层代码变得极其简洁。
- Tool-Use Loop 用模型的 end_turn 信号作为终止条件
Plan Mode
通过两阶段工作流区分:先规划、再执行。
架构不变,通过切换模式更改使用工具的范围,输出计划。然后通过用户确认进行更改
prompt
-角色定义和安全红线
- 行为准则
- 操作安全
1
2
3
4
5
6
7
8
9
10仔细考虑操作的可逆性(reversibility)和影响范围(blast radius)。
一般来说,你可以自由执行本地的、可逆的操作,比如编辑文件或
运行测试。但对于难以撤销、影响共享系统或有风险的操作,
请先和用户确认后再执行。
需要用户确认的高风险操作示例:
- 破坏性操作:删除文件/分支、删表、rm -rf
- 难以逆转的操作:force-push、git reset --hard、修改已发布的 commit
- 对他人可见的操作:推送代码、创建/关闭 PR、发送消息
- 上传到第三方工具:内容可能被缓存或索引,即使删除也无法撤回
记忆系统
四类型分类
1 | export const MEMORY_TYPES = [ |
用户画像
目的:这类记忆让 Agent 的回答因人而异
feedback
记住用户说过「不要做什么」和「做得好继续保持」。这类记忆的关键在于,它不仅记规则本身,还要求记录 Why(为什么) 和 How to apply(怎么应用)
project
记住正在发生什么」,谁在做什么、截止日期是什么、有什么重要决策。这类记忆有一个特殊要求:必须把相对日期转成绝对日期。用户说「周四之前冻结合并」,Agent 要存成「2026-03-05 之前冻结合并」,因为「周四」过几天就没意义了,但「2026-03-05」永远准确。
reference 外部指针
记的是「去哪找什么信息」,Bug 在 Linear 的哪个项目里追踪、Grafana 看板的地址是什么、Slack 的哪个频道能问到相关的人。这类记忆的价值在于,Agent 不需要知道外部系统的具体内容,只需要知道去哪里找。
排除清单
可以从当前代码推导出来的信息,一律不存。包括git历史、git最近的改动、Claude.md、项目中的文件、