用途
本技能用于安装 Specify CLI,使 specify 命令在 PATH 中可用,或通过 uvx 以一次性方式调用。技能范围仅限安装 CLI,不运行 specify init;安装后的项目初始化由 speckit-initial 处理。
适用时机
- 首次进行 Spec Kit 设置(如“安装 Spec Kit”“安装 Specify CLI”)。
- 需要在 CI 或脚本中预先安装 CLI。
- 升级 CLI(uv tool install --force)。
- 用户反馈“specify command not found”或“specify: command not found”。
前置条件
- uv:Astral uv,用于安装 CLI。若未安装,需先引导用户安装,例如在 Linux/macOS 上运行
curl -LsSf https://astral.sh/uv/install.sh | sh,Windows 参见 uv 文档。 - 使用 uv 时需 Python 3.11+(uv 通常自带或使用系统 Python)。
- Git:安装阶段可选,后续 specify init 配合 git 时需要。
工作流程
- 检查是否已安装:运行
specify --version或specify check。若成功,说明已安装,建议改用 speckit-initial 进行项目初始化,或 speckit-check 进行环境验证。 - 持久安装(推荐):运行
uv tool install specify-cli --from git+https://github.com/github/spec-kit.git,使 specify 在所有项目的 PATH 中可用。升级命令:uv tool install specify-cli --force --from git+https://github.com/github/spec-kit.git。 - 一次性使用(不安装到 PATH):运行
uvx --from git+https://github.com/github/spec-kit.git specify init <project_name_or_.> --ai <agent>。适用于不想永久安装的场景(如快速试用、CI 一次性任务)。需注意:同一会话中后续的 specify init 或 specify check 可复用相同 uvx 前缀;若未持久安装,需完整重复 uvx --from ... 调用。 - 企业或受限网络:如需 GitHub API 访问,可设置 GH_TOKEN 或 GITHUB_TOKEN。对于 specify init(由 speckit-initial 处理):使用 --github-token <token> 或环境变量。安装阶段 uv 可能需要网络访问以克隆仓库;如遇 TLS 问题,仅在官方明确文档支持时使用 --skip-tls 或类似选项,避免在非受控环境推荐不安全选项。
输出结果
- 持久安装:specify 在 PATH 中可用,用户可在任意目录运行 specify init、specify check。
- 一次性:不改变 PATH,用户每次需运行
uvx --from git+https://github.com/github/spec-kit.git specify ...。
后续步骤
安装后使用 speckit-initial 在项目中运行 specify init,或使用 speckit-check 验证环境。
不同环境说明
- Linux:必要时安装 uv,然后运行持久安装命令。WSL 与 Linux 相同。
- macOS:与 Linux 相同;如需,确保 uv 可用的 Python 3.11+。
- Windows:安装 uv(参见 uv 文档),使用 PowerShell 或 cmd。项目初始化时 speckit-initial 会在需要时使用 --script ps。
- 企业/代理:若 GitHub API 受限,使用 GH_TOKEN/GITHUB_TOKEN;确保 uv 能访问 GitHub。
- CI:优先在可缓存步骤中持久安装,随后在同一 runner 中运行 specify init 或 specify check。
故障排查
- uv 未找到:引导用户安装 uv。
- Python 版本:uv 通常管理 Python;若报错涉及 Python,确保 3.11+ 可用。
- 网络/SSL:检查防火墙、代理与 GitHub 访问;除非必要且在文档支持下,避免禁用 TLS。
- 权限错误:Linux/macOS 上 uv 用户级安装通常无需 sudo;若使用系统 Python,可考虑用户级 uv 安装。
限制
本技能不执行 specify init,不负责项目初始化;相关操作需使用 speckit-initial。具体支持的操作系统细节、企业网络配置与参数支持情况以官方文档为准,部分内容暂未提供。