Skip to content

spec-kit cursor实践

认识spec-kit

如何安装

使用uv

uv tool install specify-cli --from git+https://github.com/github/spec-kit.git
specify init <PROJECT_NAME>
specify check

直接下载文件(推荐)

GitHub Releases 页面直接下载可执行文件。

什么是SSD

SSD详细介绍

  • 意图驱动开发 -- 先定义规范(做什么),再实现细节(如何做)
  • 使用护栏和组织原则 创建丰富的规范
  • 多步细分 -- 而不是根据提示词一次性生成代码
  • 严重依赖AI

如何使用

1. /constitution - 项目宪章

作用:建立项目“宪章”,明确必须遵守的最高原则
内容:
  • 代码质量(如必须通过lint和单测)
  • 测试标准(如TDD、覆盖率要求)
  • 用户体验一致性(统一设计规范)
  • 性能要求(如响应时间限制、资源占用指标) 避免AI在不同阶段给出互相矛盾或不符合规范的方案
示例场景:

有初始化模板时:

#speckit.constitution.md 克隆git@github.com:vbenjs/vue-vben-admin.git 作为脚手架,制定以代码质量、测试标准、用户体验一致性及性能要求为核心的原则。

或使用现有仓库: 仓库clone单独clone下来,吧**.cursor** 和 .spec文件拖入,对应的命令也是有的

#speckit.constitution.md 当前仓库已有前端模版,严格遵守当前仓库的规则。制定以代码质量、测试标准、用户体验一致性及性能要求为核心的原则。

无模板时:

后端接口暂时nitropack mock服务,前端调用后端接口。前端使用Vue 3 + Vite,使用TypeScript 类型推断,使用 Pinia 进行全局状态管理,使用 Tailwind CSS,组件全部使用 Ant Design Vue,typescript严格模式,统一eslint和prettier,提交之前必须通过lint或者typecheck,所有页面功能都需附带单元测试和页面级e2e测试

2. /specify - 规格说明书

作用:生成规格说明书,描述要实现的功能和目标。
内容:
  • 用户故事 User Stories
  • 功能需求 Requirements
  • 关键实体 Key Entities
  • 成功标准 Success Criteria

不需要说明任何技术细节 需要检查spec.md文档,实现补充 每次执行都会创建一个feature分支

示例场景
#speckit.specify.md 我要创建一个名字为EDI的后台管理项目,用于管理数据。用户登录之后进入首页。用户可以查看表格数据,表单输入关键词进入快捷搜索,支持导入和导出数据。
页面1:物料主数据
菜单结构:生产质量/生产质量数据/物料主数据
VueRouter定义:manufacture/baseData/supplier_pro_material_data
搜索表单如下:其中select就是select组件,默认为input
事业部(select)、供应商(select)、供应商名称、奇瑞零件名称、供应商总成零件名称、项目名称、工厂名称、芯片MPN标识名称
表格展示字段如下:
奇瑞零件号、奇瑞零件名称、事业部编号、事业部、供应商代码、供应商名称、供应商总成零件号、供应商总成零件名称、奇瑞硬件版本号、奇瑞软件版本号、车型、项目名称、是否SOP、数据同步执行时间、工厂代码、工厂名称、供应商零件版本号、芯片采购类型、芯片MPN标识码、芯片MPN标识名称、数据来源、物料有效期(天)、类型、创建人登录账号、创建时间、更新人登录账号、更新时间
交互细节补充:
1. 表格的第一列都是checkbox, 前两列是固定定位,表格的上方都有导入,导出,删除的按钮。
  1. 导入
    1. 选择文件
    2. 下载模版
  2. 导出
    1. 点击导出会打开一个title为自定义导出的弹窗,里面可以操作导出的列,表格有三个表头,第一个是checkbox,第二个是属性名,第三个是表格列名。checkbox默认全选,直接提交则会导出所有的表格数据。
    2. 导出方式默认为全部,可以选择分页,需要设置导出的页大小和页码。
    3. 导出的文件名称默认是菜单的名称,比如BOM主数据,用户可以手动修改
  3. 删除
    1. 表格的第一列checkbox选择后删除按钮disabled为false,默认是true。
2. 搜索表单所有使用Datepicker组件的,都需要支持rangePresets(查看今天、近三天、近一周、近30天、近90天)

3. /plan - 技术实现计划

作用:制定技术实现计划
内容
  • 技术栈(前端、后端、数据库、第三方服务)
  • 架构设计(模块划分、交互方式)
  • API合约雏形(路径、 请求/响应格式)
  • 数据模型设计(字段、关系)
  • 外部依赖于集成点
示例场景
#speckit.plan.md 当前模版已经提供了技术选型Vue3+Composition API,UI库使用ant-design-vue。严格使用当前仓库的代码风格和规范

只能修改apps/下的文件代码。业务代码目录apps/web-antd,mock服务目录apps/backend-mock。
mock服务返回的格式 { code: 0, data: {}, message: ''},列表接口返回格式可以参考apps/backend-mock/api/table/list.ts文件

业务代码可以参考playground下面的文件,使用useVbenForm和useVbenGrid,代码风格也要参开playground下面的例子。

前端采用 Next.js 14 (App Router 模式),结合 TailwindCSS 与 shadcn/ui 构建用户界面,应用的主要页面包括任务列表页、新建任务页和设置页。TailwindCSS 负责全局样式、shadcn/ui 提供按钮、菜单、对话框等基础交互组件。前端状态管理使用 React 状态与服务器组件数据获取结合。

后端使用 Supabase 提供数据库和认证服务,数据库表设计如下:

users 表: id, email, created_at

todos 表: id, user_id, title, description, due_date, priority, completed, created_at, updated_at

认证由 Supabase Auth 完成,前端通过 session 获取用户信息,所有任务与用户 id 绑定。

数据获取采用 Next.js Server Actions 调用 Supabase,增加配置 todos 时,使用 Supabase 的 row-level security 策略,确保用户只能访问自己的任务。前端通过 React Server Components 获取任务列表,客户端交互(添加/编辑/完成任务)通过 form actions 或 client component 调用 API route。

性能与安全要求:

所有接口需启用 HTTPS,敏感信息不写入前端代码。

前端必须实现输入校验(zod),后端由 Supabase 约束与触发器保证数据一致性。

页面初始加载目标在 1.5s 内,JS 首包控制在 120KB 内。

非功能需求:

UI 必须具备可访问性(ally)。

提供简单的移动通信适应布局。

所有新增任务必须可设置截止日期与优先级,并在任务到期当天通过前端提醒显示。

最终交付:plan.md 会如何在本地运行(连接以及相关的性能要求之类的 POST /todos),以及 quickstart 文档说明。

4. /tasks - 任务拆解

将需求拆解为具体的开发任务,生成 task.md 文件。

5. /implement - 实现落地

执行具体的代码实现工作。

其他

拆解多个spec

对于大型项目,建议拆分为多个 spec 文件分别管理。

优缺点

优点: 用一套框架对齐需求、减少遗漏 缺点: 对于写spec要求非常高 + 超级慢

转载或 CV 自 maomao1996