@mmerterden/multi-agent-pipeline 14.1.1 → 14.2.2

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 (129) hide show
  1. package/CHANGELOG.md +162 -0
  2. package/README.md +10 -6
  3. package/README.tr.md +143 -0
  4. package/docs/architecture.md +23 -8
  5. package/docs/ecosystem.md +237 -0
  6. package/install/_plugin-skills.mjs +16 -2
  7. package/install/codex.mjs +9 -4
  8. package/install/templates/copilot-instructions.md +12 -9
  9. package/package.json +1 -1
  10. package/pipeline/commands/deploy.md +4 -1
  11. package/pipeline/commands/multi-agent/SKILL.md +8 -5
  12. package/pipeline/commands/multi-agent/analysis/SKILL.md +2 -2
  13. package/pipeline/commands/multi-agent/autopilot/SKILL.md +6 -2
  14. package/pipeline/commands/multi-agent/channels/SKILL.md +15 -4
  15. package/pipeline/commands/multi-agent/create-jira/SKILL.md +4 -4
  16. package/pipeline/commands/multi-agent/dev/SKILL.md +10 -23
  17. package/pipeline/commands/multi-agent/dev-autopilot/SKILL.md +10 -2
  18. package/pipeline/commands/multi-agent/dev-local/SKILL.md +10 -24
  19. package/pipeline/commands/multi-agent/dev-local-autopilot/SKILL.md +10 -3
  20. package/pipeline/commands/multi-agent/help/SKILL.md +49 -11
  21. package/pipeline/commands/multi-agent/jira/SKILL.md +13 -2
  22. package/pipeline/commands/multi-agent/language/SKILL.md +1 -1
  23. package/pipeline/commands/multi-agent/local/SKILL.md +6 -2
  24. package/pipeline/commands/multi-agent/local-autopilot/SKILL.md +6 -2
  25. package/pipeline/commands/multi-agent/log/SKILL.md +7 -1
  26. package/pipeline/commands/multi-agent/setup/SKILL.md +1 -1
  27. package/pipeline/commands/multi-agent/ship/SKILL.md +5 -1
  28. package/pipeline/commands/multi-agent/store-ready/SKILL.md +340 -0
  29. package/pipeline/commands/multi-agent/sync/SKILL.md +7 -6
  30. package/pipeline/commands/multi-agent/test/SKILL.md +18 -8
  31. package/pipeline/commands/multi-agent/test-accessibility/SKILL.md +33 -0
  32. package/pipeline/commands/multi-agent/test-dark-mode/SKILL.md +33 -0
  33. package/pipeline/commands/multi-agent/test-dynamic-type/SKILL.md +33 -0
  34. package/pipeline/commands/multi-agent/test-screenshots/SKILL.md +41 -0
  35. package/pipeline/commands/multi-agent/testflight-validation/SKILL.md +28 -201
  36. package/pipeline/commands/multi-agent/update/SKILL.md +1 -1
  37. package/pipeline/commands/sim-test.md +45 -36
  38. package/pipeline/lib/extract-conventions.sh +44 -15
  39. package/pipeline/lib/fetch-figma-annotations.sh +8 -1
  40. package/pipeline/lib/fetch-fortify.sh +23 -8
  41. package/pipeline/lib/figma-screenshot.sh +11 -1
  42. package/pipeline/lib/issue-fetcher.sh +76 -9
  43. package/pipeline/lib/md2confluence-v3.py +16 -2
  44. package/pipeline/lib/plan-todos.sh +5 -2
  45. package/pipeline/lib/post-pr-review.sh +8 -6
  46. package/pipeline/lib/shadow-git.sh +50 -9
  47. package/pipeline/lib/submodule-detector.sh +8 -1
  48. package/pipeline/multi-agent-refs/_input-parser.md +1 -1
  49. package/pipeline/multi-agent-refs/channels/confluence.md +3 -0
  50. package/pipeline/multi-agent-refs/channels/issue-comment.md +2 -2
  51. package/pipeline/multi-agent-refs/channels/jira.md +13 -2
  52. package/pipeline/multi-agent-refs/channels/pr-review-actions.md +1 -1
  53. package/pipeline/multi-agent-refs/channels/pr.md +20 -0
  54. package/pipeline/multi-agent-refs/channels/wiki.md +1 -1
  55. package/pipeline/multi-agent-refs/cross-cli-contract.md +6 -5
  56. package/pipeline/multi-agent-refs/features/worktree-finalize.md +1 -1
  57. package/pipeline/multi-agent-refs/generate-issue.md +2 -2
  58. package/pipeline/multi-agent-refs/issue-jira-triad.md +3 -3
  59. package/pipeline/multi-agent-refs/knowledge.md +1 -1
  60. package/pipeline/multi-agent-refs/payload-contracts.md +67 -0
  61. package/pipeline/multi-agent-refs/phases/modes.md +20 -0
  62. package/pipeline/multi-agent-refs/phases/phase-0-init.md +2 -2
  63. package/pipeline/multi-agent-refs/phases/phase-6-commit.md +8 -40
  64. package/pipeline/multi-agent-refs/phases/phase-7-report.md +5 -3
  65. package/pipeline/multi-agent-refs/phases.md +6 -0
  66. package/pipeline/multi-agent-refs/rules.md +2 -0
  67. package/pipeline/schemas/prefs.schema.json +2 -2
  68. package/pipeline/scripts/audit-log-rotate.sh +10 -0
  69. package/pipeline/scripts/build-stack-plugins.mjs +8 -1
  70. package/pipeline/scripts/check-derived-drift.mjs +13 -1
  71. package/pipeline/scripts/diff-explain.mjs +41 -3
  72. package/pipeline/scripts/diff-risk-score.mjs +72 -8
  73. package/pipeline/scripts/gen-mode-dispatch.mjs +1 -1
  74. package/pipeline/scripts/learning-curve.mjs +8 -2
  75. package/pipeline/scripts/output-quality-check.sh +15 -4
  76. package/pipeline/scripts/phase-tracker.sh +21 -8
  77. package/pipeline/scripts/pre-commit-check.sh +69 -22
  78. package/pipeline/scripts/render-agent-log-cost.sh +8 -3
  79. package/pipeline/scripts/render-cost-summary.sh +42 -22
  80. package/pipeline/scripts/render-work-summary.sh +47 -13
  81. package/pipeline/scripts/review-scope.mjs +1 -1
  82. package/pipeline/scripts/run-aggregator.mjs +38 -14
  83. package/pipeline/scripts/smoke-schema-validation.sh +5 -1
  84. package/pipeline/scripts/test-gap-scan.mjs +45 -6
  85. package/pipeline/scripts/uninstall.mjs +39 -4
  86. package/pipeline/scripts/update-issue-progress.sh +12 -16
  87. package/pipeline/scripts/worktree-finalize.sh +23 -2
  88. package/pipeline/skills/.skills-index.json +58 -4
  89. package/pipeline/skills/shared/README.md +12 -7
  90. package/pipeline/skills/shared/core/multi-agent/SKILL.md +13 -17
  91. package/pipeline/skills/shared/core/multi-agent-autopilot/SKILL.md +4 -0
  92. package/pipeline/skills/shared/core/multi-agent-create-jira/SKILL.md +1 -1
  93. package/pipeline/skills/shared/core/multi-agent-dev/SKILL.md +4 -17
  94. package/pipeline/skills/shared/core/multi-agent-dev-autopilot/SKILL.md +8 -0
  95. package/pipeline/skills/shared/core/multi-agent-dev-local/SKILL.md +5 -18
  96. package/pipeline/skills/shared/core/multi-agent-dev-local-autopilot/SKILL.md +8 -0
  97. package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +50 -12
  98. package/pipeline/skills/shared/core/multi-agent-language/SKILL.md +1 -1
  99. package/pipeline/skills/shared/core/multi-agent-local/SKILL.md +4 -0
  100. package/pipeline/skills/shared/core/multi-agent-local-autopilot/SKILL.md +4 -0
  101. package/pipeline/skills/shared/core/multi-agent-purge/SKILL.md +18 -3
  102. package/pipeline/skills/shared/core/multi-agent-ship/SKILL.md +4 -0
  103. package/pipeline/skills/shared/core/multi-agent-store-ready/SKILL.md +50 -0
  104. package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +6 -5
  105. package/pipeline/skills/shared/core/multi-agent-test/SKILL.md +18 -8
  106. package/pipeline/skills/shared/core/multi-agent-test-accessibility/SKILL.md +37 -0
  107. package/pipeline/skills/shared/core/multi-agent-test-dark-mode/SKILL.md +37 -0
  108. package/pipeline/skills/shared/core/multi-agent-test-dynamic-type/SKILL.md +37 -0
  109. package/pipeline/skills/shared/core/multi-agent-test-screenshots/SKILL.md +44 -0
  110. package/pipeline/skills/shared/core/multi-agent-testflight-validation/SKILL.md +29 -101
  111. package/pipeline/skills/shared/external/firebase/SKILL.md +1 -1
  112. package/pipeline/skills/shared/external/localization-reuse-map/SKILL.md +302 -0
  113. package/pipeline/skills/shared/external/localization-reuse-map/example-mapping.json +144 -0
  114. package/pipeline/skills/shared/external/localization-reuse-map/reference/format-and-output.md +156 -0
  115. package/pipeline/skills/shared/external/localization-reuse-map/reference/publish-and-snapshot.md +108 -0
  116. package/pipeline/skills/shared/external/localization-reuse-map/reference/sources-and-recipes.md +175 -0
  117. package/pipeline/skills/shared/external/localization-reuse-map/scripts/build-artifact.py +865 -0
  118. package/pipeline/skills/shared/external/localization-reuse-map/scripts/build-spreadsheet.py +335 -0
  119. package/pipeline/skills/shared/external/localization-reuse-map/scripts/fetch-annotations.py +344 -0
  120. package/pipeline/skills/shared/external/localization-reuse-map/scripts/fetch-legacy-labels.py +130 -0
  121. package/pipeline/skills/shared/external/localization-reuse-map/scripts/publish-confluence.py +264 -0
  122. package/pipeline/skills/shared/external/localization-reuse-map/scripts/render-key-shots.py +298 -0
  123. package/pipeline/skills/shared/external/localization-reuse-map/scripts/render-overlay.py +529 -0
  124. package/pipeline/skills/shared/external/localization-reuse-map/scripts/resolve-legacy-values.py +187 -0
  125. package/pipeline/skills/shared/external/localization-reuse-map/scripts/resolve-new-values.py +171 -0
  126. package/pipeline/skills/shared/external/localization-reuse-map/scripts/scan-screen-keys.py +184 -0
  127. package/pipeline/skills/shared/external/localization-reuse-map/scripts/snapshot-resources.sh +26 -0
  128. package/pipeline/skills/shared/external/localization-reuse-map/scripts/verify-map.py +173 -0
  129. package/pipeline/skills/skills-index.md +10 -4
@@ -248,6 +248,31 @@ function rmMatchingFiles(parent, predicate) {
248
248
  return count;
249
249
  }
250
250
 
251
+ // Copilot CLI / Codex CLI have no plugin loader, so install/_plugin-skills.mjs
252
+ // copies each stack plugin's authored skills straight into the flat skills/
253
+ // dir (~100 dirs across a typical set of enabled plugins). None of those
254
+ // names are in PIPELINE_CORE_SKILL_DIRS - the allowlist above only covers the
255
+ // pipeline's OWN skills - so they were never removed on uninstall. The
256
+ // installer now writes PLUGIN_SKILLS_MANIFEST listing exactly what it
257
+ // delivered; read it back here rather than guessing plugin skill names.
258
+ const PLUGIN_SKILLS_MANIFEST = ".plugin-skills-manifest.json";
259
+
260
+ function rmPluginDeliveredSkills(skillsDir) {
261
+ const manifestPath = join(skillsDir, PLUGIN_SKILLS_MANIFEST);
262
+ if (!existsSync(manifestPath)) return 0;
263
+ let names;
264
+ try {
265
+ names = JSON.parse(readFileSync(manifestPath, "utf-8"));
266
+ } catch {
267
+ return 0;
268
+ }
269
+ if (!Array.isArray(names)) return 0;
270
+ const nameSet = new Set(names);
271
+ const count = rmMatchingDirs(skillsDir, (name) => nameSet.has(name));
272
+ rmIfExists(manifestPath);
273
+ return count;
274
+ }
275
+
251
276
  // Explicit terminator install/copilot.mjs writes after the pipeline section
252
277
  // (v11.4.1+). Must stay in sync with INSTRUCTIONS_END_MARKER there.
253
278
  const COPILOT_END_MARKER = "<!-- multi-agent-pipeline:copilot-instructions:end -->";
@@ -387,13 +412,20 @@ function cleanClaudeSettings(settingsPath) {
387
412
  if (settings.hooks?.PreToolUse?.length) {
388
413
  const before = settings.hooks.PreToolUse.length;
389
414
  // Match both the current matcher ("Bash") and the dead pre-v11.4.1 one
390
- // ("Bash(git commit:*)"); the pre-commit-check.sh command identifies the
391
- // entry as ours either way.
415
+ // ("Bash(git commit:*)"); the command identifies the entry as ours either
416
+ // way. install/claude.mjs registers TWO PreToolUse gates this way -
417
+ // pre-commit-check.sh AND agent-guard.sh - and only the first was ever
418
+ // stripped here. After ~/.claude/scripts/ is deleted below, the
419
+ // agent-guard.sh entry pointed at a script that no longer existed, so
420
+ // every subsequent Bash call fired a hook error.
392
421
  settings.hooks.PreToolUse = settings.hooks.PreToolUse.filter(
393
422
  (h) =>
394
423
  !(
395
424
  (h.matcher === "Bash" || h.matcher === "Bash(git commit:*)") &&
396
- h.hooks?.some((sub) => sub.command?.includes("pre-commit-check.sh"))
425
+ h.hooks?.some(
426
+ (sub) =>
427
+ sub.command?.includes("pre-commit-check.sh") || sub.command?.includes("agent-guard.sh"),
428
+ )
397
429
  ),
398
430
  );
399
431
  if (settings.hooks.PreToolUse.length < before) touched = true;
@@ -540,10 +572,12 @@ export async function main() {
540
572
  name === "figma-to-component",
541
573
  );
542
574
  n += rmMatchingDirs(skills, (name) => PIPELINE_CORE_SKILL_DIRS.includes(name));
575
+ n += rmPluginDeliveredSkills(skills);
543
576
  if (n > 0) console.log(` removed ${n} skill dir(s) under ${skills}`);
544
577
  rmIfExists(join(skills, ".skills-index.json"));
545
578
  rmIfExists(join(skills, "skills-index.md"));
546
579
  rmIfExists(join(skills, "README.md"));
580
+ rmIfExists(join(COP, "rules"));
547
581
  // Agent definitions are FILES; remove only the pipeline-shipped names so
548
582
  // user-authored agents survive.
549
583
  rmMatchingFiles(join(COP, "agents"), (name) => PIPELINE_AGENT_FILES.includes(name));
@@ -613,10 +647,11 @@ export async function main() {
613
647
  // Codex's own `.system` set plus user skills; `prompts/` and `agents/` hold
614
648
  // user-authored files.
615
649
  const skills = join(CODEX, "skills");
616
- const n = rmMatchingDirs(
650
+ let n = rmMatchingDirs(
617
651
  skills,
618
652
  (name) => name === "multi-agent" || name.startsWith("multi-agent-"),
619
653
  );
654
+ n += rmPluginDeliveredSkills(skills);
620
655
  if (n > 0) console.log(` removed ${n} skill dir(s) under ${skills}`);
621
656
  rmIfExists(join(CODEX, "prompts", "multi-agent.md"));
622
657
  removeGeneratedCodexAgents(join(CODEX, "agents"));
@@ -14,8 +14,8 @@
14
14
  # update-issue-progress.sh <task-id>
15
15
  #
16
16
  # Inputs:
17
- # $HOME/.claude/projects/{slug}/state/{taskId}/agent-state.json
18
- # .issue.url, .issue.number, .repos.primary.org, .repos.primary.name
17
+ # $HOME/.claude/logs/multi-agent/{project}/{taskId}/agent-state.json
18
+ # .githubIssue.owner, .githubIssue.repo, .githubIssue.number
19
19
  # .flags.implementation, .flags.testing, .flags.codeConnect, .flags.wiki
20
20
  #
21
21
  # Side effects:
@@ -86,11 +86,12 @@ if [ "$TASK_ID" = "--rewrite" ]; then
86
86
  exit 0
87
87
  fi
88
88
 
89
- # Resolve the project state directory (matches phase-tracker convention).
90
- STATE_GLOB="$HOME/.claude/projects/*"
89
+ # Resolve agent-state.json. multi-repo-pipeline.sh writes it under a
90
+ # per-project directory ($HOME/.claude/logs/multi-agent/{project}/{taskId}/)
91
+ # - not the ~/.claude/projects/*/state/ path this used to glob, which no
92
+ # writer in the pipeline ever populates.
91
93
  AGENT_STATE=""
92
- for dir in $STATE_GLOB; do
93
- candidate="$dir/state/$TASK_ID/agent-state.json"
94
+ for candidate in "$HOME"/.claude/logs/multi-agent/*/"$TASK_ID"/agent-state.json; do
94
95
  if [ -f "$candidate" ]; then
95
96
  AGENT_STATE="$candidate"
96
97
  break
@@ -102,18 +103,13 @@ if [ -z "$AGENT_STATE" ]; then
102
103
  exit 2
103
104
  fi
104
105
 
105
- ISSUE_URL=$(jq -r '.issue.url // empty' "$AGENT_STATE")
106
- ISSUE_NUM=$(jq -r '.issue.number // empty' "$AGENT_STATE")
107
- ORG_REPO=$(jq -r '.repos.primary.name // empty' "$AGENT_STATE")
108
- # Derive org/repo from URL if not present in state.
109
- if [ -z "$ORG_REPO" ] || ! [[ "$ORG_REPO" == */* ]]; then
110
- if [[ "$ISSUE_URL" =~ github\.com/([^/]+/[^/]+)/issues/ ]]; then
111
- ORG_REPO="${BASH_REMATCH[1]}"
112
- fi
113
- fi
106
+ # agent-state.schema.json has no `.issue`/`.repos` properties (additionalProperties
107
+ # is false) - the real GitHub-issue coordinates live at `.githubIssue.{owner,repo,number}`.
108
+ ISSUE_NUM=$(jq -r '.githubIssue.number // empty' "$AGENT_STATE")
109
+ ORG_REPO=$(jq -r 'if .githubIssue then (.githubIssue.owner + "/" + .githubIssue.repo) else empty end' "$AGENT_STATE")
114
110
 
115
111
  if [ -z "$ORG_REPO" ] || [ -z "$ISSUE_NUM" ]; then
116
- echo "update-issue-progress: cannot resolve org/repo or issue number from state" >&2
112
+ echo "update-issue-progress: no githubIssue in state for task=$TASK_ID (Jira-originated task, or issue not yet linked)" >&2
117
113
  exit 3
118
114
  fi
119
115
 
@@ -202,6 +202,7 @@ fi
202
202
  # copied only if present; a task that never reached Phase 4 has no triage output
203
203
  # and that is not an error.
204
204
  DEST="$LOGS_ROOT/${PROJECT:+$PROJECT/}$TASK_ID/artifacts"
205
+ LOGS_TASK_DIR="$LOGS_ROOT/${PROJECT:+$PROJECT/}$TASK_ID"
205
206
 
206
207
  copy_one() {
207
208
  src="$rp_wt/$1"
@@ -214,7 +215,27 @@ copy_one() {
214
215
  cp -R "$src" "$DEST/$1" 2>/dev/null && SALVAGED="${SALVAGED:+$SALVAGED,}\"$1\""
215
216
  }
216
217
 
217
- for a in agent-state.json phase-tracker.json triage-output.json \
218
+ # agent-state.json and the tracker state file are never written INSIDE the
219
+ # worktree checkout - multi-repo-pipeline.sh/phase-tracker.sh write both
220
+ # straight to $LOGS_TASK_DIR. copy_one() sourcing from $rp_wt always missed
221
+ # them (src never existed → silent no-op), so this salvage - and the
222
+ # worktreeRemovedAt stamp below, gated on the salvaged copy existing - never
223
+ # actually fired for either file.
224
+ copy_from_logs() {
225
+ src="$LOGS_TASK_DIR/$1"
226
+ [ -e "$src" ] || return 0
227
+ if [ "$DRY" = "1" ]; then
228
+ SALVAGED="${SALVAGED:+$SALVAGED,}\"$1\""
229
+ return 0
230
+ fi
231
+ mkdir -p "$DEST/$(dirname "$1")" 2>/dev/null
232
+ cp -R "$src" "$DEST/$1" 2>/dev/null && SALVAGED="${SALVAGED:+$SALVAGED,}\"$1\""
233
+ }
234
+
235
+ copy_from_logs agent-state.json
236
+ copy_from_logs tracker-state.json
237
+
238
+ for a in triage-output.json \
218
239
  .review-diff.txt .build.log .test.log .pipeline; do
219
240
  copy_one "$a"
220
241
  done
@@ -230,7 +251,7 @@ fi
230
251
  # tree. This is what keeps `--force` off the table: a refusal after this point
231
252
  # means unexpected dirt, and forcing past unexpected dirt is how work gets lost.
232
253
  DROPPED=""
233
- for a in agent-state.json phase-tracker.json triage-output.json \
254
+ for a in triage-output.json \
234
255
  .review-diff.txt .build.log .test.log .pipeline; do
235
256
  [ -e "$rp_wt/$a" ] || continue
236
257
  case "$a" in
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
- "skillCount": 196,
3
+ "skillCount": 202,
4
4
  "entries": [
5
5
  {
6
6
  "name": "accessibility-compliance-accessibility-audit",
@@ -445,7 +445,7 @@
445
445
  },
446
446
  {
447
447
  "name": "firebase",
448
- "description": "You're a developer who has shipped dozens of Firebase projects. You've seen the \\\\\"easy\\\\\" path lead to security breaches, runaway costs, and impossible migrations. You know Firebase is powerful, but you also know its sharp edges. Use when integrating or reviewing Firebase: auth, Firestore, function",
448
+ "description": "You're a developer who has shipped dozens of Firebase projects. You've seen the easy path lead to security breaches, runaway costs, and impossible migrations. You know Firebase is powerful, but you also know its sharp edges. Use when integrating or reviewing Firebase: auth, Firestore, functions, or ",
449
449
  "platform": null,
450
450
  "group": "external",
451
451
  "triggerKeywords": [],
@@ -695,6 +695,15 @@
695
695
  "triggerPaths": [],
696
696
  "relativePath": "shared/external/live-activities/SKILL.md"
697
697
  },
698
+ {
699
+ "name": "localization-reuse-map",
700
+ "description": ">-",
701
+ "platform": null,
702
+ "group": "external",
703
+ "triggerKeywords": [],
704
+ "triggerPaths": [],
705
+ "relativePath": "shared/external/localization-reuse-map/SKILL.md"
706
+ },
698
707
  {
699
708
  "name": "macos-menubar-tuist-app",
700
709
  "description": "Build, refactor, or review SwiftUI macOS menubar apps that use Tuist. Use when building, refactoring or reviewing a SwiftUI macOS menubar app that uses Tuist.",
@@ -922,7 +931,7 @@
922
931
  },
923
932
  {
924
933
  "name": "multi-agent-language",
925
- "description": "Toggle outputLanguage (assistant explanations). promptLanguage is fixed to English. External payloads stay English. Use when the assistant should explain itself in a different language.",
934
+ "description": "Toggle outputLanguage (assistant explanations, picker questions, PR/Jira/Confluence bodies). promptLanguage is fixed to English; commit messages, branch names and identifiers stay English. Use when the assistant should explain itself in a different language.",
926
935
  "platform": null,
927
936
  "group": "core",
928
937
  "triggerKeywords": [],
@@ -1100,6 +1109,15 @@
1100
1109
  "triggerPaths": [],
1101
1110
  "relativePath": "shared/core/multi-agent-status/SKILL.md"
1102
1111
  },
1112
+ {
1113
+ "name": "multi-agent-store-ready",
1114
+ "description": "Pre-submission store readiness for a built package, iOS and Android, local-only. Three symmetric gates per platform: a static package audit, the store's own authoritative validation, and a policy review against repo source. Separate verdict per gate, a skipped gate never counted as a pass. Validates",
1115
+ "platform": null,
1116
+ "group": "core",
1117
+ "triggerKeywords": [],
1118
+ "triggerPaths": [],
1119
+ "relativePath": "shared/core/multi-agent-store-ready/SKILL.md"
1120
+ },
1103
1121
  {
1104
1122
  "name": "multi-agent-sync",
1105
1123
  "description": "One-shot sync of the entire multi-agent ecosystem: Claude Code, Copilot CLI, pipeline repo, website, and the dev-toolkit MCP server. Use when work is finished and should be propagated across Claude Code, Copilot CLI, the repos, the website and the dev-toolkit server.",
@@ -1118,9 +1136,45 @@
1118
1136
  "triggerPaths": [],
1119
1137
  "relativePath": "shared/core/multi-agent-test/SKILL.md"
1120
1138
  },
1139
+ {
1140
+ "name": "multi-agent-test-accessibility",
1141
+ "description": "Accessibility audit on a booted simulator / emulator: VoiceOver labels, sub-44pt tap targets, contrast, traits. Alias pinning the accessibility scenario. Use when auditing a screen for assistive-technology support.",
1142
+ "platform": null,
1143
+ "group": "core",
1144
+ "triggerKeywords": [],
1145
+ "triggerPaths": [],
1146
+ "relativePath": "shared/core/multi-agent-test-accessibility/SKILL.md"
1147
+ },
1148
+ {
1149
+ "name": "multi-agent-test-dark-mode",
1150
+ "description": "Dark mode UI test on a booted simulator / emulator: walk every screen light then dark, report contrast + colour bugs. Alias pinning the dark-mode scenario. Use when a dark-mode rendering bug is suspected.",
1151
+ "platform": null,
1152
+ "group": "core",
1153
+ "triggerKeywords": [],
1154
+ "triggerPaths": [],
1155
+ "relativePath": "shared/core/multi-agent-test-dark-mode/SKILL.md"
1156
+ },
1157
+ {
1158
+ "name": "multi-agent-test-dynamic-type",
1159
+ "description": "Dynamic Type layout test on a booted simulator / emulator: re-walk every screen at XL through accessibility-extra-large, report truncation and clipping. Alias pinning the dynamic-type scenario. Use when checking a layout survives large text.",
1160
+ "platform": null,
1161
+ "group": "core",
1162
+ "triggerKeywords": [],
1163
+ "triggerPaths": [],
1164
+ "relativePath": "shared/core/multi-agent-test-dynamic-type/SKILL.md"
1165
+ },
1166
+ {
1167
+ "name": "multi-agent-test-screenshots",
1168
+ "description": "App Store screenshot set from a booted simulator / emulator in a given locale, taken as an argument and defaulting to tr. Alias pinning the screenshot scenario. Use when generating store screenshots or checking a localised build renders.",
1169
+ "platform": null,
1170
+ "group": "core",
1171
+ "triggerKeywords": [],
1172
+ "triggerPaths": [],
1173
+ "relativePath": "shared/core/multi-agent-test-screenshots/SKILL.md"
1174
+ },
1121
1175
  {
1122
1176
  "name": "multi-agent-testflight-validation",
1123
- "description": "Pre-submission validation for a TestFlight / App Store build (iOS, local-only). Three gates: static archive audit, Apple's own `altool --validate-app`, and a Review-Guidelines check. ITMS codes are mapped to the rule each implies. Validates only, never uploads. Use when a build is about to go to Tes",
1177
+ "description": "iOS-pinned alias of store-ready: same three gates on an iOS build, one implementation. Validates a TestFlight / App Store package, never uploads. Use when an iOS build is about to go to TestFlight, or a submission was rejected and you need why.",
1124
1178
  "platform": null,
1125
1179
  "group": "core",
1126
1180
  "triggerKeywords": [],
@@ -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:** 196 skills (47 core + 149 external). Auto-generated by `scripts/gen-skills-index.mjs` - do not edit by hand.
5
+ **Total:** 201 skills (52 core + 149 external). Auto-generated by `scripts/gen-skills-index.mjs` - do not edit by hand.
6
6
 
7
7
  ## Directory layout
8
8
 
9
- - **`core/`** - 47 `multi-agent*` orchestration skills that are pipeline-critical. Edits here are core-code changes.
9
+ - **`core/`** - 52 `multi-agent*` orchestration skills that are pipeline-critical. Edits here are core-code changes.
10
10
  - **`external/`** - 149 iOS / Android / generic skills imported from the upstream skill library. Mirrors of third-party guidance.
11
11
  - Install destination stays flat: both trees flatten into `~/.claude/skills/` and `~/.copilot/skills/`. See ADR-0006 for the rationale.
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) - 47
17
+ - [Pipeline Orchestration](#pipeline-orchestration) - 52
18
18
  - [iOS / Apple Ecosystem](#ios-apple-ecosystem) - 89
19
19
  - [Android / Kotlin](#android-kotlin) - 13
20
20
  - [Web / Frontend](#web-frontend) - 10
@@ -40,7 +40,6 @@ Source layout is logical grouping only - skill discovery at runtime is unchang
40
40
  | [`multi-agent-dev-local`](./core/multi-agent-dev-local/) | `core` | Fast mode + local - Init → Dev(Opus) → Review → Commit → Report, no worktree. Use when a change should be developed and reviewed on the cu |
41
41
  | [`multi-agent-dev-local-autopilot`](./core/multi-agent-dev-local-autopilot/) | `core` | Fastest + local - Dev(Opus) + autopilot, no worktree, zero interaction. Use when a change should be developed on the current branch with n |
42
42
  | [`multi-agent-diff-explain`](./core/multi-agent-diff-explain/) | `core` | Map Phase 4 triage findings to branch diff lines. Read-only post-hoc command, used after review to answer 'which finding lines up with which |
43
- | [`multi-agent-ship`](./core/multi-agent-ship/) | `core` | Continue already-done LOCAL work through the pipeline tail: Review → Build+Test → Commit/PR → Report (technical analysis + Jira test-scenari |
44
43
  | [`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 |
45
44
  | [`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 |
46
45
  | [`multi-agent-help`](./core/multi-agent-help/) | `core` | Multi-agent pipeline usage guide - renders in EN or TR per prefs.global.outputLanguage (falls back to promptLanguage for backward compatib |
@@ -48,7 +47,7 @@ Source layout is logical grouping only - skill discovery at runtime is unchang
48
47
  | [`multi-agent-issue`](./core/multi-agent-issue/) | `core` | List unassigned GitHub issues, pick one, auto-assign, and launch the multi-agent pipeline. Use when a GitHub issue should be picked up and s |
49
48
  | [`multi-agent-jira`](./core/multi-agent-jira/) | `core` | List open Jira issues, pick one, and launch the multi-agent pipeline. Use when a Jira issue should be picked up and started without knowing |
50
49
  | [`multi-agent-kill`](./core/multi-agent-kill/) | `core` | Stop the given task, then remove its worktree and branch. Asks for confirmation. Use when a running or stuck task should be stopped and its |
51
- | [`multi-agent-language`](./core/multi-agent-language/) | `core` | Toggle outputLanguage (assistant explanations). promptLanguage is fixed to English. External payloads stay English. Use when the assistant s |
50
+ | [`multi-agent-language`](./core/multi-agent-language/) | `core` | Toggle outputLanguage (assistant explanations, picker questions, PR/Jira/Confluence bodies). promptLanguage is fixed to English; commit mess |
52
51
  | [`multi-agent-local`](./core/multi-agent-local/) | `core` | Full pipeline in local mode - no worktree, runs directly on the current branch. Use when the full pipeline should run on the current branc |
53
52
  | [`multi-agent-local-autopilot`](./core/multi-agent-local-autopilot/) | `core` | Full pipeline + local + autopilot - no worktree, no confirmations, all 8 phases run end-to-end on the current branch. Use when the full pi |
54
53
  | [`multi-agent-log`](./core/multi-agent-log/) | `core` | Show the agent-log.md for the given task. With no ID, shows the most recent task. Use when asked what a task did, or to read its log. |
@@ -65,11 +64,17 @@ Source layout is logical grouping only - skill discovery at runtime is unchang
65
64
  | [`multi-agent-scan`](./core/multi-agent-scan/) | `core` | Skill security scan: walks local skill directories against a tiered pattern catalog. Use when local skill directories need checking for unsa |
66
65
  | [`multi-agent-search`](./core/multi-agent-search/) | `core` | Log search across every agent-log.md with smart ranking and filters. Optional --semantic flag queries the per-repo triage corpus. Use when s |
67
66
  | [`multi-agent-setup`](./core/multi-agent-setup/) | `core` | First-run setup wizard: keychain token discovery, Git Identity onboarding, and pipeline preparation. Use when the pipeline is being set up f |
67
+ | [`multi-agent-ship`](./core/multi-agent-ship/) | `core` | Continue already-done LOCAL work through the pipeline tail: Review → Build+Test → Commit/PR → Report (technical analysis + Jira test-scenari |
68
68
  | [`multi-agent-stack`](./core/multi-agent-stack/) | `core` | Select the active stack for this repo by enabling the matching marketplace plugin(s) in .claude/settings.json (ios/android/mobile/backend/fr |
69
69
  | [`multi-agent-status`](./core/multi-agent-status/) | `core` | Show every multi-agent task's ID, phase, branch, and status. Use when asked what is running, or for an overview of every task. |
70
+ | [`multi-agent-store-ready`](./core/multi-agent-store-ready/) | `core` | Pre-submission store readiness for a built package, iOS and Android, local-only. Three symmetric gates per platform: a static package audit, |
70
71
  | [`multi-agent-sync`](./core/multi-agent-sync/) | `core` | One-shot sync of the entire multi-agent ecosystem: Claude Code, Copilot CLI, pipeline repo, website, and the dev-toolkit MCP server. Use whe |
71
72
  | [`multi-agent-test`](./core/multi-agent-test/) | `core` | UI Bug Hunter - iOS Simulator (simctl) + Android Emulator (adb). Auto-detects platform. Screenshot + tap + analyze on the booted device. T |
72
- | [`multi-agent-testflight-validation`](./core/multi-agent-testflight-validation/) | `core` | Pre-submission validation for a TestFlight / App Store build (iOS, local-only). Three gates: static archive audit, Apple's own `altool --val |
73
+ | [`multi-agent-test-accessibility`](./core/multi-agent-test-accessibility/) | `core` | Accessibility audit on a booted simulator / emulator: VoiceOver labels, sub-44pt tap targets, contrast, traits. Alias pinning the accessibil |
74
+ | [`multi-agent-test-dark-mode`](./core/multi-agent-test-dark-mode/) | `core` | Dark mode UI test on a booted simulator / emulator: walk every screen light then dark, report contrast + colour bugs. Alias pinning the dark |
75
+ | [`multi-agent-test-dynamic-type`](./core/multi-agent-test-dynamic-type/) | `core` | Dynamic Type layout test on a booted simulator / emulator: re-walk every screen at XL through accessibility-extra-large, report truncation a |
76
+ | [`multi-agent-test-screenshots`](./core/multi-agent-test-screenshots/) | `core` | App Store screenshot set from a booted simulator / emulator in a given locale, taken as an argument and defaulting to tr. Alias pinning the |
77
+ | [`multi-agent-testflight-validation`](./core/multi-agent-testflight-validation/) | `core` | iOS-pinned alias of store-ready: same three gates on an iOS build, one implementation. Validates a TestFlight / App Store package, never upl |
73
78
  | [`multi-agent-uninstall`](./core/multi-agent-uninstall/) | `core` | Uninstall the pipeline from Claude Code + Copilot CLI. Keychain access tokens are always left untouched; --all-data also clears pipeline set |
74
79
  | [`multi-agent-update`](./core/multi-agent-update/) | `core` | Update the pipeline to the latest version: git pull, install, migrate. Use when the installed pipeline is behind and should be brought to th |
75
80
 
@@ -97,7 +102,7 @@ Source layout is logical grouping only - skill discovery at runtime is unchang
97
102
  | [`device-integrity`](./external/device-integrity/) | `external` | Verify device legitimacy and app integrity using DeviceCheck (DCDevice per-device bits) and App Attest (DCAppAttestService key generation, a |
98
103
  | [`energykit`](./external/energykit/) | `external` | Query grid electricity forecasts and submit load events using EnergyKit to help users optimize home electricity usage. Use when building sma |
99
104
  | [`eventkit-calendar`](./external/eventkit-calendar/) | `external` | Create, read, and manage calendar events and reminders using EventKit and EventKitUI. Use when adding events to the user's calendar, creatin |
100
- | [`firebase`](./external/firebase/) | `external` | You're a developer who has shipped dozens of Firebase projects. You've seen the \\"easy\\" path lead to security breaches, runaway costs, an |
105
+ | [`firebase`](./external/firebase/) | `external` | You're a developer who has shipped dozens of Firebase projects. You've seen the easy path lead to security breaches, runaway costs, and impo |
101
106
  | [`healthkit`](./external/healthkit/) | `external` | Read, write, and query Apple Health data using HealthKit. Covers HKHealthStore authorization, sample queries, statistics queries, statistics |
102
107
  | [`hig-components-content`](./external/hig-components-content/) | `external` | Apple Human Interface Guidelines for content display components. Use when designing or reviewing how content is displayed on an Apple platfo |
103
108
  | [`hig-components-layout`](./external/hig-components-layout/) | `external` | Apple Human Interface Guidelines for layout and navigation components. Use when designing or reviewing layout and navigation on an Apple pla |
@@ -133,20 +133,16 @@ When `multi-agent kill [id]` is called:
133
133
 
134
134
  ---
135
135
 
136
- ## Clear Logs
136
+ ## Clear Logs - superseded, redirect only
137
137
 
138
- When `multi-agent clear-logs` is called:
138
+ `multi-agent clear-logs`: **do not run it.** Say it was superseded, then route to
139
+ `multi-agent-prune-logs` (per-task logs, audit trail and metrics kept) or
140
+ `multi-agent-garbage-collect` (`/tmp` scratch + worktree residue).
139
141
 
140
- 1. **Confirm**: `"All task logs will be deleted (agent-log.md + agent-state.json). Worktrees and branches will be kept. Are you sure?"`
141
- 2. **Scan**: Find all `.worktrees/PROJ-*/agent-log.md` and `agent-state.json` files
142
- 3. **Delete**: Remove log and state files from each worktree
143
- 4. **Do NOT reset counter**: `.worktrees/.multi-agent-counter` stays intact - prevents ID collision with existing worktrees
144
- 5. **Confirm**:
145
- ```
146
- 🧹 Logs cleared
147
- Deleted: {N} agent-log.md + {N} agent-state.json
148
- Worktrees & branches: untouched
149
- ```
142
+ It scanned `.worktrees/PROJ-*/`, which holds no logs - they live at
143
+ `$HOME/.claude/logs/multi-agent/{project}/{task-id}/` - so it deleted nothing and
144
+ reported success. The name stays as a redirect so an existing invocation still lands
145
+ somewhere correct.
150
146
 
151
147
  ---
152
148
 
@@ -185,8 +181,8 @@ When `multi-agent purge` is called:
185
181
 
186
182
  When `multi-agent resume [id]` is called:
187
183
 
188
- 1. **Find state file**: Scan `.worktrees/PROJ-{id}/agent-state.json`
189
- - If no `id` given, find the most recent worktree with `status != "done"`
184
+ 1. **Find state file**: `$HOME/.claude/logs/multi-agent/{project}/{task-id}/agent-state.json` - that is where Phase 0 writes it, not inside the worktree. A task finalized by Phase 6 keeps its state at `.../{task-id}/artifacts/agent-state.json`, so look there too before reporting not-found.
185
+ - If no `id` given, take the most recent task dir with `status != "done"`
190
186
  2. **Read state**: Parse `agent-state.json` → determine last completed phase
191
187
  3. **Restore context**: Read `agent-log.md` for previous findings:
192
188
  - Phase 1 analysis findings → reuse in Phase 2+
@@ -397,8 +393,8 @@ Full contract: `refs/tracker-contract.md` section "TaskCreate ordering (strict)"
397
393
  git config user.name "{identity.name}"
398
394
  git config user.email "{identity.email}"
399
395
  ```
400
- 4. Create log file: `.worktrees/PROJ-{id}/agent-log.md` with header
401
- 5. Create state file: `.worktrees/PROJ-{id}/agent-state.json` with:
396
+ 4. Create log file: `$HOME/.claude/logs/multi-agent/{project}/{task-id}/agent-log.md` with header
397
+ 5. Create state file: `$HOME/.claude/logs/multi-agent/{project}/{task-id}/agent-state.json` with:
402
398
  ```json
403
399
  {
404
400
  "taskId": "PROJ-12345",
@@ -589,7 +585,7 @@ Skip this sub-step if the task is NOT a component implementation (e.g., bug fix,
589
585
  ⏱️ Total: 3m 18s | Agents: 12 calls | Files: 4 changed
590
586
  📦 Commit: abc1234 | PR: #87
591
587
  📖 Wiki: {ComponentName}.md pushed to wiki master
592
- 📋 Full report: .worktrees/PROJ-{id}/agent-log.md
588
+ 📋 Full report: ~/.claude/logs/multi-agent/{project}/{task-id}/agent-log.md
593
589
  ```
594
590
  3. Log: `📋 Phase 7: Report complete`
595
591
 
@@ -49,3 +49,7 @@ Run the task end-to-end with no confirmations.
49
49
  2. **Set the autopilot flag** - `"autopilot": true` in `agent-state.json`
50
50
  3. **Start the multi-agent pipeline** - All confirmations are skipped
51
51
  4. **On failure** - After 3 retries still failing → pause, ask the user
52
+
53
+ ## Required: outward-facing payload contracts
54
+
55
+ Before writing anything outward-facing - PR body, Jira comment, Confluence page, closing report - load `$HOME/.claude/multi-agent-refs/payload-contracts.md`. It names the canonical section set for each payload, the markup dialect per surface (PR body is Markdown, Jira is wiki markup - mixing them is a defect), and the token/duration numbers the closing report must carry. Improvising a payload shape from memory is the most common failure of the short modes.
@@ -12,7 +12,7 @@ argument-hint: "[\"<free-text description>\"] [figma-url] [swagger-url] - all
12
12
 
13
13
  Creates exactly one Jira issue, and only after explicit approval. The issue type (Task / Bug / Story) is asked at the start of every run. No branches, no commits, no worktrees. The description comes from the type's standard template (baseline, not a mined heading set); sections auto-size - a conditional section renders only when its trigger is present, otherwise the heading is omitted.
14
14
 
15
- > **Language**: issue content (summary + description) and user-facing questions follow `prefs.global.outputLanguage` - intentional exception to the "external payloads stay English" default (the issue is authored for the user's team). Code identifiers and URLs stay verbatim.
15
+ > **Language**: issue content (summary + description) and user-facing questions follow `prefs.global.outputLanguage`, like every other user-facing payload body (`rules.md` matrix). Code identifiers and URLs stay verbatim.
16
16
 
17
17
  ## Standard templates (A = always, C = conditional)
18
18
 
@@ -64,23 +64,10 @@ Phase 7: Report → Channels (Jira / Confluence / PR / Wiki)
64
64
  | Phase 7 channels (Jira / Confluence / PR / Wiki) | ✅ | ✅ (same) |
65
65
  | Duration | ~10-15 min | ~7-10 min |
66
66
 
67
- ## Analysis doc supplied to a fast mode (warn before starting)
67
+ ## Required: outward-facing payload contracts
68
68
 
69
- The `--dev` family skips Phase 1 (Analysis) and Phase 2 (Planning) by design. So when
70
- the input references an analysis document - a Confluence URL, a local analysis file,
71
- or the user says "I ran analysis for this" - there is **no phase that turns it into a
72
- plan**. The doc becomes raw context for one Dev pass, and work comes out ordered by
73
- whatever the model read first: the bottom of the dependency chain lands, the screen
74
- wiring does not.
69
+ Before writing anything outward-facing - PR body, Jira comment, Confluence page, closing report - load `$HOME/.claude/multi-agent-refs/payload-contracts.md`. It names the canonical section set for each payload, the markup dialect per surface (PR body is Markdown, Jira is wiki markup - mixing them is a defect), and the token/duration numbers the closing report must carry. Improvising a payload shape from memory is the most common failure of the short modes.
75
70
 
76
- Say so before starting, once, and offer the choice:
71
+ ## Intake warnings (`--dev` family)
77
72
 
78
- ```
79
- This mode skips Analysis and Planning, so the analysis document will not be turned
80
- into a task breakdown. For analysis-driven screen work, /multi-agent or
81
- /multi-agent:local run both phases.
82
- 1. Continue with --dev (doc as context only)
83
- 2. Switch to the full pipeline
84
- ```
85
-
86
- Autopilot picks 1 and logs the warning rather than asking.
73
+ Two checks belong at the top of every `--dev` run and are specified once in `$HOME/.claude/multi-agent-refs/phases/modes.md` "Intake warnings shared by the whole `--dev` family": an analysis document supplied to a mode that skips Analysis and Planning, and a branch that already carries the work (which wants `/multi-agent:ship`, not a second Dev pass). Read that section rather than reasoning about it from scratch.
@@ -55,3 +55,11 @@ Phase 7: Report → Short terminal summary
55
55
  | Confirmation (test/commit/PR) | Yes | Yes | No | **No** |
56
56
  | Review | Parallel+triage (CLI-aware) | Parallel+triage (CLI-aware) | Parallel+triage (CLI-aware) | **Parallel+triage, auto-fix** |
57
57
  | Estimated duration | ~12 min | ~7 min | ~10 min | **~5 min** |
58
+
59
+ ## Required: outward-facing payload contracts
60
+
61
+ Before writing anything outward-facing - PR body, Jira comment, Confluence page, closing report - load `$HOME/.claude/multi-agent-refs/payload-contracts.md`. It names the canonical section set for each payload, the markup dialect per surface (PR body is Markdown, Jira is wiki markup - mixing them is a defect), and the token/duration numbers the closing report must carry. Improvising a payload shape from memory is the most common failure of the short modes.
62
+
63
+ ## Intake warnings (`--dev` family)
64
+
65
+ Two checks belong at the top of every `--dev` run and are specified once in `$HOME/.claude/multi-agent-refs/phases/modes.md` "Intake warnings shared by the whole `--dev` family": an analysis document supplied to a mode that skips Analysis and Planning, and a branch that already carries the work (which wants `/multi-agent:ship`, not a second Dev pass). Read that section rather than reasoning about it from scratch.
@@ -21,7 +21,7 @@ Phase 7: Report → Jira/Wiki + log + knowledge/memory
21
21
 
22
22
  ## When to use it
23
23
 
24
- - Quick bug fix or small feature - review overhead is unnecessary
24
+ - Quick bug fix or small feature - analysis and planning buy nothing here
25
25
  - You're working on the current branch and don't want to switch worktrees
26
26
  - Quick bug fix or small feature - analysis and planning buy nothing here
27
27
 
@@ -36,23 +36,10 @@ multi-agent-dev-local "PROJ-12345" # Jira
36
36
  multi-agent-dev-local "Bug: LoginView dark mode" # Free-text
37
37
  ```
38
38
 
39
- ## Analysis doc supplied to a fast mode (warn before starting)
40
-
41
- The `--dev` family skips Phase 1 (Analysis) and Phase 2 (Planning) by design. So when
42
- the input references an analysis document - a Confluence URL, a local analysis file,
43
- or the user says "I ran analysis for this" - there is **no phase that turns it into a
44
- plan**. The doc becomes raw context for one Dev pass, and work comes out ordered by
45
- whatever the model read first: the bottom of the dependency chain lands, the screen
46
- wiring does not.
39
+ ## Required: outward-facing payload contracts
47
40
 
48
- Say so before starting, once, and offer the choice:
41
+ Before writing anything outward-facing - PR body, Jira comment, Confluence page, closing report - load `$HOME/.claude/multi-agent-refs/payload-contracts.md`. It names the canonical section set for each payload, the markup dialect per surface (PR body is Markdown, Jira is wiki markup - mixing them is a defect), and the token/duration numbers the closing report must carry. Improvising a payload shape from memory is the most common failure of the short modes.
49
42
 
50
- ```
51
- This mode skips Analysis and Planning, so the analysis document will not be turned
52
- into a task breakdown. For analysis-driven screen work, /multi-agent or
53
- /multi-agent:local run both phases.
54
- 1. Continue with --dev (doc as context only)
55
- 2. Switch to the full pipeline
56
- ```
43
+ ## Intake warnings (`--dev` family)
57
44
 
58
- Autopilot picks 1 and logs the warning rather than asking.
45
+ Two checks belong at the top of every `--dev` run and are specified once in `$HOME/.claude/multi-agent-refs/phases/modes.md` "Intake warnings shared by the whole `--dev` family": an analysis document supplied to a mode that skips Analysis and Planning, and a branch that already carries the work (which wants `/multi-agent:ship`, not a second Dev pass). Read that section rather than reasoning about it from scratch.
@@ -41,3 +41,11 @@ Routes to the orchestrator with the `--dev --local autopilot` flags. The pipelin
41
41
  multi-agent-dev-local-autopilot "PROJ-12345" # Jira
42
42
  multi-agent-dev-local-autopilot "Add retry to HomeNetworking" # Free-text
43
43
  ```
44
+
45
+ ## Required: outward-facing payload contracts
46
+
47
+ Before writing anything outward-facing - PR body, Jira comment, Confluence page, closing report - load `$HOME/.claude/multi-agent-refs/payload-contracts.md`. It names the canonical section set for each payload, the markup dialect per surface (PR body is Markdown, Jira is wiki markup - mixing them is a defect), and the token/duration numbers the closing report must carry. Improvising a payload shape from memory is the most common failure of the short modes.
48
+
49
+ ## Intake warnings (`--dev` family)
50
+
51
+ Two checks belong at the top of every `--dev` run and are specified once in `$HOME/.claude/multi-agent-refs/phases/modes.md` "Intake warnings shared by the whole `--dev` family": an analysis document supplied to a mode that skips Analysis and Planning, and a branch that already carries the work (which wants `/multi-agent:ship`, not a second Dev pass). Read that section rather than reasoning about it from scratch.