Skip to content

Latest commit

 

History

History
285 lines (219 loc) · 16.4 KB

SKILL.md

File metadata and controls

285 lines (219 loc) · 16.4 KB
name project-spark
description 快速新建项目骨架 Skill。通过问答或配置单方式,从一句话项目描述出发,搭建符合 AI 团队协作规范(SDD 六阶段 + AGENTS.md + 推荐 Skills/MCP)的项目根目录结构,并可选自动 git clone 芋道后端/前端并批量改名。用于快速新建 Spring Boot 多模块项目时,快速拉齐 AI 协作上下文。当用户说“初始化项目”、“新建项目骨架”、“/project-spark”、“搭建新项目”、“create new project scaffold”、“项目脚手架”时触发。触发后 **MUST** 以模式选择问答(B 引导式 / C 配置单式)作为第一响应;即使上下文已包含调研/汇报/PRD 等素材,也 **MUST NOT** 直接推导字段、生成配置单或调用任何脚本——素材只能作为问答的候选建议来源。

/project-spark —— 快速新建项目骨架

一条 Skill 解决新项目第一天的 3 件事:根目录编排 + 后端/前端骨架获取(可选) + AI 协作规则注入。

不维护 Java 代码模板,复用开源芋道脚手架 + git clone + 批量改名。


零、术语约定(跨智能体通用,必读)

本 Skill 按行为契约编写,适用于 Claude Code / Qoder / Trae / Codex CLI / Cursor 等多家智能体,不绑定任何具体厂商的工具名。核心术语:

术语 含义(实现不拘) 各智能体参考映射
结构化问答 阻塞式、多选项、必须等用户明确回复才能继续的交互 Claude Code / Qoder:AskUserQuestion 工具;Codex CLI:交互式确认提示;Trae:用户消息确认回合;其他:向用户提出多选问题并阻塞等待明确回复
逐字段显式确认 每个字段都要用户亲自选定"保留/修改/接受默认",禁止静默通过 工具实现可能有差异,但最终效果相同:用户看到每个字段并做出明确选择
阶段门 流程硬门禁;未完成前一步 MUST NOT 进入下一步 不依赖工具——由智能体严格执行 SKILL.md 的顺序约束

⚠️ MUST / MUST NOT / SHOULD 采用 RFC 2119 语义,不可绕过。无论哪家智能体执行本 Skill,违反 MUST/MUST NOT 都视为 Skill 执行失败,必须回滚产出重新开始。

🔧 下文出现的 结构化问答 / 逐字段显式确认 均指这里的行为契约,请各智能体自行映射到自己的工具名。


一、触发

用户输入形如:

/project-spark 数字商城系统,面向会员和运营后台,包含商品、订单、营销、支付
/project-spark --mode=guide 数字商城系统
/project-spark --mode=config 数字商城系统

若用户未指定 --mode,默认询问选择哪种模式。


二、两种工作模式

模式 B · 引导式(新人友好,3 轮渐进式披露)

第 1 轮 身份字段 (3 问) → 第 2 轮 架构形态 (4 问) → 第 3 轮 AI 协作 (3 问)
                                     ↓
                   生成 project-init.json 配置单给用户确认
                                     ↓
                            确认 → 执行生成

模式 C · 配置单式(老手快速)

根据描述给默认值建议 → 生成 project-init.json 草稿(仅在会话展示,不落盘)
   → MUST 发起结构化问答让用户逐字段审阅/修改
   → 全部字段确认 OK 后,才写入 <nameEn>-docs/0.0项目会话记录/project-init.json
   → 再执行第 5 步渲染

⚠️ "智能填默认值" ≠ "跳过用户确认"。即使上下文完整,也 MUST 让用户逐字段 review;任何未经用户显式确认的字段 MUST NOT 直接落盘,MUST NOT 触发任何脚本。

两种模式最终都产出 project-init.json 配置单,落盘到项目根目录的 <英文名>-docs/0.0项目会话记录/project-init.json,供审计与复现。


三、工作流程(严格按顺序执行)

⛔ 阶段门(硬门禁 · 本 Skill 最重要的行为红线)

  1. 未完成 第 2 步(用户已在 B/C 之间做出选择)MUST NOT 进入第 3 步。
  2. 未完成 第 3 步(所有字段每一项都已由用户显式敲定或显式确认默认值)MUST NOT 进入第 4 步。
  3. 未完成 第 4 步(用户对渲染出的 project-init.json 显式点"确认生成")MUST NOT 调用 render_root.py,MUST NOT 在任何目录写入任何 *init*.json 文件。

跨门的常见诱惑:上下文已含调研/汇报/PRD 文档 → 智能体自动推导字段 → 偷跑脚本。这是最严重的 Skill 规范违反,见第六节红线 8。素材的正确用法是:把它的信息放进结构化问答的候选选项里让用户挑,而不是替用户决定。

第 1 步 · 识别输入

从用户输入提取:

  • 项目中文名(从描述抽)
  • 业务领域关键词(招投标 / 订单 / 会员 / 合同…)
  • 特殊需求(多租户 / 对公网 / 移动端…)

若描述少于 10 字或信息不足,必须追问 2-3 个澄清问题(业务场景、主要角色、是否对公网)。

第 2 步 · 模式选择

若用户未指定 --mode,MUST 发起结构化问答让用户二选一(未得到用户回复 MUST NOT 进入第 3 步):

  • B 引导式(推荐新人):3 轮问答
  • C 配置单式(老手):一次性出 JSON 草稿 + 逐字段确认

第 3 步 · 收集字段(按模式)

字段定义详见 references/field-dict.md。核心 10 个字段:

组 字段 来源
身份 nameZh / nameEn / groupId / artifactPrefix / javaPackage / version 第 1 轮
架构 backend.action / backend.keepModules / frontend.admin / frontend.member 第 2 轮
AI aiCollab.agents / aiCollab.presetSkills / aiCollab.presetMcp / aiCollab.rulesSource 第 3 轮

命名规则严格校验(见 references/naming-rules.md):

  • nameEn:小写字母 + 数字,3-20 字符,不含中划线下划线
  • groupId:符合 Maven 规范 com.xxx.xxx
  • javaPackage:不使用保留字,不超过 5 级
  • 校验失败必须重新输入,不能静默修正

第 4 步 · 生成配置单并确认

把收集到的字段渲染为 project-init.json(MUST 使用此固定命名,禁止 .xxx-init.json / init.json / <nameEn>-init.json 等任何变体——这类变体会绕开下一步的 render_root.py 入口校验,属于红线 8 违规),先在会话里展示完整 JSON 预览(不落盘),然后 MUST 发起结构化问答让用户确认:

  • 确认生成 → 落盘到 <nameEn>-docs/0.0项目会话记录/project-init.json → 进入第 5 步
  • 修改某字段 → 回到第 3 步
  • 取消 → 退出 Skill

未得到用户"确认生成"的回复 MUST NOT 调用 render_root.py;MUST NOT 在用户确认前提前在任何目录落盘任何 *init*.json 文件。

第 5 步 · 渲染根目录模板

调用 scripts/render_root.py,把 templates/ 下的模板按 project-init.json 占位符替换,生成:

<location>/<nameEn>/
├── AGENTS.md                    ← 由 agents-md-snippets 拼装
├── CLAUDE.md                    ← 从 rule/CLAUDE.md 继承 + 项目定制
├── README.md                    ← 项目启动指引
├── .gitignore
├── .claude/settings.local.json  ← 会话目录
└── <nameEn>-docs/               ← SDD 六阶段骨架 + LLM-Wiki 知识库
    ├── 0.0项目会话记录/
    │   ├── project-init.json    ← 配置单归档
    │   └── 会话记录.txt         ← 种子记录
    ├── 1.0产品调研/
    │   ├── README.md
    │   ├── {{nameZh}}-立项书.md    ← 立项方案(完整模板)
    │   ├── {{nameZh}}-计划.md      ← AI 辅助开发计划(12 个 task)
    │   ├── {{nameZh}}-PRD.md        ← 需求文档(仅一/二级骨架)
    │   ├── 参考材料/           ← 放客户提供的原始资料
    │   └── UI设计描述/         ← 放 UI 设计描述文档
    ├── 2.0需求分析/README.md
    ├── 3.0测试案例/README.md
    ├── 4.0需求实施/README.md
    ├── 5.0功能测试/README.md
    ├── 6.0项目管理/README.md
    ├── README.md                ← 三层架构总览(Raw/LLM-Wiki/views)
    └── LLM-Wiki/                ← AI 唯一可写区(仅对项目文档生效)
        ├── AGENTS.md            ← 知识库编译器行为契约
        ├── SCHEMA.md            ← 5 类页面模板
        ├── README.md / index.md / overview.md
        ├── summaries/ concepts/ synthesis/ queries/ views/
        └── entities/{modules,services,tables,apis,roles}/

第 6 步 · 可选 · 拉取后端骨架

若 backend.action === "clone":

  1. 在 <location>/<nameEn>/ 下执行 git clone --depth=1 <backend.source> 到临时目录
  2. 调用 scripts/clone_and_rename.py 批量替换:
    • cn.iocoder.yudao → <javaPackage>
    • yudao- → <nameEn>-(目录名 + pom.xml)
    • cn.iocoder.boot → <groupId>
  3. 按 backend.keepModules 删掉不要的 *-module-*
  4. 删除临时 .git 目录

若 backend.action === "skip":只在 README 中写上推荐命令供用户手工执行。

第 7 步 · 可选 · 拉取前端骨架

  • frontend.admin.action === "clone":克隆 admin 前端 → 改 package.json 的 name
  • frontend.member.action === "clone":同上,目录命名 <nameEn>-ui-member

第 8 步 · 输出启动指引

打印:

  1. ✅ 生成物清单(具体路径)
  2. 📋 下一步命令(mvn clean install / pnpm install & run dev / GitNexus 索引)
  3. 🎯 推荐的下一条 Skill(例如 /read-drawio 开始产品调研)
  4. ⚠️ 手动 TODO 清单(数据库创建、Nacos 配置等无法自动化的步骤)

四、AGENTS.md 拼装规则(v0.4 核心)

项目 AGENTS.md 不是从空白生成,而是按 3 层拼装:

┌─ 第 1 层 · 全局继承 ─────────────────────┐
│ 从 workspace 的 rule/AGENTS.md 引用     │
│ (任务启动前置流程、通用开发规范等)        │
└─────────────────────────────────────────┘
                  +
┌─ 第 2 层 · 团队规范条款 ─────────────────┐
│ 按 aiCollab.presetSkills / presetMcp / docs 勾选情况       │
│ 从 references/agents-md-snippets/ 注入                    │
│ - core-sdd.md              (必注入)                       │
│ - progressive-disclosure.md (必注入)                     │
│ - memory-bootstrap.md      (必注入)                       │
│ - gitnexus-workflow.md     (若选 GitNexus MCP · 代码层)     │
│ - llm-wiki.md              (若 docs.llmWiki=true · 文档层) │
│ - testing-guardrail.md     (若选 api-auto-test)           │
└─────────────────────────────────────────┘
                  +
┌─ 第 3 层 · 项目专属规则 ──────────────────┐
│ 从问答动态生成:                           │
│ - Java 包路径 / artifactId / docs 目录   │
│ - 数据库类型 / 缓存方案                   │
│ - 推荐 Skills 清单                       │
└─────────────────────────────────────────┘

这是本 Skill 区别于普通脚手架生成器的核心价值:每次初始化都把团队的 AI 协作经验自动注入新项目,实现"分享会听一次 → 每个项目 AI 天天遵循"。


五、产出物清单

执行完毕后用户目录应为:

<your-workspace>/<nameEn>/
├── AGENTS.md                        ✅ 必有
├── CLAUDE.md                        ✅ 必有
├── README.md                        ✅ 必有
├── .gitignore                       ✅ 必有
├── .claude/                         ✅ 必有
├── <nameEn>-docs/                   ✅ 必有(6 阶段目录 + 会话记录 + LLM-Wiki)
│   └── 1.0产品调研/                 ✅ 内含:README.md(产出物索引)
│                                       + <nameZh>-立项书.md / <nameZh>-计划.md / <nameZh>-PRD.md
│                                       + UI设计描述/(00-全局设计规范.md / 10-设计稿页面清单.md)
│                                       + 参考材料/(README.md)
├── <nameEn>-service/                ✅ 必有(含 .gitkeep + README;skip 时为占位目录等待手工 clone)
├── <nameEn>-ui-admin/               ✅ 必有(同上)
└── <nameEn>-ui-member/              ✅ 必有(同上)

说一套做一套检查点(第 5 步渲染完后 MUST 自检):

  1. render_root.py 日志里必须出现 ------ 创建代码占位目录 ------ 一节 + 3 个 [OK] <nameEn>-service/、-ui-admin/、-ui-member/ 行;若无此节,说明脚本版本过旧,必须刷新 Skill 后重跑。
  2. 1.0产品调研/ 下实际磁盘文件数 = README.md(已渲染)+ 3 个 <nameZh>-*.md + UI设计描述/ + 参考材料/ 共 6 项;缺任一项视为渲染失败。
  3. 3 个代码占位目录即使 action=skip 也必须建(含 .gitkeep + README.md 说明跳过理由与手工 clone 命令);缺失视为渲染失败。

六、防踩坑清单(Skill 自身质量红线)

  1. 命名冲突检测:执行前 list_dir 检查 <location>/<nameEn>/ 是否已存在,存在则报错,要用户确认覆盖或换名
  2. Windows 路径:跨平台路径必须用 / 或 pathlib.Path,不能硬编码 \\
  3. PowerShell 命令:所有 shell 命令示例用 ; 而不是 &&
  4. git clone 失败兜底:网络失败时提示用户手动 clone 并在 project-init.json 标记 clone: pending
  5. 改名的原子性:clone_and_rename.py 先改临时目录,全部成功后再重命名到最终位置;中途失败就整个回滚
  6. 敏感字段校验:Java 包路径不能用 java、system 等保留字
  7. Skill 自身执行日志:每一步打印到控制台,用户可以随时 Ctrl+C 中断
  8. 问答纪律红线(Skill 最核心的行为约束):禁止智能体代替用户填写任何身份/架构/AI 字段。
    • 即使上下文已含调研文档、汇报文档、PRD 等素材,它们也只能作为问答的候选选项来源——放进结构化问答的选项里让用户挑,而不是替用户直接决定。
    • MUST NOT 跳过第 2/3/4 步任一问答直接生成配置单。
    • MUST NOT 用 .xxx-init.json 等自制文件名绕开第 4 步确认门(render_root.py 入口会拒绝非 project-init.json 的文件名,除非显式 --force)。
    • MUST NOT 在未通过第三节阶段门的情况下调用 render_root.py 或写入目标项目目录。
    • 违反任何一条都视为本 Skill 执行失败,必须回滚产出并重新从第 2 步开始。

七、参考资源(Skill 按需加载)

文件 作用 何时加载
references/field-dict.md 10 个核心字段定义与默认值 第 3 步收集字段前
references/naming-rules.md 命名规则与校验正则 校验时
references/yudao-source-list.md 芋道后端/前端 git 源清单 第 6/7 步拉取前
references/agents-md-snippets/*.md 6 个 AGENTS.md 可注入条款(含 llm-wiki) 第 5 步拼装 AGENTS.md
templates/*.tpl 根目录级模板(占位符) 第 5 步渲染
templates/docs-scaffold/ SDD 六阶段 + docs 根 README.tpl 第 5 步渲染
templates/docs-scaffold/LLM-Wiki/ 知识库编译器骨架(仅对项目文档生效) 第 5 步渲染(按 docs.llmWiki)
scripts/render_root.py 渲染根目录模板 第 5 步执行
scripts/clone_and_rename.py git clone + 批量改名 第 6 步执行
scripts/validate.py 字段合法性校验 第 3 步校验

八、版本

  • v0.4(当前):根目录模板 + git clone + AGENTS.md 条款注入 + LLM-Wiki 文档层知识库(完整)
  • 后续:v0.5 支持自定义条款库、v0.6 支持 presetMcp 自动注册