基于公开目录重新扩展,不照抄原书

把 Claude Code 训练成工程系统

这是一篇面向开发者、技术负责人和 AI 工程实践者的长篇教学文案。它用《Claude Code 实战:Harness 工程之道》的公开目录作为路线,把 Claude Code 的记忆、技能、子智能体、事件钩子、MCP、CI/CD、SDK 和插件化落地串成一套可操作的工程方法。

开始学习 直接看实战

$ claude "实现订单退款接口,并补测试"

读取 CLAUDE.md:项目约定、分层规则、安全边界

Skill activated: backend-feature

SubAgent: codebase-explorer -> 定位支付模块

Tool: Read / Grep / Edit / Bash(test)

PostToolUse Hook: format + lint passed

Stop Hook: regression tests passed

$ git diff --stat

5 files changed, 142 insertions, 21 deletions

10教学模块,对应公开目录的主干章节
8核心机制:记忆、技能、代理、钩子、MCP、自动化、SDK、插件
3落地层级:个人效率、团队规范、企业治理
1中心思想:模型之外的工程壳决定上限
阅读声明:本文不是原书内容摘录,而是按公开目录和官方 Claude Code 文档做的教学扩展。具体命令、配置字段和能力边界会随 Claude Code 版本变化,正式落地前应再核对官方文档。

一、核心心智模型

Claude Code 的本质不是“更会聊天的 IDE 插件”,而是一个由模型驱动、由 Harness 约束和增强的工程执行循环。

1. Model 不是系统,Harness 才是系统

模型负责推理、规划、生成文本和调用工具。但真正决定可靠性的,往往是模型外面的那层工程结构:它给模型什么上下文、允许它用什么工具、什么时候拦截、如何验证、失败后如何反馈。

这层结构就是 Harness。它像一套安全带、仪表盘、方向盘和刹车系统,把“会思考的模型”变成“能在工程现场工作的代理”。

2. Agentic Loop 是基本运行节奏

Claude Code 接到任务后,通常会经历:理解目标、读取上下文、选择工具、执行操作、观察结果、修正计划、继续执行、最后交付。这不是一次性问答,而是循环。

Harness 工程的目标,就是让这个循环在复杂项目里仍然安全、便宜、可控、可复用。

Harness:上下文、权限、工具、验证、分发、团队规范 记忆 计划 工具 观察 验证 模型在循环里推理,Harness 在循环外定边界

点击图中的节点,可以查看每个环节在 Claude Code 中对应的工程机制。

同事视角:给它背景、边界和验收标准

如果你把 Claude Code 当作新人同事,它需要知道项目结构、编码约定、风险区域、测试方法、交付格式。`CLAUDE.md`、Skills 和 SubAgents 就是它的入职材料、岗位手册和专家协作网络。

编译器视角:输入越结构化,输出越稳定

命令、Skill、SDK 的价值,是把自然语言任务变成更稳定的工程输入。好的 Prompt 不是花哨语气,而是约束明确、数据充分、输出可验证。

流水线视角:让 AI 输出进入检查、审计和回滚机制

Hooks、CI/CD、权限和审计日志让 AI 的每一步都可以被观察、拦截、复核。工程团队真正需要的不是“AI 看起来聪明”,而是“AI 出错时系统知道怎么兜住”。

二、四层架构

可以把 Claude Code 的能力分成四层:记忆层、扩展层、集成层、编程层。每一层解决不同类型的问题。

层 1:记忆层

代表机制:CLAUDE.md、项目说明、团队规范。

解决问题:让 Claude Code 每次进入项目时都知道“这里怎么做事”。比如代码风格、目录职责、禁止修改的文件、测试命令、PR 规范。

层 2:扩展层

代表机制:Skills、SubAgents、Slash Commands、Hooks。

解决问题:把重复任务、专家能力和自动化检查沉淀下来,不再依赖每次手动提示。

层 3:集成层

代表机制:MCP servers、外部 API、数据库、GitHub/Jira/Slack 等工具。

解决问题:让 Claude Code 不只读写本地文件,也能接入团队真实工作流和业务系统。

层 4:编程层

代表机制:Headless CLI、Agent SDK、结构化输出。

解决问题:把 Claude Code 变成可编程组件,嵌进 CI、后台服务、内部平台和自动化脚本。

什么时候该用哪一层?

如果问题是“Claude 老忘记项目规则”,用记忆层。如果问题是“同类任务每次都要重新教”,用 Skills 或 Commands。如果问题是“上下文太大、任务太杂”,用 SubAgents。如果问题是“AI 的操作需要被拦截或自动验证”,用 Hooks。如果问题是“Claude 需要访问外部系统”,用 MCP。如果问题是“我要让 AI 在无人值守流程里跑”,用 Headless 或 SDK。

三、记忆系统:CLAUDE.md

记忆不是让模型“永远记住一切”,而是给每次会话一个高质量、可维护的起点。

CLAUDE.md 应该写什么

  • 项目是什么,主要用户和核心目标是什么。
  • 目录结构如何分工,哪些目录不能随便改。
  • 开发、测试、构建、格式化命令。
  • 编码风格、命名习惯、错误处理原则。
  • 安全边界:密钥、生产配置、迁移脚本、数据文件。
  • 交付格式:修改说明、验证结果、风险提示。
写作原则:少写愿望,多写可执行规则。比如“代码要优雅”太虚;“新增 API 必须包含错误路径测试,并运行 npm test -- api”才有用。
# Project Guide

## What this project is
This repository contains a multi-tenant billing service.
The critical path is invoice generation, payment reconciliation, and audit logs.

## Development commands
- Install: `pnpm install`
- Test: `pnpm test`
- Lint: `pnpm lint`
- Typecheck: `pnpm typecheck`

## Engineering rules
- Do not edit generated files under `src/generated/`.
- Do not change database migrations unless the user explicitly asks.
- Prefer small, reversible patches.
- Add tests for bug fixes and behavior changes.

## Delivery format
When done, summarize:
1. Files changed
2. Behavior changed
3. Commands run
4. Remaining risks
记忆类型
适合内容
不适合内容
更新频率
风险
项目记忆
稳定架构、命令、目录职责
临时 TODO、个人偏好
低
低
团队记忆
代码评审标准、发布流程
某个人的临时习惯
中
中
本地记忆
个人环境、实验性配置
团队必须遵守的规范
高
中
企业策略
权限、合规、安全强制项
项目细节
低
高影响
一个好 CLAUDE.md 的自检清单
  • 新人读完能在十分钟内知道项目怎么跑起来。
  • Claude 读完能知道哪些操作需要谨慎。
  • 每条规则都能被执行或验证。
  • 没有把大量业务文档、API 手册、历史讨论塞进去。
  • 有明确的“完成后汇报格式”。

四、Skills:把专业能力打包

Skill 是“按需加载的能力包”。它不是把所有知识塞进主上下文,而是让 Claude 在任务相关时加载专门说明、脚本和参考资料。

参考型 Skill

像一本薄手册,告诉 Claude 某个领域的规则。适合代码审查、安全检查、写作风格、财务分析口径。

任务型 Skill

像一个操作流程,指导 Claude 完成一类任务。适合发版、提交、生成报告、迁移数据。

复合型 Skill

包含说明、脚本、模板、参考资料。适合复杂生产任务,但要通过渐进式披露控制上下文成本。

SKILL.md 的设计重点

description 是触发器。它要准确描述什么时候用,而不是泛泛介绍“我很强”。

正文是路由器。正文告诉 Claude 先做什么、何时读取哪个参考文件、何时运行哪个脚本,而不是把全部知识堆在一个文件里。

工具权限要最小化。如果 Skill 只是读文件做总结,就不该默认拥有写文件或执行任意 Bash 的能力。

---
name: api-review
description: Use when reviewing REST or GraphQL API changes for compatibility, security, and test coverage.
version: 1.0.0
allowed-tools: Read, Grep, Bash(npm test:*), Bash(pnpm test:*)
---

# API Review Skill

## Goal
Review API changes before merge. Focus on contract stability, auth checks,
input validation, error shape, and regression tests.

## Workflow
1. Inspect changed route/controller/schema files.
2. Compare public response shapes with existing tests and docs.
3. Check auth and permission boundaries.
4. Run the narrowest relevant test command.
5. Report findings by severity.

## Reference files
- Read `references/api-checklist.md` only if the change touches public API shape.
- Read `references/security-rules.md` only if auth, tokens, or PII are involved.
常见误区:把 Skill 当成“更长的 Prompt”。真正好的 Skill 更像小型软件包:入口短、资源分层、脚本稳定、权限收紧、可测试。

五、SubAgents:任务委派与上下文隔离

子智能体不是为了显得热闹,而是为了解决主上下文被污染、任务过大、专业边界不清的问题。

什么时候用子智能体

  • 需要大范围探索,但主线程只需要结论。
  • 需要并行调查多个模块。
  • 任务噪声很高,比如读日志、扫依赖、找历史实现。
  • 需要专业角色,比如安全审查、测试修复、性能分析。
  • 希望限制某类任务的工具权限。

什么时候不要用

  • 任务很小,主线程直接完成更快。
  • 下一步完全依赖子智能体结果,且没有并行空间。
  • 任务需要高度统一的编辑上下文,拆开会增加冲突。
  • 只是为了“多 Agent”而多 Agent。

只读观察者

负责读代码、找事实、整理证据。适合 codebase-explorer、doc-researcher、log-analyzer。

执行型处理器

负责一个清晰写入范围内的修改。适合 test-fixer、migration-writer、docs-updater。

并行调查组

多个子智能体分别调查前端、后端、数据库、部署配置,主线程整合。

流水线角色

先探索,再实现,再审查,再验证。每一环有清楚输入输出。

团队型协作

为团队沉淀固定角色:架构师、实现者、审查者、发布员。适合成熟组织,但治理成本更高。

---
name: codebase-explorer
description: Use proactively when a task requires locating relevant files, ownership boundaries, or existing implementation patterns before editing.
tools: Read, Grep, Glob, LS
---

You are a read-only codebase explorer.

Your job:
- Find the files and patterns relevant to the user's task.
- Summarize the smallest useful implementation path.
- Cite concrete file paths and symbols.
- Do not edit files.
- Do not run broad or destructive commands.

Return:
1. Relevant files
2. Existing patterns
3. Recommended edit scope
4. Risks or unknowns

六、Hooks:把“应该”变成“自动”

Hooks 是 Claude Code 的事件驱动机制。它允许你在工具调用前后、用户提交提示、会话停止等时机运行命令,从而实现拦截、审计、格式化和质量门禁。

执行前拦截:适合安全边界

在 Bash、Edit、Write 等工具执行前检查输入。比如阻止删除生产配置、阻止读取密钥文件、阻止危险 shell 命令。

执行后处理:适合自动格式化和审计

在文件编辑后运行格式化、lint、记录操作日志,或者把工具结果压缩成 Claude 能理解的反馈。

停止前门禁:适合验收

当 Claude 准备结束任务时,检查测试是否运行、是否还有未处理 TODO、是否遗漏交付说明。

子智能体结束检查:适合输出质量

当子智能体返回结果时,检查它是否给出证据、文件路径、风险说明,而不是只写宽泛结论。

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/block-dangerous-bash.sh",
            "timeout": 5
          }
        ]
      }
    ],
    "PostToolUse": [
      {
        "matcher": "Edit|Write|MultiEdit",
        "hooks": [
          {
            "type": "command",
            "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/format-and-lint.sh",
            "timeout": 30
          }
        ]
      }
    ]
  }
}

Hook 设计三原则

确定性优先:能用脚本判断的,就不要让模型再猜。

失败信息要可行动:不要只说 failed,要告诉 Claude 哪个文件、哪条规则、下一步怎么修。

控制阻塞成本:格式化可以快跑;全量测试可能放到 Stop Hook 或 CI 里。

安全提醒:Hook 自己也是代码。团队共享 Hook 前,应像审查构建脚本一样审查它,避免它读取密钥、发外网、修改无关文件或吞掉错误。

七、MCP:连接外部世界

MCP 可以理解为 AI 工具世界的标准适配层。它让 Claude Code 通过统一协议访问数据库、浏览器、GitHub、工单系统、知识库和内部服务。

从 M×N 到 M+N

没有标准协议时,每个 AI 客户端都要分别适配每个外部工具,复杂度是 M×N。MCP 把外部工具包装成 server,AI 客户端只要理解 MCP,复杂度接近 M+N。

MCP 与 Skill 的关系

MCP 像厨房,提供真实工具和食材;Skill 像菜谱,告诉 Claude 什么时候用哪些工具、按什么步骤组合、如何判断做完。

Claude Code MCP Client GitHub MCP DB MCP Knowledge MCP PR / Issue / Repo 业务数据库 文档知识库
MCP 落地前要问的 6 个问题
  • 这个 MCP server 会暴露哪些工具?是否需要全部暴露?
  • 它能读取哪些数据?是否包含客户信息、密钥或生产数据?
  • 它能写入或删除数据吗?写操作是否需要额外确认?
  • 工具输出是否可能过大,导致上下文成本爆炸?
  • 认证凭据放在哪里,如何轮换?
  • 失败时 Claude 能收到可理解的错误信息吗?

八、Headless 与 CI/CD

当 Claude Code 从交互终端进入无人值守流程,它就不再只是个人助手,而是软件交付链的一环。

自动代码审查

在 PR 创建或更新时,让 Claude 检查风险、测试覆盖和变更说明。适合做第一轮筛查,不应替代人类审批。

失败分析

当 CI 失败时,收集日志、定位可能原因、提出修复建议,必要时生成补丁。

发布辅助

根据提交、issue、PR 自动整理 changelog、迁移说明、回滚策略和验证清单。

无人值守的关键不是“大胆放权”,而是“窄授权 + 强验证”。CI 里的 Claude Code 应该默认只拿到完成任务所需的最小权限,并保留完整日志。
# CI 中的 AI 审查任务设计示例

Goal:
Review the pull request for risky changes.

Inputs:
- PR diff
- Test results
- Project CLAUDE.md
- Security checklist

Allowed actions:
- Read repository files
- Read CI logs
- Comment with findings

Forbidden actions:
- Do not push commits
- Do not approve the PR
- Do not access production secrets

Output:
- Critical findings
- Suggested tests
- Questions for human reviewer
- Confidence level

九、Agent SDK:把 Claude Code 变成组件

CLI 适合人机协作,SDK 适合系统集成。SDK 的价值在于你可以用程序控制会话、工具、权限、消息流和结构化输出。

适合 SDK 的场景

  • 内部代码分析服务。
  • 批量文档生成或迁移助手。
  • 带审计日志的 AI 运维工具。
  • 面向业务用户的受控自动化平台。
  • 需要 JSON Schema 输出的工作流。

CLI 与 SDK 的选型

如果任务由工程师临场判断、频繁切换上下文,用 CLI。如果任务有固定入口、固定输入、固定输出、需要被其他系统调用,用 SDK。

不要太早 SDK 化。先在 CLI 中跑通工作流,再把稳定部分抽成命令、Skill、Hook,最后再封装成服务。

// 伪代码:代码分析服务的 SDK 化轮廓
import { query } from "@anthropic-ai/claude-code";

export async function analyzePatch(diffText) {
  const messages = [];

  for await (const message of query({
    prompt: `
      Review this diff for correctness, security, and missing tests.
      Return strict JSON with fields: findings, tests, risks.

      DIFF:
      ${diffText}
    `,
    options: {
      allowedTools: ["Read", "Grep"],
      maxTurns: 6
    }
  })) {
    messages.push(message);
  }

  return normalizeClaudeMessages(messages);
}

十、Plugins:团队能力的封装与分发

当一个团队积累了稳定的 Skills、SubAgents、Hooks 和 Commands,就需要把它们打包成可安装、可版本化、可治理的能力包。

什么时候该做 Plugin

  • 多个项目重复使用同一套 AI 工作流。
  • 安全、审查、发布等流程需要统一。
  • 需要给新人一键安装团队标准能力。
  • 需要版本管理和回滚。

什么时候不该做 Plugin

  • 流程还不稳定,经常改。
  • 只服务一个项目,放项目目录更清晰。
  • 权限边界还没想清楚。
  • 缺少 README、示例和测试方式。
team-ai-harness/
  plugin.json
  skills/
    api-review/
      SKILL.md
      references/api-checklist.md
    release-notes/
      SKILL.md
      templates/changelog.md
  agents/
    codebase-explorer.md
    security-reviewer.md
  commands/
    review-pr.md
    prepare-release.md
  hooks/
    block-dangerous-bash.sh
    audit-tool-use.sh
  README.md

十一、综合实战:设计你的 Harness

下面这个小工具可以把你的选择转换成一份 Harness 配置草案。它不是最终答案,但能帮你思考应该先建设哪些能力。

选择你的团队痛点

选择左侧痛点,然后点击“生成草案”。

练习 1:写一个项目 CLAUDE.md

选一个真实项目,用 30 分钟写出项目目标、目录结构、命令、安全边界和交付格式。然后让 Claude Code 做一个小 bugfix,看它是否少问了重复问题。

练习 2:做一个代码审查 Skill

先写最小版本,只包含 description、审查流程、输出格式。使用 3 个历史 PR 测试触发是否准确,再决定是否加入参考文件和脚本。

练习 3:做一个危险命令 Hook

拦截 `rm -rf`、生产配置修改、密钥文件读取。让错误信息告诉 Claude 为什么被拦截,以及允许的替代方案。

练习 4:把审查放进 CI

只让 AI 输出审查意见,不允许推送代码或批准 PR。观察一周后再决定是否扩大权限。

十二、30 天学习路线

不要一上来就搭复杂 Agent 团队。先让一个项目稳定受益,再逐层升级。

第 1-3 天:建立基本使用习惯

熟悉 Claude Code 的交互方式、常用命令、权限确认、读写文件和运行测试。目标是让它完成小而明确的任务。

第 4-7 天:写好 CLAUDE.md

整理项目规则、命令、安全边界和交付格式。用真实任务反复修订,删除空话,保留可执行规则。

第 8-12 天:沉淀第一个 Skill

选择一个重复任务,如代码审查、发版说明、测试补全。写最小 Skill,并用历史案例验证触发准确性。

第 13-17 天:引入 SubAgent

先做只读型 explorer,让主线程不再承担大范围搜索噪声。之后再尝试执行型子智能体。

第 18-22 天:加入 Hooks

从低风险自动化开始:格式化、lint、审计日志。再加入危险命令拦截和 Stop Hook 门禁。

第 23-26 天:连接外部系统

用 MCP 接入一个低风险工具,比如只读知识库或 issue tracker。先读后写,先低权限后高权限。

第 27-30 天:团队化试点

把稳定的 CLAUDE.md、Skill、SubAgent 和 Hook 推给一个小团队试用。收集失败案例,更新文档,再考虑 Plugin 化。

小测验:选择正确组件

你的团队希望 Claude 每次修改代码后自动运行格式化,并在失败时把错误反馈给 Claude。应该优先使用什么?

资料来源

本文的结构参考公开目录,技术概念参考官方文档。这里列出便于继续阅读的链接。