Claude Code 如何工作
了解代理循环、内置工具以及 Claude Code 如何与您的项目交互。
Claude Code 是一个在您的终端中运行的代理助手。虽然它在编码方面表现出色,但它可以帮助您完成从命令行可以做的任何事情:编写文档、运行构建、搜索文件、研究主题等。
代理循环
当您给 Claude 一个任务时,它会经历三个阶段:收集上下文、采取行动和验证结果。这些阶段相互融合。Claude 始终使用工具,无论是搜索文件以了解您的代码、编辑以进行更改,还是运行测试以检查其工作。
循环会根据您的要求进行调整。关于您代码库的问题可能只需要收集上下文。错误修复会循环通过所有三个阶段多次。重构可能涉及广泛的验证。Claude 根据从前一步学到的内容决定每一步需要什么,将数十个操作链接在一起并沿途进行纠正。
您也是这个循环的一部分。您可以在任何时刻中断以引导 Claude 朝不同的方向发展、提供额外的上下文或要求它尝试不同的方法。Claude 自主工作但对您的输入保持响应。
代理循环由两个组件驱动:模型进行推理和工具采取行动。Claude Code 充当 Claude 周围的代理框架:它提供工具、上下文管理和执行环境,将语言模型转变为能够进行编码的代理。
模型
Claude Code 使用 Claude 模型来理解您的代码并推理任务。Claude 可以读取任何语言的代码、理解组件如何连接,以及找出需要改变什么来实现您的目标。对于复杂的任务,它将工作分解为步骤、执行它们,并根据学到的内容进行调整。
多个模型可用,具有不同的权衡。Sonnet 可以很好地处理大多数编码任务。Opus 为复杂的架构决策提供更强的推理能力。在会话期间使用 /model 切换或使用 claude --model <名称> 启动。
当本指南说「Claude 选择」或「Claude 决定」时,是模型在进行推理。
工具
工具是使 Claude Code 成为代理的原因。没有工具,Claude 只能用文本回应。有了工具,Claude 可以采取行动:读取您的代码、编辑文件、运行命令、搜索网络并与外部服务交互。每个工具使用都会返回信息,反馈到循环中,告知 Claude 的下一个决定。
内置工具通常分为五类:
| 类别 | Claude 可以做什么 |
|---|---|
| 文件操作 | 读取文件、编辑代码、创建新文件、重命名和重新组织 |
| 搜索 | 按模式查找文件、使用正则表达式搜索内容、探索代码库 |
| 执行 | 运行 shell 命令、启动服务器、运行测试、使用 git |
| 网络 | 搜索网络、获取文档、查找错误消息 |
| 代码智能 | 编辑后查看类型错误和警告、跳转到定义、查找引用(需要代码智能插件) |
Claude 根据您的提示和沿途学到的内容选择使用哪些工具。当您说「修复失败的测试」时,Claude 可能会运行测试套件、读取错误、搜索源文件、编辑修复问题,然后再次运行测试验证。
您可以使用 skills、MCP、hooks 和 subagents 在核心代理循环之上扩展能力。
Claude 可以访问什么
当您在目录中运行 claude 时,Claude Code 可以访问:
- 您的项目 — 目录及子目录中的文件,以及经您许可的其他位置文件
- 您的终端 — 您能运行的任何命令:构建工具、git、包管理器、系统实用程序、脚本
- 您的 git 状态 — 当前分支、未提交的更改和最近的提交历史
- 您的 CLAUDE.md — 每个会话加载的项目说明、约定和上下文
- 自动记忆 — Claude 自动保存的学习内容;
MEMORY.md的前 200 行或 25KB 在会话开始时加载 - 您配置的扩展 — MCP 服务器、skills、subagents、Claude in Chrome 浏览器交互
因为 Claude 看到整个项目,它可以跨项目工作:搜索、阅读多个文件、协调编辑、运行测试,并在您要求时提交。
环境和界面
执行环境
| 环境 | 代码运行位置 | 用例 |
|---|---|---|
| 本地 | 您的机器 | 默认。完全访问文件、工具和环境 |
| 云 | Anthropic 管理的虚拟机 | 卸载任务、处理本地没有的仓库 |
| 远程控制 | 您的机器,从浏览器控制 | 使用 Web UI 同时保持一切本地 |
代理循环、工具和能力在各处相同;变化的是代码执行位置及交互方式。
使用会话
Claude Code 在本地保存对话。每条消息、工具使用和结果写入 ~/.claude/projects/。在代码更改前,Claude 会对受影响文件快照以便恢复。
会话相互独立。每个新会话以新的上下文窗口开始。Claude 可通过自动记忆跨会话保持学习;在 CLAUDE.md 中添加持久说明。
使用 claude --continue 或 claude --resume 恢复。使用 --fork-session 或 /branch 将历史复制到新会话 ID。
上下文窗口
Claude 的上下文窗口保存对话历史、文件内容、命令输出、CLAUDE.md、自动记忆、已加载 skills 和系统说明。工作时上下文会填满。Claude 会自动压缩,但对话早期的说明可能丢失。将持久规则放在 CLAUDE.md 中,运行 /context 查看占用。
上下文满时,Claude 先清除较旧的工具输出,必要时再总结。持久规则应写在 CLAUDE.md 而非仅依赖对话历史。用 /compact 并指定焦点(如 /compact focus on the API changes)控制压缩后保留的内容。
对手动调用的 skill 使用 disable-model-invocation: true;长调研用 subagents,避免撑爆主会话。
使用检查点和权限保持安全
使用检查点撤销更改
每个文件编辑都可逆。Claude 编辑前会快照当前内容。连按两次 Esc 回退,或要求 Claude 撤销。检查点限于当前会话且仅涵盖文件更改。
控制 Claude 可以做什么
按 Shift+Tab 循环权限模式:
- 默认 — 文件编辑和 shell 命令前询问
- 自动接受编辑 — 编辑文件及
mkdir、mv等常见文件系统命令时不询问 - 计划模式 — 仅只读工具;执行前先出计划
- 自动模式 — 后台安全检查后评估操作(研究预览)
在 .claude/settings.json 中允许特定命令以免每次询问。参见 权限配置 与 权限模式。
有效使用 Claude Code
向 Claude Code 寻求帮助
可问「如何设置 hooks?」或「如何构建 CLAUDE.md?」。内置命令:/init、/agents、/doctor。
这是一个对话
从目标开始再细化。第一次不对就迭代,无需重来。
中断和引导: 按 Esc 立即停止。输入纠正并按 Enter 可在不停止当前工具的情况下发送;当前操作完成后 Claude 会读取并调整。
预先具体
指明文件、约束与示例模式:
结账流程对于持有过期卡的用户来说已损坏。
检查 src/payments/ 中的问题,尤其是令牌刷新。
首先编写一个失败的测试,然后修复它。给 Claude 验收依据
提供测试用例、预期 UI 截图或明确输出。视觉工作可贴截图要求对照实现。
在实现之前探索
先用计划模式(连按两次 Shift+Tab)分析代码库,审查计划后再实现。
委派,不要指示
给出上下文与方向,让 Claude 自行选择文件与命令:
结账流程对于持有过期卡的用户来说已损坏。
相关代码在 src/payments/ 中。您可以调查并修复它吗?