@mmerterden/multi-agent-pipeline 14.2.2 → 15.1.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 (132) hide show
  1. package/CHANGELOG.md +186 -6
  2. package/README.md +19 -12
  3. package/README.tr.md +19 -12
  4. package/SECURITY.md +43 -0
  5. package/docs/FIGMA_PIPELINE.md +3 -3
  6. package/docs/adr/0006-skills-core-external-split.md +1 -1
  7. package/docs/adr/0007-multi-tool-adapter-framework.md +1 -1
  8. package/docs/adr/0009-claude-stack-skills-plugin-only.md +31 -0
  9. package/docs/adr/README.md +1 -0
  10. package/docs/architecture.md +13 -13
  11. package/docs/ecosystem.md +31 -31
  12. package/docs/features.md +5 -5
  13. package/index.js +6 -1
  14. package/install/_codex-agents.mjs +11 -2
  15. package/install/_common.mjs +109 -3
  16. package/install/_dev-only-files.mjs +0 -1
  17. package/install/_platform-filter.mjs +54 -113
  18. package/install/_plugin-skills.mjs +36 -36
  19. package/install/claude.mjs +251 -61
  20. package/install/codex.mjs +28 -6
  21. package/install/copilot.mjs +69 -9
  22. package/install/index.mjs +9 -3
  23. package/install/templates/codex-instructions.md +1 -1
  24. package/install/templates/copilot-instructions.md +3 -3
  25. package/package.json +2 -3
  26. package/pipeline/commands/multi-agent/SKILL.md +2 -0
  27. package/pipeline/commands/multi-agent/analysis/SKILL.md +3 -3
  28. package/pipeline/commands/multi-agent/analysis-resolve/SKILL.md +2 -2
  29. package/pipeline/commands/multi-agent/build-optimize/SKILL.md +9 -9
  30. package/pipeline/commands/multi-agent/channels/SKILL.md +1 -1
  31. package/pipeline/commands/multi-agent/complaint-analysis/SKILL.md +186 -0
  32. package/pipeline/commands/multi-agent/dev/SKILL.md +1 -1
  33. package/pipeline/commands/multi-agent/dev-autopilot/SKILL.md +1 -1
  34. package/pipeline/commands/multi-agent/dev-local/SKILL.md +1 -1
  35. package/pipeline/commands/multi-agent/dev-local-autopilot/SKILL.md +1 -1
  36. package/pipeline/commands/multi-agent/garbage-collect/SKILL.md +1 -1
  37. package/pipeline/commands/multi-agent/help/SKILL.md +19 -4
  38. package/pipeline/commands/multi-agent/ios-coding-standard/SKILL.md +2 -2
  39. package/pipeline/commands/multi-agent/jira/SKILL.md +1 -1
  40. package/pipeline/commands/multi-agent/prune-prompts/SKILL.md +81 -0
  41. package/pipeline/commands/multi-agent/refactor/SKILL.md +36 -1
  42. package/pipeline/commands/multi-agent/resume/SKILL.md +1 -1
  43. package/pipeline/commands/multi-agent/{ship → resume-local}/SKILL.md +8 -8
  44. package/pipeline/commands/multi-agent/scan/SKILL.md +1 -1
  45. package/pipeline/commands/multi-agent/setup/SKILL.md +5 -5
  46. package/pipeline/commands/multi-agent/stack/SKILL.md +62 -40
  47. package/pipeline/commands/multi-agent/store-ready/SKILL.md +3 -3
  48. package/pipeline/commands/multi-agent/sync/SKILL.md +18 -11
  49. package/pipeline/commands/multi-agent/testflight-validation/SKILL.md +1 -1
  50. package/pipeline/commands/multi-agent/uninstall/SKILL.md +2 -0
  51. package/pipeline/commands/multi-agent/update/SKILL.md +4 -4
  52. package/pipeline/lib/issue-fetcher.sh +1 -1
  53. package/pipeline/lib/parse-complaints.sh +316 -0
  54. package/pipeline/multi-agent-refs/channels/wiki.md +3 -3
  55. package/pipeline/multi-agent-refs/complaint-analysis-template.md +99 -0
  56. package/pipeline/multi-agent-refs/component-dispatch.md +6 -6
  57. package/pipeline/multi-agent-refs/cross-cli-contract.md +16 -16
  58. package/pipeline/multi-agent-refs/features/external-context-injection.md +1 -1
  59. package/pipeline/multi-agent-refs/features/stack-skill-routing.md +5 -5
  60. package/pipeline/multi-agent-refs/generate-issue.md +1 -1
  61. package/pipeline/multi-agent-refs/phases/modes.md +1 -1
  62. package/pipeline/multi-agent-refs/phases/operations.md +7 -1
  63. package/pipeline/multi-agent-refs/phases/phase-0-init.md +1 -1
  64. package/pipeline/multi-agent-refs/phases/phase-1-analysis.md +7 -7
  65. package/pipeline/multi-agent-refs/phases/phase-2-planning.md +5 -5
  66. package/pipeline/multi-agent-refs/phases/phase-3-dev.md +3 -3
  67. package/pipeline/multi-agent-refs/phases/phase-4-review.md +12 -12
  68. package/pipeline/multi-agent-refs/phases/phase-5-test.md +1 -1
  69. package/pipeline/multi-agent-refs/phases/phase-7-report.md +6 -0
  70. package/pipeline/multi-agent-refs/tracker-contract.md +3 -2
  71. package/pipeline/multi-agent-refs/wiki-capture.md +2 -2
  72. package/pipeline/preferences-template.json +18 -5
  73. package/pipeline/rules/figma-pipeline.md +2 -2
  74. package/pipeline/schemas/agent-state.schema.json +1 -1
  75. package/pipeline/schemas/complaint-analysis-spec.schema.json +216 -0
  76. package/pipeline/schemas/migrations/prefs-2.5.0-to-2.6.0.mjs +46 -0
  77. package/pipeline/schemas/prefs.schema.json +296 -66
  78. package/pipeline/schemas/token-budget.json +2 -2
  79. package/pipeline/scripts/README.md +4 -3
  80. package/pipeline/scripts/_stack-routing.mjs +79 -0
  81. package/pipeline/scripts/audit-log-rotate.sh +4 -1
  82. package/pipeline/scripts/build-skills-index.mjs +11 -0
  83. package/pipeline/scripts/build-stack-plugins.mjs +28 -60
  84. package/pipeline/scripts/check-derived-drift.mjs +55 -28
  85. package/pipeline/scripts/gc-worktrees.sh +4 -1
  86. package/pipeline/scripts/gen-skills-index.mjs +1 -1
  87. package/pipeline/scripts/match-skills.mjs +12 -2
  88. package/pipeline/scripts/migrate-prefs.mjs +33 -21
  89. package/pipeline/scripts/phase-tracker.sh +32 -5
  90. package/pipeline/scripts/phase0-exit-gate.mjs +3 -2
  91. package/pipeline/scripts/run-aggregator.mjs +7 -2
  92. package/pipeline/scripts/scan-agent-config.sh +1 -1
  93. package/pipeline/scripts/skill-conformance.mjs +165 -30
  94. package/pipeline/scripts/smoke-cross-cli-behavior.sh +1 -1
  95. package/pipeline/scripts/test-gap-rules/android.json +25 -0
  96. package/pipeline/scripts/test-gap-rules/ios.json +34 -0
  97. package/pipeline/scripts/test-gap-rules/node.json +29 -0
  98. package/pipeline/scripts/test-gap-rules/python.json +25 -0
  99. package/pipeline/scripts/uninstall.mjs +160 -11
  100. package/pipeline/scripts/usage-report.mjs +426 -0
  101. package/pipeline/scripts/validate-complaint-doc.mjs +250 -0
  102. package/pipeline/scripts/validate-reviewer.mjs +9 -3
  103. package/pipeline/skills/.skill-manifest.json +156 -108
  104. package/pipeline/skills/.skills-index.json +449 -12
  105. package/pipeline/skills/shared/README.md +14 -10
  106. package/pipeline/skills/shared/core/multi-agent-analysis-resolve/SKILL.md +1 -1
  107. package/pipeline/skills/shared/core/multi-agent-build-optimize/SKILL.md +1 -1
  108. package/pipeline/skills/shared/core/multi-agent-complaint-analysis/SKILL.md +49 -0
  109. package/pipeline/skills/shared/core/multi-agent-dev/SKILL.md +1 -1
  110. package/pipeline/skills/shared/core/multi-agent-dev-autopilot/SKILL.md +1 -1
  111. package/pipeline/skills/shared/core/multi-agent-dev-local/SKILL.md +1 -1
  112. package/pipeline/skills/shared/core/multi-agent-dev-local-autopilot/SKILL.md +1 -1
  113. package/pipeline/skills/shared/core/multi-agent-ios-coding-standard/SKILL.md +2 -2
  114. package/pipeline/skills/shared/core/multi-agent-prune-prompts/SKILL.md +83 -0
  115. package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +153 -90
  116. package/pipeline/skills/shared/core/{multi-agent-ship → multi-agent-resume-local}/SKILL.md +6 -6
  117. package/pipeline/skills/shared/core/multi-agent-stack/SKILL.md +89 -22
  118. package/pipeline/skills/shared/core/multi-agent-store-ready/SKILL.md +1 -1
  119. package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +8 -8
  120. package/pipeline/skills/shared/core/multi-agent-testflight-validation/SKILL.md +1 -1
  121. package/pipeline/skills/shared/core/multi-agent-update/SKILL.md +1 -1
  122. package/pipeline/skills/shared/external/ios-coding-standard/modules/_TEMPLATE.yml +2 -2
  123. package/pipeline/skills/shared/external/ios-coding-standard/references/rules.yml +368 -33
  124. package/pipeline/skills/shared/external/ios-coding-standard/references/swiftlint.draft.yml +1 -2
  125. package/pipeline/skills/shared/external/ios-coding-standard/scripts/check_structure.py +765 -0
  126. package/pipeline/skills/shared/external/ios-module-structure/SKILL.md +75 -0
  127. package/pipeline/skills/shared/external/ios-module-structure/modules/_TEMPLATE.yml +131 -0
  128. package/pipeline/skills/shared/external/ios-module-structure/references/rules.yml +559 -0
  129. package/pipeline/skills/shared/external/ios-module-structure/scripts/check_structure.py +765 -0
  130. package/pipeline/skills/shared/external/localization-reuse-map/example-mapping.json +53 -10
  131. package/pipeline/skills/shared/external/localization-reuse-map/reference/sources-and-recipes.md +4 -3
  132. package/pipeline/skills/skills-index.md +7 -4
package/CHANGELOG.md CHANGED
@@ -16,6 +16,186 @@ Internal file-layout changes that don't affect the slash-command surface are sti
16
16
 
17
17
  ## [Unreleased]
18
18
 
19
+ ## [15.1.0] - 2026-08-14
20
+
21
+ Opt-in run telemetry to a private dashboard, and a refactor band that mines it.
22
+
23
+ ### Added
24
+
25
+ - **Opt-in usage telemetry (`usageLog`).** When `prefs.global.usageLog.enabled`
26
+ is set with an ingest token, each run emits one activity event, keyed by task
27
+ id and refreshed live at every phase boundary via `phase-tracker.sh`, so one
28
+ record always shows the last phase a run reached — including runs that halt
29
+ before Phase 7. Wired at Phase 7 report and the halt path; detached and
30
+ best-effort, never blocking a run. The event carries activity metadata only
31
+ (who, command, mode, input type, repo, phase, outcome, halt cause, review
32
+ iterations, duration, token spend, cost, per-phase breakdown, OS, CLI, models,
33
+ stack, plugins, integrations, credential health, invoked skills, error tags,
34
+ version) — never prompts, code, diffs, token values or absolute paths. New
35
+ `pipeline/scripts/usage-report.mjs`; prefs schema + template gain the
36
+ `usageLog` block. Off by default; the emitter no-ops unless enabled and a
37
+ token resolves.
38
+ - **`/multi-agent:refactor` Step 0d (band F).** Reads the local run-error ledger
39
+ (`errors-ledger.jsonl`, written by the telemetry emitter on terminal runs) and
40
+ ranks recurring failures as prioritized improvement areas — lived evidence,
41
+ offline, and without auth.
42
+
43
+ ### Changed
44
+
45
+ - Reconciled the Copilot shared-core `multi-agent-refactor` skill with the Claude
46
+ command version, ending the prose drift that had accumulated between the two.
47
+
48
+ ## [15.0.1] - 2026-08-13
49
+
50
+ Post-15.0.0 audit release: three blocking defects in the 15.0.0 surface, two
51
+ data-loss paths, and the doc drift that let a command count go stale in 17
52
+ places at once.
53
+
54
+ ### Fixed
55
+
56
+ - **The 15.0.0 plugin-only migration never ran on an upgrade.** Its prune was
57
+ gated on `.external-skills-manifest.json`, which no released version wrote on
58
+ Claude Code, so every machine upgrading from 14.x kept the whole ~151-dir
59
+ external catalog (the duplicated per-session descriptions and plugin-shadowing
60
+ copies ADR-0009 exists to remove), and `uninstall --claude` refused to clean it
61
+ for the same reason. Pre-manifest installs are now migrated by proof rather
62
+ than by name: a skill dir byte-identical to the shipped catalog is provably
63
+ pipeline-delivered and is removed, a dir that differs is kept and reported,
64
+ and the new `install --prune-external` flag removes those too (still never a
65
+ dir carrying `local-only: true`). Gate: `smoke-claude-external-migration.sh`.
66
+ - **The cross-host stack filter read a file nothing writes.** `pluginsToDeliver`
67
+ looked only at `~/.claude/settings.json` while `/multi-agent:stack` writes the
68
+ invoking repo's `.claude/settings.json`, so a stack selection either delivered
69
+ the entire catalog to Copilot/Codex (logged as if a filter had run) or, worse,
70
+ delivered a different stack than the repo asked for. Repo settings are now read
71
+ first, user-global second, `--platform` last.
72
+ - **Copilot's skipped-stack prune could delete user-authored skills.** The prune
73
+ was derived from catalog *names*, so a user's own `~/.copilot/skills/<name>/`
74
+ sharing a catalog name was removed with no prompt. It is now scoped to the
75
+ previous delivery manifest (or, pre-manifest, to dirs byte-identical to the
76
+ catalog) - the same contract `uninstall` already used.
77
+ - **Manifest-driven removal had no path containment.** A name carrying `..` or a
78
+ path separator in `.external-skills-manifest.json` resolved outside the skills
79
+ directory before reaching a recursive delete.
80
+ - **`validate-complaint-doc.mjs` rejected reports that follow the template.**
81
+ Section 1's coverage table cites `C-NN` ids in its last column and was read as
82
+ verdict-less triage rows, and verdict matching was positional-substring, so a
83
+ summary cell mentioning `core-data` classified the row as `core`. Triage rows
84
+ are now scoped to the Triage section with the id in the first cell, and verdict
85
+ tokens match cell-exact. The smoke fixture carries both Section 1 tables so the
86
+ gate is exercised against real template output.
87
+ - **`/multi-agent:stack` with no arguments wiped the repo's stack selection.**
88
+ The implementation block resolved an empty arg list to "common only" and then
89
+ applied the write rule that sets every other stack toolkit to `false`. Zero
90
+ args now exits into status mode, and the picker's `frontend (web)` label maps
91
+ back to its canonical arg.
92
+ - `parse-complaints.sh` returns the documented exit 4 when `--file` / `--format`
93
+ is passed without a value instead of dying on `set -u`, and redacts all-letter
94
+ PNRs that follow a PNR-ish keyword.
95
+ - `migrate-prefs.mjs`: the schema-unreadable fallback set now includes `2.5.0`,
96
+ so a 14.x prefs file no longer throws `unknown schemaVersion` on an install
97
+ tree whose `schemas/` cannot be read.
98
+ - `check-derived-drift.mjs`: an acknowledged drift pin no longer silences a
99
+ cache-only resolution, which had let the gate exit 0 while nothing
100
+ authoritative was consulted.
101
+ - `match-skills.mjs` gains the `~/.codex/multi-agent-refs/skills` index
102
+ candidate, so dynamic skill loading works on Codex instead of exiting 1.
103
+
104
+ ### Changed
105
+
106
+ - `smoke-command-inventory.sh` now derives the command count for `README.md`,
107
+ `README.tr.md`, `docs/architecture.md` and `docs/ecosystem.md` as well. Those
108
+ four files held 17 of the 20 "50 commands" sites and none was gated, so adding
109
+ `complaint-analysis` desynced all of them at once.
110
+ - Doc corrections: autopilot / local modes document 7 phases, not 8 (the
111
+ interactive Phase 5 test gate is dropped in every autopilot and local variant,
112
+ per `gen-mode-dispatch.mjs`) - README EN+TR and `tracker-contract.md`; the
113
+ Node badge matches `engines` (20.11+); the publish diagrams say public npm
114
+ rather than GitHub Packages; skill / schema / fixture counts match the tree;
115
+ `ecosystem.md` drops the retracted "frozen `figma-*` fallback" claim; ROADMAP
116
+ catches up four majors; ADR-0007 records Codex's return as a native target.
117
+ - `SECURITY.md` ships in the package, so the README link resolves on npmjs and
118
+ in an installed tree. Install help documents `--dry-run`, `--index-only` and
119
+ `--prune-external`.
120
+
121
+ ### Removed
122
+
123
+ - Dead pre-v15 code: `copyExternalSkillsFiltered`, `classifyExternalSkill` and
124
+ its prefix tables (superseded by the routing table), `existingSkillNames`
125
+ (superseded by `pipelineOwnedSkillNames`, and a hazard if called), and an
126
+ unconsumed `MCP_SERVER_NAME` re-export. Six internals no longer export a
127
+ surface nothing imports.
128
+
129
+ ## [15.0.0] - 2026-08-13
130
+
131
+ ### Changed (BREAKING)
132
+
133
+ - **Claude Code stack skills are plugin-only** (ADR-0009). The installer no longer
134
+ copies `shared/core` + `shared/external` into `~/.claude/skills`; the
135
+ `multi-agent-plugins` marketplace is Claude Code's only stack-skill source,
136
+ namespaced (`ai-ios-toolkit:<skill>`). Exactly two pipeline-owned compliance
137
+ catalogs stay local (`PIPELINE_LOCAL_SKILLS`). Old installs are migrated
138
+ manifest-scoped (`.external-skills-manifest.json`); user-authored dirs survive.
139
+ - **Marketplace plugin names lose the `engineering` infix**:
140
+ `ai-<stack>-engineering-toolkit` -> `ai-<stack>-toolkit`. `enabledPlugins`
141
+ keys must migrate; `/multi-agent:stack` deletes the retired keys.
142
+ - **`/multi-agent:ship` -> `/multi-agent:resume-local`** (the tail command opens a
143
+ PR but merges nothing, so "ship" oversold it). Prefs `global.ship` ->
144
+ `global.resumeLocal` via schema 2.6.0 (step migration + monolith, autoFix value
145
+ carried across the finish -> ship -> resume-local chain).
146
+
147
+ ### Added
148
+
149
+ - `/multi-agent:stack` **multi-select**: several stacks per call (`ios backend`),
150
+ a native multi-select picker with no args, `web` alias, always-on
151
+ `ai-common-toolkit`, legacy-key cleanup, and a Copilot/Codex refresh offer.
152
+ - Every marketplace plugin ships **`ai-<stack>-toolkit:help`**: a language-aware
153
+ catalog rendered live from `plugin.json` (drift-proof by construction).
154
+ - `pipeline/scripts/_stack-routing.mjs`: the single routing table shared by
155
+ `build-stack-plugins.mjs`, the installers and the skills index.
156
+ - Skills index entries carry `plugin` + `invokeAs`; `match-skills.mjs` returns
157
+ plugin-namespaced names. `skill-conformance.mjs` probes the marketplace
158
+ checkout and version-named plugin cache as skills roots.
159
+
160
+ ### Changed
161
+
162
+ - Copilot CLI and Codex CLI local copies are **filtered to the enabled stacks**
163
+ (`pluginsToDeliver` + `partitionExternalSkillsByPlugins`); Codex previously
164
+ received the full catalog unconditionally and now also writes a delivery
165
+ manifest. One `/multi-agent:stack` selection governs all three hosts.
166
+ - Prompt-context skill tables (phase 1/2/4), `humanizer` invocations,
167
+ `build-optimize` dispatches and the store-review references are
168
+ plugin-namespaced.
169
+ - `DESC_CEILING` 82000 -> 82600 and phase-doc total 52750 -> 53100: the
170
+ namespaced tables and the new command descriptions did not fit ceilings that
171
+ were already at (or 193 bytes past) their limit; the always-on surface itself
172
+ shrank with the local copy gone.
173
+
174
+
175
+ ### Added
176
+
177
+ - **`/multi-agent:complaint-analysis`** — customer-complaint / customer-reported-error
178
+ triage as a new one-shot ops command (51st command). Ingests complaints from
179
+ free-text paste, csv/xlsx/txt/json exports (`pipeline/lib/parse-complaints.sh`,
180
+ with built-in PII redaction: email / phone / card / national-id / PNR shapes),
181
+ Jira issues, or Confluence URLs; fetches Graylog evidence per
182
+ trxId/conversationId via the existing `fetch-graylog.sh`; correlates read-only
183
+ against the selected client + BFF repos (user-confirmed layer tagging:
184
+ ios / android / web / mobile-bff / web-bff); and classifies each complaint as
185
+ `client:<layer>` / `bff:<layer>` (root cause + citations + a fix plan grounded
186
+ in the existing architecture + a ready-to-run dev prompt), `core` (routing
187
+ recommendation to the backend core team, never a fix analysis), or
188
+ `insufficient-evidence`. Report dispatches to Local (default) / Confluence /
189
+ Jira behind a deterministic gate (`scripts/validate-complaint-doc.mjs`:
190
+ sections, verdict tokens, per-core routing entries, humanizer punctuation,
191
+ redaction-leak scan; smoke: `smoke-validate-complaint-doc.sh`). State contract:
192
+ `schemas/complaint-analysis-spec.schema.json`. Graylog-as-primary-evidence is a
193
+ documented, command-scoped exception to the advisory-only rule in
194
+ `features/external-context-injection.md`. `DESC_CEILING` raised 81000 -> 82000
195
+ (gate + pinned test together): the two new ~430-byte descriptions did not fit
196
+ in the ~25 bytes of headroom the surface had left; the average stays at 319
197
+ against the 420 ceiling.
198
+
19
199
  ## [14.2.2] - 2026-08-04
20
200
 
21
201
  ### Added
@@ -1911,7 +2091,7 @@ Single-source skill management, an upgraded `refactor` command, and two new Phas
1911
2091
  - **Component/Figma work is plugin-only.** The pipeline no longer bundles the
1912
2092
  `figma-ios` / `figma-android` / `figma-common` skill trees. Phase 3 dispatches
1913
2093
  component and Figma-to-code work to the per-stack marketplace plugins
1914
- (`ai-ios-engineering-toolkit` / `ai-android-engineering-toolkit`) via the Skill
2094
+ (`ai-ios-toolkit` / `ai-android-toolkit`) via the Skill
1915
2095
  tool, so component skills live in one place. The 3-tier Figma design-access
1916
2096
  fallback still governs the analysis phase.
1917
2097
  - **Command layout migrated to `<name>/SKILL.md`.** Each subcommand is now its own
@@ -1952,7 +2132,7 @@ Skill mining + an install-safety fix.
1952
2132
  write-if-missing: new baseline rules are added, existing local rules are
1953
2133
  preserved untouched. New `copyDir({ skipExisting })` option backs this.
1954
2134
  - **Two skills mined from the corporate iOS toolkit and genericized into
1955
- `ai-common-engineering-toolkit` (v0.1.2):**
2135
+ `ai-common-toolkit` (v0.1.2):**
1956
2136
  - `skill-creator` — the house rules for authoring skills (description-first
1957
2137
  discovery, lean SKILL.md as an index, progressive disclosure, reference vs
1958
2138
  workflow vs tool layers, no-prefix naming, grow-from-failure), with a
@@ -1987,7 +2167,7 @@ operating systems, all additive and opt-in.
1987
2167
  no-progress stall, an identical repeated failure, a rework storm, cost drift
1988
2168
  past the `costBudget` ceiling, or a merge/rebase conflict. Continuing
1989
2169
  unattended off the happy path is the less safe choice.
1990
- - **Three technique skills** added to `ai-common-engineering-toolkit`
2170
+ - **Three technique skills** added to `ai-common-toolkit`
1991
2171
  (v0.1.1): `council` (multi-voice adversarial decision), `search-first`
1992
2172
  (research-before-coding with an adopt/extend/compose/build matrix), and
1993
2173
  `agent-introspection-debugging` (capture -> diagnose -> contained-recovery ->
@@ -2343,7 +2523,7 @@ Fable 5 restored as the top model tier; `stack-swap` fully removed; setup gains
2343
2523
  setup detects the project stack from markers (`.xcodeproj`/`Package.swift` → iOS,
2344
2524
  `build.gradle` → Android, `package.json`+react → Frontend, `requirements.txt`/
2345
2525
  `pyproject.toml` → Backend) and enables the matching marketplace plugin plus the
2346
- always-on `ai-common-engineering-toolkit`. **No clear marker → default iOS.** So a
2526
+ always-on `ai-common-toolkit`. **No clear marker → default iOS.** So a
2347
2527
  fresh install works out of the box and a repo at any org gets its correct stack.
2348
2528
 
2349
2529
  ### Changed
@@ -2377,7 +2557,7 @@ Stack skills move from the local `stack-swap` mechanic to versioned marketplace
2377
2557
  `plugin.json` `skills[]`, and **bumps the patch version of any plugin whose
2378
2558
  skill set changed**. Idempotent (`--dry-run` supported); a no-op run bumps
2379
2559
  nothing. Cross-stack skills (accessibility audit, humanizer, Firebase) route
2380
- to `ai-common-engineering-toolkit`; Apple/Xcode-only skills stay in the iOS
2560
+ to `ai-common-toolkit`; Apple/Xcode-only skills stay in the iOS
2381
2561
  plugin. This is the version-based-management backbone: the pipeline is the
2382
2562
  single authoring source, the marketplace is a derived, versioned artifact.
2383
2563
  - **`multi-agent:sync` Step 3c (PLUGINS)** — runs the generator, then commits +
@@ -2387,7 +2567,7 @@ Stack skills move from the local `stack-swap` mechanic to versioned marketplace
2387
2567
 
2388
2568
  - **`/multi-agent:stack`** — selecting a stack no longer moves skill directories
2389
2569
  via `stack-swap.sh`. It now enables the matching marketplace plugin(s) (stack
2390
- toolkit + `ai-common-engineering-toolkit`) in the current repo's
2570
+ toolkit + `ai-common-toolkit`) in the current repo's
2391
2571
  `.claude/settings.json` `enabledPlugins`, disabling the stack toolkits that
2392
2572
  don't apply. Declarative, per-repo, versioned. No SessionStart hook.
2393
2573
  - **`/multi-agent:update`** — added a step that refreshes the plugin marketplace
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [![GitHub Release](https://img.shields.io/github/v/release/mmerterden/multi-agent-pipeline?color=blue)](https://github.com/mmerterden/multi-agent-pipeline/releases)
4
4
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
- [![Node.js](https://img.shields.io/badge/Node.js-18%20%7C%2020%20%7C%2022-green)](https://nodejs.org)
5
+ [![Node.js](https://img.shields.io/badge/Node.js-20%20%7C%2022-green)](https://nodejs.org)
6
6
  [![Zero Dependencies](https://img.shields.io/badge/dependencies-0-brightgreen)](https://github.com/mmerterden/multi-agent-pipeline/blob/main/package.json)
7
7
  [![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/mmerterden/multi-agent-pipeline/badge)](https://scorecard.dev/viewer/?uri=github.com/mmerterden/multi-agent-pipeline)
8
8
 
@@ -17,13 +17,18 @@ Runs natively on Claude Code, Copilot CLI and Codex CLI. macOS / Linux / Windows
17
17
  ## Quick Start
18
18
 
19
19
  ```bash
20
- # from the public registry (no auth)
21
- npx @mmerterden/multi-agent-pipeline install --all # Claude Code + Copilot CLI + Codex CLI
20
+ # from the public registry (no auth) - pick the CLIs you actually use
21
+ npx @mmerterden/multi-agent-pipeline install --claude # Claude Code only (default)
22
+ npx @mmerterden/multi-agent-pipeline install --copilot # Copilot CLI only
23
+ npx @mmerterden/multi-agent-pipeline install --codex # Codex CLI only
24
+ npx @mmerterden/multi-agent-pipeline install --all # all three
22
25
 
23
26
  # then, once:
24
27
  /multi-agent:setup # keychain token scan + git identity + default stack
25
28
  ```
26
29
 
30
+ Tool flags combine (`--claude --codex`). With no tool flag at all, the installer targets Claude Code only. Other flags: `--dry-run` (show what would be written, write nothing), `--platform=ios|android|all` (skip the stack skills you do not need), `--link` (symlink instead of copy, for local development).
31
+
27
32
  Run a task - the input type is auto-detected:
28
33
 
29
34
  ```bash
@@ -41,6 +46,8 @@ Add `autopilot` to skip confirmations, `--dev` for the fast dev-only path, or `-
41
46
 
42
47
  Update later with `/multi-agent:update`. Uninstall (tokens preserved) with `npx @mmerterden/multi-agent-pipeline uninstall`.
43
48
 
49
+ **Stack skills are marketplace plugins.** On Claude Code the `ai-<stack>-toolkit` plugins (`multi-agent-plugins` marketplace) are the only stack-skill source - nothing is copied into `~/.claude/skills`. Pick the active stack(s) per repo with `/multi-agent:stack` (multi-select: `ios backend`, or a native picker with no args); each plugin ships a language-aware catalog at `ai-<stack>-toolkit:help`. Copilot CLI and Codex CLI have no plugin loader, so they receive a local copy filtered to the same enabled stacks.
50
+
44
51
  ## How it works
45
52
 
46
53
  One command runs 8 phases, with a gate between the risky ones:
@@ -63,14 +70,14 @@ The discipline behind all of this - bounded loops, evidence gates, token-budgete
63
70
  | Mode | Command | Flow |
64
71
  |---|---|---|
65
72
  | Full | `/multi-agent "task"` | All 8 phases, interactive |
66
- | Autopilot | `/multi-agent:autopilot "task"` | All 8 phases, no confirmations |
73
+ | Autopilot | `/multi-agent:autopilot "task"` | 7 phases (interactive Test gate dropped), no confirmations |
67
74
  | Dev | `/multi-agent:dev "task"` | Init → Dev → Review → Test → Commit → Report |
68
- | Local | `/multi-agent:local "task"` | Full pipeline, current branch (no worktree) |
69
- | Ship | `/multi-agent:ship` | Run the review→test→commit→report tail over local work |
75
+ | Local | `/multi-agent:local "task"` | Full pipeline minus the interactive Test gate, current branch (no worktree) |
76
+ | Ship | `/multi-agent:resume-local` | Run the review→test→commit→report tail over local work |
70
77
  | Audit | `/multi-agent:design-check` | Mock-mode vs Figma conformance, local-only |
71
78
  | Audit | `/multi-agent:testflight-validation` | Pre-submission gates for a TestFlight build: static archive audit → Apple's `altool --validate-app` → Review-Guidelines check. Validates only, never uploads |
72
79
 
73
- Helpers: `setup`, `status`, `resume #N`, `kill #N`, `garbage-collect`, `prune-logs`, `purge`, `review`, `test`, `channels`, `stack`, `update`, `sync`, `refactor`, `jira`, `issue`, `analysis`, `create-jira`, `save`, `routines`, `forget`. 49 commands in all - full list: `/multi-agent:help`.
80
+ Helpers: `setup`, `status`, `resume #N`, `kill #N`, `garbage-collect`, `prune-logs`, `purge`, `review`, `test`, `channels`, `stack`, `update`, `sync`, `refactor`, `jira`, `issue`, `analysis`, `create-jira`, `save`, `routines`, `forget`. 51 commands in all - full list: `/multi-agent:help`.
74
81
 
75
82
  ## Stacks
76
83
 
@@ -84,17 +91,17 @@ This enables the matching plugin (+ the shared `ai-common` plugin) in the repo's
84
91
 
85
92
  ## Tool support
86
93
 
87
- The pipeline runs natively on **Claude Code**, **Copilot CLI** and **Codex CLI** - all three install from the same `pipeline/` source and get the same 49 commands.
94
+ The pipeline runs natively on **Claude Code**, **Copilot CLI** and **Codex CLI** - all three install from the same `pipeline/` source and get the same 51 commands.
88
95
 
89
96
  | Tool | Flag | What it installs |
90
97
  |---|---|---|
91
98
  | Claude Code | `--claude` (default) | slash commands + skills + agents + `PreToolUse` secret-scan hook |
92
- | Copilot CLI | `--copilot` | instructions + 49 sub-command skills + scripts |
93
- | Codex CLI | `--codex` | one router skill + 49 specs as refs + 8 agent TOML + `AGENTS.md` block + `codex mcp add` |
99
+ | Copilot CLI | `--copilot` | instructions + 51 sub-command skills + scripts |
100
+ | Codex CLI | `--codex` | one router skill + 51 specs as refs + 8 agent TOML + `AGENTS.md` block + `codex mcp add` |
94
101
 
95
102
  Filter skills by stack with `--platform=ios\|android\|all`.
96
103
 
97
- **Why Codex gets one skill and not 49.** Codex assembles every discovered skill's name
104
+ **Why Codex gets one skill and not 51.** Codex assembles every discovered skill's name
98
105
  and description into a single prompt block and drops entries when it overflows, with no
99
106
  error. Measured on 0.145: installing one plugin that declares 142 skills surfaced only
100
107
  75 of them and evicted an unrelated user skill. So on Codex the pipeline ships a single
@@ -128,7 +135,7 @@ The **secret scan** runs as a `PreToolUse` hook on Claude Code (hard-blocks a co
128
135
 
129
136
  ## Platform support
130
137
 
131
- Runs on **macOS**, **Linux**, and **Windows** (Git Bash / WSL). Shell and credential access go through a platform-agnostic layer - the keychain resolves automatically to **macOS Keychain**, **Linux libsecret** (`secret-tool`), or **Windows Credential Manager**, and scripts fall back between BSD and GNU tool variants. Node.js 18 / 20 / 22.
138
+ Runs on **macOS**, **Linux**, and **Windows** (Git Bash / WSL). Shell and credential access go through a platform-agnostic layer - the keychain resolves automatically to **macOS Keychain**, **Linux libsecret** (`secret-tool`), or **Windows Credential Manager**, and scripts fall back between BSD and GNU tool variants. Node.js 20.11+ (tested on 20 and 22).
132
139
 
133
140
  ## Companion repos
134
141
 
package/README.tr.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [![GitHub Release](https://img.shields.io/github/v/release/mmerterden/multi-agent-pipeline?color=blue)](https://github.com/mmerterden/multi-agent-pipeline/releases)
4
4
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
- [![Node.js](https://img.shields.io/badge/Node.js-18%20%7C%2020%20%7C%2022-green)](https://nodejs.org)
5
+ [![Node.js](https://img.shields.io/badge/Node.js-20%20%7C%2022-green)](https://nodejs.org)
6
6
  [![Zero Dependencies](https://img.shields.io/badge/dependencies-0-brightgreen)](https://github.com/mmerterden/multi-agent-pipeline/blob/main/package.json)
7
7
  [![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/mmerterden/multi-agent-pipeline/badge)](https://scorecard.dev/viewer/?uri=github.com/mmerterden/multi-agent-pipeline)
8
8
 
@@ -17,13 +17,18 @@ Claude Code, Copilot CLI ve Codex CLI üzerinde native çalışır. macOS / Linu
17
17
  ## Hızlı Başlangıç
18
18
 
19
19
  ```bash
20
- # public registry'den (auth gerekmez)
21
- npx @mmerterden/multi-agent-pipeline install --all # Claude Code + Copilot CLI + Codex CLI
20
+ # public registry'den (auth gerekmez) - sadece kullandığın CLI'ları seç
21
+ npx @mmerterden/multi-agent-pipeline install --claude # sadece Claude Code (varsayılan)
22
+ npx @mmerterden/multi-agent-pipeline install --copilot # sadece Copilot CLI
23
+ npx @mmerterden/multi-agent-pipeline install --codex # sadece Codex CLI
24
+ npx @mmerterden/multi-agent-pipeline install --all # üçü birden
22
25
 
23
26
  # sonra, bir kere:
24
27
  /multi-agent:setup # keychain token taraması + git kimliği + varsayılan stack
25
28
  ```
26
29
 
30
+ Tool flag'leri birleştirilebilir (`--claude --codex`). Hiç tool flag'i verilmezse installer sadece Claude Code'u hedefler. Diğer flag'ler: `--dry-run` (ne yazılacağını gösterir, hiçbir şey yazmaz), `--platform=ios|android|all` (ihtiyacın olmayan stack skill'lerini atlar), `--link` (kopyalamak yerine symlink, lokal geliştirme için).
31
+
27
32
  Bir görev çalıştır - girdi tipi otomatik algılanır:
28
33
 
29
34
  ```bash
@@ -41,6 +46,8 @@ Onayları atlamak için `autopilot`, hızlı dev-only yol için `--dev`, ya da w
41
46
 
42
47
  Sonra `/multi-agent:update` ile güncelle. Kaldırmak için (tokenlar korunur) `npx @mmerterden/multi-agent-pipeline uninstall`.
43
48
 
49
+ **Stack skill'leri marketplace plugin'leridir.** Claude Code'da `ai-<stack>-toolkit` plugin'leri (`multi-agent-plugins` marketplace) tek stack-skill kaynağıdır - `~/.claude/skills` altına kopya konmaz. Repo başına aktif stack'leri `/multi-agent:stack` ile seç (çoklu seçim: `ios backend`, ya da argümansız native picker); her plugin `ai-<stack>-toolkit:help` ile dilinde katalog sunar. Copilot CLI ve Codex CLI'da plugin loader olmadığından onlara aynı enabled stack'lere filtreli lokal kopya iner.
50
+
44
51
  ## Nasıl çalışır
45
52
 
46
53
  Tek komut 8 fazı çalıştırır, riskli olanlar arasında bir kapı ile:
@@ -63,14 +70,14 @@ Bunun arkasındaki disiplin - sınırlı loop'lar, kanıt kapıları, token-büt
63
70
  | Mod | Komut | Akış |
64
71
  |---|---|---|
65
72
  | Full | `/multi-agent "task"` | Tüm 8 faz, interaktif |
66
- | Autopilot | `/multi-agent:autopilot "task"` | Tüm 8 faz, onaysız |
73
+ | Autopilot | `/multi-agent:autopilot "task"` | 7 faz (interaktif Test kapısı atlanır), onaysız |
67
74
  | Dev | `/multi-agent:dev "task"` | Init → Dev → Review → Test → Commit → Report |
68
- | Local | `/multi-agent:local "task"` | Tam pipeline, mevcut branch (worktree yok) |
69
- | Ship | `/multi-agent:ship` | Lokal iş üzerinde review→test→commit→report kuyruğunu çalıştır |
75
+ | Local | `/multi-agent:local "task"` | İnteraktif Test kapısı hariç tam pipeline, mevcut branch (worktree yok) |
76
+ | Ship | `/multi-agent:resume-local` | Lokal iş üzerinde review→test→commit→report kuyruğunu çalıştır |
70
77
  | Audit | `/multi-agent:design-check` | Mock-mode vs Figma uygunluğu, yalnızca lokal |
71
78
  | Audit | `/multi-agent:testflight-validation` | TestFlight build için pre-submission kapıları: statik archive denetimi → Apple'ın `altool --validate-app`'i → Review-Guidelines kontrolü. Yalnızca doğrular, asla yüklemez |
72
79
 
73
- Yardımcılar: `setup`, `status`, `resume #N`, `kill #N`, `garbage-collect`, `prune-logs`, `purge`, `review`, `test`, `channels`, `stack`, `update`, `sync`, `refactor`, `jira`, `issue`, `analysis`, `create-jira`, `save`, `routines`, `forget`. Toplam 49 komut - tam liste: `/multi-agent:help`.
80
+ Yardımcılar: `setup`, `status`, `resume #N`, `kill #N`, `garbage-collect`, `prune-logs`, `purge`, `review`, `test`, `channels`, `stack`, `update`, `sync`, `refactor`, `jira`, `issue`, `analysis`, `create-jira`, `save`, `routines`, `forget`. Toplam 51 komut - tam liste: `/multi-agent:help`.
74
81
 
75
82
  ## Stack'ler
76
83
 
@@ -84,17 +91,17 @@ Bu, ilgili plugin'i (+ ortak `ai-common` plugin'ini) repo'nun `.claude/settings.
84
91
 
85
92
  ## Araç desteği
86
93
 
87
- Pipeline **Claude Code**, **Copilot CLI** ve **Codex CLI** üzerinde native çalışır - üçü de aynı `pipeline/` kaynağından kurulur ve aynı 49 komutu alır.
94
+ Pipeline **Claude Code**, **Copilot CLI** ve **Codex CLI** üzerinde native çalışır - üçü de aynı `pipeline/` kaynağından kurulur ve aynı 51 komutu alır.
88
95
 
89
96
  | Araç | Bayrak | Ne kurar |
90
97
  |---|---|---|
91
98
  | Claude Code | `--claude` (varsayılan) | slash komutları + skill'ler + agent'lar + `PreToolUse` secret-scan hook'u |
92
- | Copilot CLI | `--copilot` | talimatlar + 49 alt-komut skill'i + script'ler |
93
- | Codex CLI | `--codex` | bir router skill + ref olarak 49 spec + 8 agent TOML + `AGENTS.md` bloğu + `codex mcp add` |
99
+ | Copilot CLI | `--copilot` | talimatlar + 51 alt-komut skill'i + script'ler |
100
+ | Codex CLI | `--codex` | bir router skill + ref olarak 51 spec + 8 agent TOML + `AGENTS.md` bloğu + `codex mcp add` |
94
101
 
95
102
  Skill'leri stack'e göre filtrele: `--platform=ios\|android\|all`.
96
103
 
97
- **Codex neden 49 değil de tek bir skill alıyor.** Codex, keşfettiği her skill'in adını
104
+ **Codex neden 51 değil de tek bir skill alıyor.** Codex, keşfettiği her skill'in adını
98
105
  ve açıklamasını tek bir prompt bloğuna toplar ve blok taştığında girdileri hatasızca
99
106
  düşürür. 0.145 üzerinde ölçüldü: 142 skill deklare eden bir plugin kurulduğunda sadece
100
107
  75'i yüzeye çıktı ve alakasız bir kullanıcı skill'i tahliye edildi. Bu yüzden Codex'te
@@ -129,7 +136,7 @@ triage notu bunu belirtir.
129
136
 
130
137
  ## Platform desteği
131
138
 
132
- **macOS**, **Linux** ve **Windows** (Git Bash / WSL) üzerinde çalışır. Shell ve credential erişimi platform-agnostik bir katmandan geçer - keychain otomatik olarak **macOS Keychain**, **Linux libsecret** (`secret-tool`) veya **Windows Credential Manager**'a çözülür, ve script'ler BSD ile GNU araç varyantları arasında fallback yapar. Node.js 18 / 20 / 22.
139
+ **macOS**, **Linux** ve **Windows** (Git Bash / WSL) üzerinde çalışır. Shell ve credential erişimi platform-agnostik bir katmandan geçer - keychain otomatik olarak **macOS Keychain**, **Linux libsecret** (`secret-tool`) veya **Windows Credential Manager**'a çözülür, ve script'ler BSD ile GNU araç varyantları arasında fallback yapar. Node.js 20.11+ (20 ve 22'de test edildi).
133
140
 
134
141
  ## Yan repolar
135
142
 
package/SECURITY.md ADDED
@@ -0,0 +1,43 @@
1
+ # Security Policy
2
+
3
+ ## Supported Versions
4
+
5
+ We provide security fixes for the latest minor of the current major. Older versions get fixes only for severity ≥ high.
6
+
7
+ | Version | Supported |
8
+ | ------- | ---------------------- |
9
+ | 12.x | ✅ active |
10
+ | 11.x | ⚠️ security fixes only |
11
+ | ≤ 10.x | ❌ end-of-life |
12
+
13
+ ## Reporting a Vulnerability
14
+
15
+ **Do not open a public GitHub issue for security reports.**
16
+
17
+ Please report vulnerabilities privately via GitHub's [Security Advisory](https://github.com/mmerterden/multi-agent-pipeline/security/advisories/new) flow. If GitHub Advisories are unavailable to you, email the package owner (see `package.json` → `author`) with:
18
+
19
+ - A clear description of the issue and its impact
20
+ - Steps to reproduce (a minimal repro is most helpful)
21
+ - Affected version(s) and platform
22
+ - Optional: a suggested patch or mitigation
23
+
24
+ You should receive an initial acknowledgement within **5 business days**. We'll keep you updated on progress and aim to release a patch within **30 days** for high/critical issues.
25
+
26
+ ## Scope
27
+
28
+ This pipeline orchestrates external systems (Jira, Bitbucket, GitHub, Confluence, Figma) using user-supplied tokens. We consider the following in scope for security reports:
29
+
30
+ - **Token leakage** - any code path that logs, echoes, or persists secrets outside macOS Keychain.
31
+ - **Command injection** - bash invocations built from untrusted input (Jira summary, branch names, PR titles, etc.).
32
+ - **Pre-commit bypass** - secret-detection hook silently failing or being skippable without `--no-verify`.
33
+ - **Pipeline tampering** - agent-state.json or preferences manipulation that escalates an installed package's effective permissions.
34
+
35
+ Out of scope:
36
+
37
+ - Misconfigured user systems (broken Keychain, expired tokens, missing CLI tools).
38
+ - Vulnerabilities in transitive dependencies that don't reach a code path we use (please report those upstream first).
39
+ - Issues that require an attacker to already control the user's local machine.
40
+
41
+ ## Coordinated Disclosure
42
+
43
+ We follow standard coordinated disclosure: researchers are credited (with permission) in the release notes once a fix is shipped. Public disclosure timelines are agreed with the reporter, defaulting to 90 days from initial report or 30 days after a patch is released - whichever is earlier.
@@ -2,7 +2,7 @@
2
2
 
3
3
  End-to-end guide for generating production-ready UI components from Figma designs through the multi-agent pipeline. Covers iOS (SwiftUI) and Android (Jetpack Compose) with the same workflow shape.
4
4
 
5
- > Note: Component and Figma-to-code skills are no longer bundled in this repo. Phase 3 dispatches component work to the per-stack marketplace plugins (`ai-ios-engineering-toolkit` / `ai-android-engineering-toolkit` in the `multi-agent-plugins` marketplace) via the Skill tool. The workflow, subphases, and skill names described below are what those plugin skills run internally, not pipeline-bundled code. The 3-tier Figma design-access fallback still governs the analysis phase in this repo.
5
+ > Note: Component and Figma-to-code skills are no longer bundled in this repo. Phase 3 dispatches component work to the per-stack marketplace plugins (`ai-ios-toolkit` / `ai-android-toolkit` in the `multi-agent-plugins` marketplace) via the Skill tool. The workflow, subphases, and skill names described below are what those plugin skills run internally, not pipeline-bundled code. The 3-tier Figma design-access fallback still governs the analysis phase in this repo.
6
6
 
7
7
  ## What you get
8
8
 
@@ -15,7 +15,7 @@ End-to-end guide for generating production-ready UI components from Figma design
15
15
 
16
16
  ## How it runs
17
17
 
18
- When multi-agent Phase 0 classifies a task as `component` (Figma URL in description, or figma-driven instruction path), Phase 3 delegates the entire phase to the enabled `ai-<platform>-engineering-toolkit` marketplace plugin's component skill (`create-component`, fallback `create-ui-component`) via the Skill tool. Component skills live in the plugin marketplace, not the pipeline. The dispatch layer records a coarse component-build row in `state.phases["3"].subphases[]` - multi-agent's phase-tracker reads that array with no special case. The subphase list below describes the flow the plugin skill runs internally.
18
+ When multi-agent Phase 0 classifies a task as `component` (Figma URL in description, or figma-driven instruction path), Phase 3 delegates the entire phase to the enabled `ai-<platform>-toolkit` marketplace plugin's component skill (`create-component`, fallback `create-ui-component`) via the Skill tool. Component skills live in the plugin marketplace, not the pipeline. The dispatch layer records a coarse component-build row in `state.phases["3"].subphases[]` - multi-agent's phase-tracker reads that array with no special case. The subphase list below describes the flow the plugin skill runs internally.
19
19
 
20
20
  ### Internal phase order
21
21
 
@@ -122,7 +122,7 @@ Global settings that affect the figma pipeline:
122
122
 
123
123
  | Symptom | Likely cause | Fix |
124
124
  |---|---|---|
125
- | Phase 3 halts with "plugin not enabled" | The `ai-<platform>-engineering-toolkit` plugin is not enabled in this repo | Enable it in the repo's `.claude/settings.local.json` (`"ai-ios-engineering-toolkit@<marketplace>": true`) and reload the session |
125
+ | Phase 3 halts with "plugin not enabled" | The `ai-<platform>-toolkit` plugin is not enabled in this repo | Enable it in the repo's `.claude/settings.local.json` (`"ai-ios-toolkit@<marketplace>": true`) and reload the session |
126
126
  | `multi-agent:create-component` not found | Marketplace not installed / plugin disabled | Install the marketplace and enable the platform toolkit; dispatch tries `create-component` then `create-ui-component` |
127
127
  | Wiki adapter failure | Remote unreachable (separate-repo mode) | Adapter caches pending output; next run retries. Non-blocking - Phase 7 continues. |
128
128
  | Jira auto-create hits 5xx | Transient Jira outage | Non-blocking - pipeline continues without link. User can run `/multi-agent:channels` post-hoc to add it. |
@@ -1,6 +1,6 @@
1
1
  # 6. `shared/core/` vs `shared/external/` source organization
2
2
 
3
- **Status:** Accepted · 2026-04 (v5.3.3)
3
+ **Status:** Accepted · 2026-04 (v5.3.3) · The "install destination is unchanged" clause is superseded by [ADR-0009](./0009-claude-stack-skills-plugin-only.md) (v15.0.0): Claude Code no longer receives the external tree; Copilot/Codex receive a stack-filtered subset.
4
4
 
5
5
  ## Context
6
6
 
@@ -1,6 +1,6 @@
1
1
  # 7. Multi-tool adapter framework + token-preserving uninstall
2
2
 
3
- **Status:** Superseded · 2026-07-02 (v10.7.0 removed all non-native adapters - the pipeline targets Claude Code + Copilot CLI only). Original acceptance: 2026-04-27 (v7.7.0 / v7.9.0). Kept as the historical record of why the adapter framework existed; install flags documented below no longer exist.
3
+ **Status:** Superseded · 2026-07-02 (v10.7.0 removed all non-native adapters - the pipeline targets Claude Code + Copilot CLI only; Codex CLI was later added as a third NATIVE target in v13.0.0, not through this adapter framework). Original acceptance: 2026-04-27 (v7.7.0 / v7.9.0). Kept as the historical record of why the adapter framework existed; install flags documented below no longer exist.
4
4
 
5
5
  ## Context
6
6
 
@@ -0,0 +1,31 @@
1
+ # 9. Claude Code stack skills are plugin-only; the local copy is retired
2
+
3
+ **Status:** Accepted · 2026-08 (v15.0.0) · Supersedes the "install destination is unchanged" clause of ADR-0006
4
+
5
+ ## Context
6
+
7
+ ADR-0006 split the source tree into `shared/core/` + `shared/external/` but kept the install unchanged: both trees flattened into `~/.claude/skills/`. Since then the same external catalog also became the authoring source for the `multi-agent-plugins` marketplace (`build-stack-plugins.mjs` derives each plugin's `knowledge/` layer from it), and Claude Code loads those plugins natively, namespaced (`ai-ios-toolkit:swiftui-pro`).
8
+
9
+ That left Claude Code receiving every stack skill **twice**:
10
+
11
+ - 110 of 157 local skill dirs duplicated the enabled plugins byte-for-byte - ~10k tokens of duplicate descriptions per session, 4.4 MB on disk.
12
+ - The local copy shadowed the plugin the moment it went stale, and it *was* stale in practice: the plugin cache and the local copy advanced on different schedules.
13
+ - The duplication hid real bugs: `skill-conformance.mjs` and `match-skills.mjs` only knew the local root, so they kept working by accident - against the stale copy.
14
+
15
+ ## Decision
16
+
17
+ 1. **Claude Code receives no local copy of the stack skills.** The marketplace plugins (`ai-<stack>-toolkit`, enablement managed by `/multi-agent:stack`, multi-select) are its only stack-skill source. Prompt tables, `Skill` invocations and the skills index all use the plugin-namespaced name.
18
+ 2. **Exactly two skills stay local on Claude Code**: `apple-archive-compliance` and `google-play-compliance` (`PIPELINE_LOCAL_SKILLS` in `install/claude.mjs`). They are pipeline-owned compliance catalogs, kept out of the public marketplace by policy (they may carry audit rules not meant for it), and `uninstall.mjs` already treats exactly this pair as pipeline-owned.
19
+ 3. **`shared/external/` stays in the repo as the authoring source.** It feeds `build-stack-plugins.mjs` and the Copilot/Codex copies; it is simply never copied to `~/.claude/skills` again. Installs migrate old machines by removing the dirs named in `.external-skills-manifest.json` (manifest-scoped - user-authored dirs survive).
20
+ 4. **Copilot CLI and Codex CLI keep local copies** (no plugin loader / silently truncating skill list), now **filtered to the enabled stacks**: `pluginsToDeliver` reads `enabledPlugins` from `~/.claude/settings.json` (fallback `--platform`), `partitionExternalSkillsByPlugins` routes each skill through the same `_stack-routing.mjs` table the marketplace is built with. One stack selection governs all three hosts.
21
+ 5. **Scripts that resolve skills know the plugin roots**: `skill-conformance.mjs` probes the marketplace checkout and version-named plugin cache (newest first) alongside the install roots; `build-skills-index.mjs` stamps `plugin` + `invokeAs` per entry so `match-skills.mjs` returns namespaced names.
22
+
23
+ ## Consequences
24
+
25
+ Positive: one source of truth per skill at runtime; ~13.5k tokens/session and ~5.9 MB reclaimed on Claude Code; a disabled stack is genuinely absent instead of half-present; the smoke suite now asserts the compliance-only contract (`smoke-install-layout.sh` 5b2b) and the filter's both directions (5b2).
26
+
27
+ Negative / accepted:
28
+
29
+ - A stack not enabled in `enabledPlugins` is invisible to Claude Code until `/multi-agent:stack` enables it. This is the intended behavior, not a regression.
30
+ - `dynamicSkillLoading`'s index now names skills the local tree does not hold; consumers must use `invokeAs`, not a filesystem path.
31
+ - Copilot/Codex copies go stale when the stack selection changes until `install --copilot --codex` is re-run; `/multi-agent:stack` offers that refresh after every change.
@@ -18,6 +18,7 @@ Format: lightly adapted from [Michael Nygard's ADR template](https://cognitect.c
18
18
  | [0006](./0006-skills-core-external-split.md) | `shared/core/` vs `shared/external/` source org | Accepted |
19
19
  | [0007](./0007-multi-tool-adapter-framework.md) | Multi-tool adapter framework + token-preserving uninstall | Superseded by v10.7.0 (adapters removed; Claude Code + Copilot CLI only) |
20
20
  | [0008](./0008-installer-modularization-and-secret-leak-defense.md) | Installer modularization + secret-leak defense | Accepted (amended v10.7.0: adapter module removed) |
21
+ | [0009](./0009-claude-stack-skills-plugin-only.md) | Claude Code stack skills are plugin-only; local copy retired | Accepted (supersedes ADR-0006 install-destination clause) |
21
22
 
22
23
  ## Writing a New ADR
23
24
 
@@ -54,7 +54,7 @@ graph TD
54
54
  DIFF["Code Diff"]
55
55
 
56
56
  DIFF --> R1["Fable (Claude Code) / Opus (Copilot)<br/>Security + Architecture"]
57
- DIFF --> GPT["GPT-5.4<br/>Quality + Edge Cases"]
57
+ DIFF --> GPT["GPT-5.4<br/>Quality + Edge Cases<br/>(Copilot CLI only)"]
58
58
  DIFF --> SON["Sonnet<br/>Correctness + Style"]
59
59
 
60
60
  R1 --> TRIAGE["Fable Triage<br/>(Opus on Copilot CLI)"]
@@ -71,7 +71,7 @@ graph TD
71
71
 
72
72
  ## Figma SubPhase Integration (Phase 3)
73
73
 
74
- When a task is classified `component`, Phase 3 dispatches to the marketplace component plugin (`ai-<platform>-engineering-toolkit`) via the Skill tool. Component skills are not bundled in this repo; the subphases below describe the flow the plugin skill runs internally:
74
+ When a task is classified `component`, Phase 3 dispatches to the marketplace component plugin (`ai-<platform>-toolkit`) via the Skill tool. Component skills are not bundled in this repo; the subphases below describe the flow the plugin skill runs internally:
75
75
 
76
76
  ```mermaid
77
77
  graph TD
@@ -117,17 +117,17 @@ graph TB
117
117
  end
118
118
 
119
119
  subgraph "Pipeline Specs"
120
- CMD[commands/<br/>49 command files]
120
+ CMD[commands/<br/>51 command files]
121
121
  AGT[agents/<br/>8 agent personas]
122
122
  RUL[rules/<br/>12 domain rules]
123
123
  PHS[multi-agent-refs/phases/<br/>phase specs + contracts]
124
124
  CMP[skills/shared/core/<br/>orchestration skills<br/>incl. compliance]
125
- EXT["skills/shared/external/<br/>150 curated skills<br/>(authoring source for the<br/>multi-agent-plugins marketplace)"]
125
+ EXT["skills/shared/external/<br/>151 curated skills<br/>(authoring source for the<br/>multi-agent-plugins marketplace)"]
126
126
  end
127
127
 
128
128
  subgraph "Quality Gates"
129
- SCH[schemas/<br/>17 JSON schemas]
130
- EVL[eval/triage/<br/>12 regression fixtures]
129
+ SCH[schemas/<br/>19 JSON schemas]
130
+ EVL[eval/triage/<br/>11 regression fixtures]
131
131
  SMK[scripts/smoke-*<br/>100+ smoke suites]
132
132
  end
133
133
 
@@ -163,14 +163,14 @@ User Input → Phase 0 (Init)
163
163
  ## Ecosystem Sync Targets
164
164
 
165
165
  `/multi-agent:sync` actually walks **five** targets, not the three shown in earlier
166
- revisions of this diagram Codex CLI and the two independently-shipped repos
166
+ revisions of this diagram - Codex CLI and the two independently-shipped repos
167
167
  (`multi-agent-plugins`, `dev-toolkit-mcp`) are real sync targets too:
168
168
 
169
169
  ```mermaid
170
170
  graph TD
171
171
  CC["Claude Code<br/>(source of truth)"]
172
- COP["Copilot CLI<br/>(instructions + 49 skills)"]
173
- COD["Codex CLI<br/>(1 router skill + 49 refs)"]
172
+ COP["Copilot CLI<br/>(instructions + 51 skills)"]
173
+ COD["Codex CLI<br/>(1 router skill + 51 refs)"]
174
174
  REPO["Pipeline Repo<br/>(npm package)"]
175
175
  WEB["Website"]
176
176
  PLUGREPO["multi-agent-plugins<br/>(5 stack plugins, own repo)"]
@@ -183,12 +183,12 @@ graph TD
183
183
  REPO -->|build-stack-plugins.mjs| PLUGREPO
184
184
  DTK -.->|sync only detects + ships, never authors| CC
185
185
 
186
- REPO -->|npm publish| NPM["GitHub Packages"]
186
+ REPO -->|npm publish| NPM["npm registry (public)"]
187
187
  WEB -->|auto-deploy| VERCEL["Vercel"]
188
188
  PLUGREPO -->|git push| MKT["Claude marketplace"]
189
- DTK -->|npm publish| NPM2["GitHub Packages (private)"]
189
+ DTK -->|npm publish| NPM2["npm registry (public)"]
190
190
  ```
191
191
 
192
- Full detail on how these three repos compose at install time and at run time
192
+ Full detail on how these three repos compose at install time and at run time -
193
193
  including the Phase 3 → plugin dispatch contract and the Phase 5 → dev-toolkit MCP
194
- contract lives in [`docs/ecosystem.md`](./ecosystem.md).
194
+ contract - lives in [`docs/ecosystem.md`](./ecosystem.md).