Skip to content

Claude Code 工作原理

Claude Code 是一个在终端中运行的 AI 代理。它通过"收集上下文→采取行动→验证结果"的代理循环工作:Claude 调用工具读取代码、编辑文件、运行命令,每一步的结果都反馈到下一步决策中,形成完整的自主行动链条。本文介绍代理循环的工作机制、五类内置工具、会话管理(恢复/分叉/检查点)、上下文窗口管理,以及如何通过 Skills、MCP、Hooks 和子代理扩展能力。

Claude Code 是一个在终端中运行的 AI 代理。它不只是编程,还能帮你完成一切可以在命令行完成的事:写文档、运行构建、搜索文件、查资料等。本文介绍核心架构、内置能力,以及高效使用技巧。逐步操作示例见常用工作流;Skills、MCP、Hooks 等扩展功能见扩展 Claude Code


代理循环

给 Claude 一个任务时,它会经历三个阶段:收集上下文采取行动验证结果。这三个阶段相互融合——Claude 全程调用工具,无论是搜索文件理解代码、编辑文件实施变更,还是运行测试验证结果。

循环会根据任务自适应。询问代码库的问题可能只需要收集上下文;修复 Bug 会循环经历三个阶段;重构可能涉及大量验证。Claude 根据上一步的结果决定下一步做什么,能把几十个操作串联在一起并在途中自我纠正。

你始终是循环的一部分,可以随时打断来指引 Claude 换个方向、补充更多上下文或尝试不同方案。Claude 自主工作,但对你的输入保持响应。

代理循环由两个组件驱动:模型(负责推理)和工具(负责行动)。Claude Code 是围绕 Claude 的代理框架:它提供工具、上下文管理和执行环境,将语言模型变成能干活的编程代理。

模型

Claude Code 使用 Claude 模型理解你的代码并推理任务。可以读取任何语言的代码、理解组件之间的关联,并找出为达成目标需要做哪些改动。对于复杂任务,它会分解成步骤执行,并根据过程中的发现调整方案。

多种模型各有权衡:Sonnet 处理大多数编程任务表现良好;Opus 在复杂架构决策上推理更深。用 /model 在会话中切换,或用 claude --model <name> 启动时指定。

工具

工具让 Claude Code 有了代理能力。没有工具,Claude 只能输出文字;有了工具,Claude 才能行动:读取代码、编辑文件、运行命令、搜索网络、与外部服务交互。每次工具调用返回的信息都会反馈到循环中,影响 Claude 的下一步决策。

内置工具分五大类:

类别Claude 能做什么
文件操作读取文件、编辑代码、创建新文件、重命名和重组
搜索按模式查找文件、用正则搜索内容、探索代码库
执行运行 shell 命令、启动服务器、运行测试、使用 git
网络搜索网络、获取文档、查找错误信息
代码智能查看类型错误和警告、跳转定义、查找引用(需要代码智能插件

完整工具列表见 Claude Code 工具参考

Claude 根据你的提示和过程中的发现来选择使用哪些工具。当你说"修复失败的测试"时,Claude 可能会:

  1. 运行测试套件看哪些在失败
  2. 读取错误输出
  3. 搜索相关源文件
  4. 读取这些文件理解代码
  5. 编辑文件修复问题
  6. 再次运行测试验证

扩展基础能力:内置工具是基础。你可以用 skills 扩展 Claude 能了解的内容,用 MCP 连接外部服务,用 hooks 自动化工作流,用 subagents 将任务委托给独立代理。参见扩展 Claude Code


Claude 能访问什么

在目录中运行 claude 后,Claude Code 可以访问:

  • 你的项目:目录和子目录中的文件,以及获得你授权的其他位置的文件
  • 你的终端:你能运行的任何命令——构建工具、git、包管理器、系统工具、脚本
  • 你的 git 状态:当前分支、未提交的改动、最近的提交历史
  • CLAUDE.md:你存放项目特定指令、规范和上下文的 Markdown 文件,每次会话都会读取
  • 自动记忆:Claude 工作时自动保存的学习成果,如项目模式和你的偏好。MEMORY.md 的前 200 行或 25KB(取小值)在每次会话开始时加载
  • 配置的扩展MCP 服务器skillssubagentsClaude in Chrome

因为 Claude 能看到整个项目,所以可以跨项目工作。当你说"修复认证 Bug"时,它会搜索相关文件、读取多个文件理解上下文、跨文件协调编辑、运行测试验证修复,如有需要还会提交变更。这和只能看当前文件的内联代码助手有本质区别。


执行环境与使用界面

上述代理循环、工具和能力在所有地方都相同,变化的是代码在哪里执行以及你如何与之交互。

执行环境

Claude Code 在三种环境中运行,各有不同权衡:

环境代码运行位置适用场景
本地你的机器默认。完整访问文件、工具和环境
云端Anthropic 管理的虚拟机卸载任务、处理本地没有的仓库
远程控制你的机器,由浏览器控制用 Web UI 同时保持一切在本地

使用界面

Claude Code 可通过终端、桌面应用IDE 扩展claude.ai/code远程控制SlackCI/CD 流水线使用。界面决定你如何看到和操作 Claude,但底层代理循环完全相同。


会话管理

Claude Code 在工作时将对话本地保存。每条消息、工具调用和结果都写入 ~/.claude/projects/ 下的纯文本 JSONL 文件,支持回退恢复和分叉会话。Claude 编辑文件前也会对受影响的文件打快照,必要时可以回滚。

会话是独立的。每个新会话从全新的上下文窗口开始,没有前一次会话的对话历史。Claude 可以通过自动记忆跨会话保持学习成果,你也可以在 CLAUDE.md 中添加持久性指令。

跨分支工作

每次 Claude Code 对话是一个绑定到当前目录的会话。恢复时只看到来自该目录的会话。Claude 看到当前分支的文件——切换分支后,Claude 看到新分支的文件,但对话历史不变,Claude 仍记得之前讨论的内容。

由于会话绑定到目录,可以使用 git worktrees 来并行运行多个 Claude 会话,每个分支有独立的目录。

恢复或分叉会话

claude --continueclaude --resume 恢复会话时,从同一 session ID 继续工作,新消息追加到已有对话中,完整的对话历史被恢复(但会话级别的权限不会恢复,需要重新授权)。

要从某个时间点分支出去尝试不同方案而不影响原始会话,使用 --fork-session

bash
claude --continue --fork-session

这会创建一个新的 session ID,同时保留到分叉点的对话历史,原始会话不受影响。

多终端同一会话:如果在多个终端中恢复同一会话,两个终端都向同一个会话文件写入,消息会交错排列。不会损坏数据,但对话会变得混乱。对于需要并行工作的场景,用 --fork-session 给每个终端独立的会话。

上下文窗口

Claude 的上下文窗口保存着对话历史、文件内容、命令输出、CLAUDE.md、自动记忆、加载的 skills 和系统指令。随着工作推进,上下文会填满。Claude 会自动压缩,但对话早期的指令可能丢失。把持久规则写进 CLAUDE.md,用 /context 查看上下文使用情况。详见探索上下文窗口

上下文填满时:Claude Code 自动管理上下文接近限制时的情况——先清除较旧的工具输出,再按需要压缩对话。你的请求和关键代码片段会被保留;对话早期的详细指令可能丢失。通过在 CLAUDE.md 中添加"压缩指令"部分,或运行带焦点的 /compact(如 /compact focus on the API changes),可以控制压缩时保留哪些内容。


通过检查点和权限保持安全

Claude 有两种安全机制:检查点允许撤销文件改动,权限控制 Claude 无需征询即可执行的操作范围。

通过检查点撤销改动

每次文件编辑都可以回退。Claude 编辑任何文件前,会先打快照。出了问题时,按两次 Esc 回退到之前的状态,或让 Claude 帮你撤销。

检查点是会话本地的,独立于 git。只覆盖文件改动。影响远程系统(数据库、API、部署)的操作无法通过检查点回退,这就是为什么 Claude 在运行有外部副作用的命令前会先询问你。

控制 Claude 能做什么

Shift+Tab 循环切换权限模式:

  • 默认:文件编辑和 shell 命令都会先征询
  • 自动接受编辑:文件编辑和常见文件系统命令(mkdirmv 等)无需征询,其他命令仍需确认
  • 计划模式:只使用只读工具,先创建计划,你批准后再执行
  • 自动模式:Claude 用后台安全检查评估所有操作(研究预览阶段)

也可以在 .claude/settings.json 中允许特定命令,让 Claude 不再每次都询问——适合 npm testgit status 等可信命令。详见权限配置


高效使用 Claude Code

随时可以寻求帮助

直接问 Claude Code 如何使用它:"怎么设置 hooks?"、"CLAUDE.md 最好怎么组织?"。内置命令也提供引导:

  • /init:为项目创建 CLAUDE.md
  • /agents:配置自定义子代理
  • /doctor:诊断安装问题

这是一场对话

不需要完美的提示词。先说你想要什么,然后迭代:

Fix the login bug

[Claude 调查,尝试某个方案]

That's not quite right. The issue is in the session handling.

[Claude 调整方案]

第一次不对时,不用重来,直接迭代。随时可以打断 Claude——直接输入你的修正并按回车,Claude 会停下来根据你的输入调整方案。

开始时越具体越好

提示词越精确,需要修正的次数越少:

The checkout flow is broken for users with expired cards.
Check src/payments/ for the issue, especially token refresh.
Write a failing test first, then fix it.

模糊的提示也可以工作,但你会花更多时间引导。像上面这样具体的提示通常第一次就能成功。

给 Claude 提供可验证的目标

当 Claude 能检验自己的工作时,表现更好。提供测试用例,粘贴期望 UI 的截图,或描述想要的输出:

Implement validateEmail. Test cases: 'user@example.com' → true,
'invalid' → false, 'user@.com' → false. Run the tests after.

先探索再实现

对于复杂问题,先用计划模式(连按两次 Shift+Tab)分析代码库:

Read src/auth/ and understand how we handle sessions.
Then create a plan for adding OAuth support.

审查计划,通过对话完善它,然后让 Claude 实现。先计划再行动的方式通常效果更好。

委托而非指挥

把 Claude 当成有能力的同事:提供背景和方向,让 Claude 搞清楚细节:

The checkout flow is broken for users with expired cards.
The relevant code is in src/payments/. Can you investigate and fix it?

不需要告诉 Claude 该读哪些文件或运行哪些命令——Claude 自己会判断。


常见问题

Q: Claude Code 和 IDE 内联代码补全有什么本质区别?

内联代码补全(如 GitHub Copilot)只能看到当前打开的文件,主要用于代码补全。Claude Code 能看到整个项目,可以跨多个文件读写、运行命令、使用 git,完成端到端的任务——从理解问题到提交修复。

Q: 上下文窗口满了怎么办?会丢失重要内容吗?

Claude Code 会自动压缩上下文,优先保留你的请求和关键代码片段。重要的项目规范和说明应该写在 CLAUDE.md 中,而不只依赖对话历史。运行 /context 查看当前上下文使用情况,用 /compact focus on <重点内容> 控制压缩时保留的内容。

Q: 每次新会话 Claude 都会忘记之前的内容吗?

是的,每次新会话从全新的上下文开始。但 Claude 可以通过自动记忆(写入 MEMORY.md)跨会话保存学习成果,你也可以在 CLAUDE.md 中写入每次都需要的持久指令。对于正在进行中的任务,用 claude --continue 继续最近的会话。