Announcement

👇Official Account👇

Welcome to join the group & private message

Article first/tail QR code

Skip to content

GitHub Spec Kit 规格驱动开发实战:让 AI 编码 Agent 从 Vibe Coding 走向工程化治理

2026 年 5 月 27 日,GitHub 正式开源 Spec Kit——一个面向 AI 编码 Agent 的 规格驱动开发(Spec-Driven Development, SDD) 工具包。截至 7 月初,该项目已斩获 11.8k Star,成为继 Claude Code、Cursor 之后 AI 编码工具链最受关注的新项目。

Spec Kit 的出现并非偶然——2026 年的 AI 编码生态陷入了"Vibe Coding 困境":开发者向 Claude Code 描述需求,AI 生成代码,看似高效,但当需求变更、团队协作、合规审计、生产部署时,没有人知道代码为什么是这样写的,"聊天记录即真相"的反模式严重阻碍了 AI 编码的工业化落地。

Spec Kit 用 四阶段闭环(Specify → Plan → Tasks → Implement) + Constitution 项目宪法 + 30+ Agent 适配 的设计,让规格成为单一真相源(Single Source of Truth),让 AI 编码回归工程化治理。

一、为什么需要 Spec-Driven Development?

1.1 Vibe Coding 的三大痛点

text
传统 Vibe Coding 流程(聊天记录即真相):
┌──────────────┐
│ Developer    │
│ "做一个用户  │
│ 管理系统"     │
└──────┬───────┘


┌──────────────┐
│ Claude Code  │
│ 生成代码     │
└──────┬───────┘


┌──────────────┐
│ "再加个权限  │
│  控制"        │
└──────┬───────┘


┌──────────────┐
│ AI 修改代码  │
│ (有副作用)   │
└──────┬───────┘


┌──────────────┐
│ "为什么这个  │
│  文件这样写?" │
└──────┬───────┘


   找不到答案
   (聊天记录已滚动)

痛点 1:决策丢失

AI 生成的代码背后是无数次微决策(库选择、命名规范、错误处理策略),但这些决策只存在于 LLM 的概率分布中,不在仓库里。下次维护时,开发者只能"猜"AI 当时的想法。

痛点 2:需求蔓延

Vibe Coding 中,需求以自然语言对话形式追加,AI 容易在不同上下文窗口中理解不一致,导致代码偏离原始设计。

痛点 3:协作失序

团队成员想知道"这个模块的边界在哪",只能翻聊天记录或读代码——规格文档不存在

1.2 Spec-Driven Development 的核心理念

text
SDD 流程:规格即真相源
┌──────────────────────────────────────────────────────┐
│  Stage 1: Specify(规格化)                            │
│  └─► 编写 spec.md:用户故事 + 验收标准 + 边界条件        │
│       (Markdown,可版本控制)                            │
└──────────────────┬───────────────────────────────────┘


┌──────────────────────────────────────────────────────┐
│  Stage 2: Plan(技术方案)                             │
│  └─► 编写 plan.md:架构选型 + 数据模型 + 接口设计        │
│       (基于 spec.md,由 AI 协助生成)                     │
└──────────────────┬───────────────────────────────────┘


┌──────────────────────────────────────────────────────┐
│  Stage 3: Tasks(任务分解)                            │
│  └─► 编写 tasks.md:可执行任务清单                      │
│       (AI Agent 直接读取并执行)                         │
└──────────────────┬───────────────────────────────────┘


┌──────────────────────────────────────────────────────┐
│  Stage 4: Implement(实现)                           │
│  └─► AI Agent 按 tasks.md 逐步实现                     │
│       (每步可回溯到对应的 spec 条款)                    │
└──────────────────────────────────────────────────────┘

核心承诺

  • 规格(spec.md)是单一真相源,所有决策可追溯
  • AI Agent 不能偏离规格要求
  • 团队成员无需读聊天记录就能理解项目

二、Spec Kit 快速上手

2.1 安装 specify CLI

bash
# 方法 1:uvx(推荐)
uv tool install specify-cli --from git+https://github.com/github/spec-kit

# 方法 2:pipx
pipx install specify-cli

# 方法 3:Homebrew(macOS/Linux)
brew tap github/spec-kit
brew install specify

# 验证安装
specify --version
# specify-cli 0.4.2

2.2 在项目中初始化 Spec Kit

bash
# 进入项目目录
cd ~/projects/my-saas-app

# 初始化 Spec Kit(创建 .specify/ 目录)
specify init

# 输出:
# ✓ Created .specify/memory/constitution.md
# ✓ Created .specify/templates/
# ✓ Created .specify/scripts/

# 查看生成的结构
tree .specify/
# .specify/
# ├── memory/
# │   └── constitution.md    # 项目宪法
# ├── templates/
# │   ├── spec-template.md
# │   ├── plan-template.md
# │   └── tasks-template.md
# └── scripts/
#     └── check-prerequisites.sh

2.3 四阶段工作流实战

Stage 1:Specify(编写规格)

bash
specify specify "构建一个支持多租户的博客系统后端 API"

Spec Kit 会自动生成 specs/001-multi-tenant-blog-api/spec.md

markdown
# Feature Specification: 多租户博客系统后端 API

## User Scenarios & Testing

### User Story 1 - 租户注册与认证 (Priority: P1)
作为 SaaS 运营商,我希望租户能自助注册并管理 API Key,
以便快速开始使用博客服务。

**Acceptance Scenarios**:
1. **Given** 一个新访问者提交注册表单
   **When** 邮箱和密码通过验证
   **Then** 系统创建租户账号并返回初始 API Key
2. **Given** 租户尝试使用过期的 API Key
   **When** 调用任意 API
   **Then** 系统返回 401 错误

### User Story 2 - 文章 CRUD (Priority: P1)
作为租户管理员,我希望创建/读取/更新/删除文章,
以便管理博客内容。

## Functional Requirements

- FR-001: 系统 MUST 支持基于 API Key 的认证
- FR-002: 系统 MUST 实现租户数据完全隔离
- FR-003: 系统 MUST 提供文章的 CRUD 接口
- FR-004: 系统 MUST 支持 Markdown 格式
- FR-005: 系统 MUST 在 100 QPS 下 p99 延迟 < 200ms

## Key Entities

- **Tenant**: 租户(id, name, api_key_hash, created_at)
- **Article**: 文章(id, tenant_id, title, content, status)
- **ApiKey**: API 密钥(id, tenant_id, key_hash, expires_at)

Stage 2:Plan(技术方案)

bash
specify plan "使用 Go 1.27 + Gin + PostgreSQL + Redis 实现"

生成 specs/001-multi-tenant-blog-api/plan.md

markdown
# Implementation Plan: 多租户博客系统后端 API

## Architecture Overview
- **后端语言**: Go 1.27(启用 json/v2)
- **Web 框架**: Gin
- **数据库**: PostgreSQL 16 + Row-Level Security(租户隔离)
- **缓存**: Redis 7
- **认证**: API Key + HMAC 签名

## Tech Stack Decisions
| 决策 | 选项 | 理由 |
|------|------|------|
| 框架 | Gin | 性能 3x Echo,社区成熟 |
| ORM | sqlc | 类型安全,编译期检查 |
| 迁移 | golang-migrate | 简单可靠 |
| 监控 | OpenTelemetry | 标准化 |

## Data Model
```sql
CREATE TABLE tenants (
    id UUID PRIMARY KEY,
    name TEXT NOT NULL,
    api_key_hash TEXT NOT NULL UNIQUE,
    created_at TIMESTAMPTZ DEFAULT NOW()
);

CREATE TABLE articles (
    id UUID PRIMARY KEY,
    tenant_id UUID NOT NULL REFERENCES tenants(id),
    title TEXT NOT NULL,
    content TEXT NOT NULL,
    status TEXT NOT NULL DEFAULT 'draft',
    created_at TIMESTAMPTZ DEFAULT NOW()
);

ALTER TABLE articles ENABLE ROW LEVEL SECURITY;
CREATE POLICY tenant_isolation ON articles
    USING (tenant_id = current_setting('app.tenant_id')::UUID);

API Design

MethodPathDescription
POST/v1/tenants注册租户
POST/v1/articles创建文章
GET/v1/articles/:id读取文章
PUT/v1/articles/:id更新文章
DELETE/v1/articles/:id删除文章

Performance Budget

  • p50 latency: < 50ms
  • p99 latency: < 200ms
  • Throughput: 1000 QPS

**Stage 3:Tasks(任务分解)**

```bash
specify tasks

生成 specs/001-multi-tenant-blog-api/tasks.md

markdown
# Tasks: 多租户博客系统后端 API

- [ ] T001 创建 Go module 和目录结构
- [ ] T002 配置 PostgreSQL 连接和迁移框架
- [ ] T003 实现 Tenant 数据模型和 Repository
- [ ] T004 实现 API Key 生成和验证中间件
- [ ] T005 实现 POST /v1/tenants 接口
- [ ] T006 实现 Article 数据模型和 Repository
- [ ] T007 实现 RLS 策略
- [ ] T008 实现 POST /v1/articles 接口
- [ ] T009 实现 GET /v1/articles/:id 接口
- [ ] T010 实现 PUT /v1/articles/:id 接口
- [ ] T011 实现 DELETE /v1/articles/:id 接口
- [ ] T012 添加 Prometheus metrics
- [ ] T013 编写单元测试(覆盖率 > 80%)
- [ ] T014 编写集成测试
- [ ] T015 性能压测(验证 p99 < 200ms)
- [ ] T016 编写 OpenAPI 文档

Stage 4:Implement(AI 自动实现)

bash
# 使用 Claude Code 实现
claude-code "请按 tasks.md 顺序实现,每完成一个任务在前面打勾 [x]"

三、Constitution:项目宪法

Spec Kit 最有价值的创新是 Constitution(项目宪法) 机制——用一份 Markdown 文档定义项目的不可违反原则

3.1 默认 Constitution 内容

.specify/memory/constitution.md

markdown
# Project Constitution: 多租户博客系统

## Article I: Code Quality Standards
- 所有公共函数 MUST 有 GoDoc 注释
- 测试覆盖率 MUST >= 80%
- 代码 MUST 通过 golangci-lint 默认规则

## Article II: Security Requirements
- 所有 API MUST 验证 API Key
- 密码 MUST 使用 bcrypt 哈希(cost >= 12)
- SQL 查询 MUST 使用参数化(禁止拼接)
- 敏感配置 MUST 从环境变量读取

## Article III: Performance Standards
- API p99 延迟 MUST < 200ms
- 数据库查询 MUST < 50ms
- 单实例 MUST 支持 1000 QPS

## Article IV: Observability
- 所有请求 MUST 有 Trace ID
- 错误 MUST 记录到结构化日志
- 关键指标 MUST 暴露到 Prometheus

## Article V: Tenant Isolation
- 租户数据 MUST 完全隔离
- 跨租户访问 MUST 拒绝(HTTP 403)
- 数据库 MUST 启用 Row-Level Security

3.2 Constitution 的强制执行

AI Agent 在实现时,必须遵守 Constitution——如果 AI 提出违反 Constitution 的方案,Spec Kit 会自动拒绝:

bash
specify check constitution

# 输出:
# ✓ Code Quality: pass
# ✓ Security: pass
# ✓ Performance: pass
# ✗ Observability: 发现 3 个 Trace ID 缺失
# ✗ Tenant Isolation: 1 个查询未使用 tenant_id
# 
# Total: 3 violations, must fix before commit

四、与 30+ AI 编码 Agent 集成

Spec Kit 的最大优势之一是 Agent 中立——它通过模板化指令与所有主流 AI 编码工具协作。

4.1 支持的 AI 编码 Agent 列表

Agent集成方式适用场景
Claude Code原生集成复杂项目、深度重构
GitHub Copilot插件日常补全、单元测试
Cursor.cursorrules全栈项目
Gemini CLI环境变量Google 生态
Windsurf配置文件团队协作
CodyVS Code 扩展企业级
CodeiumIDE 插件免费方案
Continue.devVS Code / JetBrains开源

4.2 Claude Code 集成实战

Step 1:生成 Claude Code 命令模板

bash
specify generate claude
# 生成 .claude/commands/specify.md 等模板

Step 2:使用 Claude Code 执行任务

bash
claude-code /specify-spec specs/001-multi-tenant-blog-api
claude-code /specify-plan specs/001-multi-tenant-blog-api
claude-code /specify-tasks specs/001-multi-tenant-blog-api
claude-code /specify-implement specs/001-multi-tenant-blog-api

Step 3:自定义 Slash Command

.claude/commands/specify-implement.md

markdown
# /specify-implement 命令

请按以下流程实现 specs/$1 目录下的功能:

1. 读取 spec.md 理解需求
2. 读取 plan.md 理解技术方案
3. 读取 tasks.md 获取任务清单
4. 逐个实现 tasks.md 中的任务
5. 每完成一个任务,更新 tasks.md 的 checkbox
6. 完成后运行测试,确保通过
7. 提交时使用 Conventional Commits 格式

4.3 Cursor 集成实战

.cursorrules

markdown
# Spec Kit Integration
当用户提到 "/specify" 时,加载 .specify/memory/constitution.md 和当前 specs/ 目录下的所有 spec.md。

实现代码前必须先:
1. 阅读 spec.md 理解需求
2. 阅读 plan.md 确认技术方案
3. 验证代码不违反 constitution.md

五、生产级工作流

5.1 团队协作 SDD 流程

text
┌─────────────────────────────────────────────────────┐
│  SDD 团队协作流程                                    │
├─────────────────────────────────────────────────────┤
│  1. Product Manager 编写 spec.md                    │
│     └─► PR 提交到 main 分支                         │
│         └─► Tech Lead Review spec.md               │
│             └─► PM 修改 → 通过                      │
│                                                     │
│  2. Tech Lead 编写 plan.md                          │
│     └─► 基于 spec.md,AI 协助生成                   │
│         └─► Architect Review plan.md                │
│             └─► Tech Lead 修改 → 通过              │
│                                                     │
│  3. AI Agent 生成 tasks.md                          │
│     └─► Tech Lead Review tasks.md                   │
│         └─► AI 按 tasks.md 实现                     │
│                                                     │
│  4. DevOps Review 代码 + 部署                       │
└─────────────────────────────────────────────────────┘

5.2 Git Hook 集成

.git/hooks/pre-commit

bash
#!/bin/bash
# Spec Kit pre-commit check

# 检查是否有新的 spec 文件
if git diff --cached --name-only | grep -q "specs/.*/spec.md"; then
    echo "🔍 Detected new spec, running Spec Kit checks..."
    specify check all
    if [ $? -ne 0 ]; then
        echo "❌ Spec Kit checks failed, commit aborted"
        exit 1
    fi
fi

# 检查 constitution 是否被遵守
specify check constitution --staged

5.3 CI/CD 集成

.github/workflows/spec-check.yml

yaml
name: Spec Kit Check
on: [pull_request]

jobs:
  check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Install Specify CLI
        run: |
          curl -fsSL https://raw.githubusercontent.com/github/spec-kit/main/install.sh | bash
      - name: Check Specification Quality
        run: specify check all
      - name: Check Constitution Compliance
        run: specify check constitution
      - name: Validate Tasks Completeness
        run: specify check tasks --completed-only

六、SDD vs 其他方法论

方法论核心理念工具支持适合场景
TDD测试驱动pytest/junit已有清晰需求
BDD行为驱动Cucumber/Behave业务规则复杂
DDD领域驱动Event Storming业务建模
SDD规格驱动GitHub Spec KitAI 编码时代
Vibe Coding直觉对话Claude Code快速原型

经验法则

  • 生产项目 → SDD + TDD
  • 探索性项目 → Vibe Coding → 稳定后转 SDD
  • 遗留项目维护 → SDD 渐进式迁移

七、实战案例:3 个团队的 SDD 落地

7.1 案例 1:金融科技公司

  • 背景:50 人团队,10+ 微服务
  • 痛点:AI 生成的代码无法通过合规审计
  • 方案:用 Spec Kit 建立 constitution + spec 模板
  • 效果:合规审计通过率从 60% → 95%

7.2 案例 2:SaaS 初创公司

  • 背景:3 人团队,6 个月从 MVP 到 100 万 ARR
  • 痛点:需求变更频繁,AI 代码与产品需求脱节
  • 方案:每周更新 spec.md,AI 按 spec 生成
  • 效果:开发速度提升 40%,bug 率降低 30%

7.3 案例 3:游戏工作室

  • 背景:20 人团队,Unity 项目
  • 痛点:策划需求与代码实现脱节
  • 方案:策划写 spec.md,开发读 spec.md 实现
  • 效果:跨团队沟通成本降低 50%

八、Spec Kit 的局限与未来

8.1 当前局限

  • 学习曲线:团队需要适应"先写规格再写代码"
  • 模板维护:constitution.md 需要持续更新
  • AI 偏差:AI 仍可能误解规格,需要人工 review
  • 小项目开销:对 < 1000 行的小项目可能过度

8.2 2026 年路线图

根据 GitHub 公开 roadmap:

  • 2026 Q3:Visual Spec Editor(VS Code 插件)
  • 2026 Q4:Multi-repo Constitution(跨仓库共享原则)
  • 2027 Q1:AI 自动 spec 生成(从对话/PR/Issue 提取)
  • 2027 Q2:Spec Diff(规格变更可视化对比)

九、参考资料


结语:Spec Kit 的本质不是工具,而是工程化思维的回归——在 AI 编码时代,规格文档不是负担,而是让 AI 与人类协作的"契约"。如果你正在被 Vibe Coding 的混乱所困扰,不妨从 constitution.md + spec.md + plan.md + tasks.md 四份文档开始,让 AI 编码从"魔法"变回"工程"。

上次更新于: