--- name: erp-project-init description: A0 项目初始化——从插件模板幂等地复制 CLAUDE.md / docs/01-需求清单/README.md / docs/08-模块任务管理.md(已存在则跳过),并初始化 Git(如未初始化)。session-start 在 docs/08 缺失时派发本 skill。 user-invocable: false allowed-tools: Glob Edit Skill Bash(mkdir *) Bash(cp -n *) Bash(git init) Bash(command -v *) Bash(uname *) Bash(brew *) Bash(export PATH=*) Bash(echo *) --- **所有输出必须使用中文。** 你负责在空/半空项目目录中创建初始文件结构。**本 skill 幂等**——已存在的文件不覆盖。 ## 执行步骤 ### 步骤 0:打印当前位置流程图 向用户展示当前在 A 阶段流程中的位置(A-only,`▶` 标在 A0): ``` ┌──────────────────────────────────────────────────────┐ │ 📋 阶段 A:规划(一次性) │ │ │ │ ▶ A0 初始化项目 → A1 锁范围(REQ 卡片) │ │ ↓ │ │ ⏸ 等你审阅 REQ,重新运行 /erp-plan-start 继续 │ │ ↓ │ │ A2 生成骨架 → A3 初始化 DB → A4 生成 DB 设计 → A5 生成下游文档│ │ ↓ │ │ 规划阶段到此结束 │ └──────────────────────────────────────────────────────┘ ``` ### A. 依赖检查 + 自动安装(命令行工具) 用 `Bash` 检查 `mysql` / `mysqldump` 是否在 PATH 中: ```bash for cmd in mysql mysqldump; do command -v "$cmd" >/dev/null 2>&1 || echo "MISSING: $cmd" done ``` **全部在 PATH** → 进入 B。 **有缺失** → 尝试自动安装: 1. 用 `Bash` 探测环境(`uname -s`、是否有 `brew` / `apt` / `yum` / `apk` 等) 2. 根据当前系统选最合适的包管理器安装 mysql 客户端;若需要 sudo 但 CC 没有权限,打印手动安装命令让用户执行 3. 装完后,把必要的 bin 路径加入本次会话 PATH(如 macOS 的 keg-only 路径) 4. 向用户提示如何把路径永久写入 shell 启动脚本 5. 重新执行开头的 `command -v` 循环验证;仍缺失 → 打印错误并停下,等用户手动解决后重新运行入口 ### B. 幂等复制模板文件 用 `Bash` 一次性完成。`cp -n` 表示"不覆盖已存在的文件": ```bash mkdir -p docs/01-需求清单 cp -n "${CLAUDE_SKILL_DIR}/templates/CLAUDE-template.md" CLAUDE.md cp -n "${CLAUDE_SKILL_DIR}/templates/docs-01-readme-template.md" docs/01-需求清单/README.md cp -n "${CLAUDE_SKILL_DIR}/templates/docs-08-initial-template.md" docs/08-模块任务管理.md ``` 故障恢复场景:如果用户上一次初始化中途中断(CLAUDE.md 已存在但 docs/08 缺失),`cp -n` 会保留 CLAUDE.md 原样,只补齐 docs/08。 ### C. 初始化 Git(如尚未初始化) 用 `Glob` 检查 `.git/` 目录是否存在。 - 不存在 → 用 `Bash` 执行 `git init`。 - 已存在 → 跳过。 ### D. 勾选 docs/08 的 A0 进度 用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选这两行: - ` - [ ] 项目文件骨架已创建(CLAUDE.md + docs/01-需求清单/README.md)` → ` - [x] 项目文件骨架已创建(CLAUDE.md + docs/01-需求清单/README.md)` - `- [ ] A0 项目初始化 — erp-project-init` → `- [x] A0 项目初始化 — erp-project-init` ### E. 打印完成横幅并进入 A1 向用户输出: ``` ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ [erp-project-init] 项目初始化完成 已创建: ✓ CLAUDE.md(从插件模板复制) ✓ docs/01-需求清单/README.md(待人工填写模块索引) ✓ docs/08-模块任务管理.md(全流程进度跟踪) 已勾选:A0 项目初始化 下一步:A1 erp-scope-lock(填写项目概述 + 技术栈 + 需求索引 + REQ 卡片) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ``` 立即调用 `Skill(erp-scope-lock)` 进入 A1,不等用户手动输入。