Orange Book Series · 卷〇 · 2026-08-24 · 核验版本 2.1.241
Claude Code 实战指南:从上手到用好(橙皮书套装 · 卷〇 · 样章)
让你在自己的电脑上,用十分钟完成「装好 → 登录 → 让它读你的项目 → 让它改一个文件」的完整闭环。读完这一章你应该手里有一次真实的、经过你批准的文件修改——这是后面所有章节的地基。
本章所有命令与界面行为均对照官方 quickstart 文档核验(2026-08-24),标注【官方文档】;版本相关说明对照官方 changelog 页核验,标注【官方 CHANGELOG】。
官方推荐原生安装器,不依赖 Node.js,且能后台自动更新【官方文档】:
# macOS / Linux / WSL
curl -fsSL https://claude.ai/install.sh | bash
# Windows PowerShell
irm https://claude.ai/install.ps1 | iex
包管理器也可以:macOS 用 brew install --cask claude-code(注意 Homebrew 装的不自动更新,要自己 brew upgrade),Windows 用 winget install Anthropic.ClaudeCode(同样不自动更新)【官方文档】。想钉住旧版或走 npm 老路,npm install -g @anthropic-ai/claude-code 仍然可用。
装完验证:
claude --version
# 输出版本号 + (Claude Code),例如:2.1.241 (Claude Code)
在你的项目目录里直接敲 claude,首次会引导你在浏览器里完成登录。账号类型四选一:Claude 订阅(Pro / Max / Team / Enterprise,推荐)、Console(API 预付费)、企业云平台(Bedrock / Google Cloud / Foundry)、组织自建网关【官方文档】。凭证会保存,之后不用再登;要换账号,在会话里敲 /login。
cd /path/to/your/project
claude
启动后你会在输入框上方看到版本号、当前模型和工作目录。敲 /help 看全部命令。
直接用人话问。Claude Code 会自己去读需要的文件,你不用手动喂上下文【官方文档】:
这个项目是干什么的?
main 入口在哪?
解释一下目录结构
现在让它真改点东西:
在主文件里加一个 hello world 函数
它会找到合适的文件并展示改动,然后停下来问你——这就是权限弹窗。看清楚它要改什么,再选 Yes。这个「每次写文件、跑命令前问你」的机制是 Claude Code 的安全底座,第 3 章会专门讲透。
一个要知道的新事实:首个会话之后,Pro / Max / Team 计划的终端与 VS Code 会话默认进入 auto 模式——一个 AI 分类器替你审每个动作,多数编辑和命令不再弹窗;其他计划默认 Manual 模式。任何时候按 Shift+Tab 可以切换当前会话的权限模式【官方文档】。auto 模式不是免检——它有官方公布的 17% 漏放率,第 3 章细讲。
| 命令 | 干什么 |
|---|---|
claude | 启动交互会话 |
claude "修一下构建报错" | 一次性任务 |
claude -c | 继续当前目录最近一次会话 |
/clear | 清空当前对话历史 |
/exit 或 Ctrl+D 两次 | 退出 |
输入框里的三个高频符号:/ 唤起命令与技能列表、@ 引用文件(新版还可以 @另一个会话,第 11 章讲)、! 进入 shell 直通模式;Esc 打断当前回合【官方文档】。
claude --version 能输出版本号Shift+Tab 切换过一次权限模式五个勾都打上,第 1 章见——我们将拆开你刚用过的这台机器,看看循环、工具、权限和 context 是怎么让你刚才那十分钟成为可能的。
本章信息保鲜期。 安装命令与默认权限模式是变动较快的区域。本章核验于 2026-08-24(Claude Code 2.1.241);若你读到时界面行为不符,以 官方 quickstart 与 changelog 为准。

Claude Code 实战指南:从上手到用好(橙皮书套装 · 卷〇)
你给 Claude Code 一个任务,它不是「想好了再做」,而是进入一个循环:收集上下文 → 采取行动 → 验证结果,三个阶段混在一起滚动推进【官方文档】。问一个问题,可能只转半圈(只收集上下文);修一个 bug,它会把三阶段反复转上几十次——跑测试、读报错、搜文件、改代码、再跑测试,每一步的结果决定下一步做什么。
这个循环里有两个角色:负责推理的模型和负责行动的工具。Claude Code 本身是套在模型外面的「harness」——它提供工具、管理上下文、给执行环境,把一个大语言模型变成一个能干活的 agent【官方文档】。
你也在这个循环里。任何时候按 Esc 可以立刻打断它——正在跑的工具会被取消,它停下等你指示;甚至不用打断,直接敲一行纠正发出去,它读完当前动作的结果后就会调整方向【官方文档】。「对话」不是修辞,是这个工具的真实交互形态:第一次没做对不用重来,继续说就行。
没有工具的模型只能输出文字。Claude Code 的内置工具大致分五类【官方文档】:
| 类别 | 能干什么 |
|---|---|
| 文件操作 | 读文件、改代码、建新文件、重命名重组 |
| 搜索 | 按模式找文件、正则搜内容、探索代码库 |
| 执行 | 跑 shell 命令、起服务、跑测试、用 git |
| Web | 搜网页、抓文档、查报错信息 |
| 代码智能 | 编辑后看类型错误、跳定义、找引用(需装对应插件) |
之外还有编排类工具:派生 subagent、向你提问等。这解释了新手最常困惑的一件事——「它为什么不会做 X」多半是工具表里没有 X,而不是模型不够聪明。反过来,你装一个 MCP server 或 Skill,本质就是往这张表里加行(第 6–8 章)。
注意一个版本变化:Todo/Task 系列工具在 Opus 4.8、Sonnet 5、Fable 5、Mythos 5 及更新模型上已默认移除(v2.1.233),旧教程里「让 Claude 先写 todo 再干活」的流程在这些模型上不成立了;真要找回,设 CLAUDE_CODE_ENABLE_TODO_TOOLS=1【官方 CHANGELOG】。
你在哪个目录敲 claude,它就能访问【官方文档】:你的项目文件(目录及子目录)、你的终端(任何你能跑的命令它都能跑)、你的 git 状态(当前分支、未提交改动、最近提交)、你的 CLAUDE.md 和自动记忆、以及你配置的扩展。
「任何你能跑的命令它都能跑」这句话的另一面是:它的爆炸半径就是你的爆炸半径。这就是为什么有权限系统——每次写文件、跑命令前的询问是底线。四种权限模式,Shift+Tab 循环切换【官方文档】:
| 模式 | 行为 |
|---|---|
| Auto | 分类器后台审每个动作,拦下危险的;Pro/Max/Team 的终端与 VS Code 会话默认模式 |
| Manual | 改文件、跑命令前都问你 |
| Accept edits | 改文件和 mkdir/mv 这类文件命令不问,其他命令仍问 |
| Plan | 只探索、出计划,不动源文件 |
对信任的日常命令(如 npm test、git status),可以在 .claude/settings.json 里加白名单免除重复询问【官方文档】。权限规则的组织层级与写法见第 3 章和附录 B。
Context window 里装着:对话历史、读过的文件内容、命令输出、CLAUDE.md、自动记忆、已加载的 skill、系统提示【官方文档】。装得太满时它会自动压缩——先清旧的工具输出,再摘要对话;你的请求和关键代码片段会保留,但对话早期的细节指令可能丢失。所以持久的规矩要写进 CLAUDE.md,不要指望它「记住你三周前说过的话」。
三个立刻能用的习惯:
/context 随时看什么在占地方【官方文档】/compact 重点是 API 改动 带焦点地手动压缩,或在 CLAUDE.md 里加「Compact Instructions」节控制压缩时保留什么【官方文档】/clear——旧话题的残留 context 只会稀释新任务压缩救不了所有情况:如果单个文件或工具输出大到每次摘要完立刻又塞满,它会停止自动压缩并报错(thrashing),这时该重开会话而不是硬撑【官方文档】。
每个会话是独立的新 context——新会话不带旧会话的对话历史。会话以明文 JSONL 存在 ~/.claude/projects/ 下,因此可以续(claude -c / claude -r)也可以分叉(--fork-session 或 /branch 复制历史到新会话,原会话不动)【官方文档】。
文件改动自带后悔药:Claude 改文件前会做快照(checkpoint),改坏了按 Esc 两次回滚,或直接让它 undo。checkpoint 独立于 git,续会话后仍可用;但它只管文件——对数据库、API、部署这类远程副作用无能为力,那些靠权限模式管【官方文档】。
想在同一代码库上平行推进多条线:用 git worktree 开多个目录,每个目录一个会话【官方文档】。更进一步的跨会话协作是 2026 年的新大陆,见第 11 章。
Claude Code = 模型(推理)+ 工具表(能力边界)+ 权限(安全边界)+ context(工作记忆),套在一个随时可打断的三阶段循环里。后面每一章,都是在教你调教这四样东西中的一样。
Esc 打断和一次「不打断直接纠正」/context,说出当前会话里占空间最多的三类内容Esc 双击回滚一次文件改动本章信息保鲜期。 权限默认值与工具表是活跃变动区(如 v2.1.232 的 fork 默认化、v2.1.233 的 Todo 工具移除)。本章核验于 2026-08-24(2.1.241);行为不符时以官方 How Claude Code works 与 changelog 为准。
Claude Code 实战指南:从上手到用好(橙皮书套装 · 卷〇)
第 1 章说过:每个会话都是全新的 context,对话早期的话会被压缩冲掉。CLAUDE.md 就是对抗遗忘的正式机制——你在磁盘上写给它的长期指令,每个会话启动时自动进 context【官方文档】。
一个常被误解的事实:CLAUDE.md 的内容是作为一条 user message 在系统提示之后注入的,不是系统提示的一部分【官方文档】。它是「强烈建议」而不是「强制执行」——写得太泛、太长、自相矛盾,它就可能不照做。要硬性拦截某个动作,正确工具是 PreToolUse hook(第 7 章),不是往 CLAUDE.md 里写「永远不要」。
| 层级 | 位置 | 给谁用 |
|---|---|---|
| 组织策略 | macOS: /Library/Application Support/ClaudeCode/CLAUDE.md;Linux/WSL: /etc/claude-code/CLAUDE.md;Windows: C:\Program Files\ClaudeCode\CLAUDE.md | IT/DevOps 统一下发,个人无法排除 |
| 用户级 | ~/.claude/CLAUDE.md | 你所有项目的个人偏好 |
| 项目级 | ./CLAUDE.md 或 ./.claude/CLAUDE.md | 团队共享,进版本库 |
| 本地级 | ./CLAUDE.local.md(记得加 .gitignore) | 只属于你的本项目偏好 |
加载规则三条【官方文档】:
/compact 后会从磁盘重读并重新注入——压缩冲不掉它【官方文档】大 monorepo 里别的团队的 CLAUDE.md 老被带进来?用 claudeMdExcludes 按 glob 排除【官方文档】。
官方给的四条经验法则【官方文档】:
npm test」而不是「记得测试」什么时候该往里面加东西?官方判据:它第二次犯同一个错;code review 抓到它本该知道的事;你把上个会话纠正过的话又敲了一遍;新同事也需要同样的背景才能上手【官方文档】。
起步不用从零写:跑 /init,它分析你的代码库生成初稿(已有文件则提改进建议而非覆盖);设 CLAUDE_CODE_NEW_INIT=1 可开交互式多阶段流程。从 Cursor/Copilot 搬家?/init 会读 .cursor/rules/、.github/copilot-instructions.md,v2.1.213 起还有 /import 一次性导入其他 agent 的配置【官方文档】【官方 CHANGELOG】。
@import:在 CLAUDE.md 里写 @docs/git-instructions.md 就把那个文件并进来,可递归、最深 4 层;相对路径相对的是「写 import 的那个文件」而非工作目录;想只提路径不导入,用反引号包起来。注意:import 进来的内容启动时全部加载,省不了 context,只省组织。解析到工作目录外的 import 会弹批准框(防别人往共享项目里塞文件)【官方文档】。
仓库已有 AGENTS.md?CLAUDE.md 不读它,但一行 @AGENTS.md 即可让两边共用一份指令,下面再补 Claude 专属段落;或者直接 symlink【官方文档】。
.claude/rules/:把指令按主题拆成多个 md 文件。带 paths: frontmatter 的规则只在它读到匹配文件时才加载——这是真正省 context 的模块化方式【官方文档】:
---
paths:
- "src/api/**/*.ts"
---
# API 开发规则
- 所有 endpoint 必须做入参校验
- 使用统一错误响应格式
个人通用规则放 ~/.claude/rules/(先于项目规则加载,项目规则优先);跨项目共享一套规则用 symlink 链进各项目的 .claude/rules/【官方文档】。
CLAUDE.md 是你写的,auto memory 是它写的——默认开启。它把值得跨会话记住的东西分四类存档:user(你的角色与偏好)、feedback(你给过的纠正)、project(代码里推不出来的项目动态)、reference(项目外的信息去哪找);代码里能推出来的东西它不记【官方文档】。
机制要点【官方文档】:
~/.claude/projects/<项目>/memory/,内含索引 MEMORY.md + 每主题一个文件/memory 可浏览、编辑、开关;界面上的「Saved 2 memories」就是它在写想让它记什么,直接说「记住:这个项目用 pnpm 不用 npm」;想写进 CLAUDE.md,说「把这条加到 CLAUDE.md」。
/init 在你的主项目生成 CLAUDE.md,并删掉其中它自己能推出来的内容(目录结构、依赖清单)/context 里确认 Memory files 列表包含你的 CLAUDE.mdpaths: 的 rule,验证只在读匹配文件时加载(可用 InstructionsLoaded hook 观察)/memory 里找到那条笔记本章信息保鲜期。 记忆系统是 2026 年迭代最快的区域之一(rules、自动记忆、/import 均为近几个小版本引入)。本章核验于 2026-08-24(2.1.241);行为不符时以官方 memory 文档与 changelog 为准。

Claude Code 实战指南:从上手到用好(橙皮书套装 · 卷〇)
Claude Code 的每次工具调用要过三道闸:权限模式决定默认姿态,allow/ask/deny 规则做细粒度放行与拦截,都不命中时弹出提示问你。三者叠加,构成「默认保守、逐条开闸」的体系【官方文档】。
规则的优先级一句话记牢:deny > ask > allow。deny 是铁闸,连 bypassPermissions 模式都越不过它;它也不会再问你——直接拒绝【官方文档】。
| 模式 | 行为 | 适用场景 |
|---|---|---|
default(界面称 Manual) | 首次用某工具做某事时逐次询问 | 日常开发的默认 |
acceptEdits | 文件编辑自动放行,其余仍询问 | 你已盯过它的计划,进入批量改码阶段 |
plan | 只读分析,先出实施计划给你批,批准后才开始动手 | 大改、陌生代码库、需求还不稳 |
auto(Auto Mode) | 由分类器模型自动判定每个动作的风险并放行/询问 | 长任务无人值守;Anthropic 公布的内部数据:约 93% 动作被批准,提示率从 17% 降到 0.4%(见第 5 章成本讨论) |
dontAsk | 不询问;命中 deny 之外但未 allow 的动作直接拒绝 | CI、自动化脚本——它自己当自己的看门人 |
bypassPermissions | 全部放行(deny 规则除外) | 仅限一次性容器/沙箱;官方界面直接标注「use with caution」 |
切换方式:会话内按 Shift+Tab 循环切换,或 /permissions 里选;启动时用 --permission-mode 指定;团队可经 managed settings 用 permissions.defaultMode 统一定默认【官方文档】。
规则写作 Tool 或 Tool(specifier),放在 settings 的 permissions.allow / ask / deny 数组里【官方文档】:
{
"permissions": {
"allow": [
"Bash(npm run test:*)",
"Read(//src/**)",
"WebFetch(domain:docs.anthropic.com)"
],
"deny": [
"Bash(curl:*)",
"Read(./.env)",
"Read(~/.*)"
]
}
}
要点【官方文档】:
Bash(npm run build) 精确匹配这一条命令;加 :* 才匹配带任意参数的前缀。Bash(npm:*) 不会匹配 npm2——前缀以命令边界计git status && npm test 会拆成两段分别查规则,全部放行才整体放行——想靠 && 偷渡危险命令是行不通的sudo、env VAR=1、xargs 这类包装会被剥掉再匹配内层命令,所以 Bash(npm test) 也能命中 sudo npm testls、cat、git status 等只读命令本来就免提示,不必再写 allow// 锚定项目根(//src/**)、~/ 是家目录、/ 开头是绝对路径;裸写如 *.env 匹配任意层级mcp__github(整个服务器)或 mcp__github__create_issue(单工具)弹出的批准框不只是 Yes/No【官方文档】【官方 CHANGELOG】:
.claude/settings.local.json(本机私有、不进版本库);v2.1.211 起按仓库根目录归属,monorepo 里不会在子目录重复问把模式串成一天的节奏,是这一章真正想交付的东西:
plan 模式。它只读不写,产出计划;你改计划、批计划,再让它执行acceptEdits 或 default + 少量 allow 规则。测试命令(Bash(npm run test:*))提前 allow 掉,避免每轮都问auto 模式跑 backlog 类任务;配合 hooks(第 7 章)在危险命令上再卡一道dontAsk + 明确 allow 清单 + deny 兜底(如 Bash(git push:*))bypassPermissions,宿主机永远不用一个务实建议:先把 deny 清单写好再谈放权。Read(./.env)、Bash(git push --force:*)、Bash(rm -rf:*) 这一类铁闸进 settings.json(团队共享)或 settings.local.json(个人),之后开 auto/acceptEdits 才睡得着。
/permissions 查看当前生效规则,能说出每一条来自哪个 settings 文件.claude/settings.local.json 且未进版本库Shift+Tab 切到 plan 模式,让它对一个真实改动出计划,体验「先批后做」ls && npm test),观察两段是分别判定的本章信息保鲜期。 权限系统是近几个小版本改动密集区(auto 模式、Ctrl+E 风险解释、规则按仓库根归属均为近期引入)。本章核验于 2026-08-24(2.1.241);行为不符时以官方 permissions 文档与 changelog 为准。

Claude Code 实战指南:从上手到用好(橙皮书套装 · 卷〇)
官方最佳实践页开篇就点明:绝大多数技巧源于同一个约束——context window 填满得很快,而且性能随填充度下降。每一轮对话、每一次文件读取、每一条命令输出都在占用它;一个调试会话轻松烧掉几万 token。快满时它会开始「忘记」早期指令、犯更多错【官方文档】。
所以本章所有内容都是同一个主题的不同侧面:让进入 context 的每个 token 都值回票价。用 /context 随时看占用;想持续盯着,可以配自定义 status line【官方文档】。
这是官方列的第一条实践,也是回报最高的一条:给它一个可以自行运行、能读出成败信号的检查——测试套件、构建退出码、linter、截图对比。没有检查,「看起来做完了」就是它唯一的停机信号,你就成了人肉验收回路;有了检查,它会自己干活、跑检查、读结果、迭代到通过【官方文档】。
| 差 | 好 |
|---|---|
| 「实现一个邮箱校验函数」 | 「写 validateEmail:user@example.com 为 true,invalid 为 false,user@.com 为 false。实现后跑测试」 |
| 「把 dashboard 弄好看点」 | 「[贴设计截图] 实现这个设计。完成后截图与原图对比,列出差异并修掉」 |
| 「构建挂了」 | 「构建报这个错:[贴错误]。修复并确认构建通过。治根,别压制报错」 |
检查可以多硬,分四档【官方文档】:同一条 prompt 里要求它跑并迭代;设为 /goal 条件由独立评估器每轮复检(第 10 章);写成 Stop hook 做确定性拦截(连续拦 8 次后系统会强制放行);或让验证 subagent 用全新 context 反驳结论。另外让它出示证据(测试输出、命令回显、截图)而不是口头宣布成功——审证据比自己重跑快得多。
官方推荐的四阶段工作流【官方文档】:
Shift+Tab 进 plan 模式(或 claude --permission-mode plan 启动),它只读不改,先把代码读懂Ctrl+G 可以在你的编辑器里直接改计划但别教条:改 typo、加日志、改变量名这类一句话能说清 diff 的活,直接让它做。计划的开销只在「方案不确定、改动跨多文件、代码你不熟」时才值回来【官方文档】。
它能推断意图,但读不了你的心。官方的对照表【官方文档】:
| 差 | 好 |
|---|---|
| 「给 foo.py 加测试」 | 「给 foo.py 写测试,覆盖用户登出的边界情况。不要用 mock」 |
| 「ExecutionFactory 的 API 为啥这么怪?」 | 「翻 ExecutionFactory 的 git 历史,总结它的 API 是怎么演变成这样的」 |
| 「加个日历组件」 | 「看首页现有组件怎么写的,HotDogWidget.php 是好例子。照这个模式做日历组件,可选月份、可前后翻页选年份。只用代码库已有的依赖」 |
| 「修登录 bug」 | 「用户反馈会话超时后登录失败。查 src/auth/ 的认证流,重点看 token 刷新。先写一个能复现的失败测试,再修」 |
富内容输入同样重要【官方文档】:用 @ 引用文件(它先读再答);直接粘贴/拖入截图;给文档 URL(常用域名进 permissions 白名单);cat error.log | claude 把数据管进去;或干脆让它自己用 Bash/MCP 去取。模糊 prompt 不是禁区——探索期一句「这个文件你会怎么改?」反而能捞出你想不到的视角。
最好的结果来自紧反馈回路【官方文档】:
Esc:随时打断当前动作,context 保留,立刻改方向Esc Esc 或 /rewind:打开回溯菜单,按 checkpoint 恢复对话、代码或两者(它每次改文件前自动快照);也可以从选定点「向前/向后总结」做部分压缩/clear:无关任务之间重置 context。长会话里堆着无关内容会实打实拖垮表现/clear,把学到的东西写进一条更好的初始 prompt,重开。干净的会话加好 prompt 几乎总是赢过长会话加一堆补丁【官方文档】压缩是自动的(接近上限时触发),但你可以更主动:/compact 专注 API 改动 带指令压缩;在 CLAUDE.md 里写「压缩时务必保留改动文件清单和测试命令」定制保留项;不需要留在历史里的随口一问用 /btw——答案不进对话历史,白问【官方文档】。
注意 checkpoint 的边界:只跟踪它用编辑工具做的改动,Bash 命令和外部进程改的代码不在快照内——它不是 git 的替代品【官方文档】。
既然 context 是根本约束,「读一大堆文件」的调研就不该发生在主会话里。一句「用 subagent 调查 X」,它在独立 context 里翻完代码只把结论摘要带回来【官方文档】。同理,实现完成后让一个全新 context 的 reviewer subagent 只看 diff 和你的验收标准挑缺口——它没被「写出这段代码的推理过程」污染,判断更独立。内置 /code-review 就是这个模式的成品(正确性审查)。提醒一句:被要求「找缺口」的 reviewer 总会找出点什么,指示它只报影响正确性和既定需求的问题,否则你会被拖进过度工程【官方文档】。
| 模式 | 症状 | 处方 |
|---|---|---|
| 大杂烩会话 | 一个会话里塞三件不相干的事 | 无关任务之间 /clear |
| 反复纠正 | 改了又错、错了再改 | 两次失败后 /clear + 重写更好的初始 prompt |
| CLAUDE.md 过度规定 | 写太长,真正重要的规则被淹没 | 狠删;它不做指令也能做对的事就删掉或改写成 hook |
| 信任-验证缺口 | 实现看着像样但边界全漏 | 永远提供可跑的验证;验证不了就不交付 |
| 无限探索 | 「调查一下」不给范围,读了几百个文件 | 限定范围,或交给 subagent |
/context 观察一次长任务中 context 的增长曲线,找到最费 token 的来源Esc Esc 回溯代码+对话,再用 /btw 问一个不进历史的问题本章信息保鲜期。 最佳实践页随版本持续更新(/btw、rewind 总结、/batch 等均为较新条目)。本章核验于 2026-08-24(2.1.241);以官方 best-practices 页为最终口径。
Claude Code 实战指南:从上手到用好(橙皮书套装 · 卷〇)
Claude Code 按 token 计费(订阅套餐则吃额度)。官方公布的企业部署平均值:每活跃开发日约 $13,每人每月 $150–250,90% 的用户每活跃日低于 $30。个体差异极大,取决于模型选择、代码库规模、是否跑多实例与自动化【官方文档】。
自查工具:/usage 看当前会话 token 与本地折算金额(订阅用户看的是套餐用量条);订阅用户还能看到归因分解——skills、subagents、插件、各 MCP server 各占百分之几,以及「长 context」「cache miss」这类占近期用量 10% 以上的行为标记。/insights 则生成一份 HTML 报告分析你的工作方式与摩擦点【官方文档】。
每一轮请求都要重发完整 context(系统提示 + 项目上下文 + 全部历史 + 新消息), caching 靠前缀精确匹配复用已处理部分——缓存命中的 token 按缓存读费率计费,约为标准输入费率的 10%【官方文档】。请求被组织成三层:
| 层 | 内容 | 何时变化 |
|---|---|---|
| 系统提示 | 核心指令、工具定义、输出风格 | 工具集变化、Claude Code 升级 |
| 项目上下文 | CLAUDE.md、自动记忆、rules | 会话启动、/clear、/compact 后 |
| 对话 | 你的消息、它的回复、工具结果 | 每一轮 |
前缀任何一处变动,其后全部重算。所以「哪些动作会炸掉缓存」直接等于「哪些动作贵」【官方文档】:
Bash)——从系统提示里移除工具定义,炸缓存;带范围的 Bash(rm *) 不影响反过来这些动作安全:编辑仓库文件、会话中途改 CLAUDE.md(改动不生效也不炸缓存,下个 /clear 才加载)、改输出风格(同理)、切权限模式(opusplan 除外)、调用 skills 和命令、/recap、/rewind(截回已缓存的旧前缀,比 compact 便宜)、派生 subagent(父缓存不动)【官方文档】。
实操口径:会话开场就定好模型和 effort,把 /compact 留给任务之间的自然间歇,走错路用 /rewind 而不是 compact。
缓存条目在闲置后过期:订阅套餐默认 1 小时 TTL;API key 与云厂商默认 5 分钟(1 小时 TTL 的缓存写入更贵,可用 ENABLE_PROMPT_CACHING_1H=1 开启;订阅额度耗尽转用 usage credits 时也会自动降回 5 分钟)。每次命中重置计时器,所以持续工作缓存一直热;离开超过 TTL,回来第一轮全量重算——这就是「走开一下回来变慢」的原因【官方文档】。
Pro/Max 恢复一个搁置很久的大会话时,它会提议从摘要恢复而非携带全量历史——接住这个提议【官方文档】。
model: haiku【官方文档】/mcp 关掉不用的 server【官方文档】/effort 降档;固定思考预算的模型可用 MAX_THINKING_TOKENS 压预算(自适应推理模型忽略非零预算,用 effort 级别)【官方文档】会话闲置时仍有这些后台消耗【官方文档】:
--resume 服务)与部分状态检查命令,通常每会话 < $0.04crossSessionInbound: hold 改为暂存CLAUDE_CODE_GOAL_CHECKIN_MINUTES=0 关闭(v2.1.236+)长会话用量爬升的两大主因:全量历史每轮都发(缓存命中也只是 10% 费率而不是 0);缓存过期后的首轮全量重读【官方文档】。
agent teams 单独记一笔:teammate 跑 plan 模式时用量约为普通会话的 7 倍(每个成员独立 context)。控制法:teammate 用 Sonnet、团队保持小、spawn prompt 写聚焦、用完即关【官方文档】。
auto 模式也有成本维度:分类器替你审批后,Anthropic 公布的内部数字是约 93% 动作自动批准、提示率从 17% 降到 0.4%——省的是你的时间和长任务的中断成本,而不只是 token【官方博客】。
/usage 与 /insights,找到自己用量占比前三的来源model: haiku 的 subagent 或降低 effort,对比前后用量/context 里对比一次 /rewind 与一次 /compact 之后的 cache 重建差异本章信息保鲜期。 计费结构、TTL 默认值与归因分解都是高频变动区(usage credits、goal check-in 等均为近期版本引入)。本章核验于 2026-08-24(2.1.241);金额以 claude.com/pricing 与 Claude Console 为准。
Claude Code 实战指南:从上手到用好(橙皮书套装 · 卷〇)
判据很简单:同一段指令、清单或多步流程,你粘贴第二次的时候;或者 CLAUDE.md 里某一节从「事实」长成了「流程」。与 CLAUDE.md 的本质区别是加载时机:CLAUDE.md 每个会话必载,skill 的正文只在被调用时才进 context——几百行的参考资料平时几乎零成本【官方文档】。
Skills 遵循开放的 Agent Skills 标准,可跨工具使用;Claude Code 在标准之上扩展了调用控制、subagent 执行、动态 context 注入等能力【官方文档】。旧的 .claude/commands/*.md 自定义命令已并入 skills,老文件照常工作,同名时 skill 优先。
一个 skill 就是一个目录加一个 SKILL.md:YAML frontmatter 告诉它何时用,正文是执行指令。目录名就是命令名【官方文档】:
~/.claude/skills/summarize-changes/SKILL.md
---
description: 总结未提交的改动并标出风险。当用户问改了什么、
想要 commit message 或要求 review diff 时使用。
---
## 当前改动
!`git diff HEAD`
## 指令
用两三条要点总结上面的改动,然后列出注意到的风险
(缺失的错误处理、硬编码值、需要更新的测试)。
diff 为空就说明没有未提交改动。
其中 !`git diff HEAD` 是动态 context 注入:Claude Code 先执行命令、用输出替换该行,再把内容交给模型——它看到的是真实 diff 而不是命令本身【官方文档】。
| 位置 | 路径 | 作用域 |
|---|---|---|
| 企业级 | managed settings 目录 | 组织内所有用户 |
| 个人级 | ~/.claude/skills/<name>/SKILL.md | 你所有项目 |
| 项目级 | .claude/skills/<name>/SKILL.md | 本项目(进版本库共享) |
| 插件级 | <plugin>/skills/<name>/SKILL.md | 插件启用处,命令带 plugin:skill 命名空间 |
同名冲突按来源裁决:企业 > 个人 > 项目;任意层级都能盖过同名内置 skill(但不接管其别名)。嵌套子目录的 .claude/skills/ 在它读到该目录文件时才加载,重名时以目录限定名出现(如 apps/web:deploy)。skill 目录可以是 symlink——跨项目共享一套 skill 就靠它【官方文档】。
改动热加载:编辑已有 skills 目录里的 SKILL.md 当前会话即生效;新建顶层 skills 目录需重启【官方文档】。
disable-model-invocation: true 只允许你手动 /name 触发——你不会想让它因为「代码看着 ready」就自行部署【官方文档】反向也有:user-invocable: false 表示只准它自动加载、不对你暴露命令,适合「旧系统背景知识」这类没有动作意义的纯知识【官方文档】。
正文要克制:skill 一旦加载,内容在会话剩余轮次里一直占 context,每行都是重复开销。写「做什么」,别叙述「为什么」;大参考文档拆成附属文件按需读,SKILL.md 控制在 500 行内【官方文档】。
| 字段 | 作用 |
|---|---|
description | 它决定何时自动加载的唯一依据(与 when_to_use 合并后 1,536 字符截断);关键场景写最前 |
disable-model-invocation | true = 只能人手动触发;同时阻止预载进 subagent、阻止定时任务以它为 prompt 触发(v2.1.196+) |
user-invocable | false = 只准它自动用,你从 / 菜单看不到 |
allowed-tools | 调用当轮免批准这些工具(下一条消息即失效,只放行不收紧) |
disallowed-tools | skill 激活期间从可用池移除这些工具 |
model / effort | skill 激活期间临时换模型/推理档位,当轮生效不落盘 |
context: fork | 在 fork 出的 subagent context 里运行(默认后台;background: false 改同步等待,v2.1.218+) |
paths | glob 限定只在操作匹配文件时自动加载(与 path rules 同格式) |
hooks | skill 被调用时注册、会话内持续的 hooks |
参数用 $ARGUMENTS(整体)、$ARGUMENTS[0]/$0(按位)、或 frontmatter arguments: 声明命名参数。一条消息开头可以连叠多个 skill:/write-tests /fix-issue 123,尾随文本作为参数传给每一个(最多展开 1+5 个)【官方文档】。
动态注入:!`command` 在行内执行并替换;还可以用 ${CLAUDE_SKILL_DIR}、${CLAUDE_PROJECT_DIR}、${CLAUDE_SESSION_ID} 等变量引用随 skill 打包的脚本。配合 allowed-tools: Bash(${CLAUDE_SKILL_DIR}/scripts/render.sh *) 即可让自带脚本免批准运行【官方文档】。
fork 执行:context: fork 让 skill 在独立 context 跑——调研类 skill 的标配,主会话只收结论。可再配 agent: 指定 subagent 类型【官方文档】。
claude.ai 同步:在 claude.ai 为你的账号启用 skill 后,Cowork 与云端会话自动获得;本机其他会话需先跑一次 CLAUDE_CODE_SYNC_SKILLS=1 claude -p "..." 下载到 ~/.claude/skills/synced/。注意同步版在本机不执行 !` 命令、不附加 @ 引用文件(安全考虑);上传到 claude.ai 的 skill 只允许标准六字段 frontmatter,多一个字段就硬报错【官方文档】。
paths: 限定【官方文档】亲手验证「动态注入」与「目录名即命令名」(约 5 分钟):
mkdir -p ~/.claude/skills/diff-risk
cat > ~/.claude/skills/diff-risk/SKILL.md <<'EOF'
---
description: 总结未提交改动并标出风险。
---
## 当前改动
!`git diff HEAD --stat`
用三条要点总结改动并列出风险;diff 为空就说明工作区干净。
EOF
# 进任意 git 仓库,改一个文件,然后:
claude # 启动后输入 /diff-risk,或直接问「我改了什么?」
预期:它返回的统计与实际 git diff HEAD --stat 输出一致——证明注入的是命令执行结果而非模型臆测。
disable-model-invocation: true,观察它不再自动触发context: fork,对比主会话 context 占用变化(/context)${CLAUDE_SKILL_DIR} + allowed-tools 模式让一个自带脚本免批准运行本章信息保鲜期。 Skills 是当前迭代最快的功能面之一(fork 后台控制、堆叠调用、同步规则均为近几个小版本引入)。本章核验于 2026-08-24(2.1.241);以官方 skills 文档为最终口径。
Claude Code 实战指南:从上手到用好(橙皮书套装 · 卷〇)
CLAUDE.md 是「建议」,模型可以选择不听;hooks 是确定性脚本,在生命周期固定点位自动执行,零例外。凡是「每次都必须发生」的事——编辑后跑 lint、拦截对 migrations 目录的写入、提交前格式化——都应该写成 hook 而不是 CLAUDE.md 里的祈使句【官方文档】。
一个 hook 的三层结构:事件(什么时候触发)→ matcher(过滤条件,如只对 Bash 工具)→ handler(跑什么:shell 命令、HTTP 端点、MCP 工具、LLM prompt 或 subagent,共五种类型)【官方文档】。
SessionStart、SessionEndUserPromptSubmit(你的 prompt 进模型前,可拦截)、Stop(它答完时,可拦截不让停)、StopFailurePreToolUse(执行前,可拦截)、PostToolUse(成功后)、PostToolUseFailure(失败后)、PostToolBatch(一批并行调用全部结束后)其余常用事件:PreCompact/PostCompact(压缩前后)、Notification(发通知时——接企业微信/钉钉提醒就在这里)、SubagentStart/Stop、InstructionsLoaded(CLAUDE.md 或 rules 进 context 时)、PermissionRequest/PermissionDenied、ConfigChange、FileChanged(盯指定文件变化)、WorktreeCreate/Remove、TeammateIdle(agent team 成员将闲置时)【官方文档】。
配置写在 settings JSON 的 hooks 字段(各层级位置见第 3 章);脚本从 stdin 读 JSON,用退出码与 stdout 回话【官方文档】:
// .claude/settings.json
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{ "type": "command", "if": "Bash(rm *)",
"command": "${CLAUDE_PROJECT_DIR}/.claude/hooks/block-rm.sh", "args": [] }
]
}
]
}
}
#!/bin/bash
# .claude/hooks/block-rm.sh(需 chmod +x;解析 JSON 需要 jq)
COMMAND=$(jq -r '.tool_input.command')
if echo "$COMMAND" | grep -q 'rm -rf'; then
jq -n '{
hookSpecificOutput: {
hookEventName: "PreToolUse",
permissionDecision: "deny",
permissionDecisionReason: "Destructive command blocked by hook"
}
}'
else
exit 0 # 无裁决:走正常权限流程(注意:沉默 ≠ 批准)
fi
要点解读【官方文档】:
Bash 精确匹配、Edit|Write 多选、含特殊字符按 JS 正则(非锚定)匹配,mcp__memory__.* 匹配某 MCP server 全部工具"Bash(git *)"、"Edit(*.ts)"——复合命令逐段检查,$() 与反引号里的子命令也查;但 if 是尽力而为(解析失败时放行执行 hook),硬性拦截要靠脚本里的 deny,不能只靠 if{ 开头按 JSON 解析,否则按纯文本${CLAUDE_PROJECT_DIR}(项目根)、${CLAUDE_PLUGIN_ROOT}、${CLAUDE_PLUGIN_DATA};带占位符就用 args: [] 的 exec 形式,避免空格路径翻车PostToolUse + matcher Edit|Write,跑 prettier/eslint --fix;用 if: "Edit(**/src/**)" 限定范围npm test|pytest|go test,把命令改写成只显示失败详情再放行(官方文档给的 updatedInput 写法)tool_name 与参数 append 到日志文件五种 handler 类型里,command 之外还有:http(POST 到内网校验服务,响应体同 JSON 协议)、mcp_tool(调已连接 MCP server 的工具)、prompt(发单轮 prompt 让模型裁决,默认用快模型)、agent(派 subagent 带 Read/Grep/Glob 验证后裁决,实验性)【官方文档】。
需要异步?async: true 后台跑不阻塞;asyncRewake: true 在脚本 exit 2 时把它叫醒看失败输出【官方文档】。
/hooks(只读浏览器,标注来源文件与类型)"disableAllHooks": true(managed settings 下发的 hook 不受下级禁用影响);单次运行停用:--settings '{"disableAllHooks": true}'allowManagedHooksOnly 只放行托管 hook;HTTP hook 有 allowedHttpHookUrls 白名单agent_id/agent_type 可区分【官方文档】不用开 Claude Code 也能先验证 hook 脚本逻辑(脚本协议就是 stdin JSON → stdout JSON):
mkdir -p /tmp/hook-test/.claude/hooks && cd /tmp/hook-test
# 写入 7.3 的 block-rm.sh 并 chmod +x,然后直接喂测试输入:
echo '{"tool_name":"Bash","tool_input":{"command":"rm -rf /tmp/x"}}' \
| .claude/hooks/block-rm.sh
# 预期输出 permissionDecision: "deny"
echo '{"tool_name":"Bash","tool_input":{"command":"ls -la"}}' \
| .claude/hooks/block-rm.sh; echo "exit=$?"
# 预期:无输出,exit=0(放行给正常权限流程)
再进 Claude Code 实际触发一次:让它执行 rm -rf /tmp/build-test,应被 hook 拒绝并显示「Destructive command blocked by hook」。
/hooks 确认来源与 matcher 正确本章信息保鲜期。 Hook 事件与字段在快速增加(FileChanged、PostToolBatch、asyncRewake 等均为近期新增)。本章核验于 2026-08-24(2.1.241);事件全集与 JSON schema 以官方 Hooks reference 为准。
Claude Code 实战指南:从上手到用好(橙皮书套装 · 卷〇)
判据:你正在从别的工具往对话里复制粘贴数据——issue 跟踪器、监控面板、数据库、设计稿。接上之后它直接读那个系统并动手,不再依赖你喂快照【官方文档】。MCP 是开放标准,server 不绑定 Claude Code;官方收录的连接器可在 Anthropic Directory 浏览,其中的远程 server 都能直接用 claude mcp add 接入。
安全前提:只接你信任的 server——会抓取外部内容的 server 带来 prompt injection 风险【官方文档】。
| 传输 | 命令形态 | 何时用 |
|---|---|---|
| HTTP(推荐) | claude mcp add --transport http notion https://mcp.notion.com/mcp | 云服务;支持 OAuth;唯一推荐用于远程 |
| SSE(已弃用) | claude mcp add --transport sse asana https://mcp.asana.com/sse | 只暴露 SSE 的老服务 |
| stdio(本地进程) | claude mcp add --transport stdio db -- npx -y @bytebase/dbhub --dsn "..." | 需要本机系统访问的工具/脚本 |
| WebSocket | claude mcp add-json events '{"type":"ws","url":"wss://..."}' | 需要服务端主动推送的场景;不支持 OAuth |
stdio 的两个坑【官方文档】:server 命令必须放在 -- 之后(否则 server 自己的 --port 之类会被 Claude Code 当成自己的参数解析);--env 与 server 名之间要夹至少一个别的选项,否则名字会被读成键值对。Claude Code 会给 stdio server 的进程环境注入 CLAUDE_PROJECT_DIR(稳定项目根)。
从别的客户端的教程抄配置?URL → 远程;npx -y xxx → stdio;mcpServers JSON 块 → claude mcp add-json <name> '<内层对象>'(注意:有 url 没 type 的条目必须补 "type":"http",否则被当作 stdio 而报错跳过)【官方文档】。
| scope | 存哪 | 给谁 |
|---|---|---|
local(默认) | ~/.claude.json 按项目路径归档 | 只有你自己、只在当前项目 |
project | 项目根 .mcp.json,进版本库 | 全团队同一份配置 |
user | ~/.claude.json | 你所有项目 |
同名 server 多处定义时按 local > project > user 取最高优先的一份整体生效,字段不跨层合并。.mcp.json 支持 ${VAR} 与 ${VAR:-default} 环境变量展开——团队共享配置、密钥不进版本库就靠这个【官方文档】。
项目级安全闸:交互会话首次使用 .mcp.json 里的 server 前要批准;未信任文件夹里,签入版本库的 enableAllProjectMcpServers/enabledMcpjsonServers 一律忽略(v2.1.196 起),server 停在「Pending approval」。非交互 claude -p 与云会话无法弹批准框,直接加载——克隆陌生仓库后先看它的 .mcp.json 再跑 -p【官方文档】。
claude mcp list 看健康状态(✔ Connected / ! Needs authentication / ✘ Failed to connect,失败会附 HTTP 状态码等细节,凭据样文本会被脱敏);/mcp 是会话内面板:认证、重连、禁用、看工具数【官方文档】MAX_MCP_OUTPUT_TOKENS 调上限。工具定义默认 deferred(tool search),只把名字放进 context,省钱章已述~/.claude.json 的 disabledMcpServers 里【官方文档】mcp__<server>__<tool>;权限规则、skill 的 allowed-tools、subagent 的 tools 字段、hook 的 matcher 都用这个名字。插件自带的 server 有额外前缀:mcp__plugin_<plugin>_<server>__<tool>——按裸 server 名写的 matcher 永远打不中它【官方文档】mcp__github__create_issue 写 ask/allow/deny--channels【官方文档】mcp-server-dev 可以脚手架一个(/plugin install mcp-server-dev@claude-plugins-official 后跑 /mcp-server-dev:build-mcp-server)【官方文档】stdio server 的本质是「stdin/stdout 上说 JSON-RPC 的进程」,不用装任何 SDK 也能手写并离线验证协议握手:
cat > /tmp/mini-mcp.py <<'EOF'
import json, sys
def reply(i, result):
sys.stdout.write(json.dumps({"jsonrpc":"2.0","id":i,"result":result})+"\n"); sys.stdout.flush()
for line in sys.stdin:
msg = json.loads(line)
m = msg.get("method")
if m == "initialize":
reply(msg["id"], {"protocolVersion":"2025-06-18",
"capabilities":{"tools":{}},
"serverInfo":{"name":"mini","version":"0.1"}})
elif m == "tools/list":
reply(msg["id"], {"tools":[{"name":"hello",
"description":"Say hello","inputSchema":{"type":"object","properties":{}}}]})
elif m == "tools/call":
reply(msg["id"], {"content":[{"type":"text","text":"hello from mini-mcp"}]})
# notifications(无 id)不回复
EOF
# 验证握手与工具发现(注意 initialize 后要发 notifications/initialized):
{ echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"t","version":"0"}}}';
echo '{"jsonrpc":"2.0","method":"notifications/initialized"}';
echo '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'; } | python3 /tmp/mini-mcp.py
预期看到两行 JSON 回复:initialize 的 capabilities 与 tools/list 里的 hello 工具。协议通了之后,把它接进 Claude Code 只需一条:
claude mcp add --transport stdio mini -- python3 /tmp/mini-mcp.py
# claude mcp get mini 确认 ✔ Connected,/mcp 里应能看到 1 个工具
本章信息保鲜期。 MCP 子系统近期迭代密集(v2 runtime、发现缓存、自动转后台、channel 均为近几个小版本引入)。本章核验于 2026-08-24(2.1.241);协议细节以官方 MCP 参考与 modelcontextprotocol.io 为准。
Claude Code 实战指南:从上手到用好(橙皮书套装 · 卷〇)
什么时候定义一个:同类任务反复派生、且每次都带同一套指令。subagent 在自己的 context window 里跑,带自己的系统提示、工具集与权限,主会话只收结论——省 context(第 4、5 章)、强制约束(限制工具)、控制成本(路由到 Haiku)三件事一次到位【官方文档】。
内置的先认脸:Explore(只读代码搜索,v2.1.198 起继承主会话模型、API 上封顶 Opus)、Plan(plan 模式调研员)、general-purpose(全能兜底)。这三个会跳过 CLAUDE.md 与 git status 以保持轻量(仅 Explore/Plan);自定义 subagent 默认都加载【官方文档】。
一个 markdown 文件:frontmatter 配能力,正文就是系统提示。放在 .claude/agents/(项目级,进版本库共享)或 ~/.claude/agents/(个人级)。v2.1.198 起 /agents 不再开向导,直接让它帮你写文件即可【官方文档】:
---
name: security-reviewer
description: 审查代码安全漏洞。改完认证/输入处理相关代码后主动使用。
tools: Read, Grep, Glob, Bash
model: sonnet
memory: project
---
你是资深安全工程师。审查代码时关注:
- 注入类漏洞(SQL/XSS/命令注入)
- 认证与授权缺陷
- 代码中的密钥与凭据
给出具体行号与修复建议。审查中发现的反复出现的模式写入你的记忆目录。
关键字段【官方文档】:
| 字段 | 作用 |
|---|---|
name / description | 必填。description 是它决定何时委派的唯一依据 |
tools / disallowedTools | 白名单 / 黑名单;支持 mcp__<server> 整服务器粒度。两者同设时先扣黑名单 |
model | sonnet/opus/haiku/全量 ID/inherit(默认继承主会话) |
permissionMode | 独立权限模式;父会话是 auto 时此项被忽略(分类器同一套规则评估) |
skills | 启动时把指定 skill 全文预载进 context |
memory | user/project/local 持久记忆目录,跨会话积累知识(推荐 project,可进版本库) |
isolation: worktree | 在临时 git worktree 里跑,改动隔离;无改动自动清理 |
hooks | 只在该 subagent 存活期间生效的 hooks(Stop 自动转为 SubagentStop) |
maxTurns / background / effort | 轮次上限 / 强制后台 / 推理档位 |
两个易踩的坑:后台 subagent(默认)的内置工具会被裁到只读+读写核心集;tools 列表全部拼错/不存在时 subagent 直接启动失败并报出无法解析的条目(v2.1.208 起,之前是带零工具空跑)。文件改动会被监视热加载,但新建的 agents 目录要重启会话才被监视【官方文档】。
判断标准:只在 .claude/ 里自己用 → standalone;要分享给团队或社区、要版本化 → 插件。插件就是带 .claude-plugin/plugin.json 清单的目录,组件目录一律在插件根(最常见错误就是把 skills/ 塞进 .claude-plugin/ 里)【官方文档】:
my-plugin/
├── .claude-plugin/plugin.json # 只有清单进这个目录
├── skills/<name>/SKILL.md # 命令变成 /my-plugin:<name>
├── agents/*.md # 自定义 subagents
├── hooks/hooks.json # 事件钩子
├── .mcp.json # 捆绑 MCP servers
├── .lsp.json # 语言服务器(代码智能)
├── monitors/monitors.json # 后台监视器
├── bin/ # 启用期间加入 Bash PATH
└── settings.json # 默认设置(当前仅 agent 等少数字键)
本地开发测试用 claude --plugin-dir ./my-plugin(也接受 .zip;--plugin-url 测远程包),改完 /reload-plugins 热加载;提交社区市场前跑 claude plugin validate ./my-plugin 本地预检【官方文档】。
分发路径:自建 marketplace(一个 git 仓库即可,团队内部用私有仓库)→ /plugin marketplace add <org/repo> → /plugin install xxx@marketplace。Anthropic 维护两个公开市场:claude-plugins-official(官方策划)与 claude-community(社区审核制,经 claude.ai 或 Console 表单提交,审核通过后钉在特定 commit SHA、CI 自动跟随你的新提交)【官方文档】。
安全须知:插件 subagent 的 hooks/mcpServers/permissionMode 字段会被忽略(防捆绑提权);项目级插件的组件经 workspace trust 闸;企业可用 managed settings 强制启用/禁用插件【官方文档】。
官方推荐路径【官方文档】:建插件目录与清单 → 把 .claude/commands|agents|skills 拷到插件根 → hooks 从 settings.json 搬进 hooks/hooks.json(格式相同)→ --plugin-dir 测试 → 删掉 .claude/ 里的原件(项目/个人级同名定义优先于插件,不删会盖过插件版;skills 因命名空间不同会两份并存)。
验证「插件结构 + 命名空间 + frontmatter 可解析」,不需要任何安装:
mkdir -p /tmp/my-plugin/.claude-plugin /tmp/my-plugin/skills/hello
cat > /tmp/my-plugin/.claude-plugin/plugin.json <<'EOF'
{ "name": "my-plugin", "description": "demo", "version": "1.0.0" }
EOF
cat > /tmp/my-plugin/skills/hello/SKILL.md <<'EOF'
---
description: Greet the user warmly.
---
Greet the user named "$ARGUMENTS" warmly.
EOF
# 1) 清单合法 2) frontmatter 可解析:
python3 -c "import json; json.load(open('/tmp/my-plugin/.claude-plugin/plugin.json')); print('manifest ok')"
python3 -c "
import re
s = open('/tmp/my-plugin/skills/hello/SKILL.md').read()
m = re.match(r'---\n(.*?)\n---', s, re.S)
assert m and 'description:' in m.group(1), 'frontmatter missing'
print('frontmatter ok')"
# 3) 有 claude CLI 时实测加载(命令应为 /my-plugin:hello):
# claude --plugin-dir /tmp/my-plugin
有 CLI 的机器上再跑 claude plugin validate /tmp/my-plugin,预期 ✔ Validation passed。
memory: project,两次会话后检查 .claude/agent-memory/ 里积累了什么本章信息保鲜期。 插件与 subagent 子系统迭代密集(记忆、隔离、监视器、社区市场均为近几个小版本引入/变更)。本章核验于 2026-08-24(2.1.241);以官方 subagents 与 plugins 文档为最终口径。
Claude Code 实战指南:从上手到用好(橙皮书套装 · 卷〇)
区别在于「谁启动下一轮」【官方文档】:
| 方式 | 下一轮何时开始 | 何时停 |
|---|---|---|
/goal | 上一轮结束时;或后台工作挂着时 check-in 到期 | 评估模型判定条件达成 / 不可能达成;或出现必须你修的错误;或你 /goal clear |
/loop | 时间间隔到点 | 你叫停,或它判断活干完了 |
| Stop hook | 上一轮结束时 | 你的脚本或 prompt 说了算 |
/goal 本质是一个会话级的 prompt 型 Stop hook 封装;与 auto mode 互补——auto mode 消除每工具提示,/goal 消除每轮提示。两者叠加才是完整的无人值守【官方文档】。
用法一句话:/goal test/auth 下全部测试通过且 lint 干净。设置即开工,不需要另发 prompt;状态栏显示 ◎ /goal active 与已运行时长。每轮结束后,条件与对话被发给一个小快模型评估器(API 上默认 Haiku),返回三种裁决:未达成(带着理由继续下一轮)、达成(清除并记录)、不可能达成(清除并记录失败原因)【官方文档】。
写好条件的三个要点【官方文档】:
npm test 退出码为 0」——评估器不调工具,只读对话里已呈现的证据运行机制里你该知道的【官方文档】:
CLAUDE_CODE_GOAL_CHECKIN_MINUTES 改首个间隔,设 0 关闭(v2.1.234+)disableAllHooks 或企业 allowManagedHooksOnly 下不可用;未信任文件夹里同样被工作区信任闸拦住claude -p "/goal CHANGELOG.md 有本周每个已合并 PR 的条目",建议加 --output-format stream-json --verbose 看过程/goal 和 /loop 都要有一个开着的会话。想「笔记本合上也照跑」,用调度【官方文档】:
/schedule 创建。注意:routine 归个人账号、以你的 GitHub/连接器身份行动、跑时无权限提示——仓库、网络、连接器都要按最小需要配置典型配方:夜间 backlog 整理(定时 + issue 连接器)、告警分诊(监控工具调 API 触发,自动开修复草稿 PR)、PR 例行评审(GitHub 触发器 + 团队清单)、文档漂移巡检(每周扫已合并 PR)【官方文档】。
无人值守 = 没人盯着烧 token。回收前几章的护栏:goal 条件里写轮次上限;评估 token 走小快模型、通常可忽略,但每轮主对话照常计费;定时任务每次触发带全量 context(第 5 章);长时间无人值守跑在 auto mode 并配好 deny 清单(第 3 章)【官方文档】。
本章信息保鲜期。 /goal 与 routines 都是 2026 年新引入且快速演进的特性(check-in 机制在 v2.1.234/236/239 连续调整)。本章核验于 2026-08-24(2.1.241);以官方 goal 与 routines 文档为最终口径。
Claude Code 实战指南:从上手到用好(橙皮书套装 · 卷〇)
官方给出的并行手段全景,按「你要自己协调多少」排序【官方文档】:
| 方案 | 本质 | 适用 |
|---|---|---|
| Subagents(第 9 章) | 单会话内的委派,结果回主 context | 聚焦的一次性子任务 |
| Worktrees | 同一仓库的多个检出,各开一个会话 | 互不冲突的并行修改 |
| Agent view | claude agents 一屏管理多个后台会话 | 派发多个独立任务,只在需要时介入 |
| 跨会话消息 | 会话之间互发消息(v2.1.224 起) | 两个已有工作流之间的协作 |
| Agent teams | 一个 lead 会话 + 多个 teammate 会话,共享任务清单、互发消息 | 需要讨论与自协调的复杂工作(实验性) |
| Dynamic workflows | 脚本编排几十到几百个 subagent(第 12 章) | 大规模、可重跑的编排 |
质量向的组合拳也值得一提:Writer/Reviewer 双会话——一个写实现,另一个在全新 context 里只看 diff 挑毛病,再把评审意见喂回 Writer。全新 context 的评审者不会偏袒自己刚写的代码【官方文档】。
claude agents 打开(research preview,界面与快捷键可能变化)。核心循环【官方文档】:
Space 看最近输出或它正在等的问题,直接回复不离开面板Enter attach 成完整会话;空输入上按 ← 撤离回表格;Esc 回 shell,会话继续跑典型一天:派发「修这个 bug」「审这个 PR」「查这个 flaky test」三行,自己去别的窗口干活,某行亮 Needs input 再回来。
实验性、默认关闭:设 CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1(settings.json 的 env 或环境变量)才会启用;未设时不会建任何团队目录、也不会派生 teammate【官方文档】。
与 subagent 的本质区别【官方文档】:
| Subagents | Agent teams | |
|---|---|---|
| 通信 | 结果返回给调用者 | teammate 之间直接互发消息 |
| 协调 | 主 agent 全权管理 | 共享任务清单 + 消息自协调 |
| 独立 context | 是 | 是,且每个 teammate 是完整 Claude 实例 |
| token 成本 | 低(只摘要回主 context) | 高(每成员独立实例;plan 模式下约为普通会话 7 倍,见第 5 章) |
| 最佳场景 | 只要结果的聚焦任务 | 需要互相挑战、讨论、分工的复杂工作 |
最适合的场景:多角度调研互搏、新模块每人认领一块、竞争性假设调试、跨前后端的联调改动。顺序性任务、同文件编辑、强依赖链的工作用单会话或 subagent 更划算【官方文档】。
注意事项:v2.1.178 起派生 teammate 不再需要先建团队;启用后 Claude 可能自行把「命名的 subagent」升级为 teammate——不想要这行为可以关掉对应倾向;非交互 -p 模式不派生 teammate;成本控制的四条(Sonnet 做 teammate、团队保持小、spawn prompt 聚焦、用完即关)见第 5 章【官方文档】。
不需要完整团队时,两个独立会话可以互发消息协作(如「前端会话」通知「后端会话」接口已定稿)。成本提醒:消息送达即在被送达会话里开新一轮(带全量 context),crossSessionInbound: hold 可改为暂存(第 5 章)【官方文档】。
并行的物理隔离靠 worktree:每个会话/子代理在独立检出里干活,改动不打架;subagent 定义里 isolation: worktree 一行即可(第 9 章),桌面应用也按此组织多会话【官方文档】。
本章信息保鲜期。 Agent view 是 research preview,agent teams 是实验特性,两者界面与行为都可能随版本变化。本章核验于 2026-08-24(2.1.241);以官方 agent-view 与 agent-teams 文档为最终口径。
Claude Code 实战指南:从上手到用好(橙皮书套装 · 卷〇)
一条 JS 编排脚本,由它(而不是 Claude 逐轮决定)驱动几十到几百个 subagent:脚本持有循环、分支与中间结果,Claude 的 context 里只落最终答案。脚本由 Claude 按你的任务描述来写,运行时在后台执行,会话保持响应【官方文档】。
与前面各章形态的分界线【官方文档】:
| 谁决定下一步 | 中间结果在哪 | 可重复的是什么 | 规模 | |
|---|---|---|---|---|
| Subagents / Skills | Claude 逐轮 | Claude 的 context | 定义/指令 | 每轮几个 |
| Agent teams | lead 逐轮 | 共享任务清单 | 团队定义 | 少数长跑同伴 |
| Workflows | 脚本 | 脚本变量 | 编排本身 | 几十到几百个 agent |
编排代码化还带来质量模式:让独立 agent 互相反驳彼此的发现再上报,或多角度起草计划再权衡——比单跑一遍更可信。可用性:v2.1.154+,全部付费套餐与 API、Bedrock/Agent Platform/Foundry 可用;Pro 需在 /config 的 Dynamic workflows 行开启【官方文档】。
ultracode(v2.1.160 前关键词是 workflow)。注意关键词只在亲手输入时生效——-p、定时任务、webhook、PR 评论转发进来的都不触发(v2.1.210 起)【官方文档】审批与权限【官方文档】:CLI 每次运行前展示计划阶段,可选「运行 / 本项目不再询问 / 查看原始脚本(Ctrl+G 进编辑器)/ 取消」。会话权限模式只控制启动提示;workflow 派生的 subagent 一律跑在 acceptEdits 并继承你的工具白名单——不在白名单里的 shell/web/MCP 调用仍可能中途问你,长任务前先把命令加白名单。
运行中用 /workflows 看进度:每阶段的 agent 数、token 量、耗时,可下钻到单个 agent 的 prompt 与最近工具调用;p 暂停、x 停单个或整个、r 重启单个、s 保存为命令【官方文档】。
跑得满意的 workflow 按 s 存成命令:项目位 .claude/workflows/(进版本库共享)或个人位 ~/.claude/workflows/;之后用 /<name> 直接跑。保存支持 args 参数传入(脚本里以全局 args 读取结构化数据,免解析)。跨团队分发就打进插件的 workflows/ 目录,以 /<plugin>:<name> 调用【官方文档】。
四个经典 prompt 形状(直接抄改):全库同问题审计(每文件一 agent + 对抗核验)、修到检查通过为止(跑 tsc → 修 → 循环至通过或连续两轮无进展)、并行大迁移(每文件独立副本隔离改动)、PR 全文件评审后汇总去重排序【官方文档】。
官方 Action(anthropics/claude-code-action)让它在你的仓库工作流里跑:PR/issue 评论里 @claude 即可让它分析代码、实现改动、推 commit;也可以对任意 GitHub 事件自动跑指定 prompt【官方文档】。
/install-github-app——装 GitHub App、配认证 secret(API key 存 ANTHROPIC_API_KEY,订阅 token 存 CLAUDE_CODE_OAUTH_TOKEN)、推工作流分支并开好 PR。需要仓库 admin 与 gh CLIdontAsk + allow 清单 + deny 兜底/deep-research,读最终报告并核对引用来源本章信息保鲜期。 Dynamic workflows(v2.1.154 引入)与 GitHub Actions 集成都在快速演进(关键词行为、保存路径规则、评审落点均为近期版本变更)。本章核验于 2026-08-24(2.1.241);以官方 workflows 与 github-actions 文档为最终口径。
Claude Code 实战指南:从上手到用好(橙皮书套装 · 卷〇)
| 命令/键 | 作用 | 章节 |
|---|---|---|
/init · /import | 生成 CLAUDE.md 初稿 / 导入其他 agent 配置 | 2 |
/memory · /context | 浏览编辑自动记忆 / 查看 context 占用 | 2、4 |
Shift+Tab | 循环切换权限模式(default→acceptEdits→plan) | 3 |
/permissions | 查看与管理 allow/ask/deny 规则 | 3 |
Ctrl+E / Tab(提示框内) | 风险解释 / 附评论批准 | 3 |
Esc · Esc Esc · /rewind | 打断 / 回溯到 checkpoint(对话、代码或两者) | 4 |
/clear · /compact [指令] · /btw | 清空 / 带指令压缩 / 不留历史的提问 | 4 |
/rename · /resume · --continue | 会话命名与恢复 | 4 |
/usage · /insights · /usage-credits | 用量与归因 / 工作方式报告 / 额度管理 | 5 |
/model · /effort | 切模型 / 调推理档(注意都炸缓存) | 5 |
/<skill> · /skills | 调用 skill / 浏览 skill 清单 | 6 |
/hooks | 只读浏览当前生效 hooks | 7 |
claude mcp add|list|get|remove · /mcp | MCP server 管理与认证 | 8 |
/plugin · /reload-plugins · --plugin-dir | 插件市场 / 热加载 / 本地测试 | 9 |
claude plugin validate | 插件发布前预检 | 9 |
/goal [条件] · /goal clear · Ctrl+O | 设目标 / 清除 / 看评估理由 | 10 |
/loop · /schedule | 会话内重复执行 / 创建 routine | 10 |
claude agents | 打开 agent view 管理后台会话 | 11 |
/workflows · /deep-research | workflow 进度面板 / 内置深度调研 | 12 |
claude -p "..." · --output-format stream-json | 非交互模式与流式 JSON 输出 | 4、10 |
/doctor · /verify · /code-review | 环境自检 / 对照运行中的应用验收 / 全新 context 评审 diff | 2、4 |
| 键 | 作用 | 章节 |
|---|---|---|
permissions.allow / ask / deny | 规则数组,deny > ask > allow | 3 |
permissions.defaultMode | 默认权限模式 | 3 |
permissions.disableBypassPermissionsMode | 禁用 bypass 模式(含 subagent frontmatter 里的声明) | 9 |
hooks | 事件 → matcher → handler 三层 | 7 |
disableAllHooks | 全局停 hooks(管不住 managed 层) | 7 |
claudeMdExcludes | 按 glob 排除上游 CLAUDE.md | 2 |
enabledMcpjsonServers / disabledMcpjsonServers | .mcp.json server 批准/拒绝(未信任文件夹里被忽略) | 8 |
disableBundledSkills · skillOverrides | 关内置 skills(/doctor 除外)/ 单个关停 | 6 |
crossSessionInbound: "hold" | 跨会话消息暂存不即送 | 5、11 |
autoMemoryEnabled | 自动记忆开关(关掉则 subagent memory 也失效) | 2、9 |
环境变量高频项:ENABLE_PROMPT_CACHING_1H(1 小时缓存 TTL)、MAX_MCP_OUTPUT_TOKENS(MCP 输出上限)、CLAUDE_CODE_GOAL_CHECKIN_MINUTES(goal check-in 间隔,0 关闭)、CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS(agent teams 开关)、DISABLE_AUTOUPDATER(控制升级时机)、MAX_THINKING_TOKENS(固定思考预算模型的预算上限)【官方文档】。
settings 文件层级:managed(企业)→ 命令行 --settings → 项目 .claude/settings.local.json → 项目 .claude/settings.json → 用户 ~/.claude/settings.json;前者优先于后者【官方文档】。
/context 确认文件真的加载了claude mcp list 看失败详情(HTTP 状态码);401/403 → /mcp 走 OAuth;stdio 不自动重连(第 8 章)/hooks 确认来源与 matcher;matcher 含特殊字符会走正则路径;claude --debug 看命中与退出码(第 7 章)claude --doctor 或会话内 /doctor 先跑一遍自检【官方文档】使用建议。 本书所有时效性论断都标注了核验日期。当你读到本书时若行为不符,请以上述官方页面与 changelog 为准——它们才是唯一持续更新的口径。