@mmerterden/multi-agent-pipeline 17.5.1 → 18.0.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 (134) hide show
  1. package/CHANGELOG.md +276 -0
  2. package/README.md +59 -1
  3. package/README.tr.md +57 -0
  4. package/docs/adr/0011-dormant-ci.md +25 -1
  5. package/docs/features.md +24 -0
  6. package/docs/server-readiness.md +188 -0
  7. package/docs/token-budget-history.md +1 -1
  8. package/index.js +16 -1
  9. package/install/_common.mjs +42 -17
  10. package/install/_dev-only-files.mjs +8 -0
  11. package/install/_unattended-profile.mjs +113 -0
  12. package/install/index.mjs +48 -0
  13. package/install/templates/claude-hooks.json +13 -1
  14. package/manifest.json +1049 -0
  15. package/package.json +5 -2
  16. package/pipeline/commands/multi-agent/SKILL.md +1 -1
  17. package/pipeline/commands/multi-agent/feedback/SKILL.md +7 -1
  18. package/pipeline/commands/multi-agent/graph/SKILL.md +1 -1
  19. package/pipeline/commands/multi-agent/issue/SKILL.md +13 -1
  20. package/pipeline/commands/multi-agent/jira/SKILL.md +13 -1
  21. package/pipeline/commands/multi-agent/resume/SKILL.md +16 -1
  22. package/pipeline/commands/multi-agent/setup/SKILL.md +14 -16
  23. package/pipeline/commands/multi-agent/status/SKILL.md +52 -21
  24. package/pipeline/commands/multi-agent/update/SKILL.md +13 -56
  25. package/pipeline/lib/_jira-auth.sh +8 -0
  26. package/pipeline/lib/analysis-jira-write.sh +32 -0
  27. package/pipeline/lib/ask-choice.sh +13 -2
  28. package/pipeline/lib/autopilot-state.sh +8 -0
  29. package/pipeline/lib/fatal.mjs +129 -0
  30. package/pipeline/lib/figma-mcp-refresh.sh +18 -0
  31. package/pipeline/lib/figma-screenshot.sh +18 -0
  32. package/pipeline/lib/invoked-directly.mjs +43 -0
  33. package/pipeline/lib/jira-publish.sh +42 -0
  34. package/pipeline/lib/md2confluence-v3.py +47 -0
  35. package/pipeline/lib/outbound-gate.mjs +175 -0
  36. package/pipeline/lib/plan-todos.sh +27 -6
  37. package/pipeline/lib/post-pr-review.sh +77 -8
  38. package/pipeline/lib/repo-hygiene.sh +8 -3
  39. package/pipeline/lib/require-jq.sh +40 -0
  40. package/pipeline/lib/run-paths.sh +335 -0
  41. package/pipeline/multi-agent-refs/features/autopilot-circuit-breaker.md +70 -0
  42. package/pipeline/multi-agent-refs/features/code-graph.md +20 -0
  43. package/pipeline/multi-agent-refs/features/cost-analysis.md +93 -0
  44. package/pipeline/multi-agent-refs/features/doctor.md +68 -0
  45. package/pipeline/multi-agent-refs/features/maturity-followup.md +166 -0
  46. package/pipeline/multi-agent-refs/features/package-manager.md +80 -0
  47. package/pipeline/multi-agent-refs/features/usage-reporting.md +79 -0
  48. package/pipeline/multi-agent-refs/features/verify-by-test.md +1 -1
  49. package/pipeline/multi-agent-refs/features/verify.md +83 -0
  50. package/pipeline/multi-agent-refs/phases/operations.md +13 -2
  51. package/pipeline/multi-agent-refs/phases/phase-0-init.md +6 -3
  52. package/pipeline/multi-agent-refs/phases/phase-3-dev.md +8 -2
  53. package/pipeline/multi-agent-refs/phases/phase-4-review.md +1 -1
  54. package/pipeline/multi-agent-refs/picker-contract.md +1 -1
  55. package/pipeline/multi-agent-refs/unattended-contract.md +129 -0
  56. package/pipeline/preferences-template.json +1 -1
  57. package/pipeline/schemas/agent-state.schema.json +122 -11
  58. package/pipeline/schemas/prefs.schema.json +35 -0
  59. package/pipeline/schemas/token-budget.json +2 -2
  60. package/pipeline/scripts/_run-paths.mjs +372 -0
  61. package/pipeline/scripts/aggregate-metrics.mjs +64 -64
  62. package/pipeline/scripts/autopilot-arming.mjs +2 -1
  63. package/pipeline/scripts/autopilot-intake.mjs +2 -1
  64. package/pipeline/scripts/autopilot-runner.mjs +206 -2
  65. package/pipeline/scripts/build-references.mjs +2 -1
  66. package/pipeline/scripts/build-stack-plugins.mjs +10 -2
  67. package/pipeline/scripts/capture-evidence.sh +7 -2
  68. package/pipeline/scripts/classify-plan-safety.mjs +2 -1
  69. package/pipeline/scripts/cost-analyze.mjs +600 -0
  70. package/pipeline/scripts/cost-budget-check.mjs +4 -12
  71. package/pipeline/scripts/council-view.mjs +2 -1
  72. package/pipeline/scripts/crush-json.mjs +2 -1
  73. package/pipeline/scripts/diff-explain.mjs +6 -9
  74. package/pipeline/scripts/diff-risk-score.mjs +2 -1
  75. package/pipeline/scripts/doctor.mjs +203 -4
  76. package/pipeline/scripts/evidence-gate.mjs +9 -3
  77. package/pipeline/scripts/feedback-send.mjs +13 -3
  78. package/pipeline/scripts/gc-abandoned.sh +29 -13
  79. package/pipeline/scripts/gc-worktrees.sh +11 -4
  80. package/pipeline/scripts/github-ssh-setup.sh +64 -7
  81. package/pipeline/scripts/graph-mermaid.mjs +4 -2
  82. package/pipeline/scripts/graph-report.mjs +155 -1
  83. package/pipeline/scripts/keychain-save.sh +101 -30
  84. package/pipeline/scripts/learn-from-transcripts.mjs +2 -1
  85. package/pipeline/scripts/learning-curve.mjs +34 -29
  86. package/pipeline/scripts/make-manifest.mjs +199 -0
  87. package/pipeline/scripts/maturity-followup.mjs +294 -0
  88. package/pipeline/scripts/migrate-prefs.mjs +2 -1
  89. package/pipeline/scripts/migrate-state.mjs +94 -4
  90. package/pipeline/scripts/package-manager.mjs +310 -0
  91. package/pipeline/scripts/phase-banner.sh +6 -2
  92. package/pipeline/scripts/phase-tracker.sh +41 -3
  93. package/pipeline/scripts/plan-coverage-gate.mjs +6 -2
  94. package/pipeline/scripts/pre-commit-check.sh +7 -0
  95. package/pipeline/scripts/pre-push-check.sh +7 -0
  96. package/pipeline/scripts/purge.sh +23 -6
  97. package/pipeline/scripts/render-agent-log-cost.sh +9 -2
  98. package/pipeline/scripts/render-cost-summary.sh +9 -2
  99. package/pipeline/scripts/render-work-summary.sh +11 -4
  100. package/pipeline/scripts/review-file-filter.mjs +4 -2
  101. package/pipeline/scripts/review-scope.mjs +2 -1
  102. package/pipeline/scripts/routine-registry.mjs +2 -1
  103. package/pipeline/scripts/run-aggregator.mjs +13 -14
  104. package/pipeline/scripts/run-metrics.mjs +3 -1
  105. package/pipeline/scripts/runs-index.mjs +343 -0
  106. package/pipeline/scripts/scorecard-snapshot.mjs +178 -0
  107. package/pipeline/scripts/search-logs.sh +18 -0
  108. package/pipeline/scripts/test-gap-scan.mjs +2 -1
  109. package/pipeline/scripts/test-integrity-gate.mjs +2 -1
  110. package/pipeline/scripts/update-issue-progress.sh +56 -7
  111. package/pipeline/scripts/usage-register.mjs +271 -0
  112. package/pipeline/scripts/usage-report.mjs +14 -3
  113. package/pipeline/scripts/validate-analysis-doc.mjs +2 -1
  114. package/pipeline/scripts/validate-code-graph.mjs +6 -3
  115. package/pipeline/scripts/validate-complaint-doc.mjs +2 -1
  116. package/pipeline/scripts/validate-diff-risk.mjs +6 -3
  117. package/pipeline/scripts/validate-test-gap.mjs +6 -3
  118. package/pipeline/scripts/validate-triage.mjs +3 -1
  119. package/pipeline/scripts/verify-citations.mjs +4 -2
  120. package/pipeline/scripts/verify.mjs +327 -0
  121. package/pipeline/scripts/worktree-finalize.sh +13 -4
  122. package/pipeline/scripts/write-state.mjs +154 -15
  123. package/pipeline/skills/.skill-manifest.json +6 -6
  124. package/pipeline/skills/.skills-index.json +56 -1
  125. package/pipeline/skills/shared/README.md +8 -3
  126. package/pipeline/skills/shared/core/multi-agent-issue/SKILL.md +14 -0
  127. package/pipeline/skills/shared/core/multi-agent-jira/SKILL.md +14 -0
  128. package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +13 -0
  129. package/pipeline/skills/shared/core/multi-agent-status/SKILL.md +33 -9
  130. package/pipeline/skills/shared/core/multi-agent-update/SKILL.md +6 -0
  131. package/pipeline/skills/shared/external/macos-spm-app-packaging/assets/templates/package_app.sh +4 -1
  132. package/pipeline/skills/shared/external/macos-spm-app-packaging/assets/templates/setup_dev_signing.sh +4 -1
  133. package/pipeline/skills/shared/external/macos-spm-app-packaging/assets/templates/sign-and-notarize.sh +2 -1
  134. package/pipeline/skills/skills-index.md +6 -1
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
- "generatedAt": "2026-09-15T12:49:28Z",
3
+ "generatedAt": "2026-09-17T11:16:58Z",
4
4
  "skillCount": 212,
5
5
  "entries": [
6
6
  {
@@ -93,11 +93,11 @@
93
93
  },
94
94
  {
95
95
  "path": "shared/core/multi-agent-issue/SKILL.md",
96
- "sha256": "aec8737af368b01c7e3133521c711861456c18b07e3829425e5c0485a0181051"
96
+ "sha256": "8f8918c8a0f5d6431892e65737c685bb47a62379d023ac7c760a8a605d3eb0a4"
97
97
  },
98
98
  {
99
99
  "path": "shared/core/multi-agent-jira/SKILL.md",
100
- "sha256": "0bd2046752f106f2a5f2974eab61a9618263153230bfbd9b0e59024fc5bff0a0"
100
+ "sha256": "1ceb984239217060ab9fa3e7964270f9c6245bef0a3cac429bc329548d91e617"
101
101
  },
102
102
  {
103
103
  "path": "shared/core/multi-agent-kill/SKILL.md",
@@ -181,7 +181,7 @@
181
181
  },
182
182
  {
183
183
  "path": "shared/core/multi-agent-setup/SKILL.md",
184
- "sha256": "40dc72793cd6bd1054d6203275fbc9f4ecdd6d8dc5de8f2437e7f670f4c5c646"
184
+ "sha256": "d475f14de5db9ffe0c8ae5b3b83374d5f82a41c29da5271c7399d151e6bd4c1d"
185
185
  },
186
186
  {
187
187
  "path": "shared/core/multi-agent-stack/SKILL.md",
@@ -189,7 +189,7 @@
189
189
  },
190
190
  {
191
191
  "path": "shared/core/multi-agent-status/SKILL.md",
192
- "sha256": "436d1716ce5fc4977dadfce8a85b09877f93c626953739a7ad70eefbbcd25869"
192
+ "sha256": "3305fcce80bdad9ea0032e382276c5692a197749d9c012910daaea7a332bce0e"
193
193
  },
194
194
  {
195
195
  "path": "shared/core/multi-agent-steer/SKILL.md",
@@ -233,7 +233,7 @@
233
233
  },
234
234
  {
235
235
  "path": "shared/core/multi-agent-update/SKILL.md",
236
- "sha256": "e93e913473cb5d3a5810b30f26011a0d18754bed983890f4261b87972526d94a"
236
+ "sha256": "8a0b089ea5c0d81813dc936d8b9d012f956e6381f71e025ca8878e538a8e9303"
237
237
  },
238
238
  {
239
239
  "path": "shared/core/multi-agent/SKILL.md",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
- "skillCount": 207,
3
+ "skillCount": 212,
4
4
  "entries": [
5
5
  {
6
6
  "name": "accessibility-compliance-accessibility-audit",
@@ -959,6 +959,17 @@
959
959
  "triggerPaths": [],
960
960
  "relativePath": "shared/core/multi-agent-analysis/SKILL.md"
961
961
  },
962
+ {
963
+ "name": "multi-agent-analysis-jira",
964
+ "description": "Turn a rendered analysis document into a Jira story tree: derive stories from the document's own rule ids, check coverage both ways, preview every byte, then create only what does not already exist. Use when an analysis is final and the work needs tickets.",
965
+ "platform": null,
966
+ "group": "core",
967
+ "plugin": null,
968
+ "invokeAs": "multi-agent-analysis-jira",
969
+ "triggerKeywords": [],
970
+ "triggerPaths": [],
971
+ "relativePath": "shared/core/multi-agent-analysis-jira/SKILL.md"
972
+ },
962
973
  {
963
974
  "name": "multi-agent-analysis-resolve",
964
975
  "description": "Resolve the Section 20 Risks and Open Questions of an analysis v3 document one row at a time: up to 3 source-labeled answer candidates per row (evidence / repo / AI reasoned), chosen answer merged into the target section, doc updated in place with a changelog bump. Same locked decisions as /multi-ag",
@@ -981,6 +992,39 @@
981
992
  "triggerPaths": [],
982
993
  "relativePath": "shared/core/multi-agent-autopilot/SKILL.md"
983
994
  },
995
+ {
996
+ "name": "multi-agent-autopilot-off",
997
+ "description": "Turn off continuous mode on this machine: the schedule is removed, work already running finishes, the repo selection is kept. Use when the machine should stop picking work up.",
998
+ "platform": null,
999
+ "group": "core",
1000
+ "plugin": null,
1001
+ "invokeAs": "multi-agent-autopilot-off",
1002
+ "triggerKeywords": [],
1003
+ "triggerPaths": [],
1004
+ "relativePath": "shared/core/multi-agent-autopilot-off/SKILL.md"
1005
+ },
1006
+ {
1007
+ "name": "multi-agent-autopilot-on",
1008
+ "description": "Turn on continuous mode on THIS machine: pick the repos it watches; labelled GitHub issues and assigned+labelled Jira items then run in a worktree and stop at an open PR. Use when the machine should pick work up unattended.",
1009
+ "platform": null,
1010
+ "group": "core",
1011
+ "plugin": null,
1012
+ "invokeAs": "multi-agent-autopilot-on",
1013
+ "triggerKeywords": [],
1014
+ "triggerPaths": [],
1015
+ "relativePath": "shared/core/multi-agent-autopilot-on/SKILL.md"
1016
+ },
1017
+ {
1018
+ "name": "multi-agent-autopilot-status",
1019
+ "description": "Show what continuous mode is doing here: what runs at which phase, what is queued, what waits for an answer, what PRs it opened today. Use when asked whether autopilot is on.",
1020
+ "platform": null,
1021
+ "group": "core",
1022
+ "plugin": null,
1023
+ "invokeAs": "multi-agent-autopilot-status",
1024
+ "triggerKeywords": [],
1025
+ "triggerPaths": [],
1026
+ "relativePath": "shared/core/multi-agent-autopilot-status/SKILL.md"
1027
+ },
984
1028
  {
985
1029
  "name": "multi-agent-build-optimize",
986
1030
  "description": "Wrapper that dispatches to xcode-build-orchestrator on iOS repos. Benchmarks the current Xcode build, runs compilation / project / SPM analyzers, produces a recommend-first optimization plan in .build-benchmark/, and re-benchmarks after the developer approves changes. Fails fast on non-iOS stacks. U",
@@ -1047,6 +1091,17 @@
1047
1091
  "triggerPaths": [],
1048
1092
  "relativePath": "shared/core/multi-agent-diff-explain/SKILL.md"
1049
1093
  },
1094
+ {
1095
+ "name": "multi-agent-doctor",
1096
+ "description": "Health check for the installed pipeline: layout, preferences, credentials, hooks and host capabilities, each with one actionable step. Exit code is the verdict. Use when a run failed for an environmental reason, before a sync, or after an update.",
1097
+ "platform": null,
1098
+ "group": "core",
1099
+ "plugin": null,
1100
+ "invokeAs": "multi-agent-doctor",
1101
+ "triggerKeywords": [],
1102
+ "triggerPaths": [],
1103
+ "relativePath": "shared/core/multi-agent-doctor/SKILL.md"
1104
+ },
1050
1105
  {
1051
1106
  "name": "multi-agent-feedback",
1052
1107
  "description": "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 the payload and asks before sending. Use when a run went wrong and the maintainer should know.",
@@ -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:** 207 skills (54 core + 153 external). Auto-generated by `scripts/gen-skills-index.mjs` - do not edit by hand.
5
+ **Total:** 212 skills (59 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/`** - 54 `multi-agent*` orchestration skills that are pipeline-critical. Edits here are core-code changes.
9
+ - **`core/`** - 59 `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) - 54
17
+ - [Pipeline Orchestration](#pipeline-orchestration) - 59
18
18
  - [iOS / Apple Ecosystem](#ios-apple-ecosystem) - 90
19
19
  - [Android / Kotlin](#android-kotlin) - 13
20
20
  - [Web](#web) - 10
@@ -29,14 +29,19 @@ Source layout is logical grouping only - skill discovery at runtime is unchang
29
29
  | [`google-play-compliance`](./core/google-play-compliance/) | `core` | Google Play Store publication compliance - bundletool + aapt2 + apksigner orchestration + 21-rule policy catalog with Play Console error c |
30
30
  | [`multi-agent`](./core/multi-agent/) | `core` | Task orchestrator: runs the full pipeline from a Jira ID or GitHub Issue URL - analysis → plan → TDD development → parallel review (Fable |
31
31
  | [`multi-agent-analysis`](./core/multi-agent-analysis/) | `core` | Standalone feature-spec analysis. Two profiles picked at intake: global (23-section development handoff, 8 of them in Lite mode) or corporat |
32
+ | [`multi-agent-analysis-jira`](./core/multi-agent-analysis-jira/) | `core` | Turn a rendered analysis document into a Jira story tree: derive stories from the document's own rule ids, check coverage both ways, preview |
32
33
  | [`multi-agent-analysis-resolve`](./core/multi-agent-analysis-resolve/) | `core` | Resolve the Section 20 Risks and Open Questions of an analysis v3 document one row at a time: up to 3 source-labeled answer candidates per r |
33
34
  | [`multi-agent-autopilot`](./core/multi-agent-autopilot/) | `core` | Launch any task in autopilot mode: skips every confirmation, runs end-to-end autonomously. Use when a task should run end to end with no con |
35
+ | [`multi-agent-autopilot-off`](./core/multi-agent-autopilot-off/) | `core` | Turn off continuous mode on this machine: the schedule is removed, work already running finishes, the repo selection is kept. Use when the m |
36
+ | [`multi-agent-autopilot-on`](./core/multi-agent-autopilot-on/) | `core` | Turn on continuous mode on THIS machine: pick the repos it watches; labelled GitHub issues and assigned+labelled Jira items then run in a wo |
37
+ | [`multi-agent-autopilot-status`](./core/multi-agent-autopilot-status/) | `core` | Show what continuous mode is doing here: what runs at which phase, what is queued, what waits for an answer, what PRs it opened today. Use w |
34
38
  | [`multi-agent-build-optimize`](./core/multi-agent-build-optimize/) | `core` | Wrapper that dispatches to xcode-build-orchestrator on iOS repos. Benchmarks the current Xcode build, runs compilation / project / SPM analy |
35
39
  | [`multi-agent-channels`](./core/multi-agent-channels/) | `core` | Multi-channel reporter - Jira/Confluence/Wiki/PR description. Multi-select channels + content, humanizer pass, reviewer-preserving Bitbuck |
36
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/ |
37
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 |
38
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 |
39
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 |
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 |
40
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 |
41
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 |
42
47
  | [`multi-agent-garbage-collect`](./core/multi-agent-garbage-collect/) | `core` | Sweep leftover /tmp scratch (picker state, review diffs, channel payloads, analysis drafts) from past runs. Dry-run first; confirms before d |
@@ -34,3 +34,17 @@ Interactively list unassigned GitHub issues, let the user pick one, and send it
34
34
  - If the user passed the `autopilot` flag, start in autopilot mode
35
35
 
36
36
  6. **gh auth restore** - return to `{owner}` once done
37
+
38
+ ## Maturity: the picked item may not be ready
39
+
40
+ The pipeline scores the item before anything is built. A blocker does not end the
41
+ run any more: an interactive run asks at that step (open the item and fix it,
42
+ continue without it - recording which gap was waved through - or abort), and an
43
+ autopilot run with `prefs.global.maturityFollowup.autopilotCommentsOnIssue` on
44
+ posts ONE comment on the item asking for what is missing, then stops and waits for
45
+ `resume`. Never a status change, never an assignee, never a close; `Ref:`, never a
46
+ closing keyword. Read the item's existing comments first and take the prior ask
47
+ from the newest one of ours - a scan is a new run with a fresh state file, so
48
+ state alone would make every scan a first ask. Full contract:
49
+ `$HOME/.claude/multi-agent-refs/features/maturity-followup.md`.
50
+
@@ -36,3 +36,17 @@ Interactively list the user's open Jira issues, let the user pick one, and send
36
36
  5. **Start the pipeline** - run the `/multi-agent` command:
37
37
  - Input: `"PROJ-{id}" "branch-name"`
38
38
  - If the `autopilot` flag is present, in autopilot mode
39
+
40
+ ## Maturity: the picked item may not be ready
41
+
42
+ The pipeline scores the item before anything is built. A blocker does not end the
43
+ run any more: an interactive run asks at that step (open the item and fix it,
44
+ continue without it - recording which gap was waved through - or abort), and an
45
+ autopilot run with `prefs.global.maturityFollowup.autopilotCommentsOnIssue` on
46
+ posts ONE comment on the item asking for what is missing, then stops and waits for
47
+ `resume`. Never a status change, never an assignee, never a close; `Ref:`, never a
48
+ closing keyword. Read the item's existing comments first and take the prior ask
49
+ from the newest one of ours - a scan is a new run with a fresh state file, so
50
+ state alone would make every scan a first ask. Full contract:
51
+ `$HOME/.claude/multi-agent-refs/features/maturity-followup.md`.
52
+
@@ -141,6 +141,19 @@ Save the resolved mapping to preferences:
141
141
 
142
142
  `null` = not mapped (missing or skipped). Pipeline phases read this mapping to retrieve tokens dynamically - never hardcoded key names.
143
143
 
144
+ ### Step 2.7 - Operational reporting
145
+
146
+ ```bash
147
+ node "$HOME/.claude/scripts/usage-register.mjs"
148
+ ```
149
+
150
+ Requests a per-machine **write-only** token when none resolves, stores it in the
151
+ credential store only, and switches reporting on. Registration used to happen
152
+ only in update, so a machine that ran setup and nothing else never reported at
153
+ all. `usageLog.optOut: true` blocks it permanently; an unreachable endpoint
154
+ leaves reporting off with one line. Contract:
155
+ `$HOME/.claude/multi-agent-refs/features/usage-reporting.md`.
156
+
144
157
  ### Step 3 - Jira Project Key (auto-learned)
145
158
 
146
159
  Jira project keys are NOT asked during setup. They are auto-learned from pipeline usage:
@@ -11,20 +11,44 @@ Show every active and completed task as a table.
11
11
 
12
12
  ## Steps
13
13
 
14
- 1. **Detect project** - Find the repo root from cwd (if none, look at all known repos):
15
- - `~/my-ui-components/.worktrees/`
16
- - `~/my-figma-app/.worktrees/`
17
- - `~/my-ios-app/.worktrees/`
14
+ 1. **Ask the producer, do not go looking.** One command answers the whole
15
+ question:
18
16
 
19
- 2. **Scan worktrees** - Read the `agent-state.json` file in each worktree directory:
20
17
  ```bash
21
- find {repo}/.worktrees/ -name "agent-state.json" -maxdepth 2
18
+ node "$HOME/.claude/scripts/runs-index.mjs" # grouped table
19
+ node "$HOME/.claude/scripts/runs-index.mjs" --json # the same records
22
20
  ```
23
21
 
24
- 3. **Parse state** - For each task:
25
- - `taskId`, `branch`, `currentPhase`, `status`, `startedAt`, `autopilot`
22
+ `runs-index.mjs` resolves through `lib/run-paths.sh` / `scripts/_run-paths.mjs`,
23
+ so it sees both directory layouts (`<project>/<id>/` and the flat `<id>/`),
24
+ the salvaged `artifacts/` copy Phase 6 leaves behind, and every spelling of a
25
+ task id - and it counts a run that exists in both layouts once. Do NOT
26
+ re-scan the tree by hand: the earlier instruction here listed three
27
+ hard-coded `.worktrees/` paths and a single `find` depth, and on a real
28
+ install that combination missed a quarter of the runs and double-counted
29
+ others. It also scanned worktrees for `agent-state.json`, which Phase 0 has
30
+ never written there ("never inside the worktree", `phases/phase-0-init.md`).
26
31
 
27
- 4. **Show as a table**:
32
+ 2. **Fields per run** (already in the output): `taskId`, `project`, `branch`,
33
+ `currentPhase`, `status`, `startedAt`, `worktreePath`, `prUrl`, `autopilot`,
34
+ `phases[]`, `tokens`, `estUsd`, `group`, plus `duplicateOf` when the run also
35
+ exists in the other layout and `salvaged` when its state is the Phase 6 copy.
36
+
37
+ 3. **Groups are computed, not judged.** Report the `group` the producer
38
+ returns rather than re-deriving it.
39
+
40
+ | Group | Test | Action offered |
41
+ |---|---|---|
42
+ | `waiting` - Waiting on you | `status == "awaiting_input"`, or a `pr.url`, or phase >= 6 | `resume #N` - the work landed, it needs your answer |
43
+ | `stopped` - Stopped mid-development | anything else past phase 0 | `resume #N` or `kill #N` |
44
+ | `question` - Left at a question | phase 0 | `garbage-collect --abandoned` - nothing was built |
45
+ | `unknown` - Status not recorded | no `status` field | say so; offer nothing |
46
+
47
+ A run with no `status` is **not** placed in an actionable group. Unknown is
48
+ not a finding, and calling it dead is the same false claim in the other
49
+ direction.
50
+
51
+ 4. **Show as a table**, grouped per step 3:
28
52
  ```
29
53
  🤖 Multi-Agent Tasks
30
54
 
@@ -37,6 +37,12 @@ Update the pipeline with a single command. Preferences are preserved; only skill
37
37
  4b. Refresh the stack-plugin marketplace so the latest plugin versions are picked up:
38
38
  `claude marketplace update multi-agent-plugins` (or `claude marketplace add {owner}/multi-agent-plugins` if not yet added)
39
39
  5. `node migrate-prefs.mjs` (if there is a schema upgrade)
40
+ 5b. `node "$HOME/.claude/scripts/usage-register.mjs"` - operational reporting.
41
+ It requests a per-machine **write-only** token when none resolves, stores it in
42
+ the credential store only, and switches reporting on. A no-op when a token is
43
+ already onboarded, and permanently blocked by `usageLog.optOut: true`. Offline
44
+ or endpoint down leaves reporting off with one line, never an error. Contract:
45
+ `$HOME/.claude/multi-agent-refs/features/usage-reporting.md`.
40
46
  6. Show the new version + changelog
41
47
  7. Smoke test (schema + cross-cli)
42
48
 
@@ -19,7 +19,10 @@ else
19
19
  BUILD_NUMBER=${BUILD_NUMBER:-1}
20
20
  fi
21
21
 
22
- ARCH_LIST=( ${ARCHES:-} )
22
+ # read -ra, not ( $ARCHES ): a bare expansion into an array splits on IFS and
23
+ # then GLOBS each word, so an ARCHES carrying a * builds for whatever files are
24
+ # in the working directory.
25
+ read -ra ARCH_LIST <<< "${ARCHES:-}"
23
26
  if [[ ${#ARCH_LIST[@]} -eq 0 ]]; then
24
27
  HOST_ARCH=$(uname -m)
25
28
  ARCH_LIST=("$HOST_ARCH")
@@ -15,7 +15,10 @@ fi
15
15
  echo "Creating self-signed certificate '$CERT_NAME'..."
16
16
 
17
17
  TEMP_CONFIG=$(mktemp)
18
- trap "rm -f $TEMP_CONFIG" EXIT
18
+ # Single-quoted on purpose: the path is read when the trap FIRES, not when it is
19
+ # installed. Double quotes bake in whatever the variable held at install time,
20
+ # which is a template users copy into scripts where the order differs.
21
+ trap 'rm -f "$TEMP_CONFIG"' EXIT
19
22
 
20
23
  cat > "$TEMP_CONFIG" <<EOFCONF
21
24
  [ req ]
@@ -17,7 +17,8 @@ echo "$APP_STORE_CONNECT_API_KEY_P8" | sed 's/\\n/\n/g' > /tmp/app-store-connect
17
17
  trap 'rm -f /tmp/app-store-connect-key.p8 /tmp/${APP_NAME}Notarize.zip' EXIT
18
18
 
19
19
  ARCHES_VALUE=${ARCHES:-"arm64 x86_64"}
20
- ARCH_LIST=( ${ARCHES_VALUE} )
20
+ # See package_app.sh: a bare expansion into an array globs as well as splits.
21
+ read -ra ARCH_LIST <<< "${ARCHES_VALUE}"
21
22
  for ARCH in "${ARCH_LIST[@]}"; do
22
23
  swift build -c release --arch "$ARCH"
23
24
  done
@@ -3,7 +3,7 @@
3
3
  > Auto-generated by `pipeline/scripts/build-skills-index.mjs` - do not hand-edit.
4
4
  > Regenerate with `node pipeline/scripts/build-skills-index.mjs`.
5
5
 
6
- **207 skills** across 2 groups.
6
+ **212 skills** across 2 groups.
7
7
 
8
8
  | Group | Name | Platform | Description |
9
9
  |-------|------|----------|-------------|
@@ -94,14 +94,19 @@
94
94
  | external | `monorepo-architect` | - | Expert in monorepo architecture, build systems, and dependency management at scale. Masters Nx, Turborepo, Bazel, and Lerna for efficient mu |
95
95
  | core | `multi-agent` | - | Task orchestrator: runs the full pipeline from a Jira ID or GitHub Issue URL - analysis → plan → TDD development → parallel review (Fable |
96
96
  | core | `multi-agent-analysis` | - | Standalone feature-spec analysis. Two profiles picked at intake: global (23-section development handoff, 8 of them in Lite mode) or corporat |
97
+ | core | `multi-agent-analysis-jira` | - | Turn a rendered analysis document into a Jira story tree: derive stories from the document's own rule ids, check coverage both ways, preview |
97
98
  | core | `multi-agent-analysis-resolve` | - | Resolve the Section 20 Risks and Open Questions of an analysis v3 document one row at a time: up to 3 source-labeled answer candidates per r |
98
99
  | core | `multi-agent-autopilot` | - | Launch any task in autopilot mode: skips every confirmation, runs end-to-end autonomously. Use when a task should run end to end with no con |
100
+ | core | `multi-agent-autopilot-off` | - | Turn off continuous mode on this machine: the schedule is removed, work already running finishes, the repo selection is kept. Use when the m |
101
+ | core | `multi-agent-autopilot-on` | - | Turn on continuous mode on THIS machine: pick the repos it watches; labelled GitHub issues and assigned+labelled Jira items then run in a wo |
102
+ | core | `multi-agent-autopilot-status` | - | Show what continuous mode is doing here: what runs at which phase, what is queued, what waits for an answer, what PRs it opened today. Use w |
99
103
  | core | `multi-agent-build-optimize` | - | Wrapper that dispatches to xcode-build-orchestrator on iOS repos. Benchmarks the current Xcode build, runs compilation / project / SPM analy |
100
104
  | core | `multi-agent-channels` | - | Multi-channel reporter - Jira/Confluence/Wiki/PR description. Multi-select channels + content, humanizer pass, reviewer-preserving Bitbuck |
101
105
  | core | `multi-agent-complaint-analysis` | - | Customer-complaint triage. Ingests complaints (paste, csv/xlsx/txt/json file, Jira issue, Confluence URL), fetches Graylog evidence per trx/ |
102
106
  | core | `multi-agent-create-jira` | - | Create a standards-compliant Jira issue (Task / Bug / Story): asks the type, mines project conventions, drafts from a standard template with |
103
107
  | core | `multi-agent-design-check` | - | Mock-mode vs Figma design audit (iOS / Android, local-only). Pick repo + module, gate on mock support, enumerate every state driver into a c |
104
108
  | core | `multi-agent-diff-explain` | - | 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 |
109
+ | core | `multi-agent-doctor` | - | Health check for the installed pipeline: layout, preferences, credentials, hooks and host capabilities, each with one actionable step. Exit |
105
110
  | core | `multi-agent-feedback` | - | 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 |
106
111
  | core | `multi-agent-forget` | - | Remove a saved /multi-agent routine (created by /multi-agent:save): deletes its local-only command and its registry entry. Asks which one an |
107
112
  | core | `multi-agent-garbage-collect` | - | Sweep leftover /tmp scratch (picker state, review diffs, channel payloads, analysis drafts) from past runs. Dry-run first; confirms before d |