@mmerterden/multi-agent-pipeline 18.0.0 → 19.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 (234) hide show
  1. package/CHANGELOG.md +287 -0
  2. package/README.md +36 -20
  3. package/README.tr.md +14 -16
  4. package/docs/adr/0002-instruction-driven-flag.md +1 -0
  5. package/docs/adr/0005-lazy-phase-docs.md +11 -1
  6. package/docs/adr/0008-installer-modularization-and-secret-leak-defense.md +1 -0
  7. package/docs/adr/0010-own-code-graph.md +1 -0
  8. package/docs/adr/0014-six-phase-consolidation.md +134 -0
  9. package/docs/adr/README.md +2 -1
  10. package/docs/architecture.md +37 -38
  11. package/docs/best-practices.md +1 -1
  12. package/docs/ecosystem.md +46 -27
  13. package/docs/engineering.md +1 -1
  14. package/docs/facts.json +61 -0
  15. package/docs/features.md +55 -54
  16. package/docs/performance.md +5 -5
  17. package/docs/recovery-guide.md +17 -17
  18. package/docs/token-budget-history.md +3 -1
  19. package/index.js +2 -2
  20. package/install/_codex-agents.mjs +1 -1
  21. package/install/templates/claude-hooks.json +1 -1
  22. package/install/templates/codex-instructions.md +1 -1
  23. package/install/templates/copilot-instructions.md +28 -28
  24. package/manifest.json +234 -216
  25. package/package.json +2 -2
  26. package/pipeline/agents/dev-critic.md +7 -7
  27. package/pipeline/commands/figma-to-swiftui.md +1 -1
  28. package/pipeline/commands/multi-agent/SKILL.md +9 -9
  29. package/pipeline/commands/multi-agent/analysis/SKILL.md +15 -15
  30. package/pipeline/commands/multi-agent/analysis-resolve/SKILL.md +2 -2
  31. package/pipeline/commands/multi-agent/autopilot/SKILL.md +7 -7
  32. package/pipeline/commands/multi-agent/channels/SKILL.md +15 -15
  33. package/pipeline/commands/multi-agent/diff-explain/SKILL.md +6 -6
  34. package/pipeline/commands/multi-agent/garbage-collect/SKILL.md +1 -1
  35. package/pipeline/commands/multi-agent/graph/SKILL.md +1 -1
  36. package/pipeline/commands/multi-agent/help/SKILL.md +62 -62
  37. package/pipeline/commands/multi-agent/language/SKILL.md +2 -2
  38. package/pipeline/commands/multi-agent/local/SKILL.md +11 -11
  39. package/pipeline/commands/multi-agent/local-autopilot/SKILL.md +13 -13
  40. package/pipeline/commands/multi-agent/log/SKILL.md +2 -2
  41. package/pipeline/commands/multi-agent/manual-test/SKILL.md +9 -9
  42. package/pipeline/commands/multi-agent/model/SKILL.md +69 -0
  43. package/pipeline/commands/multi-agent/refactor/SKILL.md +3 -3
  44. package/pipeline/commands/multi-agent/resume/SKILL.md +4 -4
  45. package/pipeline/commands/multi-agent/resume-local/SKILL.md +19 -17
  46. package/pipeline/commands/multi-agent/review/SKILL.md +2 -2
  47. package/pipeline/commands/multi-agent/review-analysis/SKILL.md +1 -1
  48. package/pipeline/commands/multi-agent/route-off/SKILL.md +36 -0
  49. package/pipeline/commands/multi-agent/route-on/SKILL.md +74 -0
  50. package/pipeline/commands/multi-agent/route-status/SKILL.md +56 -0
  51. package/pipeline/commands/multi-agent/setup/SKILL.md +2 -2
  52. package/pipeline/commands/multi-agent/status/SKILL.md +5 -5
  53. package/pipeline/commands/multi-agent/steer/SKILL.md +2 -2
  54. package/pipeline/commands/multi-agent/sync/SKILL.md +12 -13
  55. package/pipeline/commands/multi-agent/test/SKILL.md +1 -1
  56. package/pipeline/lib/credential-inventory.sh +1 -1
  57. package/pipeline/lib/fetch-fortify.sh +1 -1
  58. package/pipeline/lib/model-dispatch.sh +140 -0
  59. package/pipeline/lib/model-rung.sh +142 -0
  60. package/pipeline/lib/outbound-gate.mjs +14 -0
  61. package/pipeline/lib/phase-schema.mjs +88 -0
  62. package/pipeline/lib/plan-todos.sh +5 -5
  63. package/pipeline/lib/route-state.sh +161 -0
  64. package/pipeline/lib/run-paths.sh +2 -2
  65. package/pipeline/multi-agent-refs/_account-picker.md +1 -1
  66. package/pipeline/multi-agent-refs/_dev-context.md +6 -6
  67. package/pipeline/multi-agent-refs/_input-parser.md +1 -1
  68. package/pipeline/multi-agent-refs/analysis/evidence.md +2 -11
  69. package/pipeline/multi-agent-refs/analysis/intake.md +7 -7
  70. package/pipeline/multi-agent-refs/analysis/locked.md +48 -22
  71. package/pipeline/multi-agent-refs/analysis/redesign.md +1 -1
  72. package/pipeline/multi-agent-refs/analysis/render.md +10 -10
  73. package/pipeline/multi-agent-refs/analysis/resolve.md +1 -1
  74. package/pipeline/multi-agent-refs/analysis/review.md +2 -2
  75. package/pipeline/multi-agent-refs/analysis/synthesis.md +13 -7
  76. package/pipeline/multi-agent-refs/analysis-template-corporate.md +9 -9
  77. package/pipeline/multi-agent-refs/analysis-template.md +19 -19
  78. package/pipeline/multi-agent-refs/android-guide.md +1 -1
  79. package/pipeline/multi-agent-refs/audit-guide.md +13 -13
  80. package/pipeline/multi-agent-refs/channels/issue-comment.md +2 -2
  81. package/pipeline/multi-agent-refs/channels/jira.md +3 -3
  82. package/pipeline/multi-agent-refs/channels/pr.md +4 -4
  83. package/pipeline/multi-agent-refs/channels/wiki.md +1 -1
  84. package/pipeline/multi-agent-refs/component-dispatch.md +8 -8
  85. package/pipeline/multi-agent-refs/conventions-defaults.md +2 -2
  86. package/pipeline/multi-agent-refs/cross-cli-contract.md +31 -6
  87. package/pipeline/multi-agent-refs/features/analysis-jira.md +1 -1
  88. package/pipeline/multi-agent-refs/features/autopilot-circuit-breaker.md +4 -4
  89. package/pipeline/multi-agent-refs/features/code-graph.md +5 -5
  90. package/pipeline/multi-agent-refs/features/design-conformance.md +1 -1
  91. package/pipeline/multi-agent-refs/features/dev-critic.md +3 -3
  92. package/pipeline/multi-agent-refs/features/doctor.md +3 -3
  93. package/pipeline/multi-agent-refs/features/external-context-injection.md +3 -3
  94. package/pipeline/multi-agent-refs/features/maturity-followup.md +3 -3
  95. package/pipeline/multi-agent-refs/features/model-fallback.md +41 -5
  96. package/pipeline/multi-agent-refs/features/plan-todos.md +1 -1
  97. package/pipeline/multi-agent-refs/features/repo-map.md +1 -1
  98. package/pipeline/multi-agent-refs/features/review-delta.md +3 -3
  99. package/pipeline/multi-agent-refs/features/review-multi-repo.md +2 -2
  100. package/pipeline/multi-agent-refs/features/scope-check.md +4 -4
  101. package/pipeline/multi-agent-refs/features/skill-conformance.md +2 -2
  102. package/pipeline/multi-agent-refs/features/stack-skill-routing.md +1 -1
  103. package/pipeline/multi-agent-refs/features/url-enrichment.md +1 -1
  104. package/pipeline/multi-agent-refs/features/verify-by-test.md +4 -4
  105. package/pipeline/multi-agent-refs/features/visual-evidence.md +19 -19
  106. package/pipeline/multi-agent-refs/features/worktree-finalize.md +6 -6
  107. package/pipeline/multi-agent-refs/issue-jira-triad.md +10 -10
  108. package/pipeline/multi-agent-refs/knowledge.md +11 -11
  109. package/pipeline/multi-agent-refs/multi-repo-integration-build.md +13 -13
  110. package/pipeline/multi-agent-refs/payload-contracts.md +8 -8
  111. package/pipeline/multi-agent-refs/phases/log-format.md +10 -10
  112. package/pipeline/multi-agent-refs/phases/modes.md +30 -30
  113. package/pipeline/multi-agent-refs/phases/operations.md +8 -8
  114. package/pipeline/multi-agent-refs/phases/phase-0-init.md +24 -24
  115. package/pipeline/multi-agent-refs/phases/phase-1-plan.md +599 -0
  116. package/pipeline/multi-agent-refs/phases/{phase-3-dev.md → phase-2-dev.md} +129 -49
  117. package/pipeline/multi-agent-refs/phases/{phase-4-review.md → phase-3-review.md} +225 -107
  118. package/pipeline/multi-agent-refs/phases/{phase-6-commit.md → phase-4-commit.md} +23 -23
  119. package/pipeline/multi-agent-refs/phases/{phase-7-report.md → phase-5-report.md} +29 -29
  120. package/pipeline/multi-agent-refs/phases.md +44 -48
  121. package/pipeline/multi-agent-refs/picker-contract.md +1 -1
  122. package/pipeline/multi-agent-refs/progress-contract.md +6 -6
  123. package/pipeline/multi-agent-refs/readiness-review.md +1 -1
  124. package/pipeline/multi-agent-refs/rules.md +7 -7
  125. package/pipeline/multi-agent-refs/swiftui-guide.md +2 -2
  126. package/pipeline/multi-agent-refs/tracker-contract.md +31 -32
  127. package/pipeline/multi-agent-refs/wiki-capture.md +14 -14
  128. package/pipeline/preferences-template.json +9 -1
  129. package/pipeline/rules/figma-pipeline.md +8 -8
  130. package/pipeline/rules/outside-the-pipeline.md +1 -1
  131. package/pipeline/schemas/agent-state.schema.json +50 -50
  132. package/pipeline/schemas/analysis-output.schema.json +3 -3
  133. package/pipeline/schemas/analysis-spec.schema.json +2 -2
  134. package/pipeline/schemas/autopilot-config.schema.json +1 -1
  135. package/pipeline/schemas/code-graph.schema.json +1 -1
  136. package/pipeline/schemas/criteria-manifest.schema.json +1 -1
  137. package/pipeline/schemas/dev-critic-output.schema.json +1 -1
  138. package/pipeline/schemas/diff-risk.schema.json +1 -1
  139. package/pipeline/schemas/figma-project-config.schema.json +1 -1
  140. package/pipeline/schemas/migrations/prefs-2.4.0-to-2.5.0.mjs +2 -2
  141. package/pipeline/schemas/migrations/prefs-2.6.0-to-2.7.0.mjs +31 -0
  142. package/pipeline/schemas/migrations/state-2.1.0-to-2.2.0.mjs +129 -0
  143. package/pipeline/schemas/phases.json +105 -0
  144. package/pipeline/schemas/plan-todos.schema.json +5 -5
  145. package/pipeline/schemas/planning-output.schema.json +1 -1
  146. package/pipeline/schemas/prefs.schema.json +102 -58
  147. package/pipeline/schemas/reviewer-output.schema.json +3 -3
  148. package/pipeline/schemas/route-config.schema.json +74 -0
  149. package/pipeline/schemas/scope-check.schema.json +1 -1
  150. package/pipeline/schemas/secret-patterns.json +124 -0
  151. package/pipeline/schemas/test-gap.schema.json +1 -1
  152. package/pipeline/schemas/token-budget.json +12 -18
  153. package/pipeline/schemas/triage-output.schema.json +6 -6
  154. package/pipeline/scripts/README.md +3 -3
  155. package/pipeline/scripts/_code-graph.mjs +2 -2
  156. package/pipeline/scripts/_run-paths.mjs +2 -2
  157. package/pipeline/scripts/_smoke-root.sh +1 -1
  158. package/pipeline/scripts/aggregate-metrics.mjs +1 -1
  159. package/pipeline/scripts/build-references.mjs +2 -2
  160. package/pipeline/scripts/bulk-read.sh +10 -1
  161. package/pipeline/scripts/capture-flush.sh +8 -8
  162. package/pipeline/scripts/capture-resume.sh +3 -3
  163. package/pipeline/scripts/classify-plan-safety.mjs +1 -1
  164. package/pipeline/scripts/cost-table.json +8 -1
  165. package/pipeline/scripts/diff-explain.mjs +1 -1
  166. package/pipeline/scripts/doctor.mjs +3 -3
  167. package/pipeline/scripts/gc-abandoned.sh +3 -3
  168. package/pipeline/scripts/gc-tmp.sh +1 -1
  169. package/pipeline/scripts/gc-worktrees.sh +1 -1
  170. package/pipeline/scripts/gen-facts.mjs +280 -0
  171. package/pipeline/scripts/gen-mode-dispatch.mjs +32 -37
  172. package/pipeline/scripts/gen-ref-toc.mjs +1 -1
  173. package/pipeline/scripts/graph-report.mjs +1 -1
  174. package/pipeline/scripts/jira-attach.sh +1 -1
  175. package/pipeline/scripts/learn-from-transcripts.mjs +1 -1
  176. package/pipeline/scripts/learning-curve.mjs +2 -2
  177. package/pipeline/scripts/log-metric.sh +17 -4
  178. package/pipeline/scripts/memory-save.sh +1 -1
  179. package/pipeline/scripts/migrate-prefs.mjs +22 -5
  180. package/pipeline/scripts/phase-banner.sh +20 -20
  181. package/pipeline/scripts/phase-tracker.sh +12 -12
  182. package/pipeline/scripts/plan-coverage-gate.mjs +2 -2
  183. package/pipeline/scripts/pre-commit-check.sh +30 -1
  184. package/pipeline/scripts/render-agent-log-cost.sh +1 -1
  185. package/pipeline/scripts/render-work-summary.sh +3 -3
  186. package/pipeline/scripts/review-file-filter.mjs +1 -1
  187. package/pipeline/scripts/run-aggregator.mjs +13 -6
  188. package/pipeline/scripts/run-metrics.mjs +1 -1
  189. package/pipeline/scripts/runs-index.mjs +11 -1
  190. package/pipeline/scripts/scan-skills.sh +26 -0
  191. package/pipeline/scripts/smoke-cross-cli-behavior.sh +6 -6
  192. package/pipeline/scripts/smoke-schema-validation.sh +26 -7
  193. package/pipeline/scripts/token-budget-report.mjs +13 -2
  194. package/pipeline/scripts/triage-memory.mjs +2 -2
  195. package/pipeline/scripts/validate-analysis-doc.mjs +274 -43
  196. package/pipeline/scripts/validate-planning.mjs +1 -1
  197. package/pipeline/scripts/validate-reviewer.mjs +1 -1
  198. package/pipeline/scripts/validate-state.mjs +45 -5
  199. package/pipeline/scripts/validate-triage.mjs +3 -3
  200. package/pipeline/scripts/verify-citations.mjs +1 -1
  201. package/pipeline/scripts/worktree-finalize.sh +5 -5
  202. package/pipeline/scripts/write-state.mjs +32 -0
  203. package/pipeline/skills/.skill-manifest.json +38 -22
  204. package/pipeline/skills/.skills-index.json +49 -5
  205. package/pipeline/skills/shared/README.md +10 -6
  206. package/pipeline/skills/shared/core/apple-archive-compliance/SKILL.md +8 -8
  207. package/pipeline/skills/shared/core/google-play-compliance/SKILL.md +8 -8
  208. package/pipeline/skills/shared/core/multi-agent/SKILL.md +81 -82
  209. package/pipeline/skills/shared/core/multi-agent-autopilot/SKILL.md +3 -3
  210. package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +14 -14
  211. package/pipeline/skills/shared/core/multi-agent-diff-explain/SKILL.md +5 -5
  212. package/pipeline/skills/shared/core/multi-agent-graph/SKILL.md +1 -1
  213. package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +25 -23
  214. package/pipeline/skills/shared/core/multi-agent-language/SKILL.md +2 -2
  215. package/pipeline/skills/shared/core/multi-agent-local/SKILL.md +2 -2
  216. package/pipeline/skills/shared/core/multi-agent-local-autopilot/SKILL.md +8 -8
  217. package/pipeline/skills/shared/core/multi-agent-manual-test/SKILL.md +6 -6
  218. package/pipeline/skills/shared/core/multi-agent-model/SKILL.md +71 -0
  219. package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +3 -3
  220. package/pipeline/skills/shared/core/multi-agent-resume/SKILL.md +1 -1
  221. package/pipeline/skills/shared/core/multi-agent-resume-local/SKILL.md +7 -7
  222. package/pipeline/skills/shared/core/multi-agent-route-off/SKILL.md +39 -0
  223. package/pipeline/skills/shared/core/multi-agent-route-on/SKILL.md +76 -0
  224. package/pipeline/skills/shared/core/multi-agent-route-status/SKILL.md +59 -0
  225. package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +1 -1
  226. package/pipeline/skills/shared/core/multi-agent-status/SKILL.md +5 -5
  227. package/pipeline/skills/shared/core/multi-agent-steer/SKILL.md +2 -2
  228. package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +6 -5
  229. package/pipeline/skills/shared/external/NOTICE-swift-ios-skills.md +1 -1
  230. package/pipeline/skills/shared/external/signal-community/SKILL.md +8 -1
  231. package/pipeline/skills/skills-index.md +8 -4
  232. package/pipeline/multi-agent-refs/phases/phase-1-analysis.md +0 -263
  233. package/pipeline/multi-agent-refs/phases/phase-2-planning.md +0 -344
  234. package/pipeline/multi-agent-refs/phases/phase-5-test.md +0 -182
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
- // validate-triage.mjs - behavioral validator for Phase 4 triage output.
2
+ // validate-triage.mjs - behavioral validator for Phase 3 triage output.
3
3
  //
4
4
  // Zero dependencies. Reads a triage JSON from a path arg or STDIN, enforces
5
5
  // the contract documented in pipeline/schemas/triage-output.schema.json AND
6
- // the edge-case rules from phase-4-review.md section3.3.
6
+ // the edge-case rules from phase-3-review.md section3.3.
7
7
  //
8
8
  // Unlike validate-schemas.mjs (which only checks schema files are well-formed),
9
9
  // this validates an ACTUAL triage run's output.
@@ -81,7 +81,7 @@ function validateRawFinding(f, label, errors) {
81
81
  }
82
82
  }
83
83
 
84
- // v3.2.0 verify-by-test outcome (Phase 4 Step 3.7). Optional; when present:
84
+ // v3.2.0 verify-by-test outcome (Phase 3 Step 3.7). Optional; when present:
85
85
  // result is required, and confirmed/not-reproduced additionally require
86
86
  // testRef + evidencePath (the empirical claims must be traceable).
87
87
  function validateVerification(v, label, errors) {
@@ -6,7 +6,7 @@
6
6
  * Two surfaces in this pipeline require a citation and neither has ever checked
7
7
  * one. `reviewer-output.schema.json` makes `file` and `line` required on every
8
8
  * finding; `analysis-spec.schema.json` carries `repoEvidence` entries of
9
- * `{name, file, line, tag}` and `analysis/locked.md` (Locked 37) asks for
9
+ * `{name, file, line, tag}` and `analysis/locked.md` (Locked 36) asks for
10
10
  * `repo/file:line` on every current-behaviour row. The only check that existed
11
11
  * was `validate-analysis-doc.mjs`'s `/:\d+\b/` - a test that the row LOOKS like
12
12
  * a citation, satisfied by `Foo.swift:9999` in a repo with no Foo.swift.
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env bash
2
2
  #
3
3
  # worktree-finalize.sh - salvage a finished task's artefacts, then remove its
4
- # worktree. Called by Phase 6 once the PR is open.
4
+ # worktree. Called by Phase 4 once the PR is open.
5
5
  #
6
6
  # The problem it solves: a task's worktree is dead weight the moment its PR
7
7
  # exists, but people forget to remove it, so `.worktrees/` accumulates full
8
- # checkouts. Removing it at PR-open is safe ONLY if the files Phase 7 and
8
+ # checkouts. Removing it at PR-open is safe ONLY if the files Phase 5 and
9
9
  # `:resume` read are moved somewhere that outlives it - hence salvage first.
10
10
  #
11
11
  # What it deliberately does NOT do:
@@ -125,7 +125,7 @@ rp_pr="$(cd "$PROJECT_ROOT" 2>/dev/null && pwd -P || echo "")"
125
125
  [ "$rp_wt" != "$rp_pr" ] || skip "worktree equals project root (--local mode) - nothing to remove"
126
126
 
127
127
  # Refuse if the caller is standing inside the tree being removed. A shell left on
128
- # a deleted inode is worse than a leftover directory, and Phase 6 legitimately
128
+ # a deleted inode is worse than a leftover directory, and Phase 4 legitimately
129
129
  # cd's into the worktree earlier, so this is a real case rather than a theoretical
130
130
  # one. The caller must cd out first.
131
131
  cwd_rp="$(pwd -P)"
@@ -213,7 +213,7 @@ fi
213
213
  [ "$head_sha" = "$upstream_sha" ] || skip "HEAD ($(echo "$head_sha" | cut -c1-8)) differs from remote ($(echo "$upstream_sha" | cut -c1-8)) - push before finalizing"
214
214
 
215
215
  # --- salvage ---------------------------------------------------------------
216
- # Everything Phase 7, :resume, :status and :log read out of the worktree. Each is
216
+ # Everything Phase 5, :resume, :status and :log read out of the worktree. Each is
217
217
  # copied only if present; a task that never reached Phase 4 has no triage output
218
218
  # and that is not an error.
219
219
  DEST="$LOGS_ROOT/${PROJECT:+$PROJECT/}$TASK_ID/artifacts"
@@ -309,7 +309,7 @@ if git -C "$rp_pr" worktree remove "$rp_wt" 2>/dev/null; then
309
309
  # Stamp the outcome into the SALVAGED agent-state.json here, rather than leaving
310
310
  # the caller to write it. In single-repo worktree mode the caller's $STATE_FILE
311
311
  # is the copy that just went away with the worktree, so a write there fails and
312
- # `worktreeRemovedAt` / `artifactsPath` land nowhere - which then makes Phase 7
312
+ # `worktreeRemovedAt` / `artifactsPath` land nowhere - which then makes Phase 5
313
313
  # read a dead path, fall back to the removed worktree, and silently skip the
314
314
  # triage-memory ingest. Exactly the [ -f ]-guarded degradation this step exists
315
315
  # to prevent.
@@ -441,6 +441,38 @@ async function main() {
441
441
  const tmp = `${dirname(path)}/.${basename(path)}.${process.pid}.tmp`;
442
442
  writeFileSync(tmp, JSON.stringify(next, null, 2) + "\n");
443
443
  renameSync(tmp, path); // atomic on POSIX
444
+
445
+ // The check above is a time-of-check, this is the time-of-use. No POSIX
446
+ // call renames a file conditionally on still holding a lock, so between
447
+ // stillOurs() and renameSync() there is a window - narrow, but real, and it
448
+ // widens exactly when the machine is loaded enough for a holder to be
449
+ // descheduled past the reclaim ceiling.
450
+ //
451
+ // Reading the file back closes it after the fact rather than before: our
452
+ // rev is the one we just wrote, so a different rev on disk means another
453
+ // writer's rename landed on top of ours. That is the difference between
454
+ // reporting success while losing an update - the one outcome this script
455
+ // exists to prevent - and refusing loudly enough for the caller to retry.
456
+ try {
457
+ const landed = JSON.parse(readFileSync(path, "utf-8"));
458
+ if (landed?.rev !== next.rev) {
459
+ console.error(
460
+ `write-state: our update was overwritten between the write and this check ` +
461
+ `(wrote rev ${next.rev}, found rev ${landed?.rev}). Re-read the state and retry.`,
462
+ );
463
+ releaseLock(path);
464
+ process.exit(4);
465
+ }
466
+ } catch (err) {
467
+ // An unreadable file here is not our write failing - it is the state
468
+ // being clobbered by something that is not this writer. Saying so beats
469
+ // exiting 0 over a file we can no longer parse.
470
+ console.error(
471
+ `write-state: the state was unreadable immediately after our write - ${err.message}`,
472
+ );
473
+ releaseLock(path);
474
+ process.exit(4);
475
+ }
444
476
  } catch (err) {
445
477
  console.error(`write-state: ${err.message}`);
446
478
  releaseLock(path);
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
- "generatedAt": "2026-09-17T11:16:58Z",
4
- "skillCount": 212,
3
+ "generatedAt": "2026-09-20T18:01:58Z",
4
+ "skillCount": 216,
5
5
  "entries": [
6
6
  {
7
7
  "path": "shared/core/apple-archive-compliance/SKILL.md",
8
- "sha256": "0d2f81825bf1610c765a4a7a223247703812e86a642e78f4f367cfc35cea76af"
8
+ "sha256": "6675a53441f2f3bedc82284998f402bd51fa251c7491a595e12c6c4016830337"
9
9
  },
10
10
  {
11
11
  "path": "shared/core/google-play-compliance/SKILL.md",
12
- "sha256": "356ff2b30f414e582bb215c4728696af8e249dfe924e16a550294e48fd9bdcf9"
12
+ "sha256": "2229d7b732b0523142b9c467049931b1d100343c1e318428f49e3fea73fc39ec"
13
13
  },
14
14
  {
15
15
  "path": "shared/core/multi-agent-analysis-jira/SKILL.md",
@@ -37,7 +37,7 @@
37
37
  },
38
38
  {
39
39
  "path": "shared/core/multi-agent-autopilot/SKILL.md",
40
- "sha256": "c02525ad003c34d53834ecd04eb150764b36779f4e08941c9016926418e74333"
40
+ "sha256": "7446424d3dd480751358a0e3de917f3d22bb4f1ce6dec1b99217877c6b217e76"
41
41
  },
42
42
  {
43
43
  "path": "shared/core/multi-agent-build-optimize/SKILL.md",
@@ -45,7 +45,7 @@
45
45
  },
46
46
  {
47
47
  "path": "shared/core/multi-agent-channels/SKILL.md",
48
- "sha256": "fa128726aa0009699e7ac2de566812e7192681db98c90dfc5da501ad50a05583"
48
+ "sha256": "414eead38b461c8aa95f6af3175366be905338233e6872313f5d4f59a02351af"
49
49
  },
50
50
  {
51
51
  "path": "shared/core/multi-agent-complaint-analysis/SKILL.md",
@@ -61,7 +61,7 @@
61
61
  },
62
62
  {
63
63
  "path": "shared/core/multi-agent-diff-explain/SKILL.md",
64
- "sha256": "7cb37a224e61d66e350202ecfc5fbc6c33da3fe0718504a093602f5cde5b648f"
64
+ "sha256": "ec3827e0457c693812d11b3a96f88f0e2d186af369c353e1b5c40795d96933dd"
65
65
  },
66
66
  {
67
67
  "path": "shared/core/multi-agent-doctor/SKILL.md",
@@ -81,11 +81,11 @@
81
81
  },
82
82
  {
83
83
  "path": "shared/core/multi-agent-graph/SKILL.md",
84
- "sha256": "918feff1a0a691535901c20a0625340a0f88cd5294cff1a1da20f799f6746f2a"
84
+ "sha256": "d6781a34d98a542aac3df4ce9c7c52d83902851de2d239bed022ac382716a26e"
85
85
  },
86
86
  {
87
87
  "path": "shared/core/multi-agent-help/SKILL.md",
88
- "sha256": "87d45a04c782b03569b0ab9ee54da8414cbadd5a2a82a7701f38dc8a3ee94627"
88
+ "sha256": "6ebe7d4de1a1ff815f572abb5d5db5d5af9ea507b3047ec60597a54455176da5"
89
89
  },
90
90
  {
91
91
  "path": "shared/core/multi-agent-ios-coding-standard/SKILL.md",
@@ -105,15 +105,15 @@
105
105
  },
106
106
  {
107
107
  "path": "shared/core/multi-agent-language/SKILL.md",
108
- "sha256": "c44d951996a208d962d969b0ac309ce88a38c048a2d8b332546c532045c189fc"
108
+ "sha256": "63e746bc63ec9963c54e852e6ca5cdb30afd9309a02ee3fdb35965eb931d0300"
109
109
  },
110
110
  {
111
111
  "path": "shared/core/multi-agent-local-autopilot/SKILL.md",
112
- "sha256": "b0fac3509c2fa513b3fea9bfde4f2554642cb60373a5b570ef29ba8bf760e2a1"
112
+ "sha256": "5e367258e57fa710d16a1ad6363d5974b89aa99fb0ac791d1ce0070c81191f6b"
113
113
  },
114
114
  {
115
115
  "path": "shared/core/multi-agent-local/SKILL.md",
116
- "sha256": "90dd95a0dc569f1451bf095a77cffccae607e4dedd271a3362cce32b53b5d819"
116
+ "sha256": "0a5f20782de81ac3376088579ff6fbc3a6f3781cb285860aae796408aa57e6aa"
117
117
  },
118
118
  {
119
119
  "path": "shared/core/multi-agent-log/SKILL.md",
@@ -121,7 +121,11 @@
121
121
  },
122
122
  {
123
123
  "path": "shared/core/multi-agent-manual-test/SKILL.md",
124
- "sha256": "e7f7f8004d286c5b5b596f8659bcf57b2350eb9c67a55470bb2e9b714513a3a4"
124
+ "sha256": "53e1d58848673690aa0b146908eae98a2de9861dae8b613f63f63672adf6d69b"
125
+ },
126
+ {
127
+ "path": "shared/core/multi-agent-model/SKILL.md",
128
+ "sha256": "eb66f48b4772f41b395b0aff0c3d0303e29da0a470abae8b61a602b93ba7335c"
125
129
  },
126
130
  {
127
131
  "path": "shared/core/multi-agent-prune-logs/SKILL.md",
@@ -137,15 +141,15 @@
137
141
  },
138
142
  {
139
143
  "path": "shared/core/multi-agent-refactor/SKILL.md",
140
- "sha256": "56b49a8216086961bc407a60b559942252a1aae3005b73811b1d40668758cc84"
144
+ "sha256": "56eb2be076a6840ddfbf57b8e82c8b4bcf76209553d41a06cc71e56dc894364e"
141
145
  },
142
146
  {
143
147
  "path": "shared/core/multi-agent-resume-local/SKILL.md",
144
- "sha256": "a4bedf949ab648d977dd1409339d08af204341f555d69f71f58c1a54dffaff6d"
148
+ "sha256": "9f5089c748a8f0ae5983a3f392879a86017a33c883a87607169e32705c68c5e9"
145
149
  },
146
150
  {
147
151
  "path": "shared/core/multi-agent-resume/SKILL.md",
148
- "sha256": "5e80eb098996fdea36f013acc8ddec44d462cace031c78341f11f0b59592a6ba"
152
+ "sha256": "6701424edde0a19b55a7de62bb5ba5f9dbaef7d9fb9ea2bce632374863145774"
149
153
  },
150
154
  {
151
155
  "path": "shared/core/multi-agent-review-analysis/SKILL.md",
@@ -163,6 +167,18 @@
163
167
  "path": "shared/core/multi-agent-review/SKILL.md",
164
168
  "sha256": "f3903b07fa7176ff9430f46cc1e981a0f0d06ab028df5ef1d45ad9271bada1e5"
165
169
  },
170
+ {
171
+ "path": "shared/core/multi-agent-route-off/SKILL.md",
172
+ "sha256": "c569e9ba1fbbebc879b69229cf2154edc89998fcdcfe74fb4220f5af70daafa0"
173
+ },
174
+ {
175
+ "path": "shared/core/multi-agent-route-on/SKILL.md",
176
+ "sha256": "40fab187a6054b90c9b8f1e8ad198a08ab94fdfd9cd89eef9b439e59b570d821"
177
+ },
178
+ {
179
+ "path": "shared/core/multi-agent-route-status/SKILL.md",
180
+ "sha256": "f104d3de6974837b8ebbcc6242269c06ea78a0d97a3e216c1b62cf6d91a72fd8"
181
+ },
166
182
  {
167
183
  "path": "shared/core/multi-agent-routines/SKILL.md",
168
184
  "sha256": "a8cc83140b5d84365348a2b0858f06a9e92808f608544eea61ab5760c82f9f97"
@@ -181,7 +197,7 @@
181
197
  },
182
198
  {
183
199
  "path": "shared/core/multi-agent-setup/SKILL.md",
184
- "sha256": "d475f14de5db9ffe0c8ae5b3b83374d5f82a41c29da5271c7399d151e6bd4c1d"
200
+ "sha256": "d2c167082f40af3c2a7cbb0be55a8cdf8076a4f06a3df54c89b1318759421a29"
185
201
  },
186
202
  {
187
203
  "path": "shared/core/multi-agent-stack/SKILL.md",
@@ -189,11 +205,11 @@
189
205
  },
190
206
  {
191
207
  "path": "shared/core/multi-agent-status/SKILL.md",
192
- "sha256": "3305fcce80bdad9ea0032e382276c5692a197749d9c012910daaea7a332bce0e"
208
+ "sha256": "ae9a7507e0a0291d8e786820b1a0394363f416fd7715f2deb162c9f542ae5351"
193
209
  },
194
210
  {
195
211
  "path": "shared/core/multi-agent-steer/SKILL.md",
196
- "sha256": "a5988d6945dabea45d9827c76e270bb3d12fb2b7689e8893ea09f650ae97baa9"
212
+ "sha256": "d2a3602c1acbd1a01b30fcba65fbbe669ac825ec4ac9b0d6679bba07e0d1207c"
197
213
  },
198
214
  {
199
215
  "path": "shared/core/multi-agent-store-ready/SKILL.md",
@@ -201,7 +217,7 @@
201
217
  },
202
218
  {
203
219
  "path": "shared/core/multi-agent-sync/SKILL.md",
204
- "sha256": "51e9a8a9053ce9d0450bcaf66555075f83c340203bb753946938f4b29cf93b79"
220
+ "sha256": "3d3331d34f9610ea02b96ee27c8029734f3a3447d2857fc0dca92d5b43d0f8e2"
205
221
  },
206
222
  {
207
223
  "path": "shared/core/multi-agent-test-accessibility/SKILL.md",
@@ -237,7 +253,7 @@
237
253
  },
238
254
  {
239
255
  "path": "shared/core/multi-agent/SKILL.md",
240
- "sha256": "faac7ceb535d18778efe0ea91c19534c8e076bc709e7b1dbc567f5e71692bbbd"
256
+ "sha256": "9ab7af2ffb01f8eb0fae624ae40ea9ff2f6d69ad61544bd266b1b97f60eb4a0f"
241
257
  },
242
258
  {
243
259
  "path": "shared/external/accessibility-compliance-accessibility-audit/SKILL.md",
@@ -653,7 +669,7 @@
653
669
  },
654
670
  {
655
671
  "path": "shared/external/signal-community/SKILL.md",
656
- "sha256": "98a5883811a58a352f229efaa2ff785bcb7f8174988a5d6cc8d0d57cabc569cf"
672
+ "sha256": "d5989a85c39856e451ce5e5f9dd5a250be02067c56e47b8667a4f2d78014a89c"
657
673
  },
658
674
  {
659
675
  "path": "shared/external/skill-creator/SKILL.md",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
- "skillCount": 212,
3
+ "skillCount": 216,
4
4
  "entries": [
5
5
  {
6
6
  "name": "accessibility-compliance-accessibility-audit",
@@ -1038,7 +1038,7 @@
1038
1038
  },
1039
1039
  {
1040
1040
  "name": "multi-agent-channels",
1041
- "description": "Multi-channel reporter - Jira/Confluence/Wiki/PR description. Multi-select channels + content, humanizer pass, reviewer-preserving Bitbucket PR PUT. Phase 7 delegates to this skill; users can invoke post-hoc by Jira ID / PR URL / branch.",
1041
+ "description": "Multi-channel reporter - Jira/Confluence/Wiki/PR description. Multi-select channels + content, humanizer pass, reviewer-preserving Bitbucket PR PUT. Phase 5 delegates to this skill; users can invoke post-hoc by Jira ID / PR URL / branch.",
1042
1042
  "platform": null,
1043
1043
  "group": "core",
1044
1044
  "plugin": null,
@@ -1082,7 +1082,7 @@
1082
1082
  },
1083
1083
  {
1084
1084
  "name": "multi-agent-diff-explain",
1085
- "description": "Map Phase 4 triage findings to branch diff lines. Read-only post-hoc command, used after review to answer 'which finding lines up with which code change'. Use when a review finding has to be traced to the exact lines that caused it.",
1085
+ "description": "Map Phase 3 triage findings to branch diff lines. Read-only post-hoc command, used after review to answer 'which finding lines up with which code change'. Use when a review finding has to be traced to the exact lines that caused it.",
1086
1086
  "platform": null,
1087
1087
  "group": "core",
1088
1088
  "plugin": null,
@@ -1225,7 +1225,7 @@
1225
1225
  },
1226
1226
  {
1227
1227
  "name": "multi-agent-local-autopilot",
1228
- "description": "Full pipeline + local + autopilot - no worktree, no confirmations, all 8 phases run end-to-end on the current branch. Use when the full pipeline should run on the current branch with no worktree and no prompts.",
1228
+ "description": "Full pipeline + local + autopilot - no worktree, no confirmations, all 6 phases run end-to-end on the current branch. Use when the full pipeline should run on the current branch with no worktree and no prompts.",
1229
1229
  "platform": null,
1230
1230
  "group": "core",
1231
1231
  "plugin": null,
@@ -1256,6 +1256,17 @@
1256
1256
  "triggerPaths": [],
1257
1257
  "relativePath": "shared/core/multi-agent-manual-test/SKILL.md"
1258
1258
  },
1259
+ {
1260
+ "name": "multi-agent-model",
1261
+ "description": "Turn the top model rung on or off and keep the cost ledger's pricing in step with it. Use when asked to enable or disable Fable, or which model the pipeline dispatches.",
1262
+ "platform": null,
1263
+ "group": "core",
1264
+ "plugin": null,
1265
+ "invokeAs": "multi-agent-model",
1266
+ "triggerKeywords": [],
1267
+ "triggerPaths": [],
1268
+ "relativePath": "shared/core/multi-agent-model/SKILL.md"
1269
+ },
1259
1270
  {
1260
1271
  "name": "multi-agent-prune-logs",
1261
1272
  "description": "Delete per-task project logs under ~/.claude/logs/multi-agent (filter by age/project/task). Audit trail + metrics are preserved. Dry-run first; confirms before deleting. Use when task logs have built up and need trimming by age, project or task.",
@@ -1313,7 +1324,7 @@
1313
1324
  },
1314
1325
  {
1315
1326
  "name": "multi-agent-resume-local",
1316
- "description": "Continue already-done LOCAL work through the pipeline tail: Review → Build+Test → Commit/PR → Report (technical analysis + Jira test-scenario comment). No dev phase. Use when local work is already done and only review, build, commit and reporting remain.",
1327
+ "description": "Continue already-done LOCAL work through the pipeline tail: Review (with its build gate) → Commit/PR → Report (technical analysis + Jira test-scenario comment). No dev phase. Use when local work is already done and only review, build, commit and reporting remain.",
1317
1328
  "platform": null,
1318
1329
  "group": "core",
1319
1330
  "plugin": null,
@@ -1366,6 +1377,39 @@
1366
1377
  "triggerPaths": [],
1367
1378
  "relativePath": "shared/core/multi-agent-review-jira/SKILL.md"
1368
1379
  },
1380
+ {
1381
+ "name": "multi-agent-route-off",
1382
+ "description": "Disable model routing and keep its rules, so turning it back on does not re-ask for the same configuration. Use when asked to turn model routing off.",
1383
+ "platform": null,
1384
+ "group": "core",
1385
+ "plugin": null,
1386
+ "invokeAs": "multi-agent-route-off",
1387
+ "triggerKeywords": [],
1388
+ "triggerPaths": [],
1389
+ "relativePath": "shared/core/multi-agent-route-off/SKILL.md"
1390
+ },
1391
+ {
1392
+ "name": "multi-agent-route-on",
1393
+ "description": "Enable policy-driven model routing: pick a strategy, a scope, and the rules that say which rung a call lands on. Use when asked to turn model routing on.",
1394
+ "platform": null,
1395
+ "group": "core",
1396
+ "plugin": null,
1397
+ "invokeAs": "multi-agent-route-on",
1398
+ "triggerKeywords": [],
1399
+ "triggerPaths": [],
1400
+ "relativePath": "shared/core/multi-agent-route-on/SKILL.md"
1401
+ },
1402
+ {
1403
+ "name": "multi-agent-route-status",
1404
+ "description": "Report model routing: whether it is armed, which rule applies where, which rung the last dispatches took, and what this run has cost. Use when asked which model is being used or why.",
1405
+ "platform": null,
1406
+ "group": "core",
1407
+ "plugin": null,
1408
+ "invokeAs": "multi-agent-route-status",
1409
+ "triggerKeywords": [],
1410
+ "triggerPaths": [],
1411
+ "relativePath": "shared/core/multi-agent-route-status/SKILL.md"
1412
+ },
1369
1413
  {
1370
1414
  "name": "multi-agent-routines",
1371
1415
  "description": "List your saved /multi-agent routines (from /multi-agent:save) with what each one does, rendered in outputLanguage. Use when asked which saved routines exist or what one of them does.",
@@ -2,11 +2,11 @@
2
2
 
3
3
  Single source of truth for skills delivered to both Claude Code (`~/.claude/skills/`) and Copilot CLI (`~/.copilot/skills/`) by the installer.
4
4
 
5
- **Total:** 212 skills (59 core + 153 external). Auto-generated by `scripts/gen-skills-index.mjs` - do not edit by hand.
5
+ **Total:** 216 skills (63 core + 153 external). Auto-generated by `scripts/gen-skills-index.mjs` - do not edit by hand.
6
6
 
7
7
  ## Directory layout
8
8
 
9
- - **`core/`** - 59 `multi-agent*` orchestration skills that are pipeline-critical. Edits here are core-code changes.
9
+ - **`core/`** - 63 `multi-agent*` orchestration skills that are pipeline-critical. Edits here are core-code changes.
10
10
  - **`external/`** - 153 iOS / Android / generic skills imported from the upstream skill library. Mirrors of third-party guidance.
11
11
  - Install destinations (ADR-0009): Claude Code gets NO local copy of `external/` - it loads those skills from the `multi-agent-plugins` marketplace, namespaced (`ai-<stack>-toolkit:<name>`); only the two compliance catalogs from `core/` land in `~/.claude/skills/`. Copilot CLI and Codex CLI receive a flat copy filtered to the enabled stacks. `external/` remains the single authoring source that `build-stack-plugins.mjs` publishes from.
12
12
 
@@ -14,7 +14,7 @@ Source layout is logical grouping only - skill discovery at runtime is unchang
14
14
 
15
15
  ## Categories
16
16
 
17
- - [Pipeline Orchestration](#pipeline-orchestration) - 59
17
+ - [Pipeline Orchestration](#pipeline-orchestration) - 63
18
18
  - [iOS / Apple Ecosystem](#ios-apple-ecosystem) - 90
19
19
  - [Android / Kotlin](#android-kotlin) - 13
20
20
  - [Web](#web) - 10
@@ -40,7 +40,7 @@ Source layout is logical grouping only - skill discovery at runtime is unchang
40
40
  | [`multi-agent-complaint-analysis`](./core/multi-agent-complaint-analysis/) | `core` | Customer-complaint triage. Ingests complaints (paste, csv/xlsx/txt/json file, Jira issue, Confluence URL), fetches Graylog evidence per trx/ |
41
41
  | [`multi-agent-create-jira`](./core/multi-agent-create-jira/) | `core` | Create a standards-compliant Jira issue (Task / Bug / Story): asks the type, mines project conventions, drafts from a standard template with |
42
42
  | [`multi-agent-design-check`](./core/multi-agent-design-check/) | `core` | Mock-mode vs Figma design audit (iOS / Android, local-only). Pick repo + module, gate on mock support, enumerate every state driver into a c |
43
- | [`multi-agent-diff-explain`](./core/multi-agent-diff-explain/) | `core` | Map Phase 4 triage findings to branch diff lines. Read-only post-hoc command, used after review to answer 'which finding lines up with which |
43
+ | [`multi-agent-diff-explain`](./core/multi-agent-diff-explain/) | `core` | Map Phase 3 triage findings to branch diff lines. Read-only post-hoc command, used after review to answer 'which finding lines up with which |
44
44
  | [`multi-agent-doctor`](./core/multi-agent-doctor/) | `core` | Health check for the installed pipeline: layout, preferences, credentials, hooks and host capabilities, each with one actionable step. Exit |
45
45
  | [`multi-agent-feedback`](./core/multi-agent-feedback/) | `core` | Send one message to the maintainer: a bug, an idea or a question. Only the text you type is sent - no logs, no repo names, no paths. Shows t |
46
46
  | [`multi-agent-forget`](./core/multi-agent-forget/) | `core` | Remove a saved /multi-agent routine (created by /multi-agent:save): deletes its local-only command and its registry entry. Asks which one an |
@@ -53,19 +53,23 @@ Source layout is logical grouping only - skill discovery at runtime is unchang
53
53
  | [`multi-agent-kill`](./core/multi-agent-kill/) | `core` | Stop the given task, then remove its worktree and branch. Asks for confirmation. Use when a running or stuck task should be stopped and its |
54
54
  | [`multi-agent-language`](./core/multi-agent-language/) | `core` | Toggle outputLanguage (assistant explanations, picker questions, PR/Jira/Confluence bodies). promptLanguage is fixed to English; commit mess |
55
55
  | [`multi-agent-local`](./core/multi-agent-local/) | `core` | Full pipeline in local mode - no worktree, runs directly on the current branch. Use when the full pipeline should run on the current branc |
56
- | [`multi-agent-local-autopilot`](./core/multi-agent-local-autopilot/) | `core` | Full pipeline + local + autopilot - no worktree, no confirmations, all 8 phases run end-to-end on the current branch. Use when the full pi |
56
+ | [`multi-agent-local-autopilot`](./core/multi-agent-local-autopilot/) | `core` | Full pipeline + local + autopilot - no worktree, no confirmations, all 6 phases run end-to-end on the current branch. Use when the full pi |
57
57
  | [`multi-agent-log`](./core/multi-agent-log/) | `core` | Show the agent-log.md for the given task. With no ID, shows the most recent task. Use when asked what a task did, or to read its log. |
58
58
  | [`multi-agent-manual-test`](./core/multi-agent-manual-test/) | `core` | Switch to the active task's branch and prepare it for manual testing in Xcode. Phase 5 standalone (the UI Bug Hunter lives at multi-agent-te |
59
+ | [`multi-agent-model`](./core/multi-agent-model/) | `core` | Turn the top model rung on or off and keep the cost ledger's pricing in step with it. Use when asked to enable or disable Fable, or which mo |
59
60
  | [`multi-agent-prune-logs`](./core/multi-agent-prune-logs/) | `core` | Delete per-task project logs under ~/.claude/logs/multi-agent (filter by age/project/task). Audit trail + metrics are preserved. Dry-run fir |
60
61
  | [`multi-agent-prune-prompts`](./core/multi-agent-prune-prompts/) | `core` | Zero-base prompt review: measure the always-on instruction footprint, classify every rule block, propose keep/trial-removal/delete; applies |
61
62
  | [`multi-agent-purge`](./core/multi-agent-purge/) | `core` | ⚠️ Wipes every worktree, branch, log, and state file. Irreversible; asks for double confirmation. Use when every worktree, branch, log and s |
62
63
  | [`multi-agent-refactor`](./core/multi-agent-refactor/) | `core` | Analyse the project: extract adapted best-practices, hunt real bugs + improvement areas, check upstream drift of derived skills, research th |
63
64
  | [`multi-agent-resume`](./core/multi-agent-resume/) | `core` | Resume a stopped or failed task from the phase where it left off. Use when a task stopped or failed and should carry on from where it left o |
64
- | [`multi-agent-resume-local`](./core/multi-agent-resume-local/) | `core` | Continue already-done LOCAL work through the pipeline tail: Review → Build+Test → Commit/PR → Report (technical analysis + Jira test-scenari |
65
+ | [`multi-agent-resume-local`](./core/multi-agent-resume-local/) | `core` | Continue already-done LOCAL work through the pipeline tail: Review (with its build gate) → Commit/PR → Report (technical analysis + Jira tes |
65
66
  | [`multi-agent-review`](./core/multi-agent-review/) | `core` | Run parallel review on a branch diff or a Pull Request: 3 models on Claude Code (Fable + Opus + Sonnet), 3 models on Copilot CLI (GPT + Opus |
66
67
  | [`multi-agent-review-analysis`](./core/multi-agent-review-analysis/) | `core` | Review a written analysis document instead of a diff: resolve it from a path, a Confluence page or a Jira issue, run the deterministic gates |
67
68
  | [`multi-agent-review-issue`](./core/multi-agent-review-issue/) | `core` | Assess whether a GitHub issue is ready for multi-agent development: fetch it, grade scope / acceptance criteria / repro / design / API / sta |
68
69
  | [`multi-agent-review-jira`](./core/multi-agent-review-jira/) | `core` | Assess whether a Jira issue is ready for multi-agent development: fetch it, grade scope / acceptance criteria / repro / design / API / stack |
70
+ | [`multi-agent-route-off`](./core/multi-agent-route-off/) | `core` | Disable model routing and keep its rules, so turning it back on does not re-ask for the same configuration. Use when asked to turn model rou |
71
+ | [`multi-agent-route-on`](./core/multi-agent-route-on/) | `core` | Enable policy-driven model routing: pick a strategy, a scope, and the rules that say which rung a call lands on. Use when asked to turn mode |
72
+ | [`multi-agent-route-status`](./core/multi-agent-route-status/) | `core` | Report model routing: whether it is armed, which rule applies where, which rung the last dispatches took, and what this run has cost. Use wh |
69
73
  | [`multi-agent-routines`](./core/multi-agent-routines/) | `core` | List your saved /multi-agent routines (from /multi-agent:save) with what each one does, rendered in outputLanguage. Use when asked which sav |
70
74
  | [`multi-agent-save`](./core/multi-agent-save/) | `core` | Save a recurring job as a reusable /multi-agent:<name> command. Reviews the conversation + your CLAUDE.md for candidate routines, you pick o |
71
75
  | [`multi-agent-scan`](./core/multi-agent-scan/) | `core` | Skill security scan: walks local skill directories against a tiered pattern catalog. Use when local skill directories need checking for unsa |
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: apple-archive-compliance
3
3
  language: en
4
- description: "Apple App Store Review compliance - wraps the multi-agent-toolkit-mcp `ios_app_store_audit` tool (18-rule deep scan) with ITMS error code mapping + EN/TR humanizer templates. Consumed by: /multi-agent:test 'store-ready' (primary dispatch), Phase 4 Security Auditor (catalog cross-ref on Info.plist / PrivacyInfo / entitlements diffs), /multi-agent:review (PR citation), /multi-agent:channels (PR body auto-augmentation). Wiring enforced by smoke-compliance-skills.sh. Use when an .xcarchive needs an App Store review check before submission, or a rejection has to be diagnosed."
4
+ description: "Apple App Store Review compliance - wraps the multi-agent-toolkit-mcp `ios_app_store_audit` tool (18-rule deep scan) with ITMS error code mapping + EN/TR humanizer templates. Consumed by: /multi-agent:test 'store-ready' (primary dispatch), Phase 3 Security Auditor (catalog cross-ref on Info.plist / PrivacyInfo / entitlements diffs), /multi-agent:review (PR citation), /multi-agent:channels (PR body auto-augmentation). Wiring enforced by smoke-compliance-skills.sh. Use when an .xcarchive needs an App Store review check before submission, or a rejection has to be diagnosed."
5
5
  user-invocable: true
6
6
  argument-hint: '[archive-path] [--threshold=error|warning|info] [--format=markdown|json] [--lang=en|tr] - no-arg: picks most recent .xcarchive from ~/Library/Developer/Xcode/Archives/'
7
7
  standards-registry: references/rules.yml
@@ -18,7 +18,7 @@ Pre-submission compliance check for iOS `.xcarchive` bundles. Wraps the [`ios_ap
18
18
  | Consumer | How it uses this skill |
19
19
  |---|---|
20
20
  | `/multi-agent:test "store-ready"` (iOS) | Main entry point - runs the binary, renders the full report |
21
- | Phase 4 Security Auditor (iOS review) | Reads the rule catalog for cross-reference when diff touches Info.plist, PrivacyInfo.xcprivacy, or entitlements |
21
+ | Phase 3 Security Auditor (iOS review) | Reads the rule catalog for cross-reference when diff touches Info.plist, PrivacyInfo.xcprivacy, or entitlements |
22
22
  | `/multi-agent:review` | On iOS diffs, cites guideline refs next to flagged symbols |
23
23
  | `/multi-agent:channels` | When PR touches release-relevant files, appends compliance warnings to PR body |
24
24
 
@@ -137,7 +137,7 @@ Apple App Store Review Guidelines + ITMS upload error codes that the underlying
137
137
 
138
138
  | Severity | What pipeline consumers do with it |
139
139
  |---|---|
140
- | `error` | **Blocker.** Report it as `blocking` in Phase 4 triage / channels PR body. Don't merge until fixed. |
140
+ | `error` | **Blocker.** Report it as `blocking` in Phase 3 triage / channels PR body. Don't merge until fixed. |
141
141
  | `warning` | **Important.** Surface in PR description / Jira comment under "Compliance warnings". Merging OK but note it. |
142
142
  | `info` | **Informational.** Log to agent-log.md only. Don't pollute PR body. |
143
143
 
@@ -208,7 +208,7 @@ sim-test.md's "store-ready" scenario on iOS:
208
208
  4. Render humanizer template per `--lang` flag (default `en`; `promptLanguage` is locked to `"en"`)
209
209
  5. Exit with `1` if any blockers, `0` otherwise (CI-friendly)
210
210
 
211
- ### Phase 4 Security Auditor (optional, on-demand)
211
+ ### Phase 3 Security Auditor (optional, on-demand)
212
212
 
213
213
  When reviewing an iOS PR, if diff touches ANY of:
214
214
  - `*/Info.plist`
@@ -261,12 +261,12 @@ multi-agent-test "store-ready" --format=json --auto-pick
261
261
  mcp__multi-agent-toolkit__ios_app_store_audit({ archive_path: "~/Library/Developer/Xcode/Archives/2026-04-21/MyApp.xcarchive", rules: "all" })
262
262
  ```
263
263
 
264
- ### Phase 4 Security Auditor (catalog cross-ref, no binary invocation)
264
+ ### Phase 3 Security Auditor (catalog cross-ref, no binary invocation)
265
265
 
266
- When a Phase 4 review diff touches iOS release-relevant paths (`Info.plist`, `PrivacyInfo.xcprivacy`, `*.entitlements`, `AppDelegate.swift`, `project.pbxproj`), the security-auditor persona loads this skill's 18-rule catalog and cites matching ruleIDs next to its findings. No binary invocation at review time - catalog reads are free.
266
+ When a Phase 3 review diff touches iOS release-relevant paths (`Info.plist`, `PrivacyInfo.xcprivacy`, `*.entitlements`, `AppDelegate.swift`, `project.pbxproj`), the security-auditor persona loads this skill's 18-rule catalog and cites matching ruleIDs next to its findings. No binary invocation at review time - catalog reads are free.
267
267
 
268
268
  ```
269
- # Example finding from Phase 4 Security Auditor (wired in v5.8.1):
269
+ # Example finding from Phase 3 Security Auditor (wired in v5.8.1):
270
270
  [BLOCKING] Info.plist: new NSCameraUsageDescription without justification
271
271
  (apple-archive-compliance / info-plist - Guideline 5.1.1)
272
272
  File: MyApp/Info.plist:42
@@ -312,7 +312,7 @@ The appended section is structured:
312
312
  ## Version history
313
313
 
314
314
  - **v5.8.0** - Skill introduced. Wraps the (now-retired) standalone ArchiveGuard binary, 17-rule catalog, EN+TR humanizer. Primary consumer only (`/multi-agent:test "store-ready"`).
315
- - **v5.8.1** - 3 additional consumer surfaces wired (Phase 4 Security Auditor cross-ref, `/multi-agent:review` citation, `/multi-agent:channels` PR-body auto-augmentation). Regression-locked by `smoke-compliance-skills.sh` (45 assertions).
315
+ - **v5.8.1** - 3 additional consumer surfaces wired (Phase 3 Security Auditor cross-ref, `/multi-agent:review` citation, `/multi-agent:channels` PR-body auto-augmentation). Regression-locked by `smoke-compliance-skills.sh` (45 assertions).
316
316
  - **v6.0.0** - `language: en` frontmatter tag; 4-consumer Examples section expanded.
317
317
  - **v8.4.0** - Migrated off the standalone ArchiveGuard Swift binary. Backend is now the `ios_app_store_audit` tool inside `@mmerterden/multi-agent-toolkit-mcp` ≥ v2.4 (full Node port of the 17 rules). All four consumer surfaces unchanged; rule IDs and JSON output shape preserved for backward compatibility. Rule catalog now points to `multi-agent-toolkit-mcp/tools/ios-app-store-audit/rules/`. ArchiveGuard repo deprecated.
318
318
  - **Unreleased** - Catalog grows to 18 rules: adds `sdk-floor` (ITMS-90725, iOS 26 / Xcode 26 build floor in force since 2026-04-28), which nothing previously checked. `embedded-sdk`'s missing-framework-privacy-manifest finding moves from a `5.1.1` WARNING to `ITMS-91061` ERROR, an enforced rejection since 2025-02-12 - archives that used to pass with a warning now fail. Requires `@mmerterden/multi-agent-toolkit-mcp` ≥ v3.0.0.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: google-play-compliance
3
3
  language: en
4
- description: "Google Play Store publication compliance - bundletool + aapt2 + apksigner orchestration + 21-rule policy catalog with Play Console error codes + humanizer templates. Consumed by: /multi-agent:test 'store-ready' (primary dispatch), Phase 4 Security Auditor (catalog cross-ref on AndroidManifest / build.gradle / proguard / signing diffs), /multi-agent:review (PR citation), /multi-agent:channels (PR body auto-augmentation). Wiring enforced by smoke-compliance-skills.sh. Use when an .aab or .apk needs a Play policy check before upload, or a Play rejection has to be diagnosed."
4
+ description: "Google Play Store publication compliance - bundletool + aapt2 + apksigner orchestration + 21-rule policy catalog with Play Console error codes + humanizer templates. Consumed by: /multi-agent:test 'store-ready' (primary dispatch), Phase 3 Security Auditor (catalog cross-ref on AndroidManifest / build.gradle / proguard / signing diffs), /multi-agent:review (PR citation), /multi-agent:channels (PR body auto-augmentation). Wiring enforced by smoke-compliance-skills.sh. Use when an .aab or .apk needs a Play policy check before upload, or a Play rejection has to be diagnosed."
5
5
  user-invocable: true
6
6
  argument-hint: '[bundle-path] [--threshold=error|warning|info] [--format=markdown|json] [--lang=en|tr] - no-arg: picks most recent .aab from app/build/outputs/bundle/release/'
7
7
  standards-registry: references/rules.yml
@@ -18,7 +18,7 @@ Pre-submission compliance check for Android App Bundle (`.aab`) and APK artifact
18
18
  | Consumer | How it uses this skill |
19
19
  |---|---|
20
20
  | `/multi-agent:test "store-ready"` (Android) | Main entry point - runs the tools, renders the full report |
21
- | Phase 4 Security Auditor (Android review) | Reads the rule catalog for cross-reference when diff touches AndroidManifest.xml, gradle config, or signing |
21
+ | Phase 3 Security Auditor (Android review) | Reads the rule catalog for cross-reference when diff touches AndroidManifest.xml, gradle config, or signing |
22
22
  | `/multi-agent:review` | On Android diffs, cites Play policy refs next to flagged changes (e.g. new `MANAGE_EXTERNAL_STORAGE` without justification) |
23
23
  | `/multi-agent:channels` | When PR is release-relevant, appends compliance warnings to PR body |
24
24
 
@@ -158,7 +158,7 @@ Current Google Play policies + Play Console rejection codes. Sourced from `suppo
158
158
 
159
159
  | Severity | What pipeline consumers do with it |
160
160
  |---|---|
161
- | `error` | **Blocker.** Play Console will reject the upload (or the bundle build will fail). Report as `blocking` in Phase 4 triage / channels PR body. |
161
+ | `error` | **Blocker.** Play Console will reject the upload (or the bundle build will fail). Report as `blocking` in Phase 3 triage / channels PR body. |
162
162
  | `warning` | **Policy review risk.** Might not reject immediately but increases manual review chance + user trust hit. Surface in PR description. |
163
163
  | `info` | **Best practice.** Log only. Don't pollute PR body. |
164
164
 
@@ -232,7 +232,7 @@ sim-test.md's "store-ready" scenario on Android:
232
232
  5. Render humanizer template per `--lang` flag (default `en`; `promptLanguage` is locked to `"en"`)
233
233
  6. Exit with `1` if any blockers, `0` otherwise (CI-friendly)
234
234
 
235
- ### Phase 4 Security Auditor (optional, on-demand)
235
+ ### Phase 3 Security Auditor (optional, on-demand)
236
236
 
237
237
  When reviewing an Android PR, if diff touches ANY of:
238
238
  - `**/AndroidManifest.xml` (permissions / exported / targetSdk)
@@ -286,12 +286,12 @@ multi-agent-test "store-ready" --last-version-code=142 --auto-pick
286
286
  /multi-agent:test "store-ready" --format=json --auto-pick
287
287
  ```
288
288
 
289
- ### Phase 4 Security Auditor (catalog cross-ref, no tool invocation)
289
+ ### Phase 3 Security Auditor (catalog cross-ref, no tool invocation)
290
290
 
291
- When a Phase 4 review diff touches Android release-relevant paths (`AndroidManifest.xml`, `build.gradle(.kts)`, `proguard-rules.pro`, `network_security_config.xml`), the security-auditor persona loads this skill's 21-rule policy catalog and cites matching ruleIDs next to its findings. No bundletool / aapt2 / apksigner invocation at review time - catalog reads are free.
291
+ When a Phase 3 review diff touches Android release-relevant paths (`AndroidManifest.xml`, `build.gradle(.kts)`, `proguard-rules.pro`, `network_security_config.xml`), the security-auditor persona loads this skill's 21-rule policy catalog and cites matching ruleIDs next to its findings. No bundletool / aapt2 / apksigner invocation at review time - catalog reads are free.
292
292
 
293
293
  ```
294
- # Example finding from Phase 4 Security Auditor (wired in v5.8.1):
294
+ # Example finding from Phase 3 Security Auditor (wired in v5.8.1):
295
295
  [BLOCKING] AndroidManifest.xml: new MANAGE_EXTERNAL_STORAGE permission added
296
296
  (google-play-compliance / dangerous-permissions - Policy - Permissions)
297
297
  File: app/src/main/AndroidManifest.xml:12
@@ -345,5 +345,5 @@ The appended section is structured:
345
345
  ## Version history
346
346
 
347
347
  - **v5.8.0** - Skill introduced. Orchestrates bundletool + aapt2 + apksigner, 21-rule catalog, EN+TR humanizer. Primary consumer only (`/multi-agent:test "store-ready"`).
348
- - **v5.8.1** - 3 additional consumer surfaces wired (Phase 4 Security Auditor cross-ref, `/multi-agent:review` citation, `/multi-agent:channels` PR-body auto-augmentation). Regression-locked by `smoke-compliance-skills.sh` (45 assertions).
348
+ - **v5.8.1** - 3 additional consumer surfaces wired (Phase 3 Security Auditor cross-ref, `/multi-agent:review` citation, `/multi-agent:channels` PR-body auto-augmentation). Regression-locked by `smoke-compliance-skills.sh` (45 assertions).
349
349
  - **v6.0.0** - `language: en` frontmatter tag; 4-consumer Examples section expanded.