Field Manual · 实战手册

小型团队 AI Coding 实战手册

别再堆「最佳实践清单」。团队真正缺的是一套可安装的控制系统:什么进每次会话、什么只在任务时加载、什么模型说了不算必须脚本拦住、项目目录怎么分区、规范怎么迭代还不污染 CLAUDE.md。建议是概率;墙是确定性;对照源用 skill+账本。

主轴:Anthropic Best Practices / Steering / Memory·Hooks·Skills。辅轴:AGENTS.md、Addy Osmani、superpowers、compound-engineering。目录与演进:AGE app-template 作只读参照 + 本机 /standards-age-review 与 Obsidian 账本。个人选型见 Agentic 作战手册。修订 2026-07-13。

§1

控制面:指令机制 + 工具层

Anthropic Steering 文讲的是「指令往哪放」;MCP 是工具连接层,不是同一种东西。团队规范的第一件事不是「写更长的 CLAUDE.md」,而是把每条指令放到正确的机制里——放错地方,轻则浪费 token,重则关键规则被淹没。

ANTHROPIC · STEERING CLAUDE CODE · 2026-06

「Every time X, always do Y」写在 CLAUDE.md 里是错的——该用 hook。「Never do this」若绝对不能发生,指令不够,要用 hook / permissions / managed settings。30 行流程写进 CLAUDE.md 是错的——该用 skill

机制何时进上下文权威团队用途
CLAUDE.md会话全程(子目录按需)建议命令、目录、团队规范、硬禁止的说明
Rules始终或 path 命中建议横切约定(API 必 Zod、migration 只追加)
Skills描述常驻;全文调用时建议发版、评审、排障等流程
Subagents独立窗口;只回摘要建议调研、安全审、对抗审查;定义在 .claude/agents/*.md
Hooks生命周期事件强制format、拦危险命令、Stop 验证
Permissions工具调用前强制allowlist / deny / sandbox
AGENTS.md跨工具约定(建议 @ 导入)建议Codex/Cursor/Claude 共用的项目说明书
MCP工具名常驻;schema 按需工具能力GitHub/Slack/DB 等连接;.mcp.json 进 git;密钥走环境变量不进库

另有 output styles / --append-system-prompt(改角色或单次附加系统提示),小团队少用。别把 MCP 当成「第八条 CLAUDE.md」——它解决的是能调什么外部系统,不解决「项目规则写在哪」。

☝ 点一层看权威含义。

判据一句话:删掉这行,agent 会做错什么?答不上来就删。必须永远做对 → 别只写 markdown,写成 hook 或测试。

§2

Week-0 落地剧本:第一周只做这些

小团队最常见的失败是一上来装 100 个 skill、抄 500 行 CLAUDE.md。按 Anthropic 内部与一线仓库收敛出的顺序:先能验证 → 再共享宪法 → 再自动化 → 再谈高级流程

  1. Day 1 · 每个活跃仓库能「自证」 确认本地有:测试命令、lint/format、CI 对 PR 的同一套命令。没有测试的模块,先给 agent 一个可跑的 check(哪怕是脚本 diff fixture)。官方第一原则:Give Claude a way to verify its work
  2. Day 1–2 · 薄宪法 + docs Day-0/init,删到 <150–200 行。共享事实写 AGENTS.md,Claude 用薄 CLAUDE.md @AGENTS.md。每人 CLAUDE.local.md + gitignore。应用仓按 §8 项目目录 搭 Day-0 树并填 docs/context/project-context.md——没填就别让 agent 大写代码。
  3. Day 2 · 装三条强制门禁 ① PreToolUse 拦写 .env / secrets 与危险 rm;② PostToolUse 对改动文件 format/lint;③ git pre-commit 密钥扫描。慢检查(全量 Sonar/CodeQL)放 CI,不要塞进每次 Edit。
  4. Day 3 · 工作流纪律写进宪法,不写成长篇小说 三句话够用:非琐碎改动先 plan;完成前必须跑验证命令;同问题纠正两次就 /clear 重开。大流程用 skill,不塞 CLAUDE.md。
  5. Day 4–5 · 选一个流程 skill,不是二十个 从「发版检查」或「PR 自检」二选一。有副作用的加 disable-model-invocation: true。流程型 skill 同阶段只留一个主将(见 Agentic · skill 治理)。
  6. Day 5 · 定人 + 定 PR 规则 指定 Constitution Owner(可兼职)。约定:改 AGENTS.md / hooks / 共享 skill 走 PR;agent 大 diff 不免除人类 review;禁止用 --no-verify 当日常文化。

Week-0 完成定义:任意成员在干净 clone 上能:用同一套命令绿测、agent 读到同一份宪法、危险写操作被 hook 拦住、PR 上 CI 与本地 check 一致。应用仓额外:project-context 里验证命令非占位符,且有一份带验收标准的 active requirement。

§3

验证墙:比再写十条规则更重要

官方 best practices 开篇几乎不是 CLAUDE.md,而是验证。没有 pass/fail 信号,你就是验证环本身——每个错误都等你发现。团队 AI 规范的 ROI,首先体现在agent 能否自己跑到绿

实现反馈速度用途
提示内验证 同一条 prompt 要求跑测试/对比截图 最快 日常任务;零配置
PostToolUse hook Edit/Write 后 format + 定向 lint 秒级 风格一致;当场修
Stop hook /goal 结束前跑 check;失败则阻止结束 十秒~分钟 无人值守循环的硬门
git pre-commit secret + staged lint 秒~十秒 进库前底线(注意:AI 大 diff 可能拖垮慢 pre-commit)
CI 全量 test + typecheck +(可选)Sonar/Semgrep 分钟 合并真相;深度分析只放这里
对抗审查 fresh subagent 审 diff(官方 /code-review 模式) 分钟 实现者不当裁判;Addy 亦强调 fresh-context review
本地 · 快 Lint / format / 单测子集 目标 < 60s,agent 能自修。PostToolUse + pre-commit。AI 一次改 40 文件时,避免全仓慢 hook 超时——按变更文件跑。
远端 · 深 全量测试 · Sonar · CodeQL 目标「合并前必绿」。别写进「每次 Edit」。团队可对 main 设 quality gate,对草稿 PR 降级为 warning。

实战坑:把 10 分钟分析塞进 agent hook → 全员关掉 hook → 底线归零。慢检查上 CI;快检查贴 agent 手边。

§4

宪法怎么写:谁受影响,就写给谁

第一性原理:CLAUDE.md 不是「另一个 README」,而是每次会话自动注入的行为说明书。写错位置的成本是:同事被你的个人习惯绑架,或你的续跑断点被提交进库。Linux/WSL 文件名必须是 CLAUDE.md(大小写敏感)。官方建议单文件 <200 行;无主的 monorepo 宪法会只增不减——要有 owner,改动走 PR。

一句话分层

~/.claude/CLAUDE.md = 你的操作系统(方法论、表达、本机环境)· <repo>/CLAUDE.md(+ AGENTS.md)= 团队增强版说明书(客观事实)· CLAUDE.local.md = 私人笔记本(本仓库个人工作流,gitignore)· 三层各管各的,不冲突。

层级地图

路径影响谁Git该写什么不该写
企业 managed /etc/claude-code/… 机上所有人 IT 分发 合规、安全策略 业务细节
全局·个人 ~/.claude/CLAUDE.md 你的所有项目 思维方式、L0/L1/L2 路由、OpenSpec 总流程、验证纪律、Obsidian 总约定、本机环境(node 绝对路径、gh、uv…) 具体仓库结构、某项目端口
项目·团队 ./CLAUDE.md./.claude/CLAUDE.md + 建议 AGENTS.md 本仓库所有人(含同事) 是 · PR 管控 简介、结构、栈、构建/测试命令、代码规范、分支策略、架构红线、常见陷阱 个人偏好、进度、change id、个人续跑、Obsidian 路径
项目·本地 ./CLAUDE.local.md 只有你 · 本仓库 否 · gitignore 续跑断点、当前 change、设计文档路径、本机 URL、个人临时偏好 团队必须知道的事实、密钥明文
子目录 <repo>/<dir>/CLAUDE.md 读该目录时(按需) 子模块特有约束 项目级已写过的重复内容

内容分级速查(统一 vs 放开)

内容全局个人项目团队CLAUDE.local子目录
思维方式 / 表达风格
工作流方法论(OpenSpec 总则等)仅本仓特例
本机环境路径(nvm、uv、WSL)仅本仓差异
Obsidian / 个人档案约定本仓 index 路径
项目简介 / 仓库地图可选细化
构建·测试·部署命令可选
代码规范 / 框架坑可选
分支 / 提交 / PR 策略
架构红线可选
进度 / 状态 / change id❌ 禁止
个人续跑命令总则放全局✅ 当前断点

关键区分:全局是你个人的,项目是团队共享的。项目级会被所有人的 Claude 读到——必须是客观事实,不能放个人习惯。进度与续跑写进项目 CLAUDE.md,是多人协作第一号脏数据来源。

项目级 CLAUDE.md:团队共享的必选板块

板块必须?说明
项目简介必须一段话,新人 10 秒看懂
仓库结构必须只列容易迷路的目录
技术栈与版本推荐关键依赖约束
构建 / 测试 / 部署命令必须可复制执行
代码规范(框架坑)必须反直觉处;通用风格可引用 linter
分支与提交必须避免「分支叫啥来着」
架构红线必须不可违反的设计决策
常见陷阱推荐踩过的坑,省别人时间
个人工作流 / 进度禁止→ 全局或 CLAUDE.local.md

跨工具时:客观事实优先写 AGENTS.md,Claude 用薄 CLAUDE.md@AGENTS.md + 少量 Claude 专用路由。改团队宪法 = 提 PR,至少一人 review,避免把个人习惯写进去。

CLAUDE.local.md:私人笔记本(推荐,别塞进 ~/.claude/projects 就忘)

官方支持 ./CLAUDE.local.md(或 ./.claude/CLAUDE.local.md):启动时加载,同层追加在 CLAUDE.md 之后。默认应 gitignore。相对 ~/.claude/projects/<encoded-path>/:local 文件就在仓库根,肉眼可见,更不容易忘——适合「快速进入状态 / 续跑 / 本仓事实源」。

放进 local 本仓 × 仅你 当前 openspec change id 与续跑命令;tasks 断点路径;Obsidian 本项目 index/设计文档路径;localhost 端口与 docker profile;未升格为团队规范的个人实验习惯。
别放 local 会害团队或泄密 架构红线、共享构建命令(→ 团队 CLAUDE/AGENTS);密钥明文;「我个人跳过测试」;任何希望新人 clone 后自动生效的规则。
# CLAUDE.local.md — 本机私有,勿提交
# .gitignore 必须包含:CLAUDE.local.md

## 快速进入状态
- 当前工程:<名称>(openspec change `<id>`)
- 续跑:/openspec-apply <id>
- 断点:openspec/changes/<id>/tasks.md

## 事实源(个人档案)
- 设计文档:<Obsidian 路径>
- 项目大脑:Obsidian 40-Projects/<项目>/index.md

## 本机
- API:http://localhost:18080
- DB:docker compose --profile dev up -d

## 禁止
- 密码 / token / 客户数据
- 应写进团队 CLAUDE.md / AGENTS.md 的规则

模板全文见 §11。会话用 /memory 确认 local 已加载。

全局个人层:补全本机环境,方法论只写一次

薄与可验证(官方留存测试)

Include agent 猜不到的 具体命令;框架坑;分支礼仪;架构红线;gotcha。
Exclude 噪音 读代码即知的结构;语言常识;API 全文;空话;长流程(→ skill);进度状态。

加载与冲突

两套记忆:CLAUDE.md vs Auto Memory

CLAUDE.md 是你写的指令;Auto Memory 是 Claude 自己学的。两套系统互补,但在团队场景下容易混淆——尤其不要把 auto memory 当团队共识。

CLAUDE.mdAuto Memory
谁写Claude 自己
内容指令、规则、命令学到的模式、偏好
加载每会话全量MEMORY.md 前 200 行/25KB;topic 文件按需
范围项目/用户/企业按仓库(机器本地)
共享进 git = 全员不进 git、不跨机器
团队风险低(有 PR 审查)——一个人的记忆可能被另一个人的会话误读
团队纪律:auto memory 是个人学习笔记,不是团队共识。团队事实只进 AGENTS.md / CLAUDE.md(git 管控)。用 /memory 审计当前加载了什么;发现脏数据就清。

维护节奏:agent 第二次犯同一错 → 改对应层(团队事实 / 个人 local / 或 hook)。每月修剪;砍不掉的长文挪 skill。留存测试:「去掉这行会不会做错?」

§5

工作流:探索 → 计划 → 实现 → 验证 → 沉淀

官方推荐默认四步:Explore → Plan → Implement → Commit。Superpowers 把「未批准设计不写码」做成硬门;Compound Engineering 要求每次交付让下次更容易。小团队不需要全套仪式,但需要同一条路由

级别例子强制动作禁止
L0 琐碎 文案、单文件小修、配置笔误 直接改 + 相关 check 跳过验证
L1 行为变更 半日以内 feature/bugfix 短 plan(可在会话内)→ 实现 → 测试绿 → PR 无验收标准开写
L2 结构性 跨服务、新子系统、数据迁移 书面 spec/设计批准 → 任务拆分 → 分会话执行 → archive 厨房水槽会话从头干到尾

会话卫生(官方 failure patterns 压缩)

ADDY OSMANI · AGENTIC CODING

难的部分从「打字」移到了「规格、审查、验证」。agent 写完后,用 fresh context 做 code review;团队应用 agent 做 PR 分诊,但人类仍对合并负责。

§6

Hook:最小可生产集合

Hooks 是「模型说了不算」的层。配置进 .claude/settings.json(团队共享)或 managed policy(企业强制)。用 /hooks 核对来源。

Hook 五种类型(不止 shell 命令)

类型做什么典型用途
command跑 shell 命令;stdin 收 JSON,exit 码 + stdout 返回lint、format、拦危险操作(最常用)
httpPOST JSON 到 URL通知 Slack、触发 webhook、记录审计
mcp_tool调 MCP 服务器的工具跨系统联动(如自动建 ticket)
prompt单轮 LLM 评估,返回 yes/no语义级判断(如「这个改动安全吗?」)
agent启动子代理(实验性)复杂审查、多步验证

常用生命周期事件:PreToolUse(工具调用前)、PostToolUse(工具调用后)、Stop(结束前)、SessionStart(会话开始)、PreCompact / PostCompact(上下文压缩前后)。完整列表见官方 hooks 文档。

最小可生产五道闸

  1. PreToolUse · 安全墙 拦:写 .env / **/secrets/**;破坏性 rm -rf;未授权 force-push。exit 2 + 原因回灌模型。Tech lead 指南普遍把这一条列为「10 分钟最小安全」。
  2. PostToolUse · 编辑后整形 matcher Edit|Write:只对变更路径跑 formatter / 快速 lint。官方示例就是 eslint-after-edit。保持独立、有 timeout。
  3. Stop · 可选完成门 对关键仓库:结束前跑 npm test --related 或项目脚本;失败则阻止「我做完了」。注意连续 block 上限(官方约 8 次后可被覆盖)——门要准,别无脑全仓。
  4. git pre-commit · 进库门 secret 扫描(sk-ant-、AKIA、私钥头等)+ staged 文件检查。与 Claude hook 互补:有人不用 Claude 时仍挡住。
  5. CI · 合并门 与本地同一入口脚本(make check / pnpm verify)。Sonar/Semgrep 作 quality gate 或 security job,不绑定交互循环。

配置示例见 §11 模板。原则:hook 失败信息必须可读,否则模型会瞎重试。

§7

Skill:少即是多,流程要评测

Skill = 可复用程序。启动只加载 name/description;装太多时 description 本身就是上下文税。官方:流程放 skill;副作用流程 disable-model-invocation: true

做法原因
重复 ≥3 次再 skill 化过早抽象制造互斥与维护成本
description 写触发边界决定会不会被误自动调用
正文含 DoD + 命令弱模型可执行;强模型也少飘
流程互斥、工具可叠两个 plan skill 同时指挥 = 混乱
进 git 的 skill 走 PR与代码同样的变更面
用 eval 改进,不靠 vibe3–5 条二元标准 × 多样输入 × 独立评分;改 prompt 直到分数平台期(社区自改进环,同源思路来自研究侧 auto-eval)

模型偏差怎么收

Agents vs Skills:什么时候用哪个

Skill 是「可复用流程」;Agent(.claude/agents/*.md)是「可复用角色」。Skill 定义步骤;Agent 定义身份、工具权限、模型选择。两者可组合:Agent 预加载 Skill。

SkillAgent
定义文件.claude/skills/<name>/SKILL.md.claude/agents/<name>.md
核心用途流程(发版、评审、排障)角色(reviewer、researcher、安全审计)
工具权限allowed-tools / disallowed-tools同上 + permissionMode + isolation
模型选择可选 model(仅本次调用)model + effort(整个代理生命周期)
上下文主会话内加载独立窗口;只回摘要
可组合skills: [skill-a, skill-b] 预加载
典型 frontmattername description disable-model-invocationname description tools model maxTurns isolation

判据:需要独立上下文、不同工具权限、或对抗性角色 → Agent。需要步骤化流程、在主会话内执行 → Skill。两者可叠:Agent 定义角色,skills: 字段给它装流程。

§8

项目目录规范与落地方法论

AI coding 不是只配 CLAUDE.md。仓库目录本身就是控制系统:控制面(agent 怎么干活)、真相面(产品/技术必须成立什么)、代码面(可运行实现)。下面是一套中小应用仓默认规范——借鉴 AGE 等实践的吸引子思路,但用自己的分层命名,不要求照搬任何模板目录名。

方法论一句话

Repo 是事实源,chat 是草稿。稳定真相用固定文件名维护;过程记录可带日期、可归档。Agent 每次开工先读「当前指针」,再动代码。目录只在有职责时才开——空目录是税,不是规范。

1 · 三面模型(先分区,再放文件)

放什么典型路径谁维护
控制面 Agent 行为、门禁、可复用流程 AGENTS.mdCLAUDE.mdCLAUDE.local.md.claude/(hooks/skills/agents/settings) Constitution Owner;local 个人自管
真相面 要建什么、当前支持什么、技术边界、冲突时谁赢 docs/(尤其 context / requirements / design / architecture) 产品/域 Owner;改动走 PR
代码面 可运行实现与可执行契约 src/(或 apps/packages)、tests/、schema/API 定义、部署清单 开发;DB/API 以代码/schema 为最终真相

三面不能互相顶替:hooks 拦不住错误需求;docs 不能当测试;代码里的注释不能当团队 AGENTS.md。

2 · 推荐目录全景(必须 / 推荐 / 按需)

repo/
├── README.md                 # 给人:如何跑起来(可薄)
├── AGENTS.md                 # 给 agent:操作契约【必须·git】
├── CLAUDE.md                 # 薄包装:@AGENTS.md + Claude 专用【必须·git】
├── CLAUDE.local.md           # 个人续跑/本机【必须 gitignore】
├── .gitignore                # 含 CLAUDE.local.md、.env、settings.local
│
├── .claude/                  # 控制面【必须有框架】
│   ├── settings.json         # 共享 hooks / 权限【git】
│   ├── settings.local.json   # 本机微调【gitignore】
│   ├── skills/               # 可调用流程 skill
│   ├── agents/               # 子代理角色定义
│   └── hooks/                # hook 脚本
│
├── docs/                     # 真相面 + 过程记忆
│   ├── index.md              # 文档路由(人/agent 入口)
│   ├── context/              # 【Day-0 必须】当前指针与规则
│   │   ├── project-context.md
│   │   ├── source-of-truth.md
│   │   ├── autonomy.md       # AI 可自主到什么程度
│   │   └── codebase-map.md   # 改哪里、脆点在哪
│   ├── requirements/         # 【必须有 active 一份】可实施需求
│   ├── design/               # 【推荐】稳定的产品/功能行为
│   ├── architecture/         # 【推荐】稳定的技术边界与基线
│   ├── plans/                # 【触发才建】切片执行与关闭条件
│   ├── backlog/              # 【推荐】下一步候选
│   ├── input/                # 【按需】原始 PRD/截图/纪要
│   ├── discussions/          # 【按需】需求澄清
│   ├── logs/                 # 【按需】实施日记(常带日期)
│   ├── bugs/                 # 【按需】非显然回归与根因
│   ├── testing/              # 【按需】手工测记 + known-good
│   ├── lessons/              # 【按需】可复用教训
│   └── archive/              # 【按需】人工批准后的冷文档
│
├── openspec/ 或等价 change 目录  # 【可选】若团队用 OpenSpec:必须在 context 里声明 active
├── src/ 或 apps/ + packages/     # 代码面【必须】
├── tests/                          # 【强烈推荐】
└── .github/workflows/              # CI【推荐】

名字可本地化(例如 docs/context/project-context.md当前状态.md),但职责不能丢:指针文件、验收需求、稳定设计/架构、过程计划、代码与测试。

3 · 每层写什么(职责表)

路径回答的问题写法要点
AGENTS.mdAgent 默认读什么、何时写 plan、完成标准?操作契约;可 @ 进 CLAUDE.md
docs/context/project-context.md现在在做什么?验证命令是什么?短、常改;写 active 需求/计划路径;命令必须可复制执行
docs/context/source-of-truth.md冲突时谁说了算?按问题类型指主源(需求/设计/架构/schema/计划/日志)
docs/context/autonomy.mdAI 能否直接改代码?保护区?implement / plan-first / ask-first / research-only
docs/context/codebase-map.md常见改动动哪些文件?入口、脆点、禁止乱改区
docs/requirements/*这一片要交付什么?验收是什么?可测行为;非目标;active 只有一份主需求
docs/design/*产品当前支持的行为?稳定文件名;收敛「已支持」而非史诗草稿
docs/architecture/*模块边界与技术基线?栈、边界、红线;DB/API 最终以代码/schema 为准
docs/plans/* 或 openspec change这一刀怎么切、何时算完?任务可勾选;验证门;关单前回写 owner doc
docs/logs|bugs|lessons发生过什么?下次别再踩?过程记忆;可带日期;重要教训升格到 architecture/design
src/ + tests/现在真正跑的是什么?行为真相以测试与可执行契约为准
.claude/*如何强制与提效?hooks 强制;skills 流程;agents 分工

4 · 事实源优先级(冲突时用)

问题主源备注
现在该建什么?docs/requirements/(active)input/ 只是原料,不能直接当验收
产品当前支持什么?docs/design/实现后要把变更回写 design
技术边界/模块职责?docs/architecture/跨模块红线写这里
DB / API 真实形状?schema / OpenAPI / 代码散文文档输给可执行定义
这一刀怎么关单?docs/plans/ 或 openspec change关单 ≠ 聊天说「好了」
上周踩了什么坑?docs/bugs/ · lessons/反复出现则升格进 architecture

冲突处理:需求 vs 设计不一致 → 先改文档再写码;代码 vs 文档不一致 → 标明是实现漂移还是文档过期,禁止静默二选一。文档 freshness 为 stale/unknown 时,默认只调研/对齐,不改产品行为(除非人明确批准)。

5 · 落地方法论(怎么做,不是怎么抄)

  1. Day-0 · 搭骨架,只填指针 建控制面三件套(AGENTS / 薄 CLAUDE / local+gitignore)+ .claude/settings.json 空 hooks 也可先就位。真相面只建 docs/index.md + docs/context/* + 一份 active requirement。验证命令写真实命令;占位符则停止实现。
  2. 切片开工 · 固定阅读序 Agent/人:project-context → autonomy →(冲突时)source-of-truth → active requirement → owner design/architecture → 相关代码。禁止从聊天长摘要直接开写。
  3. 分级施工 · 目录跟级别长 L0:可只改代码 + 相关测,context 指针可不动。
    L1:更新/新建 plan(或 openspec change),任务可勾选,验证门写清;合入前回写 design/requirements 中受影响句。
    L2:先 architecture/design 批准,再拆多 plan;跨模块边界变更必须改 architecture。
  4. 关单 · 四问 ① 验收是否用真实命令跑绿?② owner doc 是否回写?③ context 的 active 指针是否更新或清空?④ 非显然坑是否进 bugs/lessons?四问不过不算完成。
  5. 演进 · 按触发开目录 第一次需要澄清歧义 → 建 discussions;第一次非显然 bug → 建 bugs;第三次同类失败 → 升 lessons 或 skill。禁止「先开 15 个空文件夹」当规范落地。
  6. 治理 · 一人一源 任意时刻:一份 active requirement、至多一份 active plan/change。OpenSpec 与 docs/plans 二选一为主,或在 project-context 写死映射路径——禁止双真相。

6 · 单条变更(Spec)在目录里长什么样

最少字段 Why · What · Tasks · Gate · Archive 落在 docs/plans/…openspec/changes/<id>/。非目标写清;行为可测;任务可勾选;门是命令;关单后回写 design/architecture 或 archive。
漂移三选一 对齐 · 回写 · 废弃 代码错→修代码;文档旧→回写/归档;双废→标 deprecated,禁止 agent 再引用路径。

7 · Day-0 最小可复制树

repo/
├── AGENTS.md
├── CLAUDE.md              # @AGENTS.md
├── CLAUDE.local.md        # gitignore
├── .gitignore
├── .claude/
│   ├── settings.json
│   └── hooks/
├── docs/
│   ├── index.md
│   ├── context/
│   │   ├── project-context.md   # active 指针 + 验证命令表
│   │   ├── source-of-truth.md
│   │   ├── autonomy.md
│   │   └── codebase-map.md
│   ├── requirements/mvp-or-slice.md
│   ├── design/app-overview.md
│   └── architecture/system-baseline.md
├── src/
└── tests/
# docs/context/project-context.md(骨架)
## 身份
- 项目:
- 当前里程碑:
- 文档新鲜度:fresh | partially-stale | stale | unknown

## 当前指针(任意时刻只填真实路径)
- Active requirement: docs/requirements/…
- Active owner doc: docs/design/… 或 docs/architecture/…
- Active plan: docs/plans/… 或 openspec/changes/… 或 none
- AI autonomy: implement | plan-first | ask-first | research-only

## 验证命令(禁止占位符)
| 用途 | 命令 |
| 安装 | |
| 开发 | |
| 测试 | |
| Lint | |
| 构建 | |

8 · 反模式(目录专场)

9 · 规范持续演进:Skill + 账本(不污染 CLAUDE.md)

项目与规范都会变。外部模板(如 AGE)适合当只读对照源,不适合拷进每个会话。推荐固定三件套:

放什么不放什么
Skill(流程) 对照步骤、读哪些文件、三栏输出、完成定义;手动触发 业务仓路径细节、历史决策全文
账本(记忆) 采纳 / 暂缓 / 拒绝 / 已有等价;日期与落点 AGE 原文粘贴、每次会话必载规则
结果(生效) 业务仓 AGENTS.md / docs/ / OpenSpec / hooks 对照过程、个人续跑
CLAUDE.md 默认不写(避免上下文税与团队噪音) 演进笔记、AGE 摘要、账本表格
本机已落地示例 手动 skill ~/.claude/skills/standards-age-review/disable-model-invocation: true,入口 /standards-age-review。优化规范、目录、plan 关单、自主策略时再跑。
本机已落地示例 Obsidian 账本 vault:20-Tech/AI-HARNESS/notes/age-adoption-ledger.md。只追加行;先扫账本再对照,避免重复推销已拒绝项。
  1. 触发:改共享规范 / Day-0 后复盘 / 同类翻车第二次 / 季度扫「暂缓」列——日常写码不跑。
  2. 对照:按范围只读 AGE 2~5 个文件,输出「采纳 / 暂缓 / 不用」三栏。
  3. 决策:用户勾选后更新账本;批准后再改结果文件。
  4. 禁令:不把 AGE 长文或演进过程写进任何 CLAUDE.md;不一次 cp -r 全套空目录。

下一批高价值暂缓项(账本已记):自主等级+保护区、codebase-map、known-good baseline、Plan 决策表/Anti-Slacking——进真实业务仓时优先落地,而不是再抄 AGE 全文。

验收这套目录是否落地:新人(或新会话 agent)只读 project-context + active requirement 就能开工;验证命令可复制跑绿;任意冲突能在 source-of-truth 找到主源;关单后 design/architecture 与代码一致。规范演进可重复跑 skill+账本,且 CLAUDE.md 保持干净。参考实现可对照内部 age-app-template,以本节职责为准裁剪。

§9

多人协同:同一宪法,同一堵墙

共识不是「全员同一模型」,而是全员撞同一堵墙、读同一份说明书、按同一路由升级仪式。Wix 工程侧也在强调:agent 能读 repo,仍缺 PM 意图与半年前决策——那要进 AGENTS.md / Skills / 结构化上下文,不是靠更大模型。

角色(可兼职)职责
Constitution Owner根 AGENTS.md / CLAUDE.md / 共享 hooks;变更 PR 合并
Domain Owner子系统 nested rules;跨域接口升级 L2
Skill Steward互斥表、淘汰、golden 回归
Quality OwnerCI 门禁;防止为 agent 方便降质量

进 git / 不进 git

Commit 共享行为 AGENTS.md、薄 CLAUDE.md、.claude/rulesskills.claude/agents.mcp.json、项目 hooks、CI、已批准 spec/ADR。
Never 私有与密钥 CLAUDE.local.md、settings.local、~/.claude 全文、auto memory、.env、未脱敏对话、客户数据。

CLAUDE.md 协作三规则

PR 最低条

度量与持续改进(可选,Week-4+ 再加)

没有度量就没有改进。但别一上来就搞仪表盘——先跑一个月,再用数据说话。

指标怎么算为什么重要
Agent 自闭环率agent 完成且 CI 绿、无需人工补丁的比例衡量验证墙是否够强
Hook 绕过率--no-verify 使用次数 / 总 commit衡量 hook 是否太慢或太吵
Skill 使用率过去 90 天被调用 ≥1 次的 skill 占比衡量 skill 目录卫生
PR Review 发现率reviewer 在 agent 生成代码中发现的问题数 / PR 总数衡量 agent 输出质量趋势
首绿时间从「开始」到「CI 绿」的中位时间衡量端到端效率

度量是改进输入,不是考核指标。发现 hook 绕过率高 → 查 hook 是否太慢;发现自闭环率低 → 查验证命令是否缺失。别把指标当 KPI 压人。

§10

反模式:一线反复踩的坑

§11

可复制模板

自产中文,按需删改。保持薄。规范演进对照 skill 见本机 standards-age-review(不在此粘全文)。

1 · 团队 CLAUDE.md(薄包装 + 客观事实)

# <项目名>

@AGENTS.md

## Claude 专用(可选,仍须是团队共识)
- 非琐碎改动先 plan;完成前贴验证证据
- 同问题纠正两次:/clear 后重来

## 硬禁止(说明;强制靠 hooks/CI)
- 密钥与生产凭据不进库
- 不 force-push 共享分支

# 禁止写入本文件:个人进度、change id、Obsidian 路径、本机端口
# → 放 CLAUDE.local.md(gitignore)

2 · AGENTS.md / 项目共享事实骨架

# AGENTS.md — 团队共享,改它 = 提 PR

## 这是什么
一段话:给谁用、解决什么、当前状态一句。

## 仓库结构
- `src/` …
- `tests/` …
(只列容易迷路的)

## 技术栈与版本
- 语言/框架/关键依赖约束

## 构建与测试
- 安装:
- 开发:
- 测试:(优先相关测)
- Lint / typecheck:
- 构建:
- 部署:或见 ops/README.md

## 代码规范
- 框架特有坑(必写)
- 通用风格:以 linter / editorconfig 为准

## 分支与提交
- 分支策略、commit 格式、PR 要求

## 架构红线
- 不可违反的设计决策

## 常见陷阱
- known gotchas

## 验证 / 完成定义
相关测试与 lint 必须绿。CI:`.github/workflows/…`

## 安全
禁止提交:.env、密钥、客户导出。

3 · 项目 hooks 最小集(settings 片段)

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [{
          "type": "command",
          "command": "${CLAUDE_PROJECT_DIR}/.claude/hooks/block-secrets-path.sh"
        }]
      },
      {
        "matcher": "Bash",
        "hooks": [{
          "type": "command",
          "if": "Bash(rm *)",
          "command": "${CLAUDE_PROJECT_DIR}/.claude/hooks/block-rm.sh"
        }]
      }
    ],
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [{
          "type": "command",
          "command": "${CLAUDE_PROJECT_DIR}/.claude/hooks/format-changed.sh",
          "timeout": 60
        }]
      }
    ]
  }
}

脚本需团队自备:路径黑名单、rm 策略、只格式化变更文件。失败时向 stdout/stderr 写清原因。

4 · CLAUDE.local.md + .gitignore(私人笔记本)

# CLAUDE.local.md — 个人工作流,勿提交 git

## 快速进入状态
- 当前工程:<名称>(openspec change `<id>`)
- 续跑:/openspec-apply <id>
- 断点:openspec/changes/<id>/tasks.md

## 事实源
- 设计文档:<Obsidian 路径>
- 项目大脑:Obsidian 40-Projects/<项目>/index.md

## 本机
- API:http://localhost:18080
- DB:docker compose --profile dev up -d

## 禁止
- 密码 / token
- 团队应共享的规则(写进 AGENTS.md / CLAUDE.md)
# .gitignore(片段)
CLAUDE.local.md
.claude/settings.local.json
.env
.env.*

同层:先团队 CLAUDE.md,后 local。比 ~/.claude/projects/… 更不容易忘。详见 §4

5 · 副作用 skill frontmatter

---
name: ship-check
description: 发版前检查。仅当用户明确要求发版或 ship 时使用。
disable-model-invocation: true
---

# 发版检查
1. 跑项目 verify 命令,保存摘要
2. 核对 CHANGELOG 与用户可见变更
3. 列出风险与回滚
失败即停:不打 tag、不推送。

6 · L1 PR 自检

## PR checklist
- [ ] 意图与非目标一句话
- [ ] 验证命令 + 结果(或 CI)
- [ ] 无密钥 / 无本机绝对路径
- [ ] L1+ 已链 spec/change
- [ ] 宪法/hooks 变更已拆 PR(如有)
- [ ] 需要时已做 fresh-context review

7 · 规范演进账本行(Obsidian,只追加)

| 日期 | AGE 来源 | 能力点 | 决策 | 落点 | 备注 |
|------|----------|--------|------|------|------|
| YYYY-MM-DD | 文件名 | 一句话能力 | 采纳/暂缓/拒绝/已有等价 | 路径或「—」 | 触发条件或原因 |

# 决策后:改业务仓 AGENTS/docs/hooks,不要改 CLAUDE.md 记过程
# 手动对照:/standards-age-review

8 · 子代理定义(.claude/agents/reviewer.md

---
name: code-reviewer
description: 审查代码变更的质量、安全与风格。仅在用户要求 review 时使用。
tools: Read, Glob, Grep
model: sonnet
maxTurns: 30
---

你是代码审查员。审查标准:
1. 正确性:逻辑是否完备,边界是否处理
2. 安全:是否有密钥泄漏、注入风险、权限过大
3. 风格:是否符合项目约定(以 AGENTS.md 为准)
4. 测试:变更是否有对应测试覆盖

输出格式:按文件列出发现,每个发现含「问题 → 建议 → 严重度(P0/P1/P2)」。
无发现则输出「LGTM」。

9 · MCP 配置(.mcp.json

{
  "mcpServers": {
    "github": {
      "type": "http",
      "url": "https://mcp.github.com/mcp",
      "headers": {
        "Authorization": "Bearer ${GITHUB_TOKEN}"
      }
    },
    "local-db": {
      "command": "npx",
      "args": ["-y", "some-mcp-server"],
      "env": {
        "DB_URL": "${DATABASE_URL:-postgresql://localhost:5432/dev}"
      }
    }
  }
}

${VAR}${VAR:-default} 语法支持环境变量展开。.mcp.json 进 git;密钥通过环境变量注入,不写进文件。用 /mcp 查看连接状态。

10 · 路径限定规则(.claude/rules/api-rules.md

---
paths:
  - "src/api/**/*.ts"
  - "src/routes/**/*.ts"
---

## API 层约定
- 所有入参必须 Zod schema 校验
- 错误统一用 AppError 类,不抛裸 Error
- 响应格式:{ data, error, meta }
- 日志用 logger 工具,不直接 console.log

paths: frontmatter 的 rules 只在 Claude 处理匹配文件时加载。适合 monorepo 按模块分规则,避免无关规则污染上下文。

11 · Golden Fixture 回归脚本

#!/bin/bash
# .claude/hooks/golden-fixture.sh
# 在 3-5 个代表性任务上跑 skill 回归
# 用法:./golden-fixture.sh [skill-name]

SKILL=${1:-"code-review"}
FIXTURES=(
  "fixtures/small-bugfix.diff"
  "fixtures/medium-feature.diff"
  "fixtures/risky-refactor.diff"
)

for f in "${FIXTURES[@]}"; do
  echo "=== Testing $SKILL on $f ==="
  claude -p "/$SKILL" < "$f" --output-format json > "results/$(basename $f .diff)-result.json"
done

echo "=== Summary ==="
# 对照预期输出,计算通过率
# 通过率下降 = skill 退化或模型变更,需调查

Golden fixture 是对抗「模型升级后 skill 行为漂移」的结构解。发 skill 改动或换默认模型前跑一遍,记录通过率趋势。

§12

来源书架:优先权威与可复现

本页刻意少引营销帖。下列是可核对的一手或高引用实践源。

§13

自测:通过才算学会

偏实战判断。全对才通过。