@mmerterden/multi-agent-pipeline 10.5.0 → 10.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/README.md +11 -42
  3. package/install/index.mjs +9 -101
  4. package/package.json +1 -1
  5. package/pipeline/agents/android-architect.md +3 -3
  6. package/pipeline/agents/backend-architect.md +3 -3
  7. package/pipeline/agents/code-reviewer.md +3 -3
  8. package/pipeline/agents/ios-architect.md +3 -3
  9. package/pipeline/commands/multi-agent/finish.md +4 -4
  10. package/pipeline/commands/multi-agent/refs/features/model-fallback.md +18 -10
  11. package/pipeline/commands/multi-agent/refs/phases/phase-4-review.md +1 -11
  12. package/pipeline/commands/multi-agent/setup.md +18 -1
  13. package/pipeline/commands/multi-agent/stack.md +1 -1
  14. package/pipeline/commands/multi-agent/sync.md +5 -74
  15. package/pipeline/commands/multi-agent/update.md +9 -0
  16. package/pipeline/scripts/README.md +0 -1
  17. package/pipeline/scripts/build-stack-plugins.mjs +2 -2
  18. package/pipeline/scripts/smoke-cross-cli-behavior.sh +0 -7
  19. package/pipeline/scripts/smoke-install-layout.sh +1 -2
  20. package/pipeline/scripts/smoke-model-fallback.sh +11 -10
  21. package/pipeline/skills/shared/core/multi-agent-finish/SKILL.md +1 -1
  22. package/pipeline/skills/shared/core/multi-agent-stack/SKILL.md +1 -1
  23. package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +1 -1
  24. package/install/_adapters.mjs +0 -73
  25. package/pipeline/adapters/_base.mjs +0 -640
  26. package/pipeline/adapters/antigravity.mjs +0 -140
  27. package/pipeline/adapters/codex.mjs +0 -159
  28. package/pipeline/adapters/copilot-chat-orchestration.mjs +0 -148
  29. package/pipeline/adapters/copilot-chat.mjs +0 -124
  30. package/pipeline/adapters/cursor-orchestration.mjs +0 -152
  31. package/pipeline/adapters/cursor.mjs +0 -146
  32. package/pipeline/scripts/smoke-adapters.sh +0 -276
  33. package/pipeline/scripts/smoke-shared-runtime.sh +0 -108
  34. package/pipeline/scripts/smoke-stack-swap.sh +0 -132
  35. package/pipeline/scripts/smoke-sync-adapters.sh +0 -113
  36. package/pipeline/scripts/stack-swap.sh +0 -182
  37. package/pipeline/scripts/sync-adapters.mjs +0 -183
package/CHANGELOG.md CHANGED
@@ -14,6 +14,61 @@ Internal file-layout changes that don't affect the slash-command surface are sti
14
14
 
15
15
  ---
16
16
 
17
+ ## [10.7.0] - 2026-07-02
18
+
19
+ The pipeline targets **Claude Code + Copilot CLI only**. The Cursor / Antigravity / VS Code Copilot Chat / OpenAI Codex CLI adapters are removed.
20
+
21
+ ### Removed
22
+
23
+ - **All non-native adapters deleted.** `pipeline/adapters/` (Cursor, Antigravity,
24
+ Copilot Chat, Codex + orchestration variants), `pipeline/scripts/sync-adapters.mjs`,
25
+ `install/_adapters.mjs`, and the `smoke-adapters.sh` / `smoke-sync-adapters.sh` /
26
+ `smoke-shared-runtime.sh` smokes are gone.
27
+ - Installer flags `--cursor` / `--copilot-chat` / `--antigravity` / `--codex` /
28
+ `--all-tools` removed; `install` now dispatches only Claude Code + Copilot CLI.
29
+ - `multi-agent:sync` drops the Codex (Step 2a) and per-project adapter (Step 2b)
30
+ steps; the `--no-adapters` flag is retired. README, `phase-4-review`, and
31
+ `setup` adapter documentation removed.
32
+
33
+ ### Changed
34
+
35
+ - **`multi-agent:update` prunes the retired global Codex adapter prompt**
36
+ (`~/.codex/prompts/multi-agent.md`). Per-project adapter files (`.cursor/`,
37
+ `.agent/`, `.github/copilot-instructions.md`) are left untouched — they live in
38
+ user repos; the `uninstall` command can still remove them selectively.
39
+
40
+ ## [10.6.0] - 2026-07-02
41
+
42
+ Fable 5 restored as the top model tier; `stack-swap` fully removed; setup gains a default stack step.
43
+
44
+ ### Added
45
+
46
+ - **`multi-agent:setup` Step 9 — default stack plugin enablement.** First-run
47
+ setup detects the project stack from markers (`.xcodeproj`/`Package.swift` → iOS,
48
+ `build.gradle` → Android, `package.json`+react → Frontend, `requirements.txt`/
49
+ `pyproject.toml` → Backend) and enables the matching marketplace plugin plus the
50
+ always-on `ai-common-engineering-toolkit`. **No clear marker → default iOS.** So a
51
+ fresh install works out of the box and a repo at any org gets its correct stack.
52
+
53
+ ### Changed
54
+
55
+ - **Fable 5 is the top model tier again.** Architect (`ios/android/backend-architect`)
56
+ and Reviewer-1 (`code-reviewer`) personas declare `preferredModel: fable`. The tier
57
+ ladder is now `fable → opus → sonnet → haiku`: **if Fable 5 is unavailable, the first
58
+ fallback is Opus 4.8**, applied per-dispatch with no file edits. Security personas keep
59
+ opus. Reverses the 2026-06 "fable retired" state now that `claude-fable-5` is available.
60
+
61
+ ### Removed
62
+
63
+ - **`stack-swap.sh` + `smoke-stack-swap.sh` deleted.** The SessionStart skill-dir-swap
64
+ mechanic is gone entirely; stack selection is marketplace-plugin enablement
65
+ (`/multi-agent:stack`). No dead code or legacy hook remains.
66
+
67
+ ### Fixed
68
+
69
+ - Genericized a leaked corporate Jira key (`DIJITAL` → `PROJ`/`{JIRA_KEY}`) in the
70
+ `finish` command + skill so the personal-data gate passes.
71
+
17
72
  ## [10.5.0] - 2026-07-02
18
73
 
19
74
  Stack skills move from the local `stack-swap` mechanic to versioned marketplace plugins.
package/README.md CHANGED
@@ -13,7 +13,7 @@
13
13
  |---|---|
14
14
  | Slash commands (colon-form `/multi-agent:*`) | 35 |
15
15
  | Copilot skills (dash-form `multi-agent-*`) | 35 |
16
- | Platforms (native: Claude Code, Copilot CLI · adapter: Cursor, Antigravity, VS Code Copilot Chat, Codex CLI) | 6 |
16
+ | Platforms (Claude Code, Copilot CLI) | 2 |
17
17
  | Store-compliance skills (`apple-archive-compliance`, `google-play-compliance`) | 2 |
18
18
  | Figma skills (iOS + Android + Common) | 41 |
19
19
  | External skill catalog (`shared/external/`) | 143 |
@@ -25,7 +25,7 @@
25
25
  | Agent personas | 8 |
26
26
  | Pipeline phases | 8 |
27
27
 
28
- > Platform tiers, stated honestly: **Claude Code** and **Copilot CLI** run the full pipeline natively - the gate scripts + live tracker are installed to `~/.claude` / `~/.copilot`, and on Claude Code a `PreToolUse` hook hard-blocks on the secret scan. **Cursor, Antigravity, and VS Code Copilot Chat** (v9.4.0+) receive the orchestration workflow + subagents/agents + the dev-toolkit MCP server, AND the gate scripts are installed to a shared `~/.multi-agent/` runtime that the emitted agents invoke by absolute path - so the deterministic gates (evidence, secret, intent, consensus, cost) DO run there. The remaining gap vs Claude Code is enforcement strength: those three platforms have no `PreToolUse` hook, so the gates are workflow-enforced (the agent runs them as steps) rather than OS-blocked. See `refs/picker-contract.md`.
28
+ > **Claude Code** and **Copilot CLI** run the full pipeline natively - the gate scripts + live tracker are installed to `~/.claude` / `~/.copilot`, and on Claude Code a `PreToolUse` hook hard-blocks on the secret scan.
29
29
 
30
30
  > Security issue? See [SECURITY.md](./SECURITY.md). Please do not open public issues for vulnerabilities.
31
31
 
@@ -72,14 +72,6 @@ node install.js # Claude Code (default)
72
72
  node install.js --copilot # Copilot CLI
73
73
  node install.js --all # Both Claude + Copilot
74
74
 
75
- # Third-party AI tool adapters (knowledge layer only)
76
- node install.js --cursor # Cursor (.cursor/rules/*.mdc + .cursorrules)
77
- node install.js --copilot-chat # GitHub Copilot Chat (.github/copilot-instructions.md)
78
- node install.js --antigravity # Antigravity (.agent/ + AGENTS.md)
79
- node install.js --codex # OpenAI Codex CLI (global: ~/.codex/prompts + config.toml)
80
- node install.js --all-tools # Everything: 2 native (Claude + Copilot CLI) + 4 adapter targets
81
- node install.js --cursor --target=/path/to/repo # Adapter target override (default: cwd)
82
-
83
75
  node install.js --link # Symlink mode (dev, saves ~10K tokens)
84
76
  node install.js --all --dry-run # Preview every operation, write nothing
85
77
 
@@ -87,7 +79,6 @@ node install.js --all --dry-run # Preview every operation, write nothing
87
79
  node install.js # ...later...
88
80
  node pipeline/scripts/uninstall.mjs --dry-run # preview what would be removed
89
81
  node pipeline/scripts/uninstall.mjs --yes # remove from every installed target
90
- node pipeline/scripts/uninstall.mjs --cursor # selective uninstall
91
82
 
92
83
  # Optional: expose the CLI globally as 'multi-agent-pipeline'
93
84
  npm link
@@ -109,11 +100,6 @@ Update later with `git pull && npm install` inside the clone. Pin to a specific
109
100
  npx @mmerterden/multi-agent-pipeline install # Claude Code only (default)
110
101
  npx @mmerterden/multi-agent-pipeline install --copilot # Copilot CLI only
111
102
  npx @mmerterden/multi-agent-pipeline install --all # Both native CLIs (Claude + Copilot)
112
- npx @mmerterden/multi-agent-pipeline install --cursor # Cursor adapter (per-project, cwd)
113
- npx @mmerterden/multi-agent-pipeline install --copilot-chat # GitHub Copilot Chat adapter (per-project)
114
- npx @mmerterden/multi-agent-pipeline install --antigravity # Antigravity adapter (per-project)
115
- npx @mmerterden/multi-agent-pipeline install --codex # OpenAI Codex CLI (global ~/.codex)
116
- npx @mmerterden/multi-agent-pipeline install --all-tools # Everything: 2 native + 4 adapter targets
117
103
  npx @mmerterden/multi-agent-pipeline install --link # Symlink mode
118
104
  npx @mmerterden/multi-agent-pipeline install --all --dry-run # Preview, write nothing
119
105
 
@@ -194,42 +180,27 @@ Earlier README revisions referenced GitHub Packages with a Classic PAT and `~/.n
194
180
 
195
181
  ## Tool support
196
182
 
197
- > **TL;DR** - Full pipeline orchestration runs on **Claude Code, Copilot CLI, Cursor, Antigravity, VS Code Copilot Chat, and OpenAI Codex CLI**. Claude Code and Copilot CLI run it natively; Cursor (`.cursor/agents` + `/multi-agent` command), Antigravity (`.agent/workflows` + rules), and VS Code Copilot Chat (`.github/agents` + `/multi-agent` prompt) run it via per-platform orchestration adapters, with the dev-toolkit MCP server registered automatically. Codex CLI runs it via a global adapter (`~/.codex/prompts/multi-agent.md` + `~/.codex/config.toml` MCP); since Codex has no subagent fan-out, its parallel review degrades to a sequential adversarial two-pass. Interactive pickers and hard gates degrade per `refs/picker-contract.md` (native dialog where available, else the `ask_user_choice` MCP tool or `pipeline/lib/ask-choice.sh`). Note: Gemini CLI is being folded into Antigravity (consumer support ends 2026-06-18), so Antigravity is the forward target.
198
-
199
- ### Tier 1 - Full pipeline (orchestration + knowledge)
183
+ The pipeline runs natively on **Claude Code** and **Copilot CLI** the two CLIs it targets. Both install from the same `pipeline/skills/` source and get identical skill coverage.
200
184
 
201
185
  | Tool | Install Flag | How It Works |
202
186
  | --- | --- | --- |
203
187
  | **Claude Code** | `--claude` (default) | Native: slash commands + shared + figma skills + agents + rules + scripts |
204
188
  | **Copilot CLI** | `--copilot` | Native: instructions + shared + figma skills + scripts |
205
- | **Cursor** | `--cursor` | Adapter: `.cursor/agents/ma-*.md` subagents + `.cursor/commands/multi-agent.md` + rules + `.cursor/mcp.json` |
206
- | **Antigravity** | `--antigravity` | Adapter: `.agent/workflows/multi-agent.md` + `.agent/rules/` + `AGENTS.md` + `.agent/mcp_config.json` |
207
- | **VS Code Copilot Chat** | `--copilot-chat` | Adapter: `.github/agents/ma-*.agent.md` + `.github/prompts/multi-agent.prompt.md` + `.vscode/mcp.json` |
208
- | **OpenAI Codex CLI** | `--codex` | Global adapter: `~/.codex/prompts/multi-agent.md` + `~/.codex/AGENTS.md` + `~/.codex/config.toml` ([mcp_servers.dev-toolkit]) |
209
-
210
- Claude Code and Copilot CLI run the pipeline natively. Cursor, Antigravity, and VS Code Copilot Chat run it through per-platform orchestration adapters that transform the pipeline personas (`pipeline/agents/*.md`) into that platform's subagent/agent format and emit a `/multi-agent` command/workflow, registering the dev-toolkit MCP server automatically. Codex CLI is a global-config tool (its prompts + MCP live under `~/.codex`, with no per-project prompt directory), so its adapter installs globally and runs the `/multi-agent` slash command sequentially - Codex has no subagent fan-out, so the parallel review degrades to a sequential adversarial two-pass. Where a platform lacks a native picker, confirmations degrade per `refs/picker-contract.md` (the `ask_user_choice` MCP tool or `pipeline/lib/ask-choice.sh`); hard blocking gates degrade to advisory rules plus a CI smoke step.
211
-
212
- All install from the same `pipeline/skills/` source. Tree organization:
213
-
214
- - `pipeline/skills/shared/core/` - **orchestration skills** (`multi-agent-*` dash-form mirrors of colon-form slash commands + compliance skills + orchestrator)
215
- - `pipeline/skills/shared/external/` - **127 third-party / curated iOS, Android, and generic guidance skills** (SwiftUI, Jetpack Compose, testing, performance, security, etc.)
216
- - `pipeline/skills/figma-ios/` + `pipeline/skills/figma-android/` - **5 + 5 platform-specific Phase 3 sub-skills** (SwiftUI and Jetpack Compose code generation)
217
- - `pipeline/skills/figma-common/` - **27 platform-agnostic Figma helpers** (iterate, commit, wiki setup, MCP auth, performance harness)
218
-
219
- You get identical skill coverage regardless of which CLI you use. Both CLIs also receive the same `pipeline/scripts/` tree so multi-CLI-only installs stay self-contained.
220
189
 
221
- All orchestration adapters default to `process.cwd()`; override with `--target=<path>`. Install every supported tool at once with `--all-tools`. Filter the skill set by stack with `--platform=ios|android|all`. Each adapter also writes the knowledge layer (rules + per-skill instructions) so single-tool installs are self-contained.
190
+ Skill tree:
222
191
 
223
- ### Tier 2 - Manual port
192
+ - `pipeline/skills/shared/core/` - **orchestration skills** (`multi-agent-*` dash-form mirrors of the colon-form slash commands + compliance skills + orchestrator)
193
+ - `pipeline/skills/shared/external/` - **curated iOS / Android / generic guidance skills** (SwiftUI, Jetpack Compose, testing, performance, security, etc.) — also distributed as versioned marketplace plugins in `mmerterden/multi-agent-plugins`
194
+ - `pipeline/skills/figma-ios/` + `pipeline/skills/figma-android/` - **platform-specific Phase 3 sub-skills** (SwiftUI and Jetpack Compose code generation)
195
+ - `pipeline/skills/figma-common/` - **platform-agnostic Figma helpers** (iterate, commit, wiki setup, MCP auth, performance harness)
224
196
 
225
- **JetBrains AI**, **Codeium**, **Tabnine**, **Amazon Q Developer** - closed/proprietary config or a different paradigm with no agent/command file format we can target. Skill content can be copy-pasted into native rule formats; no automated installer ships today. PRs welcome.
197
+ Filter the skill set by stack with `--platform=ios|android|all`. Both CLIs also receive the same `pipeline/scripts/` tree so single-CLI installs stay self-contained.
226
198
 
227
- ### Uninstall (token-preserving, all tiers)
199
+ ### Uninstall (token-preserving)
228
200
 
229
201
  ```bash
230
202
  npx @mmerterden/multi-agent-pipeline uninstall # interactive, all installed targets
231
203
  npx @mmerterden/multi-agent-pipeline uninstall --dry-run # preview, zero side effects
232
- npx @mmerterden/multi-agent-pipeline uninstall --cursor # selective: only this tool
233
204
  ```
234
205
 
235
206
  Personal access tokens stored in macOS Keychain / Windows Credential Manager / Linux libsecret are **never touched** by the uninstaller. Smoke tests enforce this with a static check that fails the build if the script ever references a credential-store deletion API.
@@ -578,7 +549,7 @@ Stack skills ship as versioned plugins in the `{owner}/multi-agent-plugins` mark
578
549
  /multi-agent:stack all multi-agent-stack all # all four toolkits + common
579
550
  ```
580
551
 
581
- Add the marketplace once with `claude marketplace add {owner}/multi-agent-plugins`. Newly published plugin versions are pulled by `/multi-agent:update`. The plugins are rebuilt from `pipeline/skills/shared/external/` via `pipeline/scripts/build-stack-plugins.mjs` (run by `multi-agent:sync` Step 3c), which bumps the patch version of any plugin whose skill set changed. `stack-swap.sh` is retained for manual/offline use but is no longer wired to any hook.
552
+ Add the marketplace once with `claude marketplace add {owner}/multi-agent-plugins`. Newly published plugin versions are pulled by `/multi-agent:update`. The plugins are rebuilt from `pipeline/skills/shared/external/` via `pipeline/scripts/build-stack-plugins.mjs` (run by `multi-agent:sync` Step 3c), which bumps the patch version of any plugin whose skill set changed. The old `stack-swap.sh` mechanic has been removed.
582
553
 
583
554
  ## Setup
584
555
 
@@ -639,7 +610,6 @@ Runs unit tests, smoke suites, eval fixtures, schema validation, and lint - the
639
610
  | ---------------------- | ------------------------------------------------ |
640
611
  | `pre-commit-check.sh` | Secret detection before commits |
641
612
  | `build-stack-plugins.mjs` | Rebuild stack plugins from `shared/external`, bump changed plugin versions |
642
- | `stack-swap.sh` | Legacy stack skill-dir swap (manual/offline; no longer hooked) |
643
613
  | `keychain-save.sh` | Save tokens/JSON to macOS Keychain (interactive) |
644
614
  | `keychain.py` | Deterministic Python Keychain helper (get/set/delete/list/doctor); shell driver auto-delegates on macOS/Linux |
645
615
  | `github-ssh-setup.sh` | GitHub SSH key generation + config |
@@ -785,7 +755,6 @@ pipeline/
785
755
  scripts/
786
756
  pre-commit-check.sh Secret detection hook
787
757
  build-stack-plugins.mjs Rebuild stack plugins + version bump
788
- stack-swap.sh Legacy stack swap (manual; no longer hooked)
789
758
  keychain-save.sh Save tokens/JSON to macOS Keychain
790
759
  github-ssh-setup.sh GitHub SSH key generation + setup
791
760
  ui-tree-dumper.swift iOS accessibility tree dumper
package/install/index.mjs CHANGED
@@ -1,12 +1,9 @@
1
1
  /**
2
2
  * multi-agent-pipeline installer entry point.
3
3
  *
4
- * Parses flags, dispatches to per-target installers (Claude / Copilot /
5
- * adapter modules), prints summary, and fires opt-in telemetry.
6
- *
7
- * Behaviour MUST stay byte-equivalent to the pre-v8.0.0 monolithic install.js.
8
- * The smoke `smoke-install-layout.sh` test compares the produced filesystem
9
- * tree against a fixture before/after refactor.
4
+ * Parses flags, dispatches to the per-target installers (Claude Code / Copilot
5
+ * CLI), prints a summary, and fires opt-in telemetry. The pipeline runs natively
6
+ * on these two CLIs only.
10
7
  *
11
8
  * @module install/index
12
9
  */
@@ -16,7 +13,6 @@ import { fileURLToPath } from "url";
16
13
 
17
14
  import { installClaude } from "./claude.mjs";
18
15
  import { installCopilot } from "./copilot.mjs";
19
- import { anyAdapterRequested, installAdapters } from "./_adapters.mjs";
20
16
  import { setDryRun } from "./_common.mjs";
21
17
  import { sendInstallTelemetry } from "./_telemetry.mjs";
22
18
 
@@ -26,14 +22,7 @@ const PIPELINE_ROOT = dirname(__dirname);
26
22
  const PIPELINE_SRC = `${PIPELINE_ROOT}/pipeline`;
27
23
 
28
24
  /** Tool flags surfaced in CLI help. */
29
- const TOOL_FLAGS = [
30
- "--claude",
31
- "--copilot",
32
- "--cursor",
33
- "--copilot-chat",
34
- "--antigravity",
35
- "--codex",
36
- ];
25
+ const TOOL_FLAGS = ["--claude", "--copilot"];
37
26
 
38
27
  /**
39
28
  * @param {string[]} argv
@@ -55,7 +44,6 @@ export async function runInstall(argv) {
55
44
  const KNOWN_FLAGS = [
56
45
  ...TOOL_FLAGS,
57
46
  "--all",
58
- "--all-tools",
59
47
  "--link",
60
48
  "--index-only",
61
49
  "--dry-run",
@@ -79,32 +67,12 @@ export async function runInstall(argv) {
79
67
  setDryRun(dryRun);
80
68
 
81
69
  const isExplicitlyTargeted =
82
- flags.some((f) => TOOL_FLAGS.includes(f)) ||
83
- flags.includes("--all") ||
84
- flags.includes("--all-tools");
70
+ flags.some((f) => TOOL_FLAGS.includes(f)) || flags.includes("--all");
85
71
 
86
72
  const forClaude =
87
- flags.includes("--claude") ||
88
- flags.includes("--all") ||
89
- flags.includes("--all-tools") ||
90
- !isExplicitlyTargeted;
91
-
92
- const forCopilot =
93
- flags.includes("--copilot") ||
94
- flags.includes("--all") ||
95
- flags.includes("--all-tools");
96
-
97
- const adapterFlags = {
98
- cursor: flags.includes("--cursor") || flags.includes("--all-tools"),
99
- copilotChat: flags.includes("--copilot-chat") || flags.includes("--all-tools"),
100
- antigravity: flags.includes("--antigravity") || flags.includes("--all-tools"),
101
- codex: flags.includes("--codex") || flags.includes("--all-tools"),
102
- };
73
+ flags.includes("--claude") || flags.includes("--all") || !isExplicitlyTargeted;
103
74
 
104
- const adapterTarget = (() => {
105
- const raw = flags.find((f) => f.startsWith("--target="));
106
- return raw ? raw.slice("--target=".length) : process.cwd();
107
- })();
75
+ const forCopilot = flags.includes("--copilot") || flags.includes("--all");
108
76
 
109
77
  const useSymlinks = flags.includes("--link");
110
78
  const indexOnly = flags.includes("--index-only");
@@ -127,26 +95,6 @@ export async function runInstall(argv) {
127
95
  if (forClaude) installClaude(installerCtx);
128
96
  if (forCopilot) installCopilot(installerCtx);
129
97
 
130
- if (anyAdapterRequested(adapterFlags)) {
131
- if (dryRun) {
132
- // Adapter installs merge marker-wrapped blocks into user-owned files;
133
- // the preview lists the touched paths instead of threading dry-run
134
- // through every adapter write site.
135
- const planned = Object.entries(adapterFlags)
136
- .filter(([, on]) => on)
137
- .map(([name]) => name);
138
- console.log(` [dry-run] would install adapter(s) ${planned.join(", ")} into ${adapterTarget}`);
139
- } else {
140
- await installAdapters({
141
- pipelineRoot: PIPELINE_ROOT,
142
- pipelineSrc: PIPELINE_SRC,
143
- target: adapterTarget,
144
- platformFilter: platformFlag,
145
- flags: adapterFlags,
146
- });
147
- }
148
- }
149
-
150
98
  if (dryRun) {
151
99
  console.log("");
152
100
  console.log(" Dry-run complete — nothing was written. Re-run without --dry-run to install.");
@@ -154,12 +102,7 @@ export async function runInstall(argv) {
154
102
  return;
155
103
  }
156
104
 
157
- printSummary({
158
- forClaude,
159
- forCopilot,
160
- adapterFlags,
161
- adapterTarget,
162
- });
105
+ printSummary({ forClaude, forCopilot });
163
106
 
164
107
  // Fire-and-forget; install is already done.
165
108
  sendInstallTelemetry({ packageRoot: PIPELINE_ROOT, flags });
@@ -182,7 +125,7 @@ function parsePlatformFlag(flags) {
182
125
  }
183
126
 
184
127
  function printSummary(opts) {
185
- const { forClaude, forCopilot, adapterFlags, adapterTarget } = opts;
128
+ const { forClaude, forCopilot } = opts;
186
129
 
187
130
  console.log(" Installation complete!");
188
131
  console.log("");
@@ -200,41 +143,6 @@ function printSummary(opts) {
200
143
  console.log(" Just describe your task — Copilot will follow the pipeline");
201
144
  console.log("");
202
145
  }
203
- if (adapterFlags.cursor) {
204
- console.log(" Cursor (full orchestration):");
205
- console.log(` Rules: ${adapterTarget}/.cursor/rules/multi-agent-*.mdc`);
206
- console.log(` Subagents: ${adapterTarget}/.cursor/agents/ma-*.md (parallel review / explorer / triage)`);
207
- console.log(` Command: ${adapterTarget}/.cursor/commands/multi-agent.md (run /multi-agent)`);
208
- console.log(` MCP: ${adapterTarget}/.cursor/mcp.json (dev-toolkit)`);
209
- console.log(" Pickers degrade per refs/picker-contract.md; hard gates -> advisory rules + CI.");
210
- console.log("");
211
- }
212
- if (adapterFlags.copilotChat) {
213
- console.log(" GitHub Copilot Chat (VS Code, full orchestration):");
214
- console.log(` Instructions: ${adapterTarget}/.github/copilot-instructions.md + .github/instructions/multi-agent-*`);
215
- console.log(` Agents: ${adapterTarget}/.github/agents/ma-*.agent.md (parallel review / explorer / triage)`);
216
- console.log(` Command: ${adapterTarget}/.github/prompts/multi-agent.prompt.md (run /multi-agent)`);
217
- console.log(` MCP: ${adapterTarget}/.vscode/mcp.json (dev-toolkit)`);
218
- console.log(" Confirmations use VS Code native approval dialogs (refs/picker-contract.md).");
219
- console.log("");
220
- }
221
- if (adapterFlags.antigravity) {
222
- console.log(" Antigravity (full orchestration):");
223
- console.log(` Rules: ${adapterTarget}/.agent/rules/multi-agent-*.md`);
224
- console.log(` Workflow: ${adapterTarget}/.agent/workflows/multi-agent.md (run /multi-agent)`);
225
- console.log(` Context: ${adapterTarget}/AGENTS.md (skill index, marker-wrapped)`);
226
- console.log(` MCP: ${adapterTarget}/.agent/mcp_config.json (dev-toolkit)`);
227
- console.log(" Note: .agent/ paths community-documented; confirm against current Antigravity docs.");
228
- console.log("");
229
- }
230
- if (adapterFlags.codex) {
231
- console.log(" OpenAI Codex CLI (global, sequential orchestration):");
232
- console.log(" Command: ~/.codex/prompts/multi-agent.md (run /multi-agent)");
233
- console.log(" Context: ~/.codex/AGENTS.md (skill index, marker-wrapped)");
234
- console.log(" MCP: ~/.codex/config.toml ([mcp_servers.dev-toolkit])");
235
- console.log(" Note: prompts + MCP are global; Codex has no subagent fan-out (review runs sequential).");
236
- console.log("");
237
- }
238
146
 
239
147
  console.log(" For UI testing, also install the mobile MCP server:");
240
148
  console.log(" Add to your MCP config: npx @mmerterden/dev-toolkit-mcp");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mmerterden/multi-agent-pipeline",
3
- "version": "10.5.0",
3
+ "version": "10.7.0",
4
4
  "description": "8-phase AI development pipeline with full orchestration on Claude Code, Copilot CLI, Cursor, Antigravity, and VS Code Copilot Chat. Analysis, planning, TDD, CLI-aware parallel review with consensus surfacing + Opus triage, default-FAIL evidence gates, secret + intent guards, per-phase cost ledger, persistent learnings memory, wiki generation, commit automation. Token-preserving uninstall.",
5
5
  "type": "module",
6
6
  "main": "index.js",
@@ -1,8 +1,8 @@
1
1
  ---
2
2
  description: Android architect - evaluates design decisions, patterns, and module structure
3
- model: opus
4
- preferredModel: opus
5
- modelRationale: "Architecture decisions across Gradle modules, Compose stability, Hilt graphs, and migration paths run on opus (top available tier). No downgrade recommended."
3
+ model: fable
4
+ preferredModel: fable
5
+ modelRationale: "Architecture decisions across Gradle modules, Compose stability, Hilt graphs, and migration paths run on fable, the top tier (opus is the first fallback). No downgrade recommended."
6
6
  ---
7
7
 
8
8
  You are a senior Android architect with deep expertise in large-scale modular Android applications.
@@ -1,8 +1,8 @@
1
1
  ---
2
2
  description: Backend architect - evaluates API design, data modeling, and system architecture
3
- model: opus
4
- preferredModel: opus
5
- modelRationale: "API design + migration safety + scaling analysis are top-tier concerns; opus is the top available tier and handles concurrent-write / rollback edge cases in database migration reviews."
3
+ model: fable
4
+ preferredModel: fable
5
+ modelRationale: "API design + migration safety + scaling analysis are top-tier concerns; fable is the top tier (opus is the first fallback) and handles concurrent-write / rollback edge cases in database migration reviews."
6
6
  ---
7
7
 
8
8
  You are a senior backend architect with expertise in API design, distributed systems, and data modeling.
@@ -1,7 +1,7 @@
1
1
  ---
2
- description: "Code reviewer for multi-agent Phase 4 - security, architecture, quality, performance. Default model is opus; Phase 4 orchestrator overrides to sonnet for Reviewer 3."
3
- model: opus
4
- preferredModel: opus
2
+ description: "Code reviewer for multi-agent Phase 4 - security, architecture, quality, performance. Default model is fable (opus is the first fallback); Phase 4 orchestrator overrides to sonnet for Reviewer 3."
3
+ model: fable
4
+ preferredModel: fable
5
5
  modelRationale: "Reviewer 1 tier - deep security + architecture review runs on opus (top available intelligence tier). Phase 4 orchestrator overrides to sonnet for Reviewer 3 (quality/correctness focus) via CLAUDE_CODE_SUBAGENT_MODEL before dispatch. Copilot CLI adds Reviewer 2 on gpt-5.4 for cross-model diversity."
6
6
  ---
7
7
 
@@ -1,8 +1,8 @@
1
1
  ---
2
2
  description: iOS architect - evaluates design decisions, patterns, and module structure
3
- model: opus
4
- preferredModel: opus
5
- modelRationale: "Architecture decisions require deep reasoning across modules, protocols, and migration paths - opus is the top available intelligence tier. No downgrade recommended; if cost is a concern, skip the architect consultation entirely."
3
+ model: fable
4
+ preferredModel: fable
5
+ modelRationale: "Architecture decisions require deep reasoning across modules, protocols, and migration paths - fable is the top tier (opus is the first fallback). No downgrade recommended; if cost is a concern, skip the architect consultation entirely."
6
6
  ---
7
7
 
8
8
  You are a senior iOS architect with deep expertise in large-scale modular iOS applications.
@@ -24,7 +24,7 @@ You already did the work locally - wrote code on the current branch and maybe
24
24
 
25
25
  ```bash
26
26
  /multi-agent:finish # current branch vs its base; resolve Jira id from branch name
27
- /multi-agent:finish DIJITAL-12345 # bind to an explicit Jira id for the Phase 7 comment
27
+ /multi-agent:finish PROJ-12345 # bind to an explicit Jira id for the Phase 7 comment
28
28
  /multi-agent:finish --base develop # override the base branch for the diff
29
29
  /multi-agent:finish autopilot # no gate prompts: auto-fix blocking findings, auto-PR, auto-comment
30
30
  ```
@@ -45,7 +45,7 @@ Phases 1-3 (Analysis / Planning / Dev) are skipped by design - `finish` treats
45
45
 
46
46
  1. **Project + branch:** detect project (cwd), current branch (`git branch --show-current`). No worktree; work stays on the current branch.
47
47
  2. **Base + diff:** resolve base branch in order: `--base <arg>` → `figma-config.project.baseBranch` → `develop` → the branch's upstream/merge-base. The **work under review** is `git diff <base>...HEAD` PLUS uncommitted working-tree changes (`git status`). Abort with a clear message if the diff is empty (`ERR: no local work to finish on <branch> vs <base>`).
48
- 3. **Task binding:** Jira id from the `--`/positional arg, else parse the branch name (`bugfix/DIJITAL-XXXX` / `feature/DIJITAL-XXXX`); `taskType` inferred from the diff (bugfix/feature/refactor/chore) for the report wording. GitHub issue `#N` from branch/arg when present.
48
+ 3. **Task binding:** Jira id from the `--`/positional arg, else parse the branch name (`bugfix/PROJ-XXXX` / `feature/PROJ-XXXX`); `taskType` inferred from the diff (bugfix/feature/refactor/chore) for the report wording. GitHub issue `#N` from branch/arg when present.
49
49
  4. **Prior state (optional):** if an `agent-state.json` / tracker-state exists for this branch (left by a prior `dev-local`/`local` run), load its analysis summary + Jira/issue binding to enrich the report; otherwise synthesize a minimal state over the diff. Never require a prior full-pipeline run.
50
50
  5. Persist state under `.claude/logs/multi-agent/{project}/{taskId}/` (same as `--local`).
51
51
 
@@ -55,7 +55,7 @@ Phases 1-3 (Analysis / Planning / Dev) are skipped by design - `finish` treats
55
55
  - interactive: present them and ask (`AskUserQuestion`) whether to fix now (loop back through a minimal Phase-3-style TDD fix) or proceed;
56
56
  - `autopilot` (or `prefs.global.finish.autoFix == true`): auto-fix accepted blocking/important findings, then re-review the fix, before advancing.
57
57
  - **Phase 5 Build+Test** — the **automated success gate** (this is what "build+test success" means here; the interactive device user-test is `/multi-agent:manual-test`). Stack-aware: build via `figma-config.build` (iOS scheme / Android gradle / detected backend/frontend build) and run the existing test suite if present (`swift test` / `xcodebuild test` / `./gradlew test` / `pytest` / `npm test` / `vitest`). Require success to advance; on failure, surface logs and (interactive) stop or (autopilot) attempt a bounded fix loop. **If the repo has no tests, report "no tests present" — never fabricate test results.**
58
- - **Phase 6 Commit/PR** — per `refs/phases/phase-6-commit.md`: stage + commit any remaining local changes with a conventional message (`{type}(scope): desc [DIJITAL-{id}]`), push, and open a PR **only if one does not already exist** for the branch. PR body per `refs/pipeline-output-formatting` and `rules/git-conventions` — `Ref: #N` / `Related: #N`, never `Closes/Fixes/Resolves`; NO AI/bot attribution anywhere.
58
+ - **Phase 6 Commit/PR** — per `refs/phases/phase-6-commit.md`: stage + commit any remaining local changes with a conventional message (`{type}(scope): desc [{JIRA_KEY}-{id}]`), push, and open a PR **only if one does not already exist** for the branch. PR body per `refs/pipeline-output-formatting` and `rules/git-conventions` — `Ref: #N` / `Related: #N`, never `Closes/Fixes/Resolves`; NO AI/bot attribution anywhere.
59
59
  - **Phase 7 Report** — per `refs/phases/phase-7-report.md` + `channels.md`: produce the **technical analysis** and **test scenarios**, then post to the configured channels. Default content for `finish`: a Jira **comment** carrying the technical analysis + the test scenarios (and, when the PR was opened, the PR description). Every body runs through the humanizer; bot/tool/AI signatures are FORBIDDEN in comments.
60
60
 
61
61
  ## Modes
@@ -92,7 +92,7 @@ No TaskList widget. After every state change call `bash $HOME/.claude/scripts/ph
92
92
  ## Examples
93
93
 
94
94
  ```bash
95
- /multi-agent:dev-local "DIJITAL-12345" # develop locally (Init→Dev→Commit→Report, no review/test)
95
+ /multi-agent:dev-local "PROJ-12345" # develop locally (Init→Dev→Commit→Report, no review/test)
96
96
  # … you inspect / hand-test the change …
97
97
  /multi-agent:finish # now: review + build/test + PR + Jira analysis & test scenarios
98
98
  ```
@@ -1,22 +1,30 @@
1
1
  # Model Fallback Contract (v10.1.0)
2
2
 
3
- Personas that declare `preferredModel: opus` route to the top available
4
- intelligence tier (`claude-opus-4-8`). Opus access can be quota-limited or
5
- temporarily unavailable. This contract defines when and how the orchestrator
6
- falls back, deterministically, without ever editing persona files at runtime.
3
+ Personas route to the top available intelligence tier they declare in
4
+ `preferredModel`. That tier can be quota-limited or temporarily unavailable.
5
+ This contract defines when and how the orchestrator falls back, deterministically,
6
+ without ever editing persona files at runtime.
7
7
 
8
- > **Fable retired (2026-06).** Earlier versions routed architect / Reviewer-1 /
9
- > triage personas to `claude-fable-5` as the top tier. Fable 5 is no longer
10
- > available, so opus is now the top tier and the persona frontmatter declares
11
- > `preferredModel: opus`. The `premiumTierUntil` date gate stays in the contract
12
- > as a generic mechanism for any future plan-window-limited premium tier.
8
+ > **Fable 5 available again (2026-07).** `claude-fable-5` is the top tier once
9
+ > more. Architect (`ios/android/backend-architect`), Reviewer-1 (`code-reviewer`),
10
+ > and triage personas declare `preferredModel: fable` the deepest-reasoning
11
+ > roles. **If Fable 5 is unavailable, the first fallback is opus (`claude-opus-4-8`).**
12
+ > Security and other `preferredModel: opus` personas keep opus as their top tier.
13
+ > The `premiumTierUntil` date gate stays in the contract as a generic mechanism
14
+ > for any plan-window-limited premium tier.
13
15
 
14
16
  ## Tier ladder
15
17
 
16
18
  ```
17
- opus -> sonnet -> haiku
19
+ fable -> opus -> sonnet -> haiku
18
20
  ```
19
21
 
22
+ The orchestrator walks **one step down per trigger** from whichever tier a
23
+ persona prefers: a `fable` persona degrades `fable -> opus` first, then
24
+ `opus -> sonnet`, then `sonnet -> haiku`; an `opus` persona starts at
25
+ `opus -> sonnet`. So a Fable 5 outage transparently promotes Opus 4.8 into the
26
+ architect/reviewer roles with no file edits.
27
+
20
28
  One step down per trigger, walking the ladder until a tier dispatches or the
21
29
  floor (`haiku`) is reached. `haiku` is the last-resort floor: a run that reaches
22
30
  it is heavily degraded but still makes progress instead of hard-halting because
@@ -187,17 +187,7 @@ Launch Agent instances **in parallel** using the shared `code-reviewer` subagent
187
187
 
188
188
  Each reviewer inherits the `code-reviewer` agent's focus areas (Security, Architecture, Quality, Performance) and output contract. The orchestrator overrides only the model and the stack-specific skill per-reviewer - no prompt duplication.
189
189
 
190
- **Model override wiring:** `code-reviewer.md` declares `preferredModel: opus`, so Reviewer 1 uses the persona default. Reviewer 2 (Copilot-only, `gpt-5.4`) and Reviewer 3 (`claude-sonnet-4.6`) set `PHASE_MODEL_OVERRIDE=<model>` before dispatch - the orchestrator exports `CLAUDE_CODE_SUBAGENT_MODEL` on Claude Code, or passes `--model` on Copilot CLI. Full precedence rule: `skills/shared/core/multi-agent/SKILL.md#agent-dispatch--per-persona-model-routing-v610`. Opus dispatches are additionally subject to the fallback contract (`refs/features/model-fallback.md`): dispatch-error retry on `fallbackModel` (sonnet) and budget-ceiling downgrade.
191
-
192
- **Adapter platforms (Cursor / Antigravity / VS Code Copilot Chat) - reviewer set.** The native trio above is a Claude-Code / Copilot-CLI capability. On the adapter platforms the pipeline configures a 2-model cross-vendor review using the models each platform actually exposes (lineup in `pipeline/adapters/_base.mjs#REVIEWER_MODELS`; update as the platforms ship new versions):
193
-
194
- | Platform | Reviewer agents emitted | Models |
195
- |---|---|---|
196
- | Cursor | `ma-code-reviewer` + `ma-code-reviewer-x` (per-agent `model:` pinning is supported) | primary `inherit` (your selected model, usually Claude) + `gpt-5.5` |
197
- | VS Code Copilot Chat | `ma-code-reviewer` + `ma-code-reviewer-x` (frontmatter `model:` takes the picker label) | `Claude Opus 4.8` + `GPT-5.5` |
198
- | Antigravity | two parallel review agents (model chosen in the UI, not a file) | recommended `Gemini 3 Pro` + `Claude Opus 4.6`, set via the side-panel dropdown |
199
-
200
- So cross-vendor review IS restored on the adapter platforms (two different models on the code review), with the stack architect + `ma-security-auditor` as before. Two honest caveats remain vs the native hosts: (1) the exact model availability depends on the user's subscription (a pinned model the user lacks must be swapped in `REVIEWER_MODELS` / the dropdown), and (2) there is no `PreToolUse` hook, so gates are workflow-enforced not OS-blocked. Antigravity's models are dropdown-selected, so its pair is documented in the workflow rather than file-pinned.
190
+ **Model override wiring:** `code-reviewer.md` declares `preferredModel: fable`, so Reviewer 1 uses the persona default (Fable 5). Reviewer 2 (Copilot-only, `gpt-5.4`) and Reviewer 3 (`claude-sonnet-4.6`) set `PHASE_MODEL_OVERRIDE=<model>` before dispatch - the orchestrator exports `CLAUDE_CODE_SUBAGENT_MODEL` on Claude Code, or passes `--model` on Copilot CLI. Full precedence rule: `skills/shared/core/multi-agent/SKILL.md#agent-dispatch--per-persona-model-routing-v610`. Fable dispatches are subject to the fallback contract (`refs/features/model-fallback.md`): dispatch-error retry walks `fable -> opus -> sonnet` and budget-ceiling downgrade.
201
191
 
202
192
  **Stack-specific skills loaded per reviewer** (from Phase 1 `detectedStack`). On Claude Code, Reviewer 2 (GPT-5.4) is not dispatched - its skill column is ignored. On Copilot CLI all three columns are used.
203
193
 
@@ -799,4 +799,21 @@ Offer to make the secret scan a HARD pre-commit gate (a non-zero exit blocks the
799
799
  - Ask (picker): "Install the pre-commit secret-scan hook into `~/.claude/settings.json`?" Default Yes.
800
800
  - On Yes, deep-merge the template's `hooks.PreToolUse` into the user's `settings.json` (preserve any existing hooks; do not duplicate a matcher that already calls `pre-commit-check.sh`).
801
801
  - Honest note to show: this is the only deterministic gate that is OS-enforceable as a hook (it needs no run-specific arguments). The evidence / consensus / intent / learnings gates are invoked by the pipeline phases with per-run arguments, so they are enforced by the phase contract + the installed gate scripts, not by a hook.
802
- - On the adapter platforms (Cursor / Antigravity / VS Code Copilot Chat) there is no PreToolUse equivalent; the gate scripts live in `~/.multi-agent/` and are run as workflow steps. See `refs/picker-contract.md`.
802
+ ### Step 9 - Default stack plugin enablement
803
+
804
+ Stack skills ship as versioned plugins in the `{owner}/multi-agent-plugins` marketplace. On first setup, wire the stack so the pipeline works out of the box.
805
+
806
+ 1. Ensure the marketplace is known (idempotent):
807
+ ```bash
808
+ claude marketplace add {owner}/multi-agent-plugins 2>/dev/null || true
809
+ ```
810
+ 2. Detect the project stack from markers and enable the matching plugin(s) plus the always-on common plugin in the project's `.claude/settings.json` `enabledPlugins`:
811
+ - `.xcodeproj` / `Package.swift` / `*.xcworkspace` → `ai-ios-engineering-toolkit`
812
+ - `build.gradle` / `settings.gradle` → `ai-android-engineering-toolkit`
813
+ - `package.json` with `react`/`next` → `ai-frontend-engineering-toolkit`
814
+ - `requirements.txt` / `pyproject.toml` / server `package.json` → `ai-backend-toolkit`
815
+ - **no clear marker → default `ai-ios-engineering-toolkit`**
816
+ `ai-common-engineering-toolkit@multi-agent-plugins` is always set `true` alongside the stack plugin.
817
+ 3. Report the enabled set. To change later, run `/multi-agent:stack <ios|android|frontend|backend|...>` in the repo. Pipeline Phase 1 auto-detects the stack for its own routing regardless of enablement.
818
+
819
+ The marketplace repo name (`multi-agent-plugins`) is generic; a different org points `{owner}` at its own fork — nothing in the pipeline is coupled to a specific account.
@@ -91,4 +91,4 @@ Use the Read + Edit/Write tools (JSON must stay valid). Then print the resulting
91
91
  - Enablement is per-repo and declarative — commit `.claude/settings.json` so teammates get the same stack.
92
92
  - Restart the conversation (or reload the window) for Claude Code to pick up newly enabled plugins.
93
93
  - Pipeline Phase 1 stack detection is independent (it reads project files); `stack` only sets which plugin skill set is active.
94
- - Legacy: `~/.claude/scripts/stack-swap.sh` is retained for manual/offline use but is no longer wired to any hook. Prefer plugin enablement.
94
+ - The old `stack-swap.sh` skill-dir swap has been removed; stack selection is entirely plugin enablement.