User-facing migration guide for target repos sitting on the pre-v3 distribution layout. What changed, what survives, and how to re-sync.
If you're installing into a fresh repo, skip this file — just run the install once. This page only matters if your repo was synced before the Forge refactor.
- Brand rename —
inbest→Forgeeverywhere it shows in target repos: marker tags (<!-- inbest:* -->→<!-- forge:* -->),.inbest/config dir →.forge/, skill ids (inbest-*→forge-*). One re-sync rewrites everything in place. - Layout split (distribution side) — the harness now ships from
src/only;plugins/is opt-in extras. Nothing on the target-repo side moves because of this — it's purely a source-tree change. - Installer is Python —
cli/install.jsand the bash setup scripts are gone. The GitHub Action is unchanged from your point of view; it just callspython -m installerunder the hood. - Plugins are opt-in — Engram, Context7, LSP, Serena, Playwright bridge, Agent browser, ccstatusline, GSAP. None install by default; pick what you want with
-f plugins="engram,context7". - Tools dropped — Cursor and Copilot are no longer supported tool targets. If you had
.cursor/or.github/copilot-instructions.mdmarkers, they're left alone but no longer maintained by the installer.
The migration is idempotent and non-destructive — re-running the install converges any partial state without rewriting user content.
gh workflow run sdd-sync-targeted.yml \
-f repos="my-org/my-repo" \
-f preset="solo" \
-f dry_run="true" # preview firstDrop dry_run="true" once the diff looks right. The installer:
- Rewrites stale
inbest:*HTML markers toforge:*in AGENTS.md, CLAUDE.md, skills, agents. - Renames
.inbest/config.json→.forge/config.json(content preserved). - Updates skill folder names (
inbest-explore→forge-explore, etc.) on tools that own the skill copies. - Leaves
.cursor/and.github/copilot-instructions.mduntouched.
Existing user content under managed sections is preserved by version-aware section markers (<!-- forge:section:<name>:<version> -->); content outside markers is never touched.
gh workflow run sdd-sync-targeted.yml \
-f repos="my-org/my-repo" \
-f preset="solo" \
-f plugins="engram,context7,lsp"| Plugin | What it adds | Install ownership |
|---|---|---|
engram (default set) |
Persistent memory MCP, hooks, allowlist | user installs the engram binary once |
context7 (default set) |
Live library docs MCP | harness wires it; no user binary needed |
agent-browser (default set) |
Chrome DevTools MCP (lower token surface than full Playwright) | user installs Chrome |
rtk (default set, W2 of token-cascade refactor) |
Advisory PreToolUse Bash hook + RTK.md fragment — 60-90% token reduction on the rtk coverage set | user installs rtk binary, then rtk init -g once per machine |
lsp (opt-in) |
LSP bridge MCP + forge:lsp-explore skill |
user installs language servers |
playwright-bridge (opt-in) |
Microsoft's official Playwright MCP | user runs npx playwright install once |
ccstatusline (opt-in) |
Claude Code statusline widget | user has Node (already required) |
gsap (opt-in) |
GSAP animation skill bundle for the frontend agent |
harness ships the skill |
W2 default-set behavior change (token-cascade refactor) — target repos that re-sync via the GitHub Action without specifying
plugins:will install the default set (engram, context7, agent-browser, rtk) on next sync. Repos that genuinely want zero plugins must pass an explicit--plugins gsap(stub no-op) to skip the default-set wiring. The non-interactive driver also surfaces aUser action requiredblock listing missing binaries + post-install setup steps (e.g.,rtk init -g). Previously empty--pluginsmeant zero plugins.The
serenaplugin from earlier drafts was deleted in W1 (feat/forge-token-cascade-refactor) — thelspplugin'sforge:lsp-exploreskill remains the supported semantic-code-search story.
Removing a plugin later: drop it from -f plugins=, re-run sync. The cleanup pass scrubs harness-owned files; user-installed binaries are never removed.
The JS CLI was removed in the W2.4 cut. Switch to:
git pull
pip install -e .[interactive]
python -m installer install --target-root /path/to/your/repoSame install pipeline as the Action, no PR overhead. Details in INSTALL-CI.md for non-interactive flows.
The installer never destroys user content. If a re-sync looks wrong:
- Reject the PR the Action opened (the local install path doesn't open PRs).
- The previous layout stays exactly as it was.
There's no "downgrade" command — you just don't merge.
- STRUCTURE.md — distribution-repo layout (
src/ships,plugins/opts in, rest is meta) - OWNERSHIP.md — the four install-ownership categories and the per-plugin matrix
- UPGRADE-v2.md — earlier audit-v2 migration (preset model, mode renumbering, validator scorecard)
- INSTALL-CI.md — non-interactive install reference