Appearance
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 可能会:
- 运行测试套件看哪些在失败
- 读取错误输出
- 搜索相关源文件
- 读取这些文件理解代码
- 编辑文件修复问题
- 再次运行测试验证
扩展基础能力:内置工具是基础。你可以用 skills 扩展 Claude 能了解的内容,用 MCP 连接外部服务,用 hooks 自动化工作流,用 subagents 将任务委托给独立代理。参见扩展 Claude Code。
Claude 能访问什么
在目录中运行 claude 后,Claude Code 可以访问:
- 你的项目:目录和子目录中的文件,以及获得你授权的其他位置的文件
- 你的终端:你能运行的任何命令——构建工具、git、包管理器、系统工具、脚本
- 你的 git 状态:当前分支、未提交的改动、最近的提交历史
- CLAUDE.md:你存放项目特定指令、规范和上下文的 Markdown 文件,每次会话都会读取
- 自动记忆:Claude 工作时自动保存的学习成果,如项目模式和你的偏好。MEMORY.md 的前 200 行或 25KB(取小值)在每次会话开始时加载
- 配置的扩展:MCP 服务器、skills、subagents 和 Claude in Chrome
因为 Claude 能看到整个项目,所以可以跨项目工作。当你说"修复认证 Bug"时,它会搜索相关文件、读取多个文件理解上下文、跨文件协调编辑、运行测试验证修复,如有需要还会提交变更。这和只能看当前文件的内联代码助手有本质区别。
执行环境与使用界面
上述代理循环、工具和能力在所有地方都相同,变化的是代码在哪里执行以及你如何与之交互。
执行环境
Claude Code 在三种环境中运行,各有不同权衡:
| 环境 | 代码运行位置 | 适用场景 |
|---|---|---|
| 本地 | 你的机器 | 默认。完整访问文件、工具和环境 |
| 云端 | Anthropic 管理的虚拟机 | 卸载任务、处理本地没有的仓库 |
| 远程控制 | 你的机器,由浏览器控制 | 用 Web UI 同时保持一切在本地 |
使用界面
Claude Code 可通过终端、桌面应用、IDE 扩展、claude.ai/code、远程控制、Slack 和 CI/CD 流水线使用。界面决定你如何看到和操作 Claude,但底层代理循环完全相同。
会话管理
Claude Code 在工作时将对话本地保存。每条消息、工具调用和结果都写入 ~/.claude/projects/ 下的纯文本 JSONL 文件,支持回退、恢复和分叉会话。Claude 编辑文件前也会对受影响的文件打快照,必要时可以回滚。
会话是独立的。每个新会话从全新的上下文窗口开始,没有前一次会话的对话历史。Claude 可以通过自动记忆跨会话保持学习成果,你也可以在 CLAUDE.md 中添加持久性指令。
跨分支工作
每次 Claude Code 对话是一个绑定到当前目录的会话。恢复时只看到来自该目录的会话。Claude 看到当前分支的文件——切换分支后,Claude 看到新分支的文件,但对话历史不变,Claude 仍记得之前讨论的内容。
由于会话绑定到目录,可以使用 git worktrees 来并行运行多个 Claude 会话,每个分支有独立的目录。
恢复或分叉会话
用 claude --continue 或 claude --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 命令都会先征询
- 自动接受编辑:文件编辑和常见文件系统命令(
mkdir、mv等)无需征询,其他命令仍需确认 - 计划模式:只使用只读工具,先创建计划,你批准后再执行
- 自动模式:Claude 用后台安全检查评估所有操作(研究预览阶段)
也可以在 .claude/settings.json 中允许特定命令,让 Claude 不再每次都询问——适合 npm test 或 git 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 继续最近的会话。