Anthropic Claude Code 101:一门免费课把 Loop Engineering 讲透
posts posts 2026-07-11T20:54:22+08:00Anthropic 免费课 Claude Code 101 的笔记:agentic loop 三阶段、5 类内置工具 + 4 类扩展、hooks 的 33 个事件、Explore/Plan 内置 sub-agent,再加上 Draft PR、声音输入、Fable 5 的非代码用法和 5 条工程经验。技术笔记Anthropic, Claude Code, Loop Engineering, Hooks, MCP, Skills, AI Coding AgentAnthropic Claude Code 101:一门免费课把 Loop Engineering 讲透
目录
- 这门课
- Loop Engineering 是什么
- agentic loop 三阶段
- Hooks:99% 开发者忽略的功能
- Sub-agents:把子任务委派给专门的子代理
- 为什么声音胜于写作
- Draft PR:自动代码评审
- Fable 5 用于非代码工作
- 给独立 Agent 项目作者的 5 条工程经验
- 关键资源与延伸阅读
1. 这门课
2026 年 7 月,Anthropic 在 Skilljar 上架了免费课程 Claude Code 101,讲的是 loop engineering,配 Claude Fable 5 和 Claude Code。precis0x 在 X 上转发推荐,原话是西语:“Este curso gratuito reemplaza cualquier tutorial de pago de claude code”(这门免费课能替代任何付费的 Claude Code 教程)。
视频 1 小时 1 分 04 秒,按 6 段展开:
00:00— Claude Code 内部如何工作05:01— agentic loop 详解16:21— 99% 开发者忽略的功能(hooks)19:01— 为什么声音胜于写作32:34— 用 Draft PR 自动审代码58:39— Fable 5 用于非代码工作
这门课的加分项在配套资料。Claude Code 文档已迁到 code.claude.com/docs/en/,hooks、sub-agents、MCP、skills 四个扩展点的 reference 和 quickstart 都写得很细。课程里的每个示例,都能在文档里找到对应章节的真实代码。
2. Loop Engineering 是什么
听多了 prompt engineering、context engineering、agent engineering,第一反应是:loop engineering 又是新词?
Anthropic 在 2024 年底的 Building Effective Agents 里,把 agent 工作流拆成 5 类:
| 工作流 | 描述 | 适用场景 |
|---|---|---|
| Prompt chaining | 任务分解为顺序步骤,中间加 programmatic check(“gate”) | 任务可清晰分解为固定子任务 |
| Routing | 输入分类后定向到专门 follow-up 任务 | 输入有清晰类别,分类可准确完成 |
| Parallelization | 多个 LLM 同时处理同一任务(sectioning / voting) | 任务可独立并行 + 需要多视角 |
| Orchestrator-workers | 中央 LLM 拆解任务 + workers 并行执行 | 任务结构未知、需动态分解 |
| Evaluator-optimizer | 一个 LLM 生成 + 另一个 LLM 评分,迭代改进 | 有清晰评价标准、迭代可收敛 |
同一篇文章里,排在五种工作流之上的还有一种更自主的形态,原文就叫 agents:模型在循环里调用工具、根据环境反馈决定下一步,适合"无法预测需要多少步"的开放问题。loop engineering 的对象就是这个循环——怎么让"决策 → 行动 → 评估"的每一圈都可观测、可中断、可改进,而不是把 prompt 写得更漂亮。Claude Code 的 agentic loop + hooks + sub-agents 三件套,把这条主线变成了可运行、可配置的参考实现。
3. agentic loop 三阶段
课程 00:00 段对应文档的 How Claude Code works 一节。文档原文讲得很简单:
When you give Claude a task, it works through three phases: gather context, take action, and verify results. These phases blend together. Claude uses tools throughout, whether searching files to understand your code, editing to make changes, or running tests to check its work.
三阶段:
- Gather context(收集上下文)——读文件、搜代码、看 git 状态、读 CLAUDE.md
- Take action(采取行动)——改文件、跑命令、搜网页、调子代理
- Verify results(验证结果)——跑测试、检查 type error、对比预期
文档还补了一句:
The loop adapts to what you ask. A question about your codebase might only need context gathering. A bug fix cycles through all three phases repeatedly. A refactor might involve extensive verification.
意思很直白:循环的形状随任务变。问问题可能只跑阶段 1,改 bug 三个阶段反复跑,重构可能要大量阶段 3。走哪个阶段、走多远,由 Claude 自己决定。
5 类内置工具是循环能跑起来的基础:
| 类别 | 能做什么 |
|---|---|
| File operations | 读文件、编辑代码、创建新文件、重命名重组 |
| Search | 按 pattern 找文件、regex 搜内容、探索 codebases |
| Execution | 跑 shell 命令、启服务、跑测试、用 git |
| Web | 搜索网页、抓文档、查错误信息 |
| Code intelligence | 看 type error 和 warning、跳转到定义、找引用 |
4 类扩展是循环能扩出去的关键:
- Skills —— 给 Claude 加载领域知识(自定义工作流)
- MCP —— 连接外部服务(database / API / SaaS 工具)
- Hooks —— 在循环的关键节点自动跑命令(自动验证 / 自动 lint / 自动格式化)
- Sub-agents —— 把子任务委派给专门的子代理(探索 / 规划 / 实现)
把三阶段和这些工具拼起来,一个典型改动任务的长相是这样:Claude 先读目标文件和相关调用,定位改动点(Gather,靠 File operations 和 Search);然后改代码、跑测试(Act,靠 Execution);测试没过,它读报错、再改、再跑(Verify,又回到 Gather / Act)。文档里那句 “A bug fix cycles through all three phases repeatedly” 落到实操,就是这一圈一圈的循环。任务越大,循环嵌套得越深,hooks 和 sub-agent 的价值也越明显——它们是往这个循环里插工程挂点的东西。
4. Hooks:99% 开发者忽略的功能
课程 16:21 段对应 Hooks reference。这是整门课最需要花时间学的部分。
Hooks 是 Claude Code 在 agentic loop 关键节点自动执行的用户定义逻辑。文档对它的定义是:
Hooks are user-defined shell commands, HTTP endpoints, MCP tool calls, LLM prompts, or subagents that execute automatically at specific points in Claude Code’s lifecycle.
注意载体不止 shell 命令一种——HTTP 端点、MCP 工具调用、LLM prompt、subagent 都能当 hook。它们能:
- 每个工具调用前 拦截(
PreToolUse) - 每个工具调用后 触发(
PostToolUse) - 每个 session 开始/结束时(
SessionStart/SessionEnd) - 每条 prompt 提交时(
UserPromptSubmit) - 每次 context 压缩前后(
PreCompact/PostCompact)
官方文档目前列出了 33 个 hook 事件(2026-09 核对),按触发节奏大致分几组:
once per session: SessionStart, Setup, InstructionsLoaded, SessionEnd
once per turn: UserPromptSubmit, UserPromptExpansion, Stop, StopFailure,
Notification, MessageDisplay
per tool call: PreToolUse, PostToolUse, PostToolUseFailure, PostToolBatch,
PermissionRequest, PermissionDenied
sub-agent / team: SubagentStart, SubagentStop, TaskCreated, TaskCompleted,
TeammateIdle
worktree / dir: WorktreeCreate, WorktreeRemove, DirectoryAdded, CwdChanged,
FileChanged, ConfigChange
model switch: PreModelSwitch, PostModelSwitch
context: PreCompact, PostCompact
MCP elicitation: Elicitation, ElicitationResult事件数量一直在涨,这套分组只是便于理解,以官方文档为准。
文档给了一个很实用的例子:写一个 PreToolUse hook,拦掉所有 rm -rf 命令。
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"if": "Bash(rm *)",
"command": "${CLAUDE_PROJECT_DIR}/.claude/hooks/block-rm.sh",
"args": []
}
]
}
]
}
}block-rm.sh:
#!/bin/bash
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整段链路是这样:
- Claude Code 决定跑
Bash "rm -rf /tmp/build" - PreToolUse 事件触发
- Claude Code 把工具调用以 JSON 形式通过 stdin 发给 hook
block-rm.sh读 stdin,检查命令包含rm -rf- 脚本输出
permissionDecision: "deny"+ 原因 - Claude Code 取消这次工具调用,改走别的路径
这种"在 loop 里插入自定义决策点"的能力,是 loop engineering 工程化的标志。没有 hooks 的 agent 是个黑盒——你能看到它做了什么,但没法在它做之前拦截、做完之后审查。有了 hooks,每一步都变成可观测、可干预的工程对象。
实战里最常用的 4 个 hook 类型:
PostToolUse跑 lint / format —— 每次 Claude 改完文件,自动跑 ESLint / Prettier / gofmtPreToolUse拦危险命令 ——rm -rf/git push --force/chmod 777/> /etc/...PostToolUse自动 commit —— 文件改完跑git add -p+git commit(带结构化 message)UserPromptSubmit注入上下文 —— 自动加载当天的 issue / CHANGELOG / standup notes
5. Sub-agents:把子任务委派给专门的子代理
课程 05:01 段对应 Sub-agents。这是 Claude Code 把 loop engineering 提到多 agent 层面的一步。
Claude Code 内置了 Explore 和 Plan 两个 sub-agent:
- Explore —— 专门做 codebase 搜索和理解,不修改文件,把结果留在主对话 context 之外
- Plan —— 专门做实施计划,把方案留在主对话 context 之外
文档原文:
When invoking Explore, Claude specifies a thoroughness level: quick for targeted lookups, medium for balanced exploration, or very thorough for comprehensive analysis.
Explore 分三个 thoroughness 级别,对应快查 / 平衡 / 全量。
自定义 sub-agent 的方式,文档说得很清楚:
Subagents are Markdown files with YAML frontmatter. To create one, ask Claude to write it for you, or write the file yourself.
sub-agent 就是 Markdown 文件 + YAML frontmatter,路径在 .claude/agents/(项目级)或 ~/.claude/agents/(用户级)。一个完整的例子:
---
name: code-reviewer
description: Reviews code changes for quality and security
tools: Read, Grep, Glob, Bash
model: sonnet
---
You are a senior code reviewer. For each diff:
1. Check for security vulnerabilities (OWASP top 10)
2. Verify test coverage for new code paths
3. Flag complexity hotspots (cyclomatic > 10)
4. Suggest concrete refactors
Return a structured report with sections:
- Critical issues (must fix)
- Warnings (should fix)
- Suggestions (nice to have)YAML frontmatter 字段:
| 字段 | 作用 |
|---|---|
name | sub-agent 名,Claude 用来引用 |
description | 关键——决定父 agent 何时调用这个 sub-agent |
tools | 限制可用的工具(不是全部 = 更安全 + 更省钱) |
model | 指定模型(haiku / sonnet / opus) |
permissionMode | 权限模式(acceptEdits / bypassPermissions / default) |
hooks | sub-agent 专属 hooks |
必填的只有 name 和 description,其余全是可选。文档还支持 disallowedTools、maxTurns、skills、mcpServers、memory 等十几个字段,用到再查。
tools 字段值得单独拎出来说。一个 code reviewer 不该有 Write 工具,因为它的职责是"读 + 评论",不是"读 + 改"。这种最小权限是 sub-agent 设计的关键。
sub-agent 的 context 是隔离的。Explore / Plan 拿到结果后,只把摘要返回主对话,自己的完整 context 不进主对话,避免探索性操作把主对话 context 灌满。
6. 为什么声音胜于写作
课程 19:01 段是"软"的一块,讲的输入方式:说话,而不是打字。
这不是课程自创的噱头,Claude Code 里有真实功能托底。interactive-mode 文档列了专门的 Voice input 条目:按住或点按 Space 开始语音听写,/voice tap 可以切成点按切换模式,快捷键支持重绑。对着终端说一段需求,Claude 收到的是转写后的 prompt。
这和 hooks 的工程哲学一致:
- Hooks 是"机器可读的语言" —— 用 JSON schema、命令、shell 表达意图
- Voice 是"自然语言的高密度变体" —— 说话比打字带的信息密度高
落到 loop engineering 上:如果你发现自己反复输入同一段 prompt,先想 hooks 能不能把它机械化掉,再想 voice 能不能说得更省,剩下的纯重复 prompt 才值得封装成 slash 命令。
7. Draft PR:自动代码评审
课程 32:34 段对应 Claude Code 的 pull request 工作流。
官方能力分两层。第一层是本地:文档 overview 原话是 Claude Code “works directly with git. It stages changes, writes commit messages, creates branches, and opens pull requests”——改完一组相关文件,让 Claude 自己跑 hooks(lint / format / type-check)、推分支、开 PR。第二层在 CI:GitHub Actions 集成可以在每个 PR 上自动跑 code review,changelog 里的 /ultrareview 命令也在这条线上。
把 PR 开成 draft 状态、让 reviewer 先看机器写完并通过自动检查的代码,是对这套能力的自然用法。loop engineering 在这里落在团队协作上:agent 不是替开发者写代码,而是把开发者从"写完再手动验证"里解放出来,改成评审 agent 写的代码。
容易踩的坑是 hook 写得太激进(比如 PostToolUse 直接 push force)。如果不写 if matcher,所有 Bash 调用都会触发 hook。最小权限 + 最小触发面是写 hook 的核心。
8. Fable 5 用于非代码工作
课程 58:39 段讲一个事实:Fable 5 不只能写代码。
先说模型本身。Fable 是 Anthropic 与 Opus、Sonnet、Haiku 并列的一条模型线,模型配置文档的原话是 “Claude Fable 5.1 and Claude Fable 5 are the most capable models in Claude Code”——写作本文时它是 Claude Code 里最强的模型。它不叫"Claude 5",就像 Opus 5 不叫"Claude 5"一样,Fable 是独立的名字。
而 Claude Code 底层也不只是"代码 agent"。overview 的定义是:
Claude Code is an agentic coding tool that reads your codebase, edits files, runs commands, and integrates with your development tools.
读代码库、改文件、跑命令、接工具——这套循环 + 工具的框架不挑任务,任何命令行能表达的事都能跑。
项目里常见的非代码用法:
- 文档维护 —— 改 README / CHANGELOG / doc site,自动 commit + 开 draft PR
- Issue 分类 —— 读新 issue,跑 hooks 调 jira API 自动加 label / assign
- 数据清洗 —— 读 CSV / 数据库,输出清洗后的结构化数据
- 运维脚本生成 —— 用户说"我需要一个 cron 脚本每天备份 X",Claude 生成 + 自我测试
- 研究 agent —— 搜网页 + 抓文档 + 写 summary,写到本地 markdown 文件
这段课的价值在于换了个视角:循环是 agent 的主体,prompt 只是每一圈的输入。把 prompt engineering 的功夫花在循环的挂点上——hooks、sub-agents、工具——比反复打磨某一句话的措辞,回报高得多。
9. 给独立 Agent 项目作者的 5 条工程经验
把课程和文档合在一起,再加上我在 Claude Code 和写 Agent 项目里踩过的坑,给独立 Agent 作者 5 条可复用的经验:
1. Hooks 是 Claude Code 最大的杠杆,但也是最容易写错的地方。 一个项目至少要有 lint hook(PostToolUse)和危险命令拦截 hook(PreToolUse)。这两条能把大部分"agent 改坏代码"的事故挡在萌芽,先写这两个再加别的。
2. Sub-agent 的 description 字段是它能否被调用的唯一信号。 写得模糊的 sub-agent 永远不会被父 agent 调用。这跟 Claude API 工具设计的建议一致:description 是模型决定何时调用的唯一信号。写 description 时把自己代入父 agent,问"我看到这个描述,会不会调用它?"
3. 用 Explore / Plan 内置 sub-agent 之前,先确认你的 Claude Code 版本带这两个。 更早的版本不内置,Claude 自己探索 / 规划会把主对话 context 灌满。版本太旧就升级,或者手动写两个 .claude/agents/explore.md / .claude/agents/plan.md 顶上。
4. Loop engineering 的核心是"让循环可观测"。 一个好的 agent 系统应该能回答三个问题:
- agent 现在在哪个 phase(gather / act / verify)?
- 它刚才用了什么 tool?返回了什么?
- 它为什么停下来 / 为什么继续?
Hooks + sub-agent + MCP 共同提供了这三个问题的答案。如果你写完 agent 还是答不上来,说明 loop 还没被工程化。
5. Fable 5 不只是代码模型。 把 Claude Code 当成"终端里的通用 agent"——任何能用命令行表达的任务,都能让它跑。这意味着你投入的 hooks / sub-agents / skills 不只服务代码场景,而是服务所有命令行工作,这是 hook 体系性价比最高的回报。
10. 关键资源与延伸阅读
课程入口:
- Claude Code 101(Skilljar 免费课):
https://anthropic.skilljar.com/claude-code-101 - precis0x 整理的 6 段大纲推文:
https://x.com/precisox/status/2075824818440519692
Claude Code 官方文档(code.claude.com/docs/en/):
- 总目录:
https://code.claude.com/docs/en/ - Overview:
https://code.claude.com/docs/en/overview - How Claude Code works:
https://code.claude.com/docs/en/how-claude-code-works - Sub-agents:
https://code.claude.com/docs/en/sub-agents - Hooks reference:
https://code.claude.com/docs/en/hooks - Changelog:
https://code.claude.com/docs/en/changelog
Anthropic 关于 Agent 的官方博客:
- Building Effective Agents(2024-12):
https://www.anthropic.com/engineering/building-effective-agents
延伸阅读建议:
- 想深入 hooks 的全部事件:
https://code.claude.com/docs/en/hooks - 想写 custom sub-agent:
https://code.claude.com/docs/en/sub-agents - 想查模型别名与版本解析:
https://code.claude.com/docs/en/model-config
本文基于 Anthropic 官方 Claude Code 文档与免费课 Claude Code 101,hook 事件清单、引文与模型信息于 2026-09 对照 code.claude.com/docs/en/ 原文核对。文档会随版本变化,建议以当前版本为准。
参与讨论
使用 GitHub 登录。欢迎补充事实、异议与实践。
讨论暂时无法加载。