Files
Claude-Code-Workflow/docs/zh/features/spec.md
catlog22 c3ddf7e322 docs: add VitePress documentation site
- Add docs directory with VitePress configuration
- Add GitHub Actions workflow for docs build and deploy
- Support bilingual (English/Chinese) documentation
- Include search, custom theme, and responsive design
2026-02-28 16:14:09 +08:00

9.2 KiB
Raw Blame History

Spec 规范系统

一句话定位

Spec 规范系统是项目约束的自动注入机制 — 通过 YAML 前置元数据定义的规范文档,在 AI 会话开始时自动加载相关约束,让 AI 遵守项目编码规范和架构要求。

解决的痛点

痛点 现状 Spec 规范系统方案
AI 不遵守规范 CLAUDE.md 写了规范AI 经常忽略 规范按 readMode: required 自动强制加载
规范难以维护 所有约束堆在一个文件里 按维度 (specs/personal) 和类别 (exploration/planning/execution) 分离
规范加载不智能 每次会话都要手动复制粘贴 根据用户 Prompt 关键词自动匹配相关规范
规范粒度太粗 只能全项目或全无 支持分类 (general/exploration/planning/execution) 按需加载

核心概念速览

概念 说明 位置/命令
Dimension (维度) 规范所属的分类空间 specs (项目规范) / personal (个人偏好)
Category (类别) 工作流阶段分类 general / exploration / planning / execution
readMode (读取模式) 加载策略 required (强制加载) / optional (关键词匹配时加载)
priority (优先级) 规范展示顺序 critical / high / medium / low
keywords (关键词) 用于自动匹配的标签 YAML 数组,与用户 Prompt 关键词取交集
Spec Index 规范索引缓存 .ccw/.spec-index/{dimension}.index.json

Spec 文件结构

规范文件模板

---
title: "文档标题"
dimension: "specs"           # 规范维度: specs | personal
category: "general"          # 工作流类别: general | exploration | planning | execution
keywords:
  - keyword1
  - keyword2
readMode: "required"        # 读取模式: required | optional
priority: "high"            # 优先级: critical | high | medium | low
---

# 规范内容Markdown 正文)

这里是规范的具体内容...

规范目录结构

.cw/
├── specs/                    # 项目规范维度specs
│   ├── coding-conventions.md
│   ├── architecture-constraints.md
│   └── api-design-guidelines.md
├── personal/                 # 个人偏好维度personal
│   ├── coding-style.md
│   └── review-preferences.md
└── .spec-index/             # 索引缓存(自动生成)
    ├── specs.index.json
    └── personal.index.json

使用场景

场景 说明 配置示例
编码规范 强制 AI 遵守项目代码风格 dimension: specs, readMode: required
架构约束 定义模块边界和依赖规则 dimension: specs, category: planning
API 设计 规范 API 设计原则 dimension: specs, keywords: [api, rest, graphql]
个人偏好 个人的代码风格偏好 dimension: personal, readMode: optional

操作步骤

初始化 Spec 系统

# 在项目根目录初始化规范系统
ccw spec init

输出:

Initializing spec system...

Directories created:
  + .cw/specs/
  + .cw/personal/
  + .cw/.spec-index/

Seed files created:
  + .cw/specs/coding-conventions.md
  + .cw/specs/architecture-constraints.md

创建规范文件

# 手动创建规范文件
cat > .cw/specs/api-design.md << 'EOF'
---
title: "API Design Guidelines"
dimension: "specs"
category: "planning"
keywords:
  - api
  - rest
  - endpoint
  - http
readMode: "optional"
priority: "high"
---

# API 设计规范

## RESTful 约定
- 使用名词表示资源
- 使用 HTTP 方法表示操作
- 统一错误响应格式

## 命名约定
- 路径使用 kebab-case
- 查询参数使用 camelCase
EOF

加载规范

CLI 模式(查看规范内容):

# 列出所有规范
ccw spec list

# 按维度列出
ccw spec list --dimension specs

# 加载特定类别的规范
ccw spec load --category planning

# 按关键词加载规范
ccw spec load --keywords "api rest"

# 重建索引缓存
ccw spec rebuild

Hook 模式(自动注入到 AI 上下文):

settings.json 中配置 hook:

{
  "hooks": {
    "prePrompt": [
      {
        "type": "command",
        "command": "ccw",
        "args": ["spec", "load", "--stdin"]
      }
    ]
  }
}

配置说明

YAML 前置元数据字段

字段 类型 必填 说明
title string 规范文档标题
dimension string 维度:specspersonal
category string 类别:general / exploration / planning / execution
keywords string[] 关键词列表,用于自动匹配
readMode string required(强制)或 optional(可选)
priority string 优先级:critical / high / medium / low

类别 (category) 说明

类别 加载时机 适用场景
general 始终加载(当 readMode=required 通用规范,如编码风格、命名约定
exploration 探索阶段 架构探索、技术选型指南
planning 规划阶段 设计模式、模块划分原则
execution 执行阶段 具体实现规范、测试要求

规范加载机制

加载流程

┌─────────────────────────────────────────────────────────────┐
│                    Spec 加载流程                             │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  1. 用户输入 Prompt                                         │
│           │                                                 │
│           ▼                                                 │
│  2. 关键词提取 (extractKeywords)                            │
│           │                                                 │
│           ▼                                                 │
│  3. 读取索引缓存 (getDimensionIndex)                        │
│           │                                                 │
│           ▼                                                 │
│  4. 过滤规范 (filterSpecs)                                  │
│     ├─ required: 全部加载                                   │
│     └─ optional: 关键词匹配时加载                           │
│           │                                                 │
│           ▼                                                 │
│  5. 加载内容 (loadSpecContent)                              │
│           │                                                 │
│           ▼                                                 │
│  6. 按优先级合并 (mergeByPriority)                          │
│           │                                                 │
│           ▼                                                 │
│  7. 格式化输出 (CLI markdown / Hook JSON)                   │
│                                                             │
└─────────────────────────────────────────────────────────────┘

关键词匹配规则

  • 英文关键词: 转小写,移除停用词,取长度 >= 3 的词
  • 中文关键词: 提取连续 CJK 字符序列
  • 匹配逻辑: 用户关键词与规范关键词取交集,有交集即匹配

优先级合并顺序

critical > high > medium > low

同优先级内按 dimension 优先级:specs > personal

常见问题

Q1: 规范文件修改后没有生效?

A: 规范内容通过索引缓存加载,修改后需要重建索引:

ccw spec rebuild

Q2: 如何调试规范加载过程?

A: 使用 --debug 参数查看加载详情:

ccw spec load --keywords "auth" --debug

输出示例:

[specs] scanned=5 required=2 matched=1
Loaded: coding-conventions (required)
Loaded: auth-security (matched: auth)
Total: scanned=10 loaded=3

Q3: required 和 optional 的区别?

A:

  • required: 无论用户输入什么,都会加载(适用于通用规范)
  • optional: 只有当用户 Prompt 包含匹配关键词时才加载(适用于特定场景规范)

Q4: 个人偏好和项目规范冲突怎么办?

A: 优先级顺序为 specs > personal。项目规范会覆盖个人偏好。

相关功能

进阶阅读

  • 规范索引实现: ccw/src/tools/spec-index-builder.ts
  • 规范加载器: ccw/src/tools/spec-loader.ts
  • 关键词提取: ccw/src/tools/spec-keyword-extractor.ts
  • Dashboard Spec 管理: ccw/frontend/src/pages/SpecsSettingsPage.tsx