@mmerterden/multi-agent-pipeline 12.5.0 → 12.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (290) hide show
  1. package/CHANGELOG.md +213 -0
  2. package/README.md +19 -19
  3. package/docs/FIGMA_PIPELINE.md +34 -34
  4. package/docs/adr/0001-three-model-triage.md +12 -12
  5. package/docs/adr/0002-instruction-driven-flag.md +5 -5
  6. package/docs/adr/0003-unified-shared-skills.md +5 -5
  7. package/docs/adr/0004-zero-dependency-philosophy.md +5 -5
  8. package/docs/adr/0005-lazy-phase-docs.md +2 -2
  9. package/docs/adr/0006-skills-core-external-split.md +6 -6
  10. package/docs/adr/0007-multi-tool-adapter-framework.md +19 -19
  11. package/docs/adr/0008-installer-modularization-and-secret-leak-defense.md +19 -19
  12. package/docs/adr/README.md +1 -1
  13. package/docs/best-practices.md +3 -3
  14. package/docs/features.md +48 -28
  15. package/docs/performance.md +16 -16
  16. package/docs/recovery-guide.md +39 -39
  17. package/index.js +11 -5
  18. package/install/_common.mjs +5 -11
  19. package/install/_copilot-instructions.mjs +2 -2
  20. package/install/_dev-only-files.mjs +2 -1
  21. package/install/_platform-filter.mjs +1 -1
  22. package/install/_telemetry.mjs +1 -1
  23. package/install/claude.mjs +10 -9
  24. package/install/copilot.mjs +10 -19
  25. package/install/index.mjs +7 -15
  26. package/install/templates/copilot-instructions.md +54 -54
  27. package/install.js +1 -1
  28. package/package.json +15 -11
  29. package/pipeline/agents/security-auditor.md +1 -1
  30. package/pipeline/commands/archive-guard.md +5 -5
  31. package/pipeline/commands/multi-agent/SKILL.md +3 -1
  32. package/pipeline/commands/multi-agent/analysis/SKILL.md +1 -1
  33. package/pipeline/commands/multi-agent/analysis-resolve/SKILL.md +1 -1
  34. package/pipeline/commands/multi-agent/autopilot/SKILL.md +1 -1
  35. package/pipeline/commands/multi-agent/build-optimize/SKILL.md +1 -1
  36. package/pipeline/commands/multi-agent/create-jira/SKILL.md +1 -1
  37. package/pipeline/commands/multi-agent/design-check/SKILL.md +287 -0
  38. package/pipeline/commands/multi-agent/dev/SKILL.md +1 -1
  39. package/pipeline/commands/multi-agent/dev-autopilot/SKILL.md +1 -1
  40. package/pipeline/commands/multi-agent/dev-local/SKILL.md +1 -1
  41. package/pipeline/commands/multi-agent/dev-local-autopilot/SKILL.md +1 -1
  42. package/pipeline/commands/multi-agent/diff-explain/SKILL.md +1 -1
  43. package/pipeline/commands/multi-agent/finish/SKILL.md +6 -6
  44. package/pipeline/commands/multi-agent/forget/SKILL.md +1 -1
  45. package/pipeline/commands/multi-agent/garbage-collect/SKILL.md +1 -1
  46. package/pipeline/commands/multi-agent/help/SKILL.md +46 -6
  47. package/pipeline/commands/multi-agent/issue/SKILL.md +1 -1
  48. package/pipeline/commands/multi-agent/jira/SKILL.md +1 -1
  49. package/pipeline/commands/multi-agent/kill/SKILL.md +1 -1
  50. package/pipeline/commands/multi-agent/language/SKILL.md +1 -1
  51. package/pipeline/commands/multi-agent/local/SKILL.md +1 -1
  52. package/pipeline/commands/multi-agent/local-autopilot/SKILL.md +1 -1
  53. package/pipeline/commands/multi-agent/log/SKILL.md +1 -1
  54. package/pipeline/commands/multi-agent/manual-test/SKILL.md +1 -1
  55. package/pipeline/commands/multi-agent/prune-logs/SKILL.md +1 -1
  56. package/pipeline/commands/multi-agent/purge/SKILL.md +1 -1
  57. package/pipeline/commands/multi-agent/refactor/SKILL.md +107 -19
  58. package/pipeline/commands/multi-agent/resume/SKILL.md +2 -2
  59. package/pipeline/commands/multi-agent/review/SKILL.md +2 -2
  60. package/pipeline/commands/multi-agent/review-issue/SKILL.md +1 -1
  61. package/pipeline/commands/multi-agent/review-jira/SKILL.md +1 -1
  62. package/pipeline/commands/multi-agent/routines/SKILL.md +1 -1
  63. package/pipeline/commands/multi-agent/save/SKILL.md +1 -1
  64. package/pipeline/commands/multi-agent/scan/SKILL.md +1 -1
  65. package/pipeline/commands/multi-agent/search/SKILL.md +1 -1
  66. package/pipeline/commands/multi-agent/setup/SKILL.md +2 -2
  67. package/pipeline/commands/multi-agent/stack/SKILL.md +3 -3
  68. package/pipeline/commands/multi-agent/status/SKILL.md +1 -1
  69. package/pipeline/commands/multi-agent/sync/SKILL.md +123 -16
  70. package/pipeline/commands/multi-agent/test/SKILL.md +2 -2
  71. package/pipeline/commands/multi-agent/uninstall/SKILL.md +1 -1
  72. package/pipeline/commands/multi-agent/update/SKILL.md +3 -3
  73. package/pipeline/commands/sim-test.md +5 -5
  74. package/pipeline/eval/run-metrics-fixture.json +60 -13
  75. package/pipeline/lib/account-resolver.sh +1 -1
  76. package/pipeline/lib/channels-multi-repo.sh +1 -1
  77. package/pipeline/lib/context-link-extractor.sh +1 -1
  78. package/pipeline/lib/credential-store.sh +33 -1
  79. package/pipeline/lib/fetch-confluence.sh +1 -1
  80. package/pipeline/lib/fetch-crashlytics.sh +1 -1
  81. package/pipeline/lib/fetch-fortify.sh +1 -1
  82. package/pipeline/lib/fetch-graylog.sh +1 -1
  83. package/pipeline/lib/fetch-swagger.sh +1 -1
  84. package/pipeline/lib/issue-fetcher.sh +1 -1
  85. package/pipeline/lib/multi-repo-pipeline.sh +1 -1
  86. package/pipeline/lib/repo-cache.sh +1 -1
  87. package/pipeline/lib/submodule-detector.sh +1 -1
  88. package/pipeline/multi-agent-refs/component-dispatch.md +1 -1
  89. package/pipeline/multi-agent-refs/component-generation.md +121 -0
  90. package/pipeline/multi-agent-refs/cross-cli-contract.md +4 -4
  91. package/pipeline/multi-agent-refs/features/model-fallback.md +2 -2
  92. package/pipeline/multi-agent-refs/phases/phase-3-dev.md +2 -2
  93. package/pipeline/multi-agent-refs/phases/phase-4-review.md +1 -1
  94. package/pipeline/multi-agent-refs/phases/phase-5-test.md +4 -4
  95. package/pipeline/preferences-template.json +23 -12
  96. package/pipeline/schemas/agent-state.schema.json +125 -5
  97. package/pipeline/schemas/analysis-output.schema.json +18 -4
  98. package/pipeline/schemas/analysis-spec.schema.json +120 -32
  99. package/pipeline/schemas/clarify-output.schema.json +15 -5
  100. package/pipeline/schemas/design-check-config.schema.json +183 -0
  101. package/pipeline/schemas/dev-critic-output.schema.json +20 -5
  102. package/pipeline/schemas/figma-project-config.schema.json +42 -10
  103. package/pipeline/schemas/learnings-ledger.schema.json +10 -2
  104. package/pipeline/schemas/migrations/figma-config-1.0.0-to-2.0.0.mjs +1 -4
  105. package/pipeline/schemas/migrations/prefs-2.0.0-to-2.1.0.mjs +24 -7
  106. package/pipeline/schemas/migrations/state-2.0.0-to-2.1.0.mjs +30 -12
  107. package/pipeline/schemas/plan-todos.schema.json +6 -3
  108. package/pipeline/schemas/planning-output.schema.json +5 -1
  109. package/pipeline/schemas/prefs.schema.json +215 -197
  110. package/pipeline/schemas/test-gap.schema.json +5 -5
  111. package/pipeline/schemas/token-budget.json +8 -8
  112. package/pipeline/schemas/triage-corpus.schema.json +1 -1
  113. package/pipeline/scripts/README.md +7 -5
  114. package/pipeline/scripts/aggregate-metrics.mjs +18 -6
  115. package/pipeline/scripts/build-skills-index.mjs +6 -2
  116. package/pipeline/scripts/build-stack-plugins.mjs +142 -39
  117. package/pipeline/scripts/check-derived-drift.mjs +196 -0
  118. package/pipeline/scripts/check-md-links.mjs +6 -2
  119. package/pipeline/scripts/classify-plan-safety.mjs +26 -8
  120. package/pipeline/scripts/cost-budget-check.mjs +11 -6
  121. package/pipeline/scripts/cost-table.json +1 -1
  122. package/pipeline/scripts/diff-explain.mjs +7 -3
  123. package/pipeline/scripts/diff-risk-score.mjs +13 -3
  124. package/pipeline/scripts/eval-golden-tasks-live.mjs +8 -3
  125. package/pipeline/scripts/eval-golden-tasks.mjs +21 -9
  126. package/pipeline/scripts/eval-intent.mjs +8 -4
  127. package/pipeline/scripts/eval-mine-corpus.mjs +14 -4
  128. package/pipeline/scripts/evidence-gate.mjs +7 -2
  129. package/pipeline/scripts/fixtures/install-layout.tsv +7 -7
  130. package/pipeline/scripts/gen-mode-dispatch.mjs +38 -21
  131. package/pipeline/scripts/gen-skills-index.mjs +18 -3
  132. package/pipeline/scripts/learning-curve.mjs +13 -3
  133. package/pipeline/scripts/learnings-ledger.mjs +119 -34
  134. package/pipeline/scripts/lint-mcp-refs.mjs +218 -0
  135. package/pipeline/scripts/lint-skills.mjs +20 -9
  136. package/pipeline/scripts/localize-commands.mjs +6 -1
  137. package/pipeline/scripts/match-skills.mjs +15 -4
  138. package/pipeline/scripts/memory-load.sh +5 -1
  139. package/pipeline/scripts/migrate-prefs.mjs +33 -16
  140. package/pipeline/scripts/phase-tracker.sh +3 -1
  141. package/pipeline/scripts/render-work-summary.sh +4 -1
  142. package/pipeline/scripts/repo-map.mjs +110 -64
  143. package/pipeline/scripts/review-scope.mjs +7 -1
  144. package/pipeline/scripts/routine-registry.mjs +4 -9
  145. package/pipeline/scripts/run-aggregator.mjs +11 -5
  146. package/pipeline/scripts/run-metrics.mjs +13 -8
  147. package/pipeline/scripts/run-smokes.mjs +57 -3
  148. package/pipeline/scripts/scorecard.mjs +258 -0
  149. package/pipeline/scripts/smoke-command-inventory.sh +81 -0
  150. package/pipeline/scripts/smoke-commands-skills-parity.sh +1 -1
  151. package/pipeline/scripts/smoke-compliance-skills.sh +4 -4
  152. package/pipeline/scripts/smoke-context-budget.sh +72 -0
  153. package/pipeline/scripts/smoke-cross-cli-behavior.sh +12 -2
  154. package/pipeline/scripts/smoke-generate-issue.sh +6 -5
  155. package/pipeline/scripts/smoke-model-fallback.sh +1 -1
  156. package/pipeline/scripts/smoke-no-mcp-in-dev-phases.sh +86 -7
  157. package/pipeline/scripts/smoke-own-punctuation.sh +103 -0
  158. package/pipeline/scripts/smoke-per-repo-memory.sh +2 -2
  159. package/pipeline/scripts/smoke-review-readiness.sh +3 -2
  160. package/pipeline/scripts/smoke-schema-validation.sh +19 -5
  161. package/pipeline/scripts/smoke-shadow-git.sh +4 -2
  162. package/pipeline/scripts/smoke-workflow-audit.sh +43 -11
  163. package/pipeline/scripts/smoke-write-state.sh +49 -5
  164. package/pipeline/scripts/test-gap-rules/android.json +11 -11
  165. package/pipeline/scripts/test-gap-rules/ios.json +16 -11
  166. package/pipeline/scripts/test-gap-rules/node.json +19 -7
  167. package/pipeline/scripts/test-gap-rules/python.json +10 -4
  168. package/pipeline/scripts/test-gap-scan.mjs +44 -12
  169. package/pipeline/scripts/test-integrity-gate.mjs +5 -1
  170. package/pipeline/scripts/token-budget-report.mjs +44 -21
  171. package/pipeline/scripts/triage-memory.mjs +142 -32
  172. package/pipeline/scripts/uninstall.mjs +75 -31
  173. package/pipeline/scripts/validate-analysis-doc.mjs +15 -5
  174. package/pipeline/scripts/validate-diff-risk.mjs +32 -18
  175. package/pipeline/scripts/validate-test-gap.mjs +17 -7
  176. package/pipeline/scripts/validate-triage.mjs +17 -5
  177. package/pipeline/scripts/write-state.mjs +32 -9
  178. package/pipeline/skills/.skill-manifest.json +24 -8
  179. package/pipeline/skills/.skills-index.json +125 -89
  180. package/pipeline/skills/shared/README.md +65 -61
  181. package/pipeline/skills/shared/core/apple-archive-compliance/SKILL.md +10 -8
  182. package/pipeline/skills/shared/core/google-play-compliance/SKILL.md +1 -1
  183. package/pipeline/skills/shared/core/multi-agent/SKILL.md +26 -279
  184. package/pipeline/skills/shared/core/multi-agent-analysis/SKILL.md +1 -1
  185. package/pipeline/skills/shared/core/multi-agent-analysis-resolve/SKILL.md +1 -1
  186. package/pipeline/skills/shared/core/multi-agent-autopilot/SKILL.md +1 -1
  187. package/pipeline/skills/shared/core/multi-agent-build-optimize/SKILL.md +1 -1
  188. package/pipeline/skills/shared/core/multi-agent-create-jira/SKILL.md +1 -1
  189. package/pipeline/skills/shared/core/multi-agent-design-check/SKILL.md +248 -0
  190. package/pipeline/skills/shared/core/multi-agent-dev/SKILL.md +1 -1
  191. package/pipeline/skills/shared/core/multi-agent-dev-autopilot/SKILL.md +1 -1
  192. package/pipeline/skills/shared/core/multi-agent-dev-local/SKILL.md +1 -1
  193. package/pipeline/skills/shared/core/multi-agent-dev-local-autopilot/SKILL.md +1 -1
  194. package/pipeline/skills/shared/core/multi-agent-diff-explain/SKILL.md +1 -1
  195. package/pipeline/skills/shared/core/multi-agent-finish/SKILL.md +1 -1
  196. package/pipeline/skills/shared/core/multi-agent-forget/SKILL.md +1 -1
  197. package/pipeline/skills/shared/core/multi-agent-garbage-collect/SKILL.md +1 -1
  198. package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +23 -1
  199. package/pipeline/skills/shared/core/multi-agent-issue/SKILL.md +1 -1
  200. package/pipeline/skills/shared/core/multi-agent-jira/SKILL.md +1 -1
  201. package/pipeline/skills/shared/core/multi-agent-kill/SKILL.md +1 -1
  202. package/pipeline/skills/shared/core/multi-agent-language/SKILL.md +1 -1
  203. package/pipeline/skills/shared/core/multi-agent-local/SKILL.md +1 -1
  204. package/pipeline/skills/shared/core/multi-agent-local-autopilot/SKILL.md +1 -1
  205. package/pipeline/skills/shared/core/multi-agent-log/SKILL.md +1 -1
  206. package/pipeline/skills/shared/core/multi-agent-manual-test/SKILL.md +1 -1
  207. package/pipeline/skills/shared/core/multi-agent-prune-logs/SKILL.md +1 -1
  208. package/pipeline/skills/shared/core/multi-agent-purge/SKILL.md +1 -1
  209. package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +82 -18
  210. package/pipeline/skills/shared/core/multi-agent-resume/SKILL.md +1 -1
  211. package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +2 -2
  212. package/pipeline/skills/shared/core/multi-agent-review-issue/SKILL.md +1 -1
  213. package/pipeline/skills/shared/core/multi-agent-review-jira/SKILL.md +1 -1
  214. package/pipeline/skills/shared/core/multi-agent-routines/SKILL.md +1 -1
  215. package/pipeline/skills/shared/core/multi-agent-save/SKILL.md +1 -1
  216. package/pipeline/skills/shared/core/multi-agent-scan/SKILL.md +1 -1
  217. package/pipeline/skills/shared/core/multi-agent-search/SKILL.md +1 -1
  218. package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +1 -1
  219. package/pipeline/skills/shared/core/multi-agent-stack/SKILL.md +3 -3
  220. package/pipeline/skills/shared/core/multi-agent-status/SKILL.md +1 -1
  221. package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +51 -9
  222. package/pipeline/skills/shared/core/multi-agent-test/SKILL.md +2 -2
  223. package/pipeline/skills/shared/core/multi-agent-uninstall/SKILL.md +1 -1
  224. package/pipeline/skills/shared/core/multi-agent-update/SKILL.md +1 -1
  225. package/pipeline/skills/shared/external/accessibility-compliance-accessibility-audit/SKILL.md +1 -1
  226. package/pipeline/skills/shared/external/agent-introspection-debugging/SKILL.md +4 -4
  227. package/pipeline/skills/shared/external/agentflow/SKILL.md +1 -1
  228. package/pipeline/skills/shared/external/android-jetpack-compose-expert/SKILL.md +1 -1
  229. package/pipeline/skills/shared/external/android_ui_verification/SKILL.md +1 -1
  230. package/pipeline/skills/shared/external/api-patterns/SKILL.md +1 -1
  231. package/pipeline/skills/shared/external/api-security-best-practices/SKILL.md +1 -1
  232. package/pipeline/skills/shared/external/app-store-changelog/SKILL.md +1 -1
  233. package/pipeline/skills/shared/external/backlog/BACKLOG.md +1 -1
  234. package/pipeline/skills/shared/external/backlog/SKILL.md +12 -12
  235. package/pipeline/skills/shared/external/ci-cd-pipelines/SKILL.md +1 -1
  236. package/pipeline/skills/shared/external/context-compression/SKILL.md +1 -1
  237. package/pipeline/skills/shared/external/council/SKILL.md +3 -3
  238. package/pipeline/skills/shared/external/css-modern/SKILL.md +1 -1
  239. package/pipeline/skills/shared/external/database-patterns/SKILL.md +1 -1
  240. package/pipeline/skills/shared/external/debugging-strategies/SKILL.md +1 -1
  241. package/pipeline/skills/shared/external/docker-expert/SKILL.md +1 -1
  242. package/pipeline/skills/shared/external/fastapi-pro/SKILL.md +1 -1
  243. package/pipeline/skills/shared/external/firebase/SKILL.md +1 -1
  244. package/pipeline/skills/shared/external/github-actions-templates/SKILL.md +1 -1
  245. package/pipeline/skills/shared/external/help-skills/SKILL.md +1 -1
  246. package/pipeline/skills/shared/external/hig-components-content/SKILL.md +1 -1
  247. package/pipeline/skills/shared/external/hig-components-layout/SKILL.md +1 -1
  248. package/pipeline/skills/shared/external/hig-components-status/SKILL.md +1 -1
  249. package/pipeline/skills/shared/external/hig-components-system/SKILL.md +1 -1
  250. package/pipeline/skills/shared/external/hig-foundations/SKILL.md +1 -1
  251. package/pipeline/skills/shared/external/hig-inputs/SKILL.md +1 -1
  252. package/pipeline/skills/shared/external/hig-patterns/SKILL.md +1 -1
  253. package/pipeline/skills/shared/external/hig-platforms/SKILL.md +1 -1
  254. package/pipeline/skills/shared/external/hig-technologies/SKILL.md +1 -1
  255. package/pipeline/skills/shared/external/html-semantic/SKILL.md +1 -1
  256. package/pipeline/skills/shared/external/humanizer/SKILL.md +1 -1
  257. package/pipeline/skills/shared/external/ios-debugger-agent/SKILL.md +1 -1
  258. package/pipeline/skills/shared/external/ios-developer/SKILL.md +1 -1
  259. package/pipeline/skills/shared/external/kotlin-coroutines-expert/SKILL.md +1 -1
  260. package/pipeline/skills/shared/external/macos-menubar-tuist-app/SKILL.md +1 -1
  261. package/pipeline/skills/shared/external/macos-spm-app-packaging/SKILL.md +1 -1
  262. package/pipeline/skills/shared/external/monorepo-architect/SKILL.md +1 -1
  263. package/pipeline/skills/shared/external/nextjs-app-router/SKILL.md +1 -1
  264. package/pipeline/skills/shared/external/nodejs-backend-patterns/SKILL.md +1 -1
  265. package/pipeline/skills/shared/external/observability-engineer/SKILL.md +1 -1
  266. package/pipeline/skills/shared/external/python-patterns/SKILL.md +1 -1
  267. package/pipeline/skills/shared/external/react-best-practices/SKILL.md +1 -1
  268. package/pipeline/skills/shared/external/rest-api-design/SKILL.md +1 -1
  269. package/pipeline/skills/shared/external/search-first/SKILL.md +2 -2
  270. package/pipeline/skills/shared/external/skill-creator/SKILL.md +12 -12
  271. package/pipeline/skills/shared/external/skill-creator/audit.md +21 -21
  272. package/pipeline/skills/shared/external/skill-creator/checklist.md +3 -3
  273. package/pipeline/skills/shared/external/skill-creator/examples.md +10 -10
  274. package/pipeline/skills/shared/external/skill-creator/label-check.md +17 -17
  275. package/pipeline/skills/shared/external/skill-creator/scripts/audit-panel.js +86 -50
  276. package/pipeline/skills/shared/external/skill-creator/template.md +9 -9
  277. package/pipeline/skills/shared/external/swift-concurrency-expert/SKILL.md +1 -1
  278. package/pipeline/skills/shared/external/swiftui-performance-audit/SKILL.md +1 -1
  279. package/pipeline/skills/shared/external/swiftui-ui-patterns/SKILL.md +1 -1
  280. package/pipeline/skills/shared/external/swiftui-view-refactor/SKILL.md +1 -1
  281. package/pipeline/skills/shared/external/tailwind-css/SKILL.md +1 -1
  282. package/pipeline/skills/shared/external/testing-backend/SKILL.md +1 -1
  283. package/pipeline/skills/shared/external/typescript-patterns/SKILL.md +1 -1
  284. package/pipeline/skills/shared/external/vue-composition/SKILL.md +1 -1
  285. package/pipeline/skills/shared/external/web-accessibility/SKILL.md +1 -1
  286. package/pipeline/skills/shared/external/web-performance/SKILL.md +1 -1
  287. package/pipeline/skills/shared/external/web-testing/SKILL.md +1 -1
  288. package/pipeline/skills/shared/external/xcode-build-benchmark/schemas/build-benchmark.schema.json +9 -49
  289. package/pipeline/skills/skills-index.md +63 -59
  290. package/pipeline/scripts/smoke-plugin-validate.sh +0 -64
@@ -1,25 +1,20 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://github.com/mmerterden/multi-agent-pipeline/pipeline/schemas/prefs.schema.json",
4
- "title": "Multi-Agent Pipeline \u2014 multi-agent-preferences.json",
5
- "description": "User-level preferences. Written to $HOME/.claude/multi-agent-preferences.json. Never committed. Never synced to the open-source repo \u2014 may contain personal data.",
4
+ "title": "Multi-Agent Pipeline - multi-agent-preferences.json",
5
+ "description": "User-level preferences. Written to $HOME/.claude/multi-agent-preferences.json. Never committed. Never synced to the open-source repo - may contain personal data.",
6
6
  "type": "object",
7
7
  "additionalProperties": false,
8
- "required": [
9
- "schemaVersion",
10
- "global",
11
- "projects"
12
- ],
8
+ "patternProperties": {
9
+ "^_": {
10
+ "description": "Documentation-only blocks shipped in preferences-template.json (_figmaConfigTemplate, _derivedSkillSourcesTemplate, _devToolkitTemplate). Copy-paste examples, never read by the pipeline."
11
+ }
12
+ },
13
+ "required": ["schemaVersion", "global", "projects"],
13
14
  "properties": {
14
15
  "schemaVersion": {
15
16
  "type": "string",
16
- "enum": [
17
- "2.0.0",
18
- "2.1.0",
19
- "2.2.0",
20
- "2.3.0",
21
- "2.4.0"
22
- ],
17
+ "enum": ["2.0.0", "2.1.0", "2.2.0", "2.3.0", "2.4.0"],
23
18
  "description": "v2.0.0: pre-v3.7. v2.1.0: v3.7+ adds identities[].servicePatMap, platformIdentityRouting, recentGroups, recentBranches, serviceStatus, settings, expanded keychainMapping. v2.2.0: v6.0.0 formalizes v5.7 / v5.8 additions (reportChannels, reportContent with technicalAnalysis, wikiScope, autopilotReportTimeoutSeconds) that had been running as 2.1.0 sub-migrations without a proper version bump."
24
19
  },
25
20
  "global": {
@@ -32,10 +27,7 @@
32
27
  "items": {
33
28
  "type": "object",
34
29
  "additionalProperties": false,
35
- "required": [
36
- "name",
37
- "email"
38
- ],
30
+ "required": ["name", "email"],
39
31
  "properties": {
40
32
  "name": {
41
33
  "type": "string"
@@ -54,7 +46,7 @@
54
46
  "servicePatMap": {
55
47
  "type": "object",
56
48
  "additionalProperties": false,
57
- "description": "v2.1.0+. Maps a service name to the Keychain key name this identity owns for that service. Enables cross-identity isolation \u2014 corporate identity's Jira PAT is not accidentally used for personal repos.",
49
+ "description": "v2.1.0+. Maps a service name to the Keychain key name this identity owns for that service. Enables cross-identity isolation - corporate identity's Jira PAT is not accidentally used for personal repos.",
58
50
  "properties": {
59
51
  "jira": {
60
52
  "type": "string"
@@ -76,7 +68,7 @@
76
68
  },
77
69
  "firebase": {
78
70
  "type": "string",
79
- "description": "Firebase JSON (base64-encoded). project_id is parsed from the decoded JSON \u2014 no separate firebase_project entry."
71
+ "description": "Firebase JSON (base64-encoded). project_id is parsed from the decoded JSON - no separate firebase_project entry."
80
72
  },
81
73
  "fortify": {
82
74
  "type": "string"
@@ -92,7 +84,7 @@
92
84
  "gitIdentities": {
93
85
  "type": "array",
94
86
  "deprecated": true,
95
- "description": "DEPRECATED in v2.1.0 \u2014 renamed to 'identities'. Migration script converts automatically. Kept in schema temporarily for migration compatibility.",
87
+ "description": "DEPRECATED in v2.1.0 - renamed to 'identities'. Migration script converts automatically. Kept in schema temporarily for migration compatibility.",
96
88
  "items": {
97
89
  "type": "object",
98
90
  "additionalProperties": true
@@ -101,87 +93,64 @@
101
93
  "keychainMapping": {
102
94
  "type": "object",
103
95
  "additionalProperties": false,
104
- "description": "Maps logical token names to actual Keychain item names. Pipeline looks up tokens via `security find-generic-password -s <mapped-name>` (or `pipeline/lib/credential-store.sh get` cross-platform). 12 services covered: jira, bitbucket, bitbucket_token, bitbucket_user, github, confluence, figma, figma_mcp, fortify, firebase, jenkins, npm.",
96
+ "description": "Maps logical token names to actual Keychain item names. Pipeline looks up tokens via `security find-generic-password -s <mapped-name>` (or `pipeline/lib/credential-store.sh get` cross-platform). Covered keys: jira, bitbucket, bitbucket_token, bitbucket_user, github, confluence, figma, figma_pat, figma_user, figma_mcp, fortify, graylog, firebase, jenkins, npm, claude_oauth_token, claude_oauth_token_fallback.",
105
97
  "properties": {
106
98
  "jira": {
107
- "type": [
108
- "string",
109
- "null"
110
- ]
99
+ "type": ["string", "null"]
111
100
  },
112
101
  "bitbucket": {
113
- "type": [
114
- "string",
115
- "null"
116
- ],
102
+ "type": ["string", "null"],
117
103
  "description": "Legacy alias for bitbucket_token."
118
104
  },
119
105
  "bitbucket_token": {
120
- "type": [
121
- "string",
122
- "null"
123
- ]
106
+ "type": ["string", "null"]
124
107
  },
125
108
  "bitbucket_user": {
126
- "type": [
127
- "string",
128
- "null"
129
- ]
109
+ "type": ["string", "null"]
130
110
  },
131
111
  "github": {
132
- "type": [
133
- "string",
134
- "null"
135
- ]
112
+ "type": ["string", "null"]
136
113
  },
137
114
  "confluence": {
138
- "type": [
139
- "string",
140
- "null"
141
- ]
115
+ "type": ["string", "null"]
142
116
  },
143
117
  "figma": {
144
- "type": [
145
- "string",
146
- "null"
147
- ]
118
+ "type": ["string", "null"]
148
119
  },
149
120
  "figma_mcp": {
150
- "type": [
151
- "string",
152
- "null"
153
- ]
121
+ "type": ["string", "null"]
154
122
  },
155
123
  "fortify": {
156
- "type": [
157
- "string",
158
- "null"
159
- ]
124
+ "type": ["string", "null"]
160
125
  },
161
126
  "graylog": {
162
- "type": [
163
- "string",
164
- "null"
165
- ]
127
+ "type": ["string", "null"]
128
+ },
129
+ "figma_pat": {
130
+ "type": ["string", "null"],
131
+ "description": "Figma Personal Access Token. Tier 2 of the Figma access chain (REST API) resolves this key."
132
+ },
133
+ "figma_user": {
134
+ "type": ["string", "null"],
135
+ "description": "Figma account identifier, when the REST flow needs it alongside figma_pat."
136
+ },
137
+ "claude_oauth_token": {
138
+ "type": ["string", "null"],
139
+ "description": "Claude Code OAuth token used by headless / scheduled runs."
140
+ },
141
+ "claude_oauth_token_fallback": {
142
+ "type": ["string", "null"],
143
+ "description": "Secondary OAuth token used when the primary is rate-limited or expired."
166
144
  },
167
145
  "firebase": {
168
- "type": [
169
- "string",
170
- "null"
171
- ],
146
+ "type": ["string", "null"],
172
147
  "description": "Firebase JSON (base64-encoded). project_id is parsed from the decoded JSON."
173
148
  },
174
149
  "jenkins": {
175
- "type": [
176
- "string",
177
- "null"
178
- ]
150
+ "type": ["string", "null"]
179
151
  },
180
152
  "npm": {
181
- "type": [
182
- "string",
183
- "null"
184
- ],
153
+ "type": ["string", "null"],
185
154
  "description": "NPM registry token (npm.pkg.github.com or npmjs.com). Used by package publish flow."
186
155
  }
187
156
  }
@@ -189,10 +158,7 @@
189
158
  "tokenScripts": {
190
159
  "type": "object",
191
160
  "additionalProperties": {
192
- "type": [
193
- "string",
194
- "null"
195
- ]
161
+ "type": ["string", "null"]
196
162
  },
197
163
  "default": {},
198
164
  "description": "Maps service ids to user-owned token generation scripts (absolute paths, personal - never synced). Used by the Phase 0 token pre-flight: figma_mcp silent renewal reads the .figma-oauth.json next to tokenScripts.figma_mcp; the 'Regenerate now (script)' option runs the script itself."
@@ -222,9 +188,7 @@
222
188
  {
223
189
  "type": "object",
224
190
  "additionalProperties": false,
225
- "required": [
226
- "path"
227
- ],
191
+ "required": ["path"],
228
192
  "properties": {
229
193
  "path": {
230
194
  "type": "string"
@@ -254,9 +218,7 @@
254
218
  "items": {
255
219
  "type": "object",
256
220
  "additionalProperties": false,
257
- "required": [
258
- "branch"
259
- ],
221
+ "required": ["branch"],
260
222
  "properties": {
261
223
  "branch": {
262
224
  "type": "string"
@@ -314,9 +276,7 @@
314
276
  "items": {
315
277
  "type": "object",
316
278
  "additionalProperties": false,
317
- "required": [
318
- "repos"
319
- ],
279
+ "required": ["repos"],
320
280
  "properties": {
321
281
  "label": {
322
282
  "type": "string",
@@ -348,9 +308,7 @@
348
308
  "items": {
349
309
  "type": "object",
350
310
  "additionalProperties": false,
351
- "required": [
352
- "repoSet"
353
- ],
311
+ "required": ["repoSet"],
354
312
  "properties": {
355
313
  "repoSet": {
356
314
  "type": "array",
@@ -370,11 +328,7 @@
370
328
  },
371
329
  "platform": {
372
330
  "type": "string",
373
- "enum": [
374
- "ios",
375
- "android",
376
- "mixed"
377
- ]
331
+ "enum": ["ios", "android", "mixed"]
378
332
  },
379
333
  "hostScheme": {
380
334
  "type": "string",
@@ -406,11 +360,7 @@
406
360
  },
407
361
  "lastResult": {
408
362
  "type": "string",
409
- "enum": [
410
- "success",
411
- "failed",
412
- "skipped"
413
- ]
363
+ "enum": ["success", "failed", "skipped"]
414
364
  }
415
365
  }
416
366
  },
@@ -418,14 +368,11 @@
418
368
  },
419
369
  "serviceStatus": {
420
370
  "type": "object",
421
- "description": "v2.1.0+. Ephemeral per-service reachability cache. TTL 5 minutes (settings.serviceStatusCacheSeconds). Each service is independent \u2014 Jira may be reachable while Bitbucket is not.",
371
+ "description": "v2.1.0+. Ephemeral per-service reachability cache. TTL 5 minutes (settings.serviceStatusCacheSeconds). Each service is independent - Jira may be reachable while Bitbucket is not.",
422
372
  "additionalProperties": {
423
373
  "type": "object",
424
374
  "additionalProperties": false,
425
- "required": [
426
- "ok",
427
- "checkedAt"
428
- ],
375
+ "required": ["ok", "checkedAt"],
429
376
  "properties": {
430
377
  "ok": {
431
378
  "type": "boolean"
@@ -499,13 +446,38 @@
499
446
  }
500
447
  },
501
448
  "defaultJiraKey": {
502
- "type": "string",
503
- "description": "Default Jira project key used for placeholder replacement."
449
+ "type": ["string", "null"],
450
+ "description": "Default Jira project key used for placeholder replacement. null until /multi-agent:setup onboards a Jira project."
451
+ },
452
+ "modelFallback": {
453
+ "type": "object",
454
+ "additionalProperties": false,
455
+ "description": "Model-tier fallback policy. When the premium tier is unavailable (quota, dispatch error, or an expired premium window) the pipeline drops to fallbackModel instead of failing the phase.",
456
+ "properties": {
457
+ "enabled": {
458
+ "type": "boolean",
459
+ "default": true,
460
+ "description": "Master switch for tier fallback."
461
+ },
462
+ "premiumTierUntil": {
463
+ "type": ["string", "null"],
464
+ "description": "ISO date after which the premium tier is assumed gone. null = no expiry known."
465
+ },
466
+ "fallbackModel": {
467
+ "type": "string",
468
+ "description": "Model id used when the premium tier is unavailable."
469
+ },
470
+ "onDispatchError": {
471
+ "type": "boolean",
472
+ "default": true,
473
+ "description": "Also fall back when a dispatch call errors, not only on quota."
474
+ }
475
+ }
504
476
  },
505
477
  "hosts": {
506
478
  "type": "object",
507
479
  "additionalProperties": false,
508
- "description": "Corporate service hosts used by Jira / Confluence / Bitbucket / email-domain placeholders. Collected inline during Token Save Flow (Step 3.5) when a hosted-service token is added for the first time. Per-user, never committed \u2014 lives in ~/.claude/multi-agent-preferences.json only.",
480
+ "description": "Corporate service hosts used by Jira / Confluence / Bitbucket / email-domain placeholders. Collected inline during Token Save Flow (Step 3.5) when a hosted-service token is added for the first time. Per-user, never committed - lives in ~/.claude/multi-agent-preferences.json only.",
509
481
  "properties": {
510
482
  "jira": {
511
483
  "type": "string",
@@ -536,27 +508,27 @@
536
508
  "reportChannels": {
537
509
  "type": "object",
538
510
  "additionalProperties": false,
539
- "description": "v5.7+ \u2014 Phase 7 / /multi-agent:channels kanal se\u00e7imi default'lar\u0131. Multi-select men\u00fcde tick'li gelecek kanallar. Her kanal ba\u011f\u0131ms\u0131z boolean. Autopilot Phase 7'de ALWAYS pauses (30-min timeout) \u2014 bu de\u011ferler sadece men\u00fcn\u00fcn \u00f6nceden se\u00e7ili halini belirler.",
511
+ "description": "v5.7+ - Phase 7 / /multi-agent:channels kanal se\u00e7imi default'lar\u0131. Multi-select men\u00fcde tick'li gelecek kanallar. Her kanal ba\u011f\u0131ms\u0131z boolean. Autopilot Phase 7'de ALWAYS pauses (30-min timeout) - bu de\u011ferler sadece men\u00fcn\u00fcn \u00f6nceden se\u00e7ili halini belirler.",
540
512
  "properties": {
541
513
  "pr": {
542
514
  "type": "boolean",
543
515
  "default": true,
544
- "description": "PR description update (replace/append). Default ON \u2014 en yayg\u0131n kanal."
516
+ "description": "PR description update (replace/append). Default ON - en yayg\u0131n kanal."
545
517
  },
546
518
  "jira": {
547
519
  "type": "boolean",
548
520
  "default": true,
549
- "description": "Jira comment on linked issue. Default ON \u2014 task'a jiraId varsa tick'li gelir."
521
+ "description": "Jira comment on linked issue. Default ON - task'a jiraId varsa tick'li gelir."
550
522
  },
551
523
  "confluence": {
552
524
  "type": "boolean",
553
525
  "default": false,
554
- "description": "Confluence page creation. Default OFF \u2014 bir kez parent page se\u00e7ince LRU'dan \u00f6ner."
526
+ "description": "Confluence page creation. Default OFF - bir kez parent page se\u00e7ince LRU'dan \u00f6ner."
555
527
  },
556
528
  "wiki": {
557
529
  "type": "boolean",
558
530
  "default": false,
559
- "description": "Component wiki pages (Case A scope multi-select). Default OFF \u2014 taskType=component + figmaConfig.wiki.enabled gerekli, yoksa men\u00fcde greyed out."
531
+ "description": "Component wiki pages (Case A scope multi-select). Default OFF - taskType=component + figmaConfig.wiki.enabled gerekli, yoksa men\u00fcde greyed out."
560
532
  }
561
533
  },
562
534
  "default": {
@@ -569,7 +541,7 @@
569
541
  "reportContent": {
570
542
  "type": "object",
571
543
  "additionalProperties": false,
572
- "description": "v5.7+ \u2014 Phase 7 / /multi-agent:channels i\u00e7erik se\u00e7imi default'lar\u0131. Multi-select men\u00fcde tick'li gelecek content source'lar\u0131.",
544
+ "description": "v5.7+ - Phase 7 / /multi-agent:channels i\u00e7erik se\u00e7imi default'lar\u0131. Multi-select men\u00fcde tick'li gelecek content source'lar\u0131.",
573
545
  "properties": {
574
546
  "normalAnalysis": {
575
547
  "type": "boolean",
@@ -589,7 +561,7 @@
589
561
  "autoDiff": {
590
562
  "type": "boolean",
591
563
  "default": false,
592
- "description": "PR diff'ten auto-generate \u00f6zet (eski enrich behavior \u2014 root cause / solution / changed files / test scenarios). PR linked de\u011filse greyed out."
564
+ "description": "PR diff'ten auto-generate \u00f6zet (eski enrich behavior - root cause / solution / changed files / test scenarios). PR linked de\u011filse greyed out."
593
565
  },
594
566
  "manualNote": {
595
567
  "type": "boolean",
@@ -599,12 +571,12 @@
599
571
  "costSummary": {
600
572
  "type": "boolean",
601
573
  "default": false,
602
- "description": "v6.1.0+ \u2014 Per-phase token cost summary (phase name, tokens_in, tokens_out, est. USD). Source: phase-tracker.sh token tallies + optional OTel spans (MULTI_AGENT_OTEL_SPANS=1). Greyed out if tracker has no token data for the task. Opt-in \u2014 off by default so baseline PR body stays unchanged."
574
+ "description": "v6.1.0+ - Per-phase token cost summary (phase name, tokens_in, tokens_out, est. USD). Source: phase-tracker.sh token tallies + optional OTel spans (MULTI_AGENT_OTEL_SPANS=1). Greyed out if tracker has no token data for the task. Opt-in - off by default so baseline PR body stays unchanged."
603
575
  },
604
576
  "workSummary": {
605
577
  "type": "boolean",
606
578
  "default": false,
607
- "description": "v7.1.0+ \u2014 Executive 'Work Done' summary block. Distills the whole pipeline run into a single-screen section: task + branch + base + PR number, scope delivered (\u2705/\u23f3 per Phase 2 task), changed files with +/- counts (capped at 20 rows), review outcome (accepted/deferred/rejected counts + approved flag), and a one-line phase tick strip (0 Init \u2705 \u00b7 1 Analysis \u2705 \u00b7 \u2026). Source: `agent-state.json` + `phase-tracker.json` + `git diff --numstat` between `baseBranch`\u2026HEAD. Consumed by `render-work-summary.sh`. Greyed out if no state file exists for the task. Opt-in \u2014 off by default so baseline PR body stays unchanged."
579
+ "description": "v7.1.0+ - Executive 'Work Done' summary block. Distills the whole pipeline run into a single-screen section: task + branch + base + PR number, scope delivered (\u2705/\u23f3 per Phase 2 task), changed files with +/- counts (capped at 20 rows), review outcome (accepted/deferred/rejected counts + approved flag), and a one-line phase tick strip (0 Init \u2705 \u00b7 1 Analysis \u2705 \u00b7 ...). Source: `agent-state.json` + `phase-tracker.json` + `git diff --numstat` between `baseBranch`...HEAD. Consumed by `render-work-summary.sh`. Greyed out if no state file exists for the task. Opt-in - off by default so baseline PR body stays unchanged."
608
580
  }
609
581
  },
610
582
  "default": {
@@ -622,36 +594,22 @@
622
594
  "default": 1800,
623
595
  "minimum": 60,
624
596
  "maximum": 7200,
625
- "description": "v5.7+ \u2014 Phase 7'de autopilot always-pause men\u00fcs\u00fcnde kullan\u0131c\u0131 cevap vermezse session'\u0131 sonland\u0131rma s\u00fcresi (saniye). Default 1800 (30 dk). Timeout'ta external delivery aborted, internal capture (agent-log, telemetry, knowledge) yine \u00e7al\u0131\u015f\u0131r, session /multi-agent:resume ile devam ettirilebilir."
597
+ "description": "v5.7+ - Phase 7'de autopilot always-pause men\u00fcs\u00fcnde kullan\u0131c\u0131 cevap vermezse session'\u0131 sonland\u0131rma s\u00fcresi (saniye). Default 1800 (30 dk). Timeout'ta external delivery aborted, internal capture (agent-log, telemetry, knowledge) yine \u00e7al\u0131\u015f\u0131r, session /multi-agent:resume ile devam ettirilebilir."
626
598
  },
627
599
  "wikiScope": {
628
600
  "type": "array",
629
601
  "items": {
630
602
  "type": "string",
631
- "enum": [
632
- "main",
633
- "ios",
634
- "screenshots",
635
- "index"
636
- ]
603
+ "enum": ["main", "ios", "screenshots", "index"]
637
604
  },
638
- "default": [
639
- "main",
640
- "ios",
641
- "screenshots",
642
- "index"
643
- ],
644
- "description": "v5.7+ \u2014 Wiki Case A scope multi-select default'u. Component wiki dispatch'inde hangi artifact'lar yaz\u0131lacak: main (ana component sayfas\u0131), ios (iOS sub-page), screenshots (assets/ klas\u00f6r\u00fc), index (_Sidebar.md + ComponentImplementationStatus.md). Legacy wikiDefault=true \u2192 [main,ios,screenshots,index] migration; wikiDefault=false \u2192 [] (empty array = Wiki adapter Case B men\u00fcs\u00fcne d\u00fc\u015fer)."
605
+ "default": ["main", "ios", "screenshots", "index"],
606
+ "description": "v5.7+ - Wiki Case A scope multi-select default'u. Component wiki dispatch'inde hangi artifact'lar yaz\u0131lacak: main (ana component sayfas\u0131), ios (iOS sub-page), screenshots (assets/ klas\u00f6r\u00fc), index (_Sidebar.md + ComponentImplementationStatus.md). Legacy wikiDefault=true \u2192 [main,ios,screenshots,index] migration; wikiDefault=false \u2192 [] (empty array = Wiki adapter Case B men\u00fcs\u00fcne d\u00fc\u015fer)."
645
607
  },
646
608
  "autoJiraFromGithubIssue": {
647
609
  "type": "string",
648
- "enum": [
649
- "ask",
650
- "always",
651
- "never"
652
- ],
610
+ "enum": ["ask", "always", "never"],
653
611
  "default": "ask",
654
- "description": "Policy for the GitHub-issue Jira auto-create (WS-6 triad, Phase 0 Step 1). `ask` prompts the user when a GitHub issue has no Jira ID. `always` auto-creates silently (and patches the GitHub issue body with the link). `never` skips and uses the `feature/GH{issueNo}-kebab` branch. Autopilot treats `ask` as `always` \u2014 there is no interactive fallback when running unattended."
612
+ "description": "Policy for the GitHub-issue Jira auto-create (WS-6 triad, Phase 0 Step 1). `ask` prompts the user when a GitHub issue has no Jira ID. `always` auto-creates silently (and patches the GitHub issue body with the link). `never` skips and uses the `feature/GH{issueNo}-kebab` branch. Autopilot treats `ask` as `always` - there is no interactive fallback when running unattended."
655
613
  },
656
614
  "wikiToJiraComment": {
657
615
  "type": "boolean",
@@ -660,31 +618,21 @@
660
618
  },
661
619
  "promptLanguage": {
662
620
  "type": "string",
663
- "enum": [
664
- "en",
665
- "tr"
666
- ],
621
+ "enum": ["en", "tr"],
667
622
  "default": "en",
668
623
  "description": "Language used for user-facing INTERACTIVE pipeline copy: pickers (account, project, dev-context, base branch, branch name, maturity ack, channels), Phase 5 test prompt, Phase 6 local-checkout prompt, Phase 6 commit/PR confirmations, TaskCreate card subjects, and phase-banner.sh headers (`PHASE_LANG` resolves from this field via the `auto` sentinel). Canonical label table lives in `pipeline/skills/shared/multi-agent/SKILL.md`. External payloads stay English regardless of this setting: reviewer/triage system prompts, commit messages, PR titles/bodies, Jira comments, wiki content, agent-log.md payloads. Set via `/multi-agent:language prompt <en|tr>` or answered on first run by `/multi-agent:setup`."
669
624
  },
670
625
  "outputLanguage": {
671
626
  "type": "string",
672
- "enum": [
673
- "en",
674
- "tr"
675
- ],
627
+ "enum": ["en", "tr"],
676
628
  "default": "en",
677
629
  "description": "Language used for the assistant's NON-INTERACTIVE explanations, status updates, error messages, and pipeline-generated reports rendered to the user (e.g. `/multi-agent:help` body, `/multi-agent:status` table headers, summary blocks at the end of a run). Independent of `promptLanguage` so a user can have Turkish pickers but English summaries (or vice versa). External payloads (commits, PR/Jira/wiki) and skill-picker / confirmation / error UI exposed by the CLI host stay English regardless of this setting. Set via `/multi-agent:language output <en|tr>` or answered on first run by `/multi-agent:setup`."
678
630
  },
679
631
  "progressVerbosity": {
680
632
  "type": "string",
681
- "enum": [
682
- "quiet",
683
- "normal",
684
- "verbose"
685
- ],
633
+ "enum": ["quiet", "normal", "verbose"],
686
634
  "default": "normal",
687
- "description": "Verbosity of the live progress-line contract (`refs/progress-contract.md`). `quiet` shows only phase banners and user prompts (CI-friendly). `normal` shows banners + the canonical action set per phase \u2014 recommended for interactive use. `verbose` shows sub-agent internal actions, file-level reads, schema validations, retry internals \u2014 forced automatically when `mode: autopilot` is set in agent state so the run remains audit-grade when the user isn't watching live."
635
+ "description": "Verbosity of the live progress-line contract (`refs/progress-contract.md`). `quiet` shows only phase banners and user prompts (CI-friendly). `normal` shows banners + the canonical action set per phase - recommended for interactive use. `verbose` shows sub-agent internal actions, file-level reads, schema validations, retry internals - forced automatically when `mode: autopilot` is set in agent state so the run remains audit-grade when the user isn't watching live."
688
636
  },
689
637
  "triageCrossCheck": {
690
638
  "type": "object",
@@ -705,11 +653,9 @@
705
653
  },
706
654
  "model": {
707
655
  "type": "string",
708
- "enum": [
709
- "sonnet"
710
- ],
656
+ "enum": ["sonnet"],
711
657
  "default": "sonnet",
712
- "description": "Cross-check model. Locked to Sonnet \u2014 Opus would just agree with Opus."
658
+ "description": "Cross-check model. Locked to Sonnet - Opus would just agree with Opus."
713
659
  },
714
660
  "blockOnDisagreement": {
715
661
  "type": "boolean",
@@ -721,7 +667,7 @@
721
667
  "reviewDisagreementRound": {
722
668
  "type": "boolean",
723
669
  "default": false,
724
- "description": "v6.1.0+ \u2014 Phase 4 Step 2.5 rebuttal round. When reviewers disagree (mixed blocker/approved verdict), each reviewer is re-prompted with the others' opposing arguments for one additional round before triage. Lifts signal quality on ambiguous findings at ~1\u00d7 Step 2 token cost. Off by default \u2014 flip for security-critical or release-branch reviews."
670
+ "description": "v6.1.0+ - Phase 4 Step 2.5 rebuttal round. When reviewers disagree (mixed blocker/approved verdict), each reviewer is re-prompted with the others' opposing arguments for one additional round before triage. Lifts signal quality on ambiguous findings at ~1\u00d7 Step 2 token cost. Off by default - flip for security-critical or release-branch reviews."
725
671
  },
726
672
  "updateCheck": {
727
673
  "type": "object",
@@ -766,10 +712,7 @@
766
712
  },
767
713
  "model": {
768
714
  "type": "string",
769
- "enum": [
770
- "sonnet",
771
- "opus"
772
- ],
715
+ "enum": ["sonnet", "opus"],
773
716
  "default": "sonnet",
774
717
  "description": "Verifier agent model. Writing a minimal repro test is mechanical work; Sonnet is the cost-sane default."
775
718
  },
@@ -984,7 +927,7 @@
984
927
  "devCritic": {
985
928
  "type": "object",
986
929
  "additionalProperties": false,
987
- "description": "v8.6+ \u2014 Phase 3.5 evaluator-optimizer. After the Dev generator's last edit and BEFORE Phase 4 reviewers, dispatch agents/dev-critic.md (Sonnet by default) to run deterministic gates (build/lint/test/secrets) + the platform checklist (rules/*.md). Max 2 critic iterations, then escalate. Catches gate failures and checklist violations that would otherwise burn 2\u20133 Phase 4 reviewer calls + Opus triage. Off by default \u2014 introduces 1\u00d7 Sonnet call per Dev iteration; flip on for feature work, security-touching paths, or multi-file refactors. Source: Anthropic 'Building Effective Agents' (Dec 2024) evaluator-optimizer pattern.",
930
+ "description": "v8.6+ - Phase 3.5 evaluator-optimizer. After the Dev generator's last edit and BEFORE Phase 4 reviewers, dispatch agents/dev-critic.md (Sonnet by default) to run deterministic gates (build/lint/test/secrets) + the platform checklist (rules/*.md). Max 2 critic iterations, then escalate. Catches gate failures and checklist violations that would otherwise burn 2-3 Phase 4 reviewer calls + Opus triage. Off by default - introduces 1\u00d7 Sonnet call per Dev iteration; flip on for feature work, security-touching paths, or multi-file refactors. Source: Anthropic 'Building Effective Agents' (Dec 2024) evaluator-optimizer pattern.",
988
931
  "properties": {
989
932
  "enabled": {
990
933
  "type": "boolean",
@@ -996,13 +939,13 @@
996
939
  "minimum": 1,
997
940
  "maximum": 3,
998
941
  "default": 2,
999
- "description": "Critic loop cap. Round 1 = full pass. Round 2 = re-check round 1 failures only. Round 3 NOT recommended \u2014 escalate to user (interactive) or proceed with logged failure (autopilot)."
942
+ "description": "Critic loop cap. Round 1 = full pass. Round 2 = re-check round 1 failures only. Round 3 NOT recommended - escalate to user (interactive) or proceed with logged failure (autopilot)."
1000
943
  },
1001
944
  "model": {
1002
945
  "type": "string",
1003
946
  "enum": ["sonnet", "opus", "haiku"],
1004
947
  "default": "sonnet",
1005
- "description": "Critic model. Sonnet is the cost/quality default. Opus override only when diff > 500 LOC or touches security-critical paths. Haiku is too brittle for checklist reasoning \u2014 use only for trivial verification tasks."
948
+ "description": "Critic model. Sonnet is the cost/quality default. Opus override only when diff > 500 LOC or touches security-critical paths. Haiku is too brittle for checklist reasoning - use only for trivial verification tasks."
1006
949
  },
1007
950
  "minDiffLoc": {
1008
951
  "type": "integer",
@@ -1015,7 +958,7 @@
1015
958
  "diffRiskAdvisory": {
1016
959
  "type": "boolean",
1017
960
  "default": true,
1018
- "description": "v8.3+ \u2014 Phase 4 Step 1.75 advisory diff risk scoring. When enabled, `pipeline/scripts/diff-risk-score.mjs` runs before reviewer dispatch and the top-N risk-ranked files are injected into each reviewer's prompt as a priority hint (security paths, public API surfaces, untested source changes, schema migrations). Heuristic, deterministic, no LLM cost. Default ON \u2014 the run is sub-second and never gates the pipeline. Flip to false to skip the script and the prompt injection entirely."
961
+ "description": "v8.3+ - Phase 4 Step 1.75 advisory diff risk scoring. When enabled, `pipeline/scripts/diff-risk-score.mjs` runs before reviewer dispatch and the top-N risk-ranked files are injected into each reviewer's prompt as a priority hint (security paths, public API surfaces, untested source changes, schema migrations). Heuristic, deterministic, no LLM cost. Default ON - the run is sub-second and never gates the pipeline. Flip to false to skip the script and the prompt injection entirely."
1019
962
  },
1020
963
  "priorArtEnrichment": {
1021
964
  "type": "object",
@@ -1084,23 +1027,23 @@
1084
1027
  "testGap": {
1085
1028
  "type": "object",
1086
1029
  "additionalProperties": false,
1087
- "description": "v8.3+ \u2014 Phase 5 Step 0 advisory test-gap detector. Walks the diff for newly added public symbols and reports those without a paired test (or test method covering them). Heuristic, deterministic, no LLM cost.",
1030
+ "description": "v8.3+ - Phase 5 Step 0 advisory test-gap detector. Walks the diff for newly added public symbols and reports those without a paired test (or test method covering them). Heuristic, deterministic, no LLM cost.",
1088
1031
  "properties": {
1089
1032
  "enabled": {
1090
1033
  "type": "boolean",
1091
1034
  "default": true,
1092
- "description": "Master switch. Default ON \u2014 the scan is sub-second."
1035
+ "description": "Master switch. Default ON - the scan is sub-second."
1093
1036
  },
1094
1037
  "scanTree": {
1095
1038
  "type": "boolean",
1096
1039
  "default": false,
1097
- "description": "When true, also scan the repo tree (not just the diff) for existing tests that already mention the symbol \u2014 catches gaps that are technically covered by older tests outside the current diff. Slower but more accurate. Off by default \u2014 diff-only scan is sufficient for the common case."
1040
+ "description": "When true, also scan the repo tree (not just the diff) for existing tests that already mention the symbol - catches gaps that are technically covered by older tests outside the current diff. Slower but more accurate. Off by default - diff-only scan is sufficient for the common case."
1098
1041
  },
1099
1042
  "blockingThreshold": {
1100
1043
  "type": ["integer", "null"],
1101
1044
  "minimum": 1,
1102
1045
  "default": null,
1103
- "description": "If set, gaps where `important + blocking` count exceeds the threshold are treated as a Phase 4 rework finding (loops back to Phase 3). null = advisory only \u2014 Phase 5 prints the report but never gates."
1046
+ "description": "If set, gaps where `important + blocking` count exceeds the threshold are treated as a Phase 4 rework finding (loops back to Phase 3). null = advisory only - Phase 5 prints the report but never gates."
1104
1047
  },
1105
1048
  "promoteSeverity": {
1106
1049
  "type": "boolean",
@@ -1118,17 +1061,105 @@
1118
1061
  "perRepoMemory": {
1119
1062
  "type": "boolean",
1120
1063
  "default": false,
1121
- "description": "v6.2.0+ \u2014 Per-repo file-system memory layer. When enabled, Phase 0 reads `$PROJECT_ROOT/.multi-agent/memory/MEMORY.md` (if present) and injects it into the pipeline context, and Phase 7 dispatches a scoped synthesis subagent that may write new memory files to the same directory. Categories: user / feedback / project / reference (same taxonomy as the conversation-level auto-memory). Memory is local to each repo \u2014 never synced to remote, never committed to git (pipeline installer adds `.multi-agent/memory/` to `.gitignore`). Off by default \u2014 flip when working on a repo long enough that accumulated project context starts paying for itself."
1064
+ "description": "v6.2.0+ - Per-repo file-system memory layer. When enabled, Phase 0 reads `$PROJECT_ROOT/.multi-agent/memory/MEMORY.md` (if present) and injects it into the pipeline context, and Phase 7 dispatches a scoped synthesis subagent that may write new memory files to the same directory. Categories: user / feedback / project / reference (same taxonomy as the conversation-level auto-memory). Memory is local to each repo - never synced to remote, never committed to git (pipeline installer adds `.multi-agent/memory/` to `.gitignore`). Off by default - flip when working on a repo long enough that accumulated project context starts paying for itself."
1122
1065
  },
1123
1066
  "autopilotSafetyGate": {
1124
1067
  "type": "boolean",
1125
1068
  "default": true,
1126
- "description": "v7.0.0+ \u2014 Phase 2 autopilot safety classifier. Before autopilot mode consumes the user's approval skip, run `classify-plan-safety.mjs` over the approved plan. If the heuristic score \u2265 50 (e.g. >15 files touched, or security-path touch, or delete-without-test, or schema migration) inject a ONE-TIME pause asking for explicit manual approval \u2014 even in autopilot. Default ON because the risk of skipping this gate is asymmetric: a pause on a high-blast-radius plan costs seconds; a silent auto-merge of a bad one costs hours of rollback. Flip to `false` only for tightly-scoped autopilot workflows (e.g. batch figma component iteration) where the task class is known-safe."
1069
+ "description": "v7.0.0+ - Phase 2 autopilot safety classifier. Before autopilot mode consumes the user's approval skip, run `classify-plan-safety.mjs` over the approved plan. If the heuristic score \u2265 50 (e.g. >15 files touched, or security-path touch, or delete-without-test, or schema migration) inject a ONE-TIME pause asking for explicit manual approval - even in autopilot. Default ON because the risk of skipping this gate is asymmetric: a pause on a high-blast-radius plan costs seconds; a silent auto-merge of a bad one costs hours of rollback. Flip to `false` only for tightly-scoped autopilot workflows (e.g. batch figma component iteration) where the task class is known-safe."
1127
1070
  },
1128
1071
  "dynamicSkillLoading": {
1129
1072
  "type": "boolean",
1130
1073
  "default": false,
1131
- "description": "v7.0.0+ \u2014 Dynamic trigger-based skill loading. When enabled, the orchestrator reads `~/.claude/skills/.skills-index.json` after Phase 1 analysis and injects only the top-N matched skills into subagent prompts (via `match-skills.mjs`), instead of relying on eager-loaded SKILL.md bodies. Large token win on small tasks; no visible behavior change on big ones where many skills match. Requires either a full install (index is always shipped) or the `install.js --index-only` mode for users who want skill bodies fetched on demand. Off by default in v7.0 \u2014 flip to `true` to opt in; a future v7.x may flip the default once enough telemetry confirms no regression."
1074
+ "description": "v7.0.0+ - Dynamic trigger-based skill loading. When enabled, the orchestrator reads `~/.claude/skills/.skills-index.json` after Phase 1 analysis and injects only the top-N matched skills into subagent prompts (via `match-skills.mjs`), instead of relying on eager-loaded SKILL.md bodies. Large token win on small tasks; no visible behavior change on big ones where many skills match. Requires either a full install (index is always shipped) or the `install.js --index-only` mode for users who want skill bodies fetched on demand. Off by default in v7.0 - flip to `true` to opt in; a future v7.x may flip the default once enough telemetry confirms no regression."
1075
+ },
1076
+ "derivedSkillSources": {
1077
+ "type": "array",
1078
+ "description": "v11.3.0+. Skills/components in a project that were derived from an upstream marketplace plugin. `/multi-agent:refactor` Step 0b compares each entry's `derivedFromVersion` against the installed upstream version and reports drift (plan band D). Local-only: it may name private marketplaces, so it is never synced into the public repo. Empty array = the drift step is skipped.",
1079
+ "items": {
1080
+ "type": "object",
1081
+ "additionalProperties": false,
1082
+ "required": ["label", "localPath", "upstreamPlugin", "derivedFromVersion"],
1083
+ "properties": {
1084
+ "label": {
1085
+ "type": "string",
1086
+ "description": "Human name for this derivation, shown in the drift table."
1087
+ },
1088
+ "localPath": {
1089
+ "type": "string",
1090
+ "description": "Repo-relative directory holding our derived copy."
1091
+ },
1092
+ "upstreamMarketplace": {
1093
+ "type": "string",
1094
+ "description": "Installed marketplace name, resolved under ~/.claude/plugins/cache/<marketplace>/."
1095
+ },
1096
+ "upstreamPlugin": {
1097
+ "type": "string",
1098
+ "description": "Upstream plugin name inside that marketplace."
1099
+ },
1100
+ "upstreamSkills": {
1101
+ "type": "array",
1102
+ "items": { "type": "string" },
1103
+ "description": "The upstream skill names we took."
1104
+ },
1105
+ "derivedFromVersion": {
1106
+ "type": "string",
1107
+ "description": "Upstream version we last synced from, read from the manifest named by `upstreamVersionSource`. Bumped after a drift port is applied."
1108
+ },
1109
+ "upstreamVersionSource": {
1110
+ "enum": ["marketplace.json", "plugin.json"],
1111
+ "default": "marketplace.json",
1112
+ "description": "Which upstream manifest carries the authoritative version. Defaults to marketplace.json because that is what a marketplace consumer resolves; some upstreams keep plugin.json deliberately unused, so reading it silently records a version nobody ships. Recording from the wrong manifest is how an entry here sat at 0.7.0 while the marketplace said 0.6.0."
1113
+ },
1114
+ "upstreamLocalClone": {
1115
+ "type": "string",
1116
+ "description": "Working copy of the upstream repository, checked before the plugin cache. The cache under ~/.claude/plugins/cache is only as fresh as the last `claude marketplace update`, so it is a mirror and never the authority. A private upstream may also be unreachable over the API from the active account, in which case this clone is the only source."
1117
+ },
1118
+ "upstreamRepoUrl": {
1119
+ "type": "string",
1120
+ "description": "Used when neither a local clone nor the installed marketplace is available (WebFetch / gh fallback)."
1121
+ }
1122
+ }
1123
+ }
1124
+ },
1125
+ "devToolkit": {
1126
+ "type": "object",
1127
+ "additionalProperties": false,
1128
+ "description": "v12.6.0+. The companion MCP server that serves the pipeline's device and browser tools (dev-toolkit-mcp). Two commands read this: `/multi-agent:refactor` Step 0c researches current MCP practice and audits that repo against it (plan band E), and `/multi-agent:sync` Step 3d ships it when it moved (gates, commit, publish). When absent, both commands fall back to auto-detecting the repo from the `mcpServers` registration in ~/.claude.json / ~/.claude/settings.json, and skip silently when that fails. Never a hardcoded path.",
1129
+ "properties": {
1130
+ "enabled": {
1131
+ "type": "boolean",
1132
+ "default": true,
1133
+ "description": "Set false to skip both the refactor band-E research and the sync ship step."
1134
+ },
1135
+ "label": {
1136
+ "type": "string",
1137
+ "description": "Human name used in reports."
1138
+ },
1139
+ "localPath": {
1140
+ "type": "string",
1141
+ "description": "Working copy of the companion repo. `$HOME` and `~` are expanded. When omitted, resolved from the MCP registration (dirname of the stdio server's script)."
1142
+ },
1143
+ "mcpServerName": {
1144
+ "type": "string",
1145
+ "default": "dev-toolkit",
1146
+ "description": "Registered MCP server name, used for the auto-detect fallback and for telling the user whether a restart or a reinstall is needed after a publish."
1147
+ },
1148
+ "packageName": {
1149
+ "type": "string",
1150
+ "description": "Published package name, e.g. @<scope>/<package>. Read from the repo's package.json when omitted."
1151
+ },
1152
+ "registry": {
1153
+ "type": "string",
1154
+ "enum": ["github-packages", "npmjs", "none"],
1155
+ "default": "github-packages",
1156
+ "description": "Publish target for Step 3d. `none` means commit + push only, never publish. The concrete URL comes from the repo's publishConfig; the token comes from the `npm` logical Keychain key through a throwaway --userconfig."
1157
+ },
1158
+ "repoUrl": {
1159
+ "type": "string",
1160
+ "description": "https remote, used in reports and when the working copy has to be cloned by the user."
1161
+ }
1162
+ }
1132
1163
  },
1133
1164
  "recentAccounts": {
1134
1165
  "type": "array",
@@ -1136,9 +1167,7 @@
1136
1167
  "items": {
1137
1168
  "type": "object",
1138
1169
  "additionalProperties": false,
1139
- "required": [
1140
- "id"
1141
- ],
1170
+ "required": ["id"],
1142
1171
  "properties": {
1143
1172
  "id": {
1144
1173
  "type": "string",
@@ -1162,13 +1191,11 @@
1162
1191
  },
1163
1192
  "accounts": {
1164
1193
  "type": "array",
1165
- "description": "v7.4.0+. Per-account overrides \u2014 host, label, default platform. Resolved by account-resolver.sh by matching `id` (e.g. my-account). When unset, hosts fall back to global.hosts.{jira,bitbucket}.",
1194
+ "description": "v7.4.0+. Per-account overrides - host, label, default platform. Resolved by account-resolver.sh by matching `id` (e.g. my-account). When unset, hosts fall back to global.hosts.{jira,bitbucket}.",
1166
1195
  "items": {
1167
1196
  "type": "object",
1168
1197
  "additionalProperties": false,
1169
- "required": [
1170
- "id"
1171
- ],
1198
+ "required": ["id"],
1172
1199
  "properties": {
1173
1200
  "id": {
1174
1201
  "type": "string",
@@ -1191,12 +1218,7 @@
1191
1218
  },
1192
1219
  "defaultProvider": {
1193
1220
  "type": "string",
1194
- "enum": [
1195
- "github",
1196
- "bitbucket",
1197
- "gitlab",
1198
- "generic-git"
1199
- ]
1221
+ "enum": ["github", "bitbucket", "gitlab", "generic-git"]
1200
1222
  }
1201
1223
  }
1202
1224
  },
@@ -1217,8 +1239,8 @@
1217
1239
  "items": {
1218
1240
  "type": "string"
1219
1241
  },
1220
- "maxItems": 10,
1221
- "description": "Bitbucket/generic default reviewers (usernames)."
1242
+ "maxItems": 40,
1243
+ "description": "Bitbucket/generic default reviewers (usernames). Real corporate reviewer groups run well past ten members."
1222
1244
  },
1223
1245
  "githubDefaultReviewers": {
1224
1246
  "type": "array",
@@ -1226,14 +1248,11 @@
1226
1248
  "type": "string"
1227
1249
  },
1228
1250
  "maxItems": 10,
1229
- "description": "GitHub fallback reviewers \u2014 @user or org/team slug. Used only when no CODEOWNERS / branch protection surfaces reviewers."
1251
+ "description": "GitHub fallback reviewers - @user or org/team slug. Used only when no CODEOWNERS / branch protection surfaces reviewers."
1230
1252
  },
1231
1253
  "defaultPrMode": {
1232
1254
  "type": "string",
1233
- "enum": [
1234
- "draft",
1235
- "ready"
1236
- ],
1255
+ "enum": ["draft", "ready"],
1237
1256
  "description": "Last-used draft/ready choice, shown as the default on next prompt."
1238
1257
  },
1239
1258
  "baseBranch": {
@@ -1272,12 +1291,7 @@
1272
1291
  },
1273
1292
  "remoteType": {
1274
1293
  "type": "string",
1275
- "enum": [
1276
- "bitbucket",
1277
- "github",
1278
- "gitlab",
1279
- "generic-git"
1280
- ],
1294
+ "enum": ["bitbucket", "github", "gitlab", "generic-git"],
1281
1295
  "description": "Hint used when repo URL doesn't make platform obvious."
1282
1296
  },
1283
1297
  "taskCount": {
@@ -1290,6 +1304,10 @@
1290
1304
  "format": "date-time",
1291
1305
  "description": "Timestamp of last task start against this project."
1292
1306
  },
1307
+ "componentDevWorkflow": {
1308
+ "type": "boolean",
1309
+ "description": "Project follows the component (Configuration / View / Modifiers) development workflow, so Phase 3 dispatches the component skills instead of the standard TDD flow."
1310
+ },
1293
1311
  "figmaConfigPath": {
1294
1312
  "type": "string",
1295
1313
  "description": "Path to per-project figma-config.json (for Figma pipeline projects)."