适合使用
- 新功能开发(先定义再构建)
- API 设计(契约必须明确)
- 架构决策(记录约束)
- 团队协作(共享理解)
- 复杂需求(减少歧义)
在让 Claude 动手之前,先在 CLAUDE.md 中定义你想要什么。一次结构化良好的迭代顶得上 8 次随意的尝试。CLAUDE.md 就是你的规范文件,将它视为与 Claude 的契约。
传统方式: 规范驱动:───────── ──────────提示 → 代码 规范 → 提示 → 代码 → 验证 │ │ │ │ └─ 只能希望 └── 契约 └── 遵循规范 符合预期 已定义 └── 对照规范检查在开始任何实现请求之前,在 CLAUDE.md 中添加规范:
## 功能:用户认证
### 能力- 必须:邮箱/密码登录- 必须:JWT 令牌生成- 必须:使用 bcrypt 哈希密码- 应该:记住我功能- 禁止:存储明文密码
### 技术栈- 必需:bcrypt, jsonwebtoken- 禁用:passport.js(对此场景过于重量级)
### 验收标准- [ ] 用户可以用有效凭据登录- [ ] 无效凭据返回 401- [ ] 令牌在 24 小时后过期(记住我则 7 天)- [ ] 密码使用 cost factor 12 进行哈希按照 CLAUDE.md 中的规范实现用户认证功能。严格遵循验收标准。Claude 会自动读取 CLAUDE.md 并遵循规范。
实现完成后,对照验证:
对照用户认证规范审查实现。逐一勾选已满足的验收标准。列出任何差距。如果在实现过程中需求变更:
更新用户认证规范,增加:- 必须:速率限制(每分钟最多 5 次尝试)然后实现速率限制。在将任何任务交给 Agent 之前运行此检查:
| 维度 | 要问的问题 | 危险信号 |
|---|---|---|
| 问题清晰度 | 问题描述是否无歧义? | “改善性能” |
| 可测试标准 | 完成与否能否自动验证? | “运行良好” |
| 范围边界 | 明确排除了什么? | 没有列出任何排除项 |
| 可观察的完成 | 对用户来说 “完成” 是什么样? | 仅有内部描述 |
| 需求清晰度 | 规范中是否没有实现细节? | “用 Redis 做缓存” |
| 术语一致 | 全文用语是否统一? | “用户” 和 “账号” 混用 |
如果有 2 个以上维度不合格,需要修改规范后再让 Agent 处理。
# 太大、太模糊:"给应用添加用户认证"
# 一个垂直切片:"用户可以用邮箱+密码登录。- POST /auth/login 成功返回 JWT,失败返回 401- 无效凭据显示 '邮箱或密码不正确'(不指明哪个错了)- 会话在 24 小时后过期- 不在范围内:OAuth、密码重置、记住我"## 功能:[名称]
### 描述[2-3 句说明功能目的]
### 能力- 必须:[必需功能]- 必须:[另一个需求]- 应该:[最好有]- 禁止:[明确排除]
### 技术栈- 必需:[lib1, lib2, lib3]- 禁用:[lib4, lib5]
### 验收标准- [ ] 标准 1:[具体、可测试的条件]- [ ] 标准 2:[另一个条件]- [ ] 标准 3:[边缘情况处理]
### API 契约(如适用)- 端点:POST /api/[resource]- 请求:{ field1: string, field2: number }- 响应:{ id: string, created: timestamp }- 错误:400(验证)、404(未找到)、500(服务器)## 架构:[组件名]
### 目的[此组件存在的原因]
### 边界- 负责:[该组件的职责]- 委托给:[其他组件处理的事务]- 不做:[明确的非职责]
### 依赖- 上游:[调用此组件的组件]- 下游:[此组件调用的组件]
### 约束- 性能:[响应时间、吞吐量]- 安全:[认证要求、数据处理]- 可扩展性:[预期负载、限制]## API:[端点名称]
### 端点`POST /api/v1/[resource]`
### 认证需要 Bearer 令牌。权限范围:`read:resource`, `write:resource`
### 请求体{ "field1": "string (必需, 最大 255 字符)", "field2": "number (可选, 默认: 0)", "nested": { "subfield": "boolean" }}
### 错误码| 状态码 | 含义 | 响应体 ||-------|------|--------|| 400 | 验证失败 | `{ "errors": [...] }` || 401 | 未认证 | `{ "message": "..." }` || 403 | 未授权 | `{ "message": "..." }` || 404 | 资源未找到 | `{ "message": "..." }` |[按 Shift+Tab 进入计划模式]
我需要实现支付处理功能。查看 CLAUDE.md 中的规范,创建实现计划。# 安装 Spec Kitnpx @anthropic/spec-kit init
# 使用斜杠命令/speckit.constitution # 定义项目护栏/speckit.specify # 编写功能规范/speckit.plan # 创建实现计划/speckit.implement # 按规范构建# 安装 OpenSpecnpm install -g @fission-ai/openspec@latestopenspec init
# 使用斜杠命令/openspec:proposal "添加暗色模式" # 创建变更提案/openspec:apply add-dark-mode # 实现变更/openspec:archive add-dark-mode # 归档到规范适合使用
可以跳过
当规范超过约 200 行时,应该拆分成多个聚焦的文件。
| 规模阈值 | 建议 |
|---|---|
| < 100 行 | 单个 CLAUDE.md 即可 |
| 100-200 行 | 如果有明确的领域划分,考虑拆分 |
| > 200 行 | 立即拆分 — 已超过认知负荷阈值 |
| 多团队项目 | 无论大小都按领域/负责人拆分 |
CLAUDE.md # 核心项目上下文CLAUDE-auth.md # 认证规范CLAUDE-api.md # API 端点规范CLAUDE-billing.md # 支付处理规范CLAUDE.md # 共享约定CLAUDE-frontend.md # UI/UX 规范CLAUDE-backend.md # API/数据库规范CLAUDE-infra.md # DevOps/部署规范CLAUDE.md # 日常开发规则CLAUDE-testing.md # 测试规范CLAUDE-release.md # 发布流程规范CLAUDE-security.md # 安全要求# 项目:[名称]
## 技术栈[核心技术]
## 命令[日常命令]
## 规则[通用规则]
## 详细规范- 认证:参见 @CLAUDE-auth.md- API 设计:参见 @CLAUDE-api.md- 测试:参见 @CLAUDE-testing.md定义 AI Agent 应该自动做什么、应该先问再做什么、以及绝不能做什么。
| 级别 | 含义 | Claude Code 映射 |
|---|---|---|
| 始终 | 自动执行,无需询问 | 自动接受模式 |
| 先问 | 执行前获得确认 | 默认模式 |
| 禁止 | 阻止或要求计划模式 | 计划模式 / Hook 阻止 |
## 边界
### 始终(自动接受)- 代码变更后运行测试- 用 Prettier 格式化代码- 移动文件时更新导入- 修复 lint 错误
### 先问(确认)- 修改数据库 schema- 添加新依赖- 更改 API 契约- 重构超过 50 行代码
### 禁止(阻止)- 推送到生产分支- 提交密钥或 API 密钥- 不备份就删除数据- 未经审查修改 CI/CD 工作流始终 -> 权限白名单:
{ "permissions": { "allow": [ "Bash(npm test*)", "Bash(npx prettier*)", "Bash(npx tsc*)" ] }}禁止 -> 计划模式 + Hooks:
#!/bin/bash# 通过 settings.json 的 PreToolUse 事件配置if [[ "$TOOL_NAME" == "Bash" ]] && [[ "$INPUT" =~ "git push origin main" ]]; then echo "已阻止:禁止直接推送到 main 分支。请使用功能分支。" exit 2fi## 功能:用户管理- 处理用户## 功能:用户管理### 能力- 必须:用邮箱、密码、姓名创建用户- 必须:更新用户资料(姓名、头像)- 必须:软删除(标记为不活跃,不删除数据)- 禁止:允许重复邮箱# 错误的工作流1. 让 Claude 实现功能2. 写规范记录已构建的内容
# 正确的工作流1. 写规范定义应该构建什么2. 让 Claude 按规范实现# 不要忘记排除项### 技术栈- 必需:React, TypeScript- 禁用:jQuery, vanilla JS, class components ↑ 这些约束防止技术漂移