Migrate
🔀 Move a legacy .bluespec/ install to Lagune, keeping everything you wrote.
If your project was set up by the legacy blue-spec package, its state lives in .bluespec/ and its agent commands answer to /bluespec.*. Migrate brings all of it to Lagune in one run.
Run it once, from the project root:
npx -y lagune@latest migrate
Only the old name inside them changes, never the content. The one exception, as in update: a built-in you refined is reset to the shipped version, still recoverable from your git history.
In doubt? Make sure your project's current state is committed before running the migration.
What changes
Once migrated, your project will answer to the new commands and paths:
- Commands
- Files
- Paths
| Before | After |
|---|---|
/bluespec | /lagune |
/bluespec.charter | /lagune.charter |
/bluespec.detect | /lagune.detect |
/bluespec.plan | /lagune.plan |
/bluespec.harden | /lagune.harden |
/bluespec.verify | /lagune.verify |
/bluespec.repair | /lagune.repair |
/bluespec.specialize | /lagune.specialize |
/bluespec.prove | /lagune.prove |
In your .gitignore, every line of the legacy block is rewritten in place (an entry missing from an older block is backfilled):
| Before | After |
|---|---|
# Blue Spec | # Lagune |
/.bluespec/templates/ | /.lagune/templates/ |
/.bluespec/hooks/ | /.lagune/hooks/ |
/.bluespec/proofs/ | /.lagune/proofs/ |
/.bluespec/specializations.md | /.lagune/specializations.md |
/.bluespec/skills/* | /.lagune/skills/* |
!/.bluespec/skills/<your-sub-skill>.md | !/.lagune/skills/<your-sub-skill>.md |
/**/bluespec.* | /**/lagune.* |
/**/bluespec/ | /**/lagune/ |
In .lagune/manifest.json and .lagune/tracking.json, the identity field is renamed and everything else is kept:
| Before | After |
|---|---|
"name": "blue-spec" | "name": "lagune" |
Lagune's own state moves as one directory:
| Before | After |
|---|---|
.bluespec/ | .lagune/ |
In your agent's own location, the command artifacts are renamed, one line per supported agent:
| Before | After |
|---|---|
.agent/skills/bluespec* | .agent/skills/lagune* |
.agents/commands/bluespec*.md | .agents/commands/lagune*.md |
.amazonq/prompts/bluespec*.md | .amazonq/prompts/lagune*.md |
.augment/commands/bluespec*.md | .augment/commands/lagune*.md |
.bob/commands/bluespec*.md | .bob/commands/lagune*.md |
.claude/skills/bluespec* | .claude/skills/lagune* |
.clinerules/workflows/bluespec*.md | .clinerules/workflows/lagune*.md |
.codebuddy/commands/bluespec*.md | .codebuddy/commands/lagune*.md |
.codex/skills/bluespec* | .codex/skills/lagune* |
.continue/prompts/bluespec*.prompt | .continue/prompts/lagune*.prompt |
.cospec/commands/bluespec*.md | .cospec/commands/lagune*.md |
.crush/commands/bluespec*.md | .crush/commands/lagune*.md |
.cursor/skills/bluespec* | .cursor/skills/lagune* |
.devin/skills/bluespec* | .devin/skills/lagune* |
.factory/commands/bluespec*.md | .factory/commands/lagune*.md |
.forge/commands/bluespec*.md | .forge/commands/lagune*.md |
.gemini/commands/bluespec*.toml | .gemini/commands/lagune*.toml |
.github/prompts/bluespec*.prompt.md | .github/prompts/lagune*.prompt.md |
.goose/recipes/bluespec*.yaml | .goose/recipes/lagune*.yaml |
.hermes/skills/bluespec* | .hermes/skills/lagune* |
.iflow/commands/bluespec*.md | .iflow/commands/lagune*.md |
.junie/commands/bluespec*.md | .junie/commands/lagune*.md |
.kilocode/workflows/bluespec*.md | .kilocode/workflows/lagune*.md |
.kimi/skills/bluespec* | .kimi/skills/lagune* |
.kiro/prompts/bluespec*.md | .kiro/prompts/lagune*.md |
.lingma/skills/bluespec* | .lingma/skills/lagune* |
.opencode/commands/bluespec*.md | .opencode/commands/lagune*.md |
.pi/prompts/bluespec*.md | .pi/prompts/lagune*.md |
.qoder/commands/bluespec*.md | .qoder/commands/lagune*.md |
.qwen/commands/bluespec*.md | .qwen/commands/lagune*.md |
.roo/commands/bluespec*.md | .roo/commands/lagune*.md |
.rovodev/skills/bluespec* | .rovodev/skills/lagune* |
.shai/commands/bluespec*.md | .shai/commands/lagune*.md |
.tabnine/agent/commands/bluespec*.toml | .tabnine/agent/commands/lagune*.toml |
.trae/skills/bluespec* | .trae/skills/lagune* |
.vibe/skills/bluespec* | .vibe/skills/lagune* |
.windsurf/workflows/bluespec*.md | .windsurf/workflows/lagune*.md |
How it works
Migrate reads your legacy manifest and carries the whole install over:
- Renames
.bluespec/to.lagune/. - Removes the legacy
/bluespec.*agent commands and writes the/lagune.*ones in their place, in your agent's own format. - Rewrites the old name inside the manifest, the tracking, the phase artifacts, and any sub-skill you authored, keeping their content otherwise intact.
- Migrates the Lagune block in your
.gitignore, preserving your own entries and any sub-skill re-include. - Refreshes the templates, hooks, and built-in sub-skills to the installed version, the same way
updatedoes.
Your security work survives as it is: the charter, the artifacts each phase produced, the tracked findings and the paths they point at, and every sub-skill of your own.
- It touches only Lagune's own files, never your code.
- Running it again is a no-op: once the project runs on Lagune, there is nothing left to migrate.
- If both
.bluespec/and.lagune/exist, it stops and asks you to keep the one holding your state before running again.
