它到底是什么
把 Claude Code 理解成「会打字的 ChatGPT」会让你错过 90% 的它。这一章想让你换一副眼镜再往下看——先看见那个叫 agent loop 的循环,剩下的东西才都对得上。
一个常见的误会
很多人第一次看到 Claude Code,会以为它是「把 claude.ai 搬进终端」——同一个聊天,只是没有浏览器。这个直觉很自然,但不对。
claude.ai 那个聊天框,本质是一张嘴:你说话,它回话。它可以帮你写代码、解释概念、生成诗歌,但写完以后,代码是印在聊天气泡里的文本——你得自己复制、自己粘贴到编辑器、自己保存、自己运行。它不知道你项目里有什么文件,也碰不到你的磁盘。你和它之间隔着一层玻璃。
Claude Code 是一双手。它坐在你的终端里,能读你的文件、改你的文件、执行命令、看命令输出、再根据输出决定下一步做什么。它和聊天框的区别,不是「能做更多事」那么简单——是它在一个根本不同的循环里运转。
这一章剩下的内容都在讲这个循环:它是怎么构造的,为什么重要,它怎么让「AI 协助编程」从「我描述、它回答」变成了「我提目标、它干活」。
简单来说
网页版 Claude 是一个回答问题的人;Claude Code 是一个坐在你电脑前、替你动手干活的人。
那「agent」到底是什么?
「agent」这个词在 AI 圈被用得很滥,但对 Claude Code 来说,它有一个很具体的技术含义,这个概念需要展开说。
一个普通的大模型调用是一次性的:输入一段文字,吐出一段文字,结束。就像你问一个朋友「现在几点了」,他回答「三点」,对话终止。这叫 single-turn——一问一答。
一个 agent 是把模型放进一个循环里运行。每一轮,模型不只能输出文字,还能输出「我想调用某个工具」,比如「我想读 package.json」。系统执行这个工具调用、把结果塞回给模型、让模型再想一想下一步做什么。直到它说「我做完了」为止。
把这两句话拉平:
差的不是技巧,是结构。一个 agent 不是「更强的模型」,它是「模型 + 工具 + 控制循环」这三件东西组合起来的系统。模型本身没有变——Claude Code 用的 Opus、Sonnet、Haiku 和网页版是同一批。变的是它的能力——真正可以做到调用工具解决问题。
一轮到底发生了什么
把最外层的循环画出来,长这样:
┌────────────────────────────────────────────────────────┐
│ │
│ 你的请求 ──► 模型思考 ──► 想调用工具? │
│ ▲ │ │
│ │ ▼ │
│ 工具结果 ◄── 执行工具(Read/Bash/...) │
│ │ │
│ ▼ │
│ 不需要更多工具? │
│ │ │
│ ▼ │
│ 给你最终回复 │
│ │
└────────────────────────────────────────────────────────┘
这个循环叫 agent loop。Claude Code 的核心就是它。你看到终端里那些灰色的「· 调用工具 Read」「· 调用工具 Bash」的行,就是这个循环在跑。每一个灰行都是一次「模型说要做什么 → 系统去做 → 把结果带回来」的完整回合。
举个最小的具体例子
你说「帮我看看 README 里写了什么」。在后台,Claude Code 会这样走:
- 第 1 轮:模型收到你的请求,决定「我需要读 README.md」,输出一个
Read工具调用。 - 系统拿到这个调用,去磁盘上读文件,把文件内容打包回传给模型。
- 第 2 轮:模型看到 README 内容,决定「够了,可以回答了」,输出一段文字:「这个项目是一个用 Rust 写的静态站点生成器……」
- 系统看到模型没有再请求工具,把这段文字展示给你,结束本轮任务。
两轮就够了。但如果你问「帮我把 src/ 下所有 console.log 换成 logger.debug,并运行测试确认没破坏」,循环可能会走几十轮:Glob 找出所有 .ts 文件、Read 每一个、Edit 一个个改、Bash 跑 npm test、看到测试挂了再 Read + Edit 修——直到测试全绿,才说「做完了」。
这就是 agent 真正有趣的地方:它的工作量和你的指令长度脱钩了。你一句话可以触发几十次文件操作,而你只需要审查最终结果。
打个比方
想象你请了一个实习生帮你改代码。普通的 LLM 是这个实习生只能隔着玻璃窗跟你说话;agent 是你把电脑交给他,他可以真的坐下来敲键盘,但每隔几步抬头看你一眼:「这样行吗?」后面你会看到,那个「抬头看你一眼」就是权限弹窗——第二章会详细讲。
工具:它的手和眼
模型能做什么,最终取决于它手里有什么工具。Claude Code 给它挂的工具箱比较大,分几类:
| 类别 | 工具 | 它用这个工具做什么 |
|---|---|---|
| 文件 | Read / Write / Edit | 读文件、从头写文件、在已有文件里做精确替换 |
| 搜索 | Glob / Grep | 按路径模式找文件、按内容在整个项目里搜索 |
| 执行 | Bash | 跑任意 shell 命令,从 ls 到 npm test 到 docker build |
| 网络 | WebFetch / WebSearch | 抓一个 URL 的内容并总结、用关键词搜网 |
| 后台 | Monitor / run_in_background | 起长任务,不阻塞当前对话 |
| 子代理 | Agent | 召唤另一个 Claude 去独立完成一个子任务(第三章细讲) |
| 计划 | TaskCreate / TaskUpdate | 维护当前会话的待办清单 |
| 自省 | Skill | 调用一段事先写好的标准流程 |
每一轮,模型从这个工具箱里挑一个(偶尔几个并行),系统执行后把结果给它。再加上通过 MCP 接入的外部工具(GitHub、Slack、数据库),工具箱实际上是「可扩展的」——你自己项目里挂的每一个 MCP 服务器,都是给 Claude 多配一组趁手的手套。
可见和可控
一个关键设计选择:所有工具调用都对你可见。终端里的每一行灰色日志都是 Claude 当前在做什么。不像一些封闭的 AI 助手把中间过程藏起来只给你最终结果——Claude Code 相反,它在你眼皮底下工作。这不是好看,是安全:你随时能看明白它凭什么给出某个结论、是不是读了不该读的文件、跑了不该跑的命令。
配套的是权限系统。读文件、搜索是纯只读,系统会自动放行;写文件、跑 shell 命令、发网络请求这些有副作用的操作,默认每次都会弹一个小框问你是否允许。你可以逐次确认、也可以「允许这个命令模式所有后续操作」——这套机制第二章还会专门讲。
和网页版 Claude 的区别
网页版 Claude(claude.ai)也能调用一些工具——搜索、代码解释器、artifact 预览、Projects 里的文件。但它的工具箱是封闭的沙盒:它跑在 Anthropic 的服务器上,看不见你的电脑。你让它「读我项目里的 utils.ts」,它只能说「请把内容粘贴给我看看」。
Claude Code 相反——它跑在你的机器上,工具箱直接对接你的文件系统和 shell。你让它「读 utils.ts」,它真的去读了。同一个模型、同一个大脑,换了一副身体。
| 能力 | 网页版 Claude | Claude Code |
|---|---|---|
| 读你项目里的文件 | 不能,要粘贴 | 直接读 |
| 改你项目里的文件 | 生成文本你自己贴 | 写进去 + diff 给你看 |
跑命令(npm test、git diff) | 不能 | 能,看输出后决定下一步 |
| 持续循环干活 | 一问一答 | 可以跑几十轮直到完成 |
| 记住项目规范 | 每次重新解释 | CLAUDE.md 持久记忆 |
| 上下文窗口 | 200k | Opus 4.7 达 1M token |
| 控制权 | 看不到中间过程 | 每一步工具调用明文可见 |
| 代价 | 订阅即用 | 消耗配额更快,但效率更高 |
很多人问「我订阅了 Pro,为什么还要装 Claude Code?」——因为它们解决不同的问题。你在网页版写一个 essay 很方便;写一个跨十几个文件的重构,在网页版几乎不可能,在 Claude Code 是十分钟的事。
和 GitHub Copilot 的区别
如果说网页版 Claude 是一张嘴、Claude Code 是一双手,那 Copilot 是一根自动补全的手指。
Copilot 的核心工作流是:你在编辑器里敲代码,它在光标处给你接下一行或一段。它的粒度是「行」或「小片段」,触发是「你在打字」,主动权在你。它像一个提词器——聪明的提词器——但你还是主角。
Claude Code 的粒度是「任务」。你说一句「帮我把这个 API 从 REST 改成 GraphQL」,它会自己读相关文件、列出要改的地方、一个个改过去、跑测试、如果测试挂了再回头调整。整个过程你可能只打了一句话。它更像一个初级工程师——会出错的那种——你把活派给他,验收他的产出。
一张表看对比:
| 维度 | Copilot | Claude Code |
|---|---|---|
| 工作单位 | 几行代码 | 整个任务 |
| 触发方式 | 你敲键盘 | 你描述目标 |
| 上下文 | 当前文件 + 打开的文件 | 整个项目 + 跑命令的输出 |
| 会跑命令吗 | 不会 | 会,并看输出决定下一步 |
| 适合场景 | 你知道在写什么,只是想打得快 | 你知道要什么,不想自己动手 |
两者不互斥
很多人在 VS Code 里用 Copilot 做小补全,需要跨文件的活就切到 Claude Code。Anthropic 也做 VS Code 扩展把 Claude Code 嵌进 IDE——Cmd/Ctrl+Esc 召唤 Claude,在同一个窗口里完成「打字的同时有 agent 支持」。
为什么是终端,而不是 IDE 插件?
这是个值得解释的设计选择。答案有三层。
第一层,务实。终端是程序员世界的通用接口。无论你用 VS Code、Neovim、JetBrains、还是在服务器上裸 ssh,你都有终端。把能力放在终端里,意味着任何开发环境都能用——不需要为每个 IDE 写一个插件,也不受 IDE 的 API 限制。
第二层,哲学。终端天然就是一个「发号施令并看结果」的地方。你 ls、cd、git status——每一条命令都是一个小循环:输入、执行、输出、再决定。agent loop 其实是这个循环的一个更聪明的版本:不是你一条一条敲,而是模型替你敲,并且能看懂输出的含义。终端和 agent 在抽象结构上是同一种东西。
第三层,可组合性。终端里的一切都是文本流,可以被管道串联、被脚本调度、被 CI 系统调用。Claude Code 的 claude -p "..." 非交互模式——当你把它当成一个「接受 prompt 吐出 JSON」的命令行工具时——意味着你可以把它塞进 Makefile、塞进 GitHub Actions、塞进 cron。浏览器应用没法做到这一点。
Anthropic 也在做 VS Code 扩展、JetBrains 插件、桌面 App、网页版 App、iOS 移动端,但它们都是同一个 Claude Code 的外壳,里面的大脑和循环是一样的。先理解终端里的版本,其他都能套过去。
你的第一次对话,可能是这样
在项目目录里敲一个字:
claude
一个带着橙色小圆点的界面弹出来。如果是第一次跑,它会引导你登录(浏览器里授权)和选订阅档位。登完以后你就在输入框前了。随手问它:
> 这个项目是干嘛的?给我一个简要的概述。
它不会凭空编。它会:
- 调用
Read读README.md; - 调用
Glob扫一下目录结构,看看技术栈; - 可能再读
package.json或pyproject.toml; - 然后给你一个有根据的总结概览。
整个过程你能看到它每一步在做什么——工具调用是明文显示的,不是黑盒。这是 Claude Code 很重要的一个属性:它在你眼皮底下工作。你随时可以按 Ctrl+C 打断,也随时能看明白它为什么得出某个结论。
第一次翻车,大概会这样
别期待它完美。第一次用,你很可能遇到其中至少一种:
- 它改了你不想让它改的文件。——没事,第二章你会学到
/plan模式,让它先出方案再动手。 - 它把一个简单任务做得太重。——第四章讲「过度发挥」,以及怎么让它「只修这一个问题」。
- 它说的函数名不存在。——幻觉。第四章会讲为什么会发生、怎么防。
- 权限弹窗太烦。——第二章讲白名单机制,以及
/less-permission-prompts怎么一键配。
这些全是可以管理的。重要的是你从一开始就知道它们会发生——这样遇到它们的时候你不会慌、不会怀疑 AI 是不是「不好用」。它很好用,只是它像所有强大的工具一样需要会用。
稍微总结一下...
进入下一章之前
(1)Claude Code 是一个跑在你电脑上的 agent,不是聊天机器人。
(2)它的工作方式是 模型 + 工具 + 循环,不是一问一答。
(3)你能看见并打断它的每一步——这是你控制它的入口。
到这里,你对 Claude Code 的「世界观」已经齐了。接下来第二章把手把手教你「怎么打字」——三种前缀、三十多个斜杠命令、权限弹窗那一幕。读完第二章,你就能开始真正用它做事了。