Claude Code 到底是什么?
一句话定位:模型驱动的本地终端 agent------你说它做,它直接在你电脑上读写文件、跑命令、改代码。不是聊天机器人,是"有手有脚"的执行者。
一、设计哲学:模型不动,工具在外
Anthropic 的核心判断:与其训练一个专门写代码的模型(会过时、会僵化),不如把通用模型配上工具,让 agent 能力随模型升级自动变强。
所以 Claude Code(下称 CC)是一个薄客户端:本地程序只做一件事------当模型的"手、眼和记忆"。智能留在云端的 Claude 模型里。CC 从发布到现在没换过架构,但每次 Claude 模型升级,CC 免费跟着变强。
二、整体架构
#mermaid-svg-pSVUKXXF1QEHzNEC{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-pSVUKXXF1QEHzNEC .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-pSVUKXXF1QEHzNEC .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-pSVUKXXF1QEHzNEC .error-icon{fill:#552222;}#mermaid-svg-pSVUKXXF1QEHzNEC .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-pSVUKXXF1QEHzNEC .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-pSVUKXXF1QEHzNEC .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-pSVUKXXF1QEHzNEC .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-pSVUKXXF1QEHzNEC .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-pSVUKXXF1QEHzNEC .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-pSVUKXXF1QEHzNEC .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-pSVUKXXF1QEHzNEC .marker{fill:#333333;stroke:#333333;}#mermaid-svg-pSVUKXXF1QEHzNEC .marker.cross{stroke:#333333;}#mermaid-svg-pSVUKXXF1QEHzNEC svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-pSVUKXXF1QEHzNEC p{margin:0;}#mermaid-svg-pSVUKXXF1QEHzNEC .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-pSVUKXXF1QEHzNEC .cluster-label text{fill:#333;}#mermaid-svg-pSVUKXXF1QEHzNEC .cluster-label span{color:#333;}#mermaid-svg-pSVUKXXF1QEHzNEC .cluster-label span p{background-color:transparent;}#mermaid-svg-pSVUKXXF1QEHzNEC .label text,#mermaid-svg-pSVUKXXF1QEHzNEC span{fill:#333;color:#333;}#mermaid-svg-pSVUKXXF1QEHzNEC .node rect,#mermaid-svg-pSVUKXXF1QEHzNEC .node circle,#mermaid-svg-pSVUKXXF1QEHzNEC .node ellipse,#mermaid-svg-pSVUKXXF1QEHzNEC .node polygon,#mermaid-svg-pSVUKXXF1QEHzNEC .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-pSVUKXXF1QEHzNEC .rough-node .label text,#mermaid-svg-pSVUKXXF1QEHzNEC .node .label text,#mermaid-svg-pSVUKXXF1QEHzNEC .image-shape .label,#mermaid-svg-pSVUKXXF1QEHzNEC .icon-shape .label{text-anchor:middle;}#mermaid-svg-pSVUKXXF1QEHzNEC .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-pSVUKXXF1QEHzNEC .rough-node .label,#mermaid-svg-pSVUKXXF1QEHzNEC .node .label,#mermaid-svg-pSVUKXXF1QEHzNEC .image-shape .label,#mermaid-svg-pSVUKXXF1QEHzNEC .icon-shape .label{text-align:center;}#mermaid-svg-pSVUKXXF1QEHzNEC .node.clickable{cursor:pointer;}#mermaid-svg-pSVUKXXF1QEHzNEC .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-pSVUKXXF1QEHzNEC .arrowheadPath{fill:#333333;}#mermaid-svg-pSVUKXXF1QEHzNEC .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-pSVUKXXF1QEHzNEC .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-pSVUKXXF1QEHzNEC .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-pSVUKXXF1QEHzNEC .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-pSVUKXXF1QEHzNEC .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-pSVUKXXF1QEHzNEC .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-pSVUKXXF1QEHzNEC .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-pSVUKXXF1QEHzNEC .cluster text{fill:#333;}#mermaid-svg-pSVUKXXF1QEHzNEC .cluster span{color:#333;}#mermaid-svg-pSVUKXXF1QEHzNEC div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-pSVUKXXF1QEHzNEC .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-pSVUKXXF1QEHzNEC rect.text{fill:none;stroke-width:0;}#mermaid-svg-pSVUKXXF1QEHzNEC .icon-shape,#mermaid-svg-pSVUKXXF1QEHzNEC .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-pSVUKXXF1QEHzNEC .icon-shape p,#mermaid-svg-pSVUKXXF1QEHzNEC .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-pSVUKXXF1QEHzNEC .icon-shape .label rect,#mermaid-svg-pSVUKXXF1QEHzNEC .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-pSVUKXXF1QEHzNEC .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-pSVUKXXF1QEHzNEC .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-pSVUKXXF1QEHzNEC :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 云端
你本机
HTTPS
终端界面
输入 / 渲染 / 确认弹窗
Agent 核心循环
编排引擎
权限网关
拦截危险操作
工具执行器
Read / Write / Bash / Grep...
文件系统 / Shell / Git / MCP 服务
Claude 模型推理
注:权限网关放在工具执行器之前------所有写操作先过权限检查,才被真正执行。
本地只有三样东西:界面、编排循环、工具执行器。模型在云上。
三、核心机制:Agent 循环
整个 CC 的心脏是一个循环,每轮四步:
- 打包上下文 ------ 系统提示词 + 对话历史 + 工具定义 + 相关文件内容
- 发给模型推理 ------ 模型返回"思考 + 工具调用请求"(结构化 JSON)
- 本地执行工具 ------ CC 解析请求,真正读写文件、跑命令
- 结果回填 ------ 执行输出塞回上下文,回到第 1 步
循环什么时候停?模型不再请求工具、只输出文字时,就是最终答复。你看到 CC "自己干了 20 分钟活",本质是这个循环转了几十上百圈。
关键认知:模型不能碰你的电脑。它输出的只是"请调用 Write 工具,把这段内容写到这个路径"的 JSON 指令,CC 本地执行后再把结果告诉模型。
四、七个关键设计
1. System Prompt(系统提示词)
CC 的"人格"和技能全写在一段很长的系统提示词里,每次请求都带上:角色定义、安全红线、行为规范(改文件前先读、验证后再汇报)、输出格式。
值得学的点:模型的行为不是训练死的,是提示词"编程"出来的。你还可以用 CLAUDE.md 往里追加项目级指令,等于给 CC 做二次编程。
2. 工具集设计
暴露给模型的工具高度精炼,就十来个:Read、Write、Edit、Bash、Glob、Grep、WebFetch、Task 等。每个工具的描述不只是参数格式,还有使用建议(如"优先用 Grep 而不是 Bash 里跑 grep")。
原则:工具宁少勿多,但每个描述到极致。工具太多模型会选错。
3. 权限网关(安全的根基)
所有工具调用先过权限检查,分三档:
- 只读操作(Read/Glob/Grep)→ 自动放行
- 写操作和命令(Write/Edit/Bash)→ 默认弹确认
- 高危模式 → settings.json 里配置允许/拒绝规则
--dangerously-skip-permissions 就是把网关整个拆掉。设计洞察是风险不对称:读文件搞不坏系统,写操作才需要人盯着。
4. 上下文工程(真正的护城河)
模型上下文窗口有限(约 200K token),怎么塞进"最有用的信息"是核心竞争力:
- 按需加载:不预读整个仓库,模型用 Glob/Grep 搜索,只把相关文件读进上下文
- CLAUDE.md 分层注入:全局记忆 → 项目记忆,启动时自动拼接
- 自动压缩:上下文快满时,把旧对话摘要成总结腾空间
- 输出截断:命令输出太长只留头尾
和人的工作方式一样:你不会背下整个代码库,而是用到哪查到哪。
5. 子 Agent(Task 工具)
主 agent 遇到可拆分的任务时派生子 agent:子 agent 拿一份干净的上下文独立跑自己的循环,完成后只交回结论。
动机是上下文隔离------探索一个模块可能要读 50 个文件,主 agent 自己读会撑爆上下文;让子 agent 读,主 agent 只收 200 字总结。
6. MCP(插件协议)
Model Context Protocol 是一套标准协议:外部程序只要按协议提供"工具/数据源",就能被 CC 调用(数据库、监控、内部平台......)。Anthropic 把它开源成了行业标准,OpenAI、Google 后来也都接了。
7. Hooks(生命周期钩子)
在固定事件点(工具调用前/后)允许用户挂自己的脚本,比如"每次 Write 后自动跑 eslint"。给本地执行器留扩展点。
五、值得记住的设计决策
- 薄客户端 + 强模型:本地刻意做薄,能力随模型升级自动增强
- 终端优先 :终端是开发者主场,且能被脚本化(
claude -p塞进 CI/CD) - 权限确认而非沙箱:本地跑 + 每步确认,换来对真实环境的完整访问
- 上下文即产品:CC 团队大部分迭代都在优化"给模型看什么",而不是堆功能
六、横向对比:同类工具怎么选
| 工具 | 形态 | 核心差异 | 适合场景 |
|---|---|---|---|
| Claude Code | 终端 CLI | 工具调用 + 本地执行 | 复杂任务、自动化、多文件操作 |
| Cursor | AI 编辑器 | 编辑器内实时补全 + 对话 | 沉浸式写代码 |
| Windsurf | AI 编辑器 | 多 agent 并行 | 团队协作、多模块改动 |
| Cline | VS Code 插件 | 开源免费,可换任意模型 | 预算有限、想自定义 |
| Aider | 终端 CLI | 极简结对编程,自动 commit | 命令行爱好者 |
| Copilot | VS Code 插件 | 深度绑定 GitHub | GitHub 用户、轻量辅助 |
| OpenAI Codex | 云端异步 | 扔任务自己跑 | 批量任务 |
| Devin | 全自主 | 号称完全自主,争议大 | 别太指望 |
| Bolt.new | 浏览器 | 生成应用一键部署 | 快速原型 |
本质区别就两个维度:交互方式 (对话式 / 编辑器嵌入 / 异步自主)和自主程度(帮你写 → 你说它做 → 你说它全干)。
CC 卡在中间最舒服的位置:有自主能力但不瞎跑。Devin 那种"完全自主"目前不成熟,CC 这种"人机协作"才是现阶段最实用的。
七、自己造一个简化版 Agent
核心代码量很小,几百行就能跑:
- 一个循环:读用户输入 → 拼 messages 数组 → 调 Claude API(带 tools 定义)
- 解析返回的 tool_use 块 → 本地执行(先实现 Read/Write/Bash 三个就够)
- 把工具结果以 tool_result 消息追加回去 → 再调 API
- 直到模型返回纯文本,循环退出
理解了 CC 的原理,等于理解了市面上所有 agent 产品(Cursor 的 agent 模式、Cline、Devin)------它们全是同一个范式的不同包装。
八、为什么中国大陆用不了?
Anthropic 自 2025 年 9 月起将中国大陆及港澳列入"不受支持地区"(同类还有俄罗斯、伊朗、朝鲜),这是政策限制而非技术故障。官方理由:法律监管风险(担心受限地区企业被迫配合情报要求)、防止模型能力经蒸馏加速当地 AI 研发、以及"确保变革性 AI 服务于民主利益"。执行上分两条线:公司看股权------中资直接或间接持股超 50% 一律禁用,无论注册在哪个国家;个人看地区------身处支持地区即可用(与国籍无关),身处大陆则不可用,代理伪装 IP 属于违反服务条款,检测到就封号(2026 上半年封了 1140 万账号,申诉成功率约 10%)。这是美国对华科技管制从芯片延伸到模型的大环境的一部分。国内替代路径:开源的 Cline/Aider 配国产模型(DeepSeek、Qwen 等),agent 原理完全相同。
附:日常使用速查
入口说明 :单次任务用 claude -p "任务",复杂多轮任务建议直接 claude 进交互式会话。
bash
claude # 交互式会话(最常用)
claude -p "任务" # 单次执行
claude --resume # 恢复上次会话
claude --dangerously-skip-permissions # 免确认(慎用)