关于 project-migration
面向现有项目的工具链迁移技能,目标是采用主机原生工具链并保留项目代码。它要求先评估并取得确认,再在指定分支分阶段调整配置、验证构建与测试,且不覆盖文件或修改源代码。
主要功能
- 01迁移前评估项目与配置
- 02确认后按阶段执行迁移
- 03通过专用分支隔离变更
- 04配置 mise、uv、pnpm 与 direnv
- 05移除 devcontainer 配置并验证
适用场景
- 01将现有 Python 项目迁移到 uv 与 mise
- 02将 Node.js 项目切换为固定版本的 pnpm
- 03迁移项目配置并移除 devcontainer
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ loxosceles-dev/ dev-skills --skill project-migration安装后在 Claude Code 中输入/project-migration确认已加载。
详细介绍
项目迁移
这是严格的指南。 请严格遵循以下规则。
将现有项目迁移到主机原生工具链。与从头搭建项目的 project-setup 不同,此技能适用于现有代码,必须以非破坏性、交互式的方式进行。
目标状态定义在 ~/Hermes-Shared/guitarizta/docs/dev-toolchain-architecture.md 中。请阅读该文档,作为权威参考。本技能是实现该状态的操作流程。
核心原则
- 未经询问,绝不覆盖。 对任何已存在的文件,先展示差异。
- 在分支上操作。 所有更改都在
chore/migrate-project-setup分支上进行。 - 尽早询问,不要拖到最后。 意图不明确时,先询问再做假设。
- 不要使用 devcontainer。 绝不添加或保留
.devcontainer/配置。如果它已存在,应计划将其移除。
工作流程
阶段 1:评估
-
识别项目类型。 如果不明确,请询问:Python、Node.js,还是混合项目?
-
阅读匹配的蓝图,从
loxosceles/project-blueprints了解目标结构。 -
审查当前项目。 检查以下内容:
文件/目录 当前状态 目标 .mise.toml是否存在?有哪些版本? 必须存在,并精确固定版本 .python-version是否存在? Python 项目必须存在 pyproject.toml+uv.lock是否存在? Python 项目必须存在 package.json+pnpm-lock.yaml是否存在? Node 项目必须存在 package.json packageManager字段是否已设置? 必须固定版本([email protected]) .envrc是否存在? 应存在,并包含非机密环境变量 .envrc.local.example是否存在? 应存在,并说明所需机密信息 apm.yml+apm.lock.yaml是否存在? 必须存在 .kiro/steering/是否存在? 应存在,并包含相关上下文 .devcontainer/是否存在? 必须移除 .gitignore是否正确? 必须包含: .venv/、.envrc.local、apm_modules/ -
提交迁移计划。 按类别分组。对于每个需要更改的现有文件,说明更改内容和原因。标出需要用户提供意见的事项。
未经用户确认,不得进入此阶段之后的步骤。
阶段 2:分支设置
git checkout dev 2>/dev/null || git checkout main
git checkout -b chore/migrate-project-setup
先确认工作树干净。如果存在未提交的更改,请停止并询问。
阶段 3:执行迁移
按类别逐项处理。每项完成后提交。
固定运行时版本(mise)
- 如果
.mise.toml已存在:将当前固定的版本与项目实际使用的版本进行比较。更改任何版本前,先向用户确认。 - 如果
.mise.toml不存在:确定当前运行时版本并创建该文件。
# .mise.toml
[tools]
python = "3.11" # or whatever version the project is using
node = "22.22.3" # if Node project
- 为 Python 项目创建
.python-version(版本必须与.mise.toml中的 Python 版本一致)。
提交:chore: Add mise toolchain pinning
Python 包(uv)
- 如果
pyproject.toml和uv.lock都已存在:验证它们是最新的(uv sync)。 - 如果存在
requirements.txt,但没有pyproject.toml:提议迁移到 uv。询问项目名称和描述。创建pyproject.toml,对每个依赖运行uv add,生成uv.lock。 - 将
.venv/添加到.gitignore。
提交:chore: Migrate to uv dependency management
Node 包(pnpm)
- 如果存在
package.json:- 检查是否有
packageManager字段。如果没有,确定当前 pnpm 版本(pnpm --version)并添加该字段。 - 确保
pnpm-lock.yaml存在且已提交。 - 确保
.gitignore中包含node_modules/。
- 检查是否有
- 如果
pnpm-lock.yaml之外还存在npm或yarn锁文件:提醒用户并决定保留哪个。
提交:chore: Pin pnpm version, verify lockfile
环境变量(direnv)
- 如果
.envrc不存在:创建一个最简文件。# .envrc export ENVIRONMENT=dev # Add project-specific non-secret vars here # Load machine-local secrets if file exists (gitignored) [[ -f "${PWD}/.envrc.local" ]] && source_env "${PWD}/.envrc.local" - 如果
.envrc已存在:检查其中是否有应移至.envrc.local的机密信息。 - 创建
.envrc.local.example,说明所需的机密信息:# .envrc.local.example — copy to .envrc.local, fill in values, never commit # export DATABASE_URL=postgres://localhost:5432/myproject_dev # export STRIPE_SECRET_KEY=sk_test_... - 将
.envrc.local添加到.gitignore。
提交:chore: Add direnv environment configuration
Agent Skills(APM)
- 如果
apm.yml不存在:创建该文件,并添加标准的dev-skills依赖。name: <project-name> version: 1.0.0 targets: - kiro - claude - codex - copilot - agent-skills dependencies: apm: - loxosceles-dev/dev-skills#main mcp: [] - 运行
apm install以生成apm.lock.yaml。 - 将
apm_modules/添加到.gitignore。 - 将
.kiro/hooks/添加到.gitignore。
提交:chore: Add APM skill dependencies
移除 Devcontainer
如果 .devcontainer/ 存在:
- 向用户展示其中的内容。
- 确认:“这将删除
.devcontainer/。项目将直接使用 mise/uv/pnpm。确认吗?” - 确认后:
git rm -r .devcontainer/ - 检查
docker-compose.devcontainer.yml或类似文件——如果专用于 devcontainer,则将其移除。保留任何提供服务依赖项(Postgres、Redis 等)的docker-compose.yml。
提交:chore: Remove devcontainer configuration
清理 .gitignore
确保其中包含以下内容:
.venv/
node_modules/
.envrc.local
.env
.env.*
apm_modules/
.kiro/hooks/
dist/
提交:chore: Update gitignore for host-native toolchain
阶段 4:验证
mise trust && mise install # runtimes installed
uv sync # if Python project
pnpm install # if Node project
apm install --frozen # skills installed
direnv allow # env vars loaded
运行项目自身的构建/测试命令,确认一切正常。
阶段 5:总结
列出:
- 添加的文件
- 修改的文件(说明更改内容)
- 删除的文件(devcontainer 相关文件)
- 分支名称:
chore/migrate-project-setup - 下一步:向
dev发起 PR
规则
- 绝不从
.gitignore中移除条目——只追加 - 绝不修改源代码文件——只修改基础设施和配置
- 如果 devcontainer 的
.env文件包含真实密钥,请标记出来——不要提交 - 每个类别完成后都提交,不要等到最后一次性提交
- Git 远程地址必须使用 SSH:
[email protected]:user/repo.git
渐进式改进
如果开发者纠正了此技能本应避免的行为,请建议对该技能进行具体修改,以防止将来再次出现相同的纠正。