@mmerterden/multi-agent-pipeline 11.3.1 → 11.4.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 (27) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/README.md +1 -1
  3. package/install/claude.mjs +43 -1
  4. package/package.json +1 -1
  5. package/pipeline/commands/multi-agent/SKILL.md +7 -3
  6. package/pipeline/commands/multi-agent/{generate → create-jira}/SKILL.md +1 -1
  7. package/pipeline/commands/multi-agent/help/SKILL.md +12 -8
  8. package/pipeline/commands/multi-agent/review/SKILL.md +36 -4
  9. package/pipeline/commands/multi-agent/review-issue/SKILL.md +22 -0
  10. package/pipeline/commands/multi-agent/review-jira/SKILL.md +22 -0
  11. package/pipeline/commands/multi-agent/sync/SKILL.md +6 -6
  12. package/pipeline/multi-agent-refs/cross-cli-contract.md +7 -7
  13. package/pipeline/multi-agent-refs/generate-issue.md +1 -1
  14. package/pipeline/multi-agent-refs/readiness-review.md +65 -0
  15. package/pipeline/scripts/fixtures/install-layout.tsv +5 -5
  16. package/pipeline/scripts/smoke-generate-issue.sh +12 -12
  17. package/pipeline/scripts/smoke-review-readiness.sh +91 -0
  18. package/pipeline/scripts/smoke-wrapper-preservation.sh +68 -0
  19. package/pipeline/skills/.skill-manifest.json +24 -16
  20. package/pipeline/skills/.skills-index.json +29 -11
  21. package/pipeline/skills/shared/core/{multi-agent-generate → multi-agent-create-jira}/SKILL.md +2 -2
  22. package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +8 -4
  23. package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +19 -10
  24. package/pipeline/skills/shared/core/multi-agent-review-issue/SKILL.md +25 -0
  25. package/pipeline/skills/shared/core/multi-agent-review-jira/SKILL.md +25 -0
  26. package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +5 -5
  27. package/pipeline/skills/skills-index.md +5 -3
package/CHANGELOG.md CHANGED
@@ -14,6 +14,44 @@ Internal file-layout changes that don't affect the slash-command surface are sti
14
14
 
15
15
  ---
16
16
 
17
+ ## [11.4.0] - 2026-07-10
18
+
19
+ Review PR-picker, two readiness-review commands, and durable local-only wrappers.
20
+
21
+ - **`/multi-agent:review` no-URL PR picker.** With no argument (interactive), review
22
+ now lists open GitHub + Bitbucket PRs in one labeled list and multi-selects which
23
+ to review (per-PR inline comments + approve/needs-work), instead of silently
24
+ defaulting to the local branch diff. Autopilot / no open PRs falls back to the
25
+ local diff; explicit URL/`#N`/branch still work. The Copilot twin was brought to
26
+ parity (input-aware + PR posting).
27
+ - **New `/multi-agent:review-jira` + `/multi-agent:review-issue`.** Grade whether a
28
+ Jira issue / GitHub issue is ready for the pipeline (scope, acceptance criteria,
29
+ repro, design reference, API contract, stack signal, dependencies) by reusing the
30
+ Phase 0 maturity engine (`issue-fetcher.sh`) plus a readiness rubric, then post
31
+ the gaps back as a comment on the item (confirmed; autopilot auto-posts). Read-only
32
+ on code: no worktree, no branch, no creation. Command count 36 -> 38.
33
+ - **Corporate alias wrappers survive updates.** `install/claude.mjs` now preserves
34
+ command dirs whose SKILL.md is `local-only: true` across the namespace wipe, so
35
+ personal `multi-agent:<name>` aliases that delegate to a private marketplace plugin
36
+ are no longer destroyed on every install/update (they were, before). Covered by a
37
+ new `smoke-wrapper-preservation.sh`. (The wrappers themselves are local-only and
38
+ never ship in this package.)
39
+
40
+ ## [11.3.2] - 2026-07-10
41
+
42
+ Command rename + website refresh.
43
+
44
+ - **Renamed `/multi-agent:generate` -> `/multi-agent:create-jira`** (Copilot skill
45
+ `multi-agent-generate` -> `multi-agent-create-jira`). The command is the
46
+ consolidated Jira-issue creator that asks the type (Task / Bug / Story); the
47
+ new name says what it does. Command dir, Copilot skill, dispatcher rows, help
48
+ (EN + TR), the command inventory in the cross-CLI contract + both sync copies,
49
+ the skill index + manifest, and the contract smoke were all updated; command
50
+ count stays 36. The internal ref (`generate-issue.md`) keeps its filename.
51
+ - **Website:** corrected the `multi-agent-plugins` skill count (205 -> 227, the
52
+ real sum across the five toolkits) and bumped the pipeline card to this version.
53
+ - Also published v11.3.1 to GitHub Packages (both registries were on npmjs only).
54
+
17
55
  ## [11.3.1] - 2026-07-10
18
56
 
19
57
  Self-audit patch (found by running `/multi-agent:refactor` on the pipeline itself): a data-loss fix, a latent gate regression, supply-chain hardening, and a few correctness fixes.
package/README.md CHANGED
@@ -63,7 +63,7 @@ The discipline behind all of this — bounded loops, evidence gates, token-budge
63
63
  | Local | `/multi-agent:local "task"` | Full pipeline, current branch (no worktree) |
64
64
  | Finish | `/multi-agent:finish` | Run the review→test→commit→report tail over local work |
65
65
 
66
- Helpers: `setup`, `status`, `resume #N`, `review`, `test`, `channels`, `stack`, `update`, `sync`, `refactor`, `jira`, `issue`, `analysis`, `generate-task`, `generate-bug`. Full list: `/multi-agent:help`.
66
+ Helpers: `setup`, `status`, `resume #N`, `review`, `test`, `channels`, `stack`, `update`, `sync`, `refactor`, `jira`, `issue`, `analysis`, `create-jira`. Full list: `/multi-agent:help`.
67
67
 
68
68
  ## Stacks
69
69
 
@@ -12,7 +12,7 @@
12
12
  * @module install/claude
13
13
  */
14
14
 
15
- import { existsSync, readFileSync, rmSync } from "fs";
15
+ import { existsSync, readFileSync, readdirSync, rmSync, statSync, writeFileSync } from "fs";
16
16
  import { join } from "path";
17
17
  import { execSync } from "child_process";
18
18
 
@@ -76,10 +76,52 @@ function installCommands(pipelineSrc, dest, useSymlinks) {
76
76
  // linger as ghost slash commands. Other namespaces under
77
77
  // `~/.claude/commands/` are untouched.
78
78
  const ownedCmdDir = join(dest, "multi-agent");
79
+ // Preserve local-only alias wrappers (frontmatter `local-only: true`) across
80
+ // the wipe. They live ONLY under ~/.claude (never in pipeline/commands, and
81
+ // never synced), so without this snapshot+restore they would be destroyed on
82
+ // every install/update. Pipeline never ships these names, so restore is safe.
83
+ const preservedWrappers = snapshotLocalOnlyWrappers(ownedCmdDir);
79
84
  wipeDir(ownedCmdDir);
80
85
 
81
86
  copyDir(commandsSrc, dest, { useSymlinks });
87
+ const restored = restoreLocalOnlyWrappers(ownedCmdDir, preservedWrappers);
82
88
  console.log(` -> ${countFiles(commandsSrc)} files copied to ${dest}`);
89
+ if (restored > 0) {
90
+ console.log(` -> preserved ${restored} local-only alias wrapper(s)`);
91
+ }
92
+ }
93
+
94
+ // Snapshot single-level command dirs whose SKILL.md declares `local-only: true`
95
+ // (their files are read into memory) so installCommands can restore them after
96
+ // the namespace wipe.
97
+ function snapshotLocalOnlyWrappers(ownedCmdDir) {
98
+ const out = [];
99
+ if (!existsSync(ownedCmdDir)) return out;
100
+ for (const name of readdirSync(ownedCmdDir)) {
101
+ const dir = join(ownedCmdDir, name);
102
+ const skill = join(dir, "SKILL.md");
103
+ if (!existsSync(skill)) continue;
104
+ if (!/^local-only:\s*true\s*$/m.test(readFileSync(skill, "utf-8"))) continue;
105
+ const files = readdirSync(dir)
106
+ .filter((f) => statSync(join(dir, f)).isFile())
107
+ .map((f) => ({ rel: f, content: readFileSync(join(dir, f), "utf-8") }));
108
+ out.push({ name, files });
109
+ }
110
+ return out;
111
+ }
112
+
113
+ // Restore snapshotted local-only wrappers, but never clobber a real command the
114
+ // pipeline just installed under the same name. Returns the count restored.
115
+ function restoreLocalOnlyWrappers(ownedCmdDir, preserved) {
116
+ let n = 0;
117
+ for (const w of preserved) {
118
+ const dir = join(ownedCmdDir, w.name);
119
+ if (existsSync(dir)) continue; // pipeline shipped a real command with this name
120
+ ensureDir(dir);
121
+ for (const f of w.files) writeFileSync(join(dir, f.rel), f.content);
122
+ n++;
123
+ }
124
+ return n;
83
125
  }
84
126
 
85
127
  // The pipeline's reference docs (refs/) + internal pickers live OUTSIDE the
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mmerterden/multi-agent-pipeline",
3
- "version": "11.3.1",
3
+ "version": "11.4.0",
4
4
  "description": "8-phase AI development pipeline with full orchestration on Claude Code and Copilot CLI. Analysis, planning, TDD, CLI-aware parallel review with consensus surfacing + Fable triage, default-FAIL evidence gates, secret + intent guards, per-phase cost ledger, persistent learnings memory, wiki generation, commit automation. Token-preserving uninstall.",
5
5
  "type": "module",
6
6
  "main": "index.js",
@@ -73,11 +73,13 @@ Lib scripts (`~/.claude/lib/`):
73
73
  | `kill [id]` | Delete worktree (logs preserved). Confirm first |
74
74
  | `clear-logs` | Clean global log directory. Keep counter |
75
75
  | `purge` | Worktree + logs + counter - full reset (double confirm) |
76
- | `review` | Review current diff only (lightweight, no worktree) |
76
+ | `review [#N\|repo#N\|PR-url\|branch]` | Parallel review of a PR or branch diff; with no input (interactive) lists open GitHub + Bitbucket PRs to multi-select. Posts per-finding inline comments + approve/needs-work on PRs. No worktree. |
77
+ | `review-jira [KEY\|url]` | Grade a Jira issue's readiness for the pipeline (scope / AC / repro / design / API / stack), then post the gaps as a Jira comment. Read-only on code. |
78
+ | `review-issue [#N\|repo#N\|url]` | Grade a GitHub issue's readiness for the pipeline, then post the gaps as an issue comment. Read-only on code. |
77
79
  | `analysis ["<feature>"]` | Standalone feature-spec analizi: Figma / Swagger / Confluence / Jira / repo girdileri sabit 7-bölümlük şablona dökülür, humanizer'dan geçer, Local/Confluence/Jira hedef(ler)ine post edilir. Worktree veya commit yok. Dev'e zincirleme yok. |
78
80
  | `build-optimize` | iOS-only Xcode build performance wrapper. Vendored `xcode-build-orchestrator`'a dispatch eder; benchmark + compilation / project / SPM analyzer'lar + recommend-first plan `.build-benchmark/optimization-plan.md`. Non-iOS stack'lerde fail-fast. |
79
81
  | `channels [PR-url\|#N\|Jira-url\|Jira-id] [--channels pr,jira,confluence,wiki] [--content normal,test,auto-diff,note] [--message "..."]` | Post task report to multi-select channels (PR description, Jira comment, Confluence page, Wiki pages) with multi-select content sources. Humanizer pass per-channel. Bitbucket PR updates use reviewer-preserving PUT. Phase 7 delegates to this command; also invocable post-hoc for fixes made outside the pipeline. No worktree. |
80
- | `generate ["desc"] [figma-url] [swagger-url]` | Create a standards-compliant Jira issue: asks the type (**Task** / **Bug** / **Story**), mines the project's recent same-type issues for conventions (summary format, labels, priority, test-scenario style), detects the active sprint, drafts from a standard template with auto-sizing sections (Design Reference / API Contract / Screenshots appear only when their source is given), asks about unknown fields, then full draft preview + explicit approval before create. No worktree, no commits. |
82
+ | `create-jira ["desc"] [figma-url] [swagger-url]` | Create a standards-compliant Jira issue: asks the type (**Task** / **Bug** / **Story**), mines the project's recent same-type issues for conventions (summary format, labels, priority, test-scenario style), detects the active sprint, drafts from a standard template with auto-sizing sections (Design Reference / API Contract / Screenshots appear only when their source is given), asks about unknown fields, then full draft preview + explicit approval before create. No worktree, no commits. |
81
83
  | `test` or `test [args]` | UI Bug Hunter - screenshot + tap + analyze on booted simulator via MCP (read `$HOME/.claude/commands/sim-test.md`). `/multi-agent:test` also resolves here via the `commands/multi-agent/test/SKILL.md` delegate. |
82
84
  | `manual-test [#id]` | Phase 5 standalone Manual Test - checks out the task branch, prints Xcode / SourceTree hints, waits for user verdict (`ok` / `fix: ...`). |
83
85
  | `stack [ios\|android\|backend\|mobile\|all]` | Swap skills for next conversation. No arg = show current stack. |
@@ -111,13 +113,15 @@ This command uses lazy loading for token efficiency. Read the relevant sub-file
111
113
  | `sync` | `$HOME/.claude/commands/multi-agent/sync/SKILL.md` |
112
114
  | `clear-logs` | Handled inline - scan + delete agent-log.md/agent-state.json files |
113
115
  | `review` | `$HOME/.claude/commands/multi-agent/review/SKILL.md` |
116
+ | `review-jira` | `$HOME/.claude/commands/multi-agent/review-jira/SKILL.md` (loads `$HOME/.claude/multi-agent-refs/readiness-review.md`) |
117
+ | `review-issue` | `$HOME/.claude/commands/multi-agent/review-issue/SKILL.md` (loads `$HOME/.claude/multi-agent-refs/readiness-review.md`) |
114
118
  | `analysis` | `$HOME/.claude/commands/multi-agent/analysis/SKILL.md` |
115
119
  | `build-optimize` | `$HOME/.claude/commands/multi-agent/build-optimize/SKILL.md` |
116
120
  | `local` | `$HOME/.claude/commands/multi-agent/local/SKILL.md` |
117
121
  | `local-autopilot` | `$HOME/.claude/commands/multi-agent/local-autopilot/SKILL.md` |
118
122
  | `dev-local` | `$HOME/.claude/commands/multi-agent/dev-local/SKILL.md` |
119
123
  | `dev-local-autopilot` | `$HOME/.claude/commands/multi-agent/dev-local-autopilot/SKILL.md` |
120
- | `generate` | `$HOME/.claude/commands/multi-agent/generate/SKILL.md` (loads `$HOME/.claude/multi-agent-refs/generate-issue.md`) |
124
+ | `create-jira` | `$HOME/.claude/commands/multi-agent/create-jira/SKILL.md` (loads `$HOME/.claude/multi-agent-refs/generate-issue.md`) |
121
125
  | `stack` | `$HOME/.claude/commands/multi-agent/stack/SKILL.md` |
122
126
  | `language` | Handled inline - set/show prompt language in preferences |
123
127
  | SwiftUI component task (iOS) | `$HOME/.claude/multi-agent-refs/swiftui-guide.md` |
@@ -3,7 +3,7 @@ description: "Create a standards-compliant Jira issue (Task / Bug / Story): asks
3
3
  argument-hint: "[\"<free-text description>\"] [figma-url] [swagger-url] - all optional, asked interactively when missing"
4
4
  ---
5
5
 
6
- # multi-agent generate - Standards-Compliant Jira Issue Creator
6
+ # multi-agent create-jira - Standards-Compliant Jira Issue Creator
7
7
 
8
8
  **Input**: $ARGUMENTS
9
9
 
@@ -107,11 +107,13 @@ Status & Resume:
107
107
  Post-Hoc & Side-Channel:
108
108
 
109
109
  /multi-agent:channels Post multi-channel report (Jira / Confluence / Wiki / PR description)
110
- /multi-agent:review Parallel review of current diff only (no full pipeline)
110
+ /multi-agent:review Parallel review of a PR or branch diff; no URL -> pick open GitHub/Bitbucket PRs
111
+ /multi-agent:review-jira Grade a Jira issue's pipeline-readiness -> comment the gaps on it
112
+ /multi-agent:review-issue Grade a GitHub issue's pipeline-readiness -> comment the gaps on it
111
113
  /multi-agent:analysis ["analysis-name"] Feature-spec analysis (Figma + Swagger + Confluence + repos) → per-platform v3 doc (23-section Full / 7-section Lite)
112
114
  /multi-agent:analysis-resolve [doc] Resolve Section 20 open questions of an analysis doc, one at a time with source-labeled candidates
113
115
  /multi-agent:build-optimize iOS-only Xcode build perf wrapper → benchmark + analyze + recommend-first .build-benchmark/optimization-plan.md
114
- /multi-agent:generate ["desc"] [figma-url] [swagger-url] Create a Jira Task/Bug/Story matching team conventions (asks type + mining + active sprint + auto-sizing sections + preview & approval)
116
+ /multi-agent:create-jira ["desc"] [figma-url] [swagger-url] Create a Jira Task/Bug/Story matching team conventions (asks type + mining + active sprint + auto-sizing sections + preview & approval)
115
117
  /multi-agent:diff-explain Map a Phase 4 triage finding back to specific diff lines
116
118
  /multi-agent:search Cross-task log search with smart ranking; --semantic queries triage corpus
117
119
  /multi-agent:scan Skill security scan against tiered pattern catalog
@@ -222,8 +224,8 @@ Examples:
222
224
  /multi-agent:review
223
225
 
224
226
  # Create a Jira issue that matches team conventions (preview + approval before create)
225
- /multi-agent:generate "Profile screen empty state" https://figma.com/design/abc?node-id=1-2
226
- /multi-agent:generate "Login crash on iOS 17, see attached log"
227
+ /multi-agent:create-jira "Profile screen empty state" https://figma.com/design/abc?node-id=1-2
228
+ /multi-agent:create-jira "Login crash on iOS 17, see attached log"
227
229
 
228
230
  ------------------------------------------------------------
229
231
 
@@ -319,11 +321,13 @@ Status & Resume:
319
321
  Post-Hoc & Side-Channel:
320
322
 
321
323
  /multi-agent:channels Multi-channel rapor gönder (Jira / Confluence / Wiki / PR description)
322
- /multi-agent:review Sadece mevcut diff'i paralel review et (full pipeline yok)
324
+ /multi-agent:review PR veya branch diff'ini paralel review et; URL yoksa -> açık GitHub/Bitbucket PR'larını seçtir
325
+ /multi-agent:review-jira Jira maddesinin pipeline'a hazırlığını değerlendir -> eksikleri yorum olarak ekle
326
+ /multi-agent:review-issue GitHub issue'nun pipeline'a hazırlığını değerlendir -> eksikleri yorum olarak ekle
323
327
  /multi-agent:analysis ["analysis-name"] Feature-spec analizi (Figma + Swagger + Confluence + repolar) → platform başına v3 doküman (23 bölüm Full / 7 bölüm Lite)
324
328
  /multi-agent:analysis-resolve [doc] Analiz dokümanının Bölüm 20 açık sorularını kaynak etiketli adaylarla teker teker çözer
325
329
  /multi-agent:build-optimize iOS-only Xcode build performance wrapper → benchmark + analiz + recommend-first .build-benchmark/optimization-plan.md
326
- /multi-agent:generate ["açıklama"] [figma-url] [swagger-url] Takım standartlarına uygun Jira Task/Bug/Story oluştur (tip sorar + convention mining + aktif sprint + auto-sizing bölümler + önizleme & onay)
330
+ /multi-agent:create-jira ["açıklama"] [figma-url] [swagger-url] Takım standartlarına uygun Jira Task/Bug/Story oluştur (tip sorar + convention mining + aktif sprint + auto-sizing bölümler + önizleme & onay)
327
331
  /multi-agent:diff-explain Phase 4 triage bulgusunu diff satırlarına eşle
328
332
  /multi-agent:search Task log'larında akıllı arama; --semantic triage corpus'unu sorgular
329
333
  /multi-agent:scan Skill güvenlik taraması (tiered pattern catalog)
@@ -434,8 +438,8 @@ Quality & Telemetry (advisory, default açık - prefs.global.* ile kapatılabi
434
438
  /multi-agent:review
435
439
 
436
440
  # Takım standartlarına uygun Jira issue oluştur (oluşturmadan önce önizleme + onay)
437
- /multi-agent:generate "Profil ekranı empty state" https://figma.com/design/abc?node-id=1-2
438
- /multi-agent:generate "iOS 17'de login crash, log ekte"
441
+ /multi-agent:create-jira "Profil ekranı empty state" https://figma.com/design/abc?node-id=1-2
442
+ /multi-agent:create-jira "iOS 17'de login crash, log ekte"
439
443
 
440
444
  ------------------------------------------------------------
441
445
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  description: "Run parallel review on a branch's diff or a Pull Request: 2 models on Claude Code (Fable + Sonnet), 3 models on Copilot CLI (GPT + Opus + Sonnet). On PR input, posts per-finding inline comments and sets approve/needs-work review state."
3
- argument-hint: "[#N | repo#N | PR-URL | branch] - optional: PR by number/URL, repo+number, or local branch. Supports GitHub and Bitbucket Server URLs. If omitted, the current branch is used."
3
+ argument-hint: "[#N | repo#N | PR-URL | branch] - optional: PR by number/URL, repo+number, or local branch. Supports GitHub and Bitbucket Server URLs. If omitted (interactive), open GitHub + Bitbucket PRs are listed for multi-select; autopilot falls back to the current branch."
4
4
  ---
5
5
 
6
6
  # multi-agent review - Review Only Mode
@@ -11,7 +11,8 @@ Skip Phase 0-3 and review a diff only. Five input shapes, two providers:
11
11
 
12
12
  | Input | Resolution | PR action? |
13
13
  |---|---|---|
14
- | (empty) | Current branch (`HEAD` vs `origin/develop`) | No (chat only) |
14
+ | (empty), interactive | **PR picker** - list open GitHub + Bitbucket PRs, multi-select which to review | Yes (per selected PR) |
15
+ | (empty), autopilot / no PRs found | Current branch (`HEAD` vs `origin/develop`) | No (chat only) |
15
16
  | `feature/foo` | Named local branch | No (chat only) |
16
17
  | `#1250` | PR number on the current repo | Yes |
17
18
  | `repo#1250` | PR on a specific repo (GitHub `org/repo`) | Yes |
@@ -40,7 +41,8 @@ trap 'rm -f /tmp/multi-agent-review-${TASK_ID}-*' EXIT
40
41
  # Pseudocode - orchestrator implements this:
41
42
  input="$ARGUMENTS"
42
43
  case "$input" in
43
- "") kind=branch; provider=local; ref=$(git rev-parse --abbrev-ref HEAD) ;;
44
+ "") kind=pick # interactive: go to Step 1a PR picker; autopilot/no-PRs falls back to branch (see 1a)
45
+ ;;
44
46
  https://github.com/*/pull/*) kind=pr; provider=github; org_repo=<extracted>; pr_number=<extracted> ;;
45
47
  https://bitbucket.*/projects/*/repos/*/pull-requests/*)
46
48
  kind=pr; provider=bitbucket-server
@@ -60,6 +62,35 @@ Save to `agent-state.review.input = { kind, provider, ref?, orgRepo?, bbServerHo
60
62
 
61
63
  When `provider=github` and the diff is fetched in Step 2, also persist `agent-state.review.headCommitSha` - GitHub inline-comment posts (`POST /repos/{o}/{r}/pulls/{n}/comments`) require `commit_id`. Bitbucket Server's anchor API does not.
62
64
 
65
+ ### 1a. No-input PR picker - interactive only
66
+
67
+ Reached when `kind=pick` (empty input). Skipped entirely in autopilot: autopilot with no ref goes straight to branch mode (`kind=branch; provider=local; ref=$(git rev-parse --abbrev-ref HEAD)`) so nothing prompts.
68
+
69
+ **List open PRs across both providers** (a provider contributes nothing if its token/CLI is absent - never hard-fail on one provider):
70
+
71
+ ```bash
72
+ # GitHub: current repo's open PRs + the user's own/requested open PRs across repos.
73
+ gh pr list --state open --json number,title,url,headRefName,author,updatedAt 2>/dev/null # current repo
74
+ gh search prs --state open --review-requested=@me --json number,title,url,repository,updatedAt 2>/dev/null
75
+ gh search prs --state open --author=@me --json number,title,url,repository,updatedAt 2>/dev/null
76
+
77
+ # Bitbucket Server: for each configured bitbucket repo (prefs recentRepos / dev-context),
78
+ # resolve creds via credential-store (see Step 2 bitbucket block) then:
79
+ # GET https://$host/rest/api/1.0/projects/$KEY/repos/$slug/pull-requests?state=OPEN&role=REVIEWER
80
+ ```
81
+
82
+ Merge into one deduped list, each row labeled with its provider and PR URL; sort by `updatedAt` desc. If the merged list is EMPTY -> tell the user "no open PRs found", fall back to branch mode, and continue.
83
+
84
+ **Select** - follow `$HOME/.claude/multi-agent-refs/picker-contract.md` (breadcrumb narrator line before the prompt), then `AskUserQuestion` `multiSelect: true`:
85
+
86
+ ```
87
+ question (outputLanguage): "Hangi PR('lar)ı review edeyim?"
88
+ header (English): "Review PRs"
89
+ options: one per open PR -> label "#<N> <short title>", description (outputLanguage): "<repo> · <provider> · <headRef>"
90
+ ```
91
+
92
+ Each selected option maps back to a full `agent-state.review.input` descriptor (provider + orgRepo / bb coordinates + prNumber + raw URL), exactly as Step 1 would have parsed an explicit URL. Then **loop Steps 2-7 once per selected PR** (independent review + post each). If the user selects none, fall back to branch mode.
93
+
63
94
  ### 2. Fetch the diff - kind-aware
64
95
 
65
96
  **branch mode:**
@@ -252,7 +283,8 @@ Standalone `/multi-agent:review` runs use phase id 4 (matches Phase 4 Review in
252
283
 
253
284
  | Input | Mode | PR action |
254
285
  |---|---|---|
255
- | no args | branch (current) | none - chat only |
286
+ | no args (interactive) | PR picker (open GitHub + Bitbucket PRs, multi-select) | inline comments + approve/needs-work, per selected PR |
287
+ | no args (autopilot / no PRs) | branch (current) | none - chat only |
256
288
  | `feature/foo` | branch (named) | none - chat only |
257
289
  | `#N`, `repo#N`, GitHub PR URL | pr (github) | inline comments + approve/needs-work |
258
290
  | Bitbucket Server PR URL | pr (bitbucket-server) | inline comments + approve/needs-work |
@@ -0,0 +1,22 @@
1
+ ---
2
+ description: "Assess whether a GitHub issue is ready for multi-agent development: fetch it, grade scope / acceptance criteria / repro / design / API / stack readiness, then (after confirm) post the gaps as an issue comment. Read-only on code."
3
+ argument-hint: "[#N | repo#N | GitHub issue URL] - optional; with no argument, pick from open issues"
4
+ ---
5
+
6
+ # multi-agent review-issue - GitHub issue readiness review
7
+
8
+ **Input**: $ARGUMENTS
9
+
10
+ Grades an existing GitHub issue for pipeline-readiness and comments the gaps back onto it so the reporter can fix them before a real `/multi-agent` run. No worktree, no branch, no code commits, no pipeline chaining.
11
+
12
+ ## Flow
13
+
14
+ Read `$HOME/.claude/multi-agent-refs/readiness-review.md` and execute the shared readiness flow with **provider = github**:
15
+
16
+ 1. Resolve the item: `#N`, `repo#N` (`org/repo#N`), or a GitHub issue URL. With no argument, offer the picker reusing the `issue` command's list (`gh issue list`) and single-select one.
17
+ 2. Fetch + base maturity via `$HOME/.claude/lib/issue-fetcher.sh` (`gh issue view`; reuse its `maturity` output; no MCP).
18
+ 3. Apply the readiness rubric (testable scope, acceptance criteria / DoD, repro for bugs, design reference for UI, API contract for backend, stack signal, dependencies).
19
+ 4. Print the chat verdict (score + Blockers / Warnings / Gaps), reusing the maturity blocker-vs-warning severity contract.
20
+ 5. Confirm, then post the gap list as an issue comment via `$HOME/.claude/multi-agent-refs/channels/issue-comment.md` (`gh issue comment "$N" --repo "$org/$repo" --body-file <file>`). Autopilot auto-posts.
21
+
22
+ Non-negotiables: verdict content + comment body follow `prefs.global.outputLanguage`; comment tone rules (no AI attribution, no em-dash / section-sign, `Ref:` never `Closes/Fixes`) per `channels/issue-comment.md`. No label change, no assignment, no issue creation, no auto-close.
@@ -0,0 +1,22 @@
1
+ ---
2
+ description: "Assess whether a Jira issue is ready for multi-agent development: fetch it, grade scope / acceptance criteria / repro / design / API / stack readiness, then (after confirm) post the gaps as a Jira comment. Read-only on code."
3
+ argument-hint: "[JIRA-KEY | Jira URL] - optional; with no argument, pick from your open Jira issues"
4
+ ---
5
+
6
+ # multi-agent review-jira - Jira readiness review
7
+
8
+ **Input**: $ARGUMENTS
9
+
10
+ Grades an existing Jira issue for pipeline-readiness and comments the gaps back onto it so the reporter can fix them before a real `/multi-agent` run. No worktree, no branch, no code commits, no pipeline chaining. This is the inverse of `/multi-agent:create-jira`.
11
+
12
+ ## Flow
13
+
14
+ Read `$HOME/.claude/multi-agent-refs/readiness-review.md` and execute the shared readiness flow with **provider = jira**:
15
+
16
+ 1. Resolve the item: `KEY-123` or a `.../browse/KEY-123` URL. With no argument, offer the picker reusing the `jira` command's issue list (assignee=currentUser, open) and single-select one.
17
+ 2. Fetch + base maturity via `$HOME/.claude/lib/issue-fetcher.sh` (reuse its `maturity` output; no MCP).
18
+ 3. Apply the readiness rubric (testable scope, acceptance criteria / DoD, repro for bugs, design reference for UI, API contract for backend, stack signal, dependencies).
19
+ 4. Print the chat verdict (score + Blockers / Warnings / Gaps), reusing the maturity blocker-vs-warning severity contract.
20
+ 5. Confirm, then post the gap list as a Jira comment via `$HOME/.claude/multi-agent-refs/channels/jira.md` (`POST /rest/api/2/issue/{id}/comment`, Bearer token via `credential-store.sh`, UTF-8 verbatim, markdown->wiki). Autopilot auto-posts.
21
+
22
+ Non-negotiables: verdict content + comment body follow `prefs.global.outputLanguage`; comment tone rules (no AI attribution, no em-dash / section-sign, `Ref:` never `Closes`) per `channels/issue-comment.md`. No status change, no assignment, no issue creation.
@@ -55,7 +55,7 @@ Run every step automatically:
55
55
  ```
56
56
  Step 1: PLATFORM Detect macOS / Linux / Windows (Git Bash / WSL); export PLATFORM env
57
57
  Step 1.5: DETECT Compare timestamps, find stale targets
58
- Step 2: COPILOT Claude Code -> Copilot CLI (instructions + 36 sub-command skills)
58
+ Step 2: COPILOT Claude Code -> Copilot CLI (instructions + 38 sub-command skills)
59
59
  Step 3: REPO Claude Code -> pipeline repo (genericized, personal data scrub, bash -n on all sh)
60
60
  Step 3c: PLUGINS pipeline shared/external -> multi-agent-plugins marketplace (rebuild knowledge/,
61
61
  bump changed plugins' patch version, commit + push the plugins repo)
@@ -126,7 +126,7 @@ If nothing is stale → report "All targets up to date" and stop.
126
126
  grep -rl "^local-only: true" ~/multi-agent-pipeline/pipeline/commands/ 2>/dev/null \
127
127
  && { echo "ABORT: local-only wrapper leaked into pipeline/commands"; exit 1; } || true
128
128
  # backstop: no corporate marketplace/skill reference in the synced tree
129
- grep -rniE "ai-ios-engineering-toolkit:(create-ui-component|evolve-ui-component|component-wiki|figma-setup|resource-utility)" \
129
+ grep -rniE "ai-ios-engineering-toolkit:(create-ui-component|evolve-ui-component|fix-bug|branch-and-pr|backlog|code-connect|figma-utility|resource-utility|component-wiki|component-docs|figma-setup)" \
130
130
  ~/multi-agent-pipeline/pipeline/commands/ 2>/dev/null \
131
131
  && { echo "ABORT: corporate reference leaked into pipeline/commands"; exit 1; } || true
132
132
  ```
@@ -239,13 +239,13 @@ This runs on the Claude <-> Copilot axis — the two CLIs the pipeline supports
239
239
  |-------------|-------------|
240
240
  | `~/.claude/commands/multi-agent/{cmd}/SKILL.md` | `~/.copilot/skills/multi-agent-{cmd}/SKILL.md` |
241
241
 
242
- **36 commands are synced** (canonical inventory - must match `cross-cli-contract.md` section 1; drift = contract violation):
242
+ **38 commands are synced** (canonical inventory - must match `cross-cli-contract.md` section 1; drift = contract violation):
243
243
 
244
244
  ```
245
- analysis, analysis-resolve, autopilot, build-optimize, channels, delete, dev,
245
+ analysis, analysis-resolve, autopilot, build-optimize, channels, create-jira, delete, dev,
246
246
  dev-autopilot, dev-local, dev-local-autopilot, diff-explain, finish, garbage-collect,
247
- generate, help, issue, jira, kill, language, local,
248
- local-autopilot, log, manual-test, prune-logs, purge, refactor, resume, review,
247
+ help, issue, jira, kill, language, local,
248
+ local-autopilot, log, manual-test, prune-logs, purge, refactor, resume, review, review-issue, review-jira,
249
249
  scan, search, setup, stack, status, sync, test, update
250
250
  ```
251
251
 
@@ -6,24 +6,24 @@
6
6
 
7
7
  ---
8
8
 
9
- ## 1. Command Inventory (36 commands)
9
+ ## 1. Command Inventory (38 commands)
10
10
 
11
11
  ```
12
- analysis, analysis-resolve, autopilot, build-optimize, channels, delete, dev,
12
+ analysis, analysis-resolve, autopilot, build-optimize, channels, create-jira, delete, dev,
13
13
  dev-autopilot, dev-local, dev-local-autopilot, diff-explain, finish, garbage-collect,
14
- generate, help, issue, jira, kill, language, local,
15
- local-autopilot, log, manual-test, prune-logs, purge, refactor, resume, review,
14
+ help, issue, jira, kill, language, local,
15
+ local-autopilot, log, manual-test, prune-logs, purge, refactor, resume, review, review-issue, review-jira,
16
16
  scan, search, setup, stack, status, sync, test, update
17
17
  ```
18
18
 
19
19
  Categories:
20
20
 
21
21
  - **Interactive pickers** (single-purpose, not modes): `jira`, `issue`
22
- - **Issue generator** (one-shot, no worktree, asks type Task/Bug/Story, hard approval gate before create): `generate`
22
+ - **Issue generator** (one-shot, no worktree, asks type Task/Bug/Story, hard approval gate before create): `create-jira`
23
23
  - **Full 8-phase modes**: `autopilot`, `local`, `local-autopilot`
24
24
  - **Fast modes** (Init -> Dev(Opus) -> Commit -> Report): `dev`, `dev-autopilot`, `dev-local`, `dev-local-autopilot`
25
25
  - **Tail modes** (run the pipeline tail over already-done local work): `finish`
26
- - **Ops commands** (one-shot, no worktree): `status`, `log`, `kill`, `purge`, `delete`, `resume`, `review`, `analysis`, `analysis-resolve`, `build-optimize`, `channels`, `scan`, `search`, `diff-explain`, `garbage-collect`, `prune-logs`
26
+ - **Ops commands** (one-shot, no worktree): `status`, `log`, `kill`, `purge`, `delete`, `resume`, `review`, `review-jira`, `review-issue`, `analysis`, `analysis-resolve`, `build-optimize`, `channels`, `scan`, `search`, `diff-explain`, `garbage-collect`, `prune-logs`
27
27
  - **Meta-ops**: `setup`, `sync`, `update`, `help`, `refactor`, `test`, `stack`, `manual-test`, `language`
28
28
 
29
29
  > **Inventory drift is a contract violation.** Adding a slash command under `pipeline/commands/multi-agent/` without updating this list + its counterpart Copilot dir (`pipeline/skills/shared/core/multi-agent-<cmd>/`) is a merge blocker. `smoke-commands-skills-parity.sh` enforces command ↔ skill directory parity; `smoke-cross-cli-behavior.sh` enforces behavior parity. This doc is the authoritative command list - bump the count + table together.
@@ -245,7 +245,7 @@ For clipboard ops, callers still gate with `if command -v pbpaste >/dev/null; th
245
245
 
246
246
  This contract is validated by:
247
247
 
248
- - `smoke-cross-cli-behavior.sh` - asserts all 36 commands behave identically, pulls from Section 2 (placeholder vocab), Section 5 (argument parsing), Section 6 (output formats); also regression-locks the 6-persona agent deployment
248
+ - `smoke-cross-cli-behavior.sh` - asserts all 38 commands behave identically, pulls from Section 2 (placeholder vocab), Section 5 (argument parsing), Section 6 (output formats); also regression-locks the 6-persona agent deployment
249
249
  - `smoke-commands-skills-parity.sh` (50 assertions) - enforces colon-form command ↔ dash-form skill directory parity
250
250
  - `smoke-compliance-skills.sh` (45 assertions) - enforces store-compliance skill catalog + 4 consumer wiring
251
251
  - `smoke-personal-data.sh` - extended in 0.5.5 to treat deprecated placeholders (`{github-username}`, `{your-website}`, `{website-repo}`) as leaks; adds `mmerterden` to public-handle blocklist for generic docs
@@ -1,6 +1,6 @@
1
1
  # Generate Issue - Shared Flow (generate)
2
2
 
3
- > **TLDR** - Shared 12-step flow for `/multi-agent:generate`. Asks the issue type (Task / Bug / Story), mines the target project's existing same-type issues to learn team conventions, detects the active sprint, drafts a standards-compliant issue from a fixed standard template with auto-sizing sections, asks the user about every genuinely unknown field, renders a full preview, and creates the Jira issue only after explicit approval. Creates exactly one Jira issue per run - no branches, no commits, no worktrees.
3
+ > **TLDR** - Shared 12-step flow for `/multi-agent:create-jira`. Asks the issue type (Task / Bug / Story), mines the target project's existing same-type issues to learn team conventions, detects the active sprint, drafts a standards-compliant issue from a fixed standard template with auto-sizing sections, asks the user about every genuinely unknown field, renders a full preview, and creates the Jira issue only after explicit approval. Creates exactly one Jira issue per run - no branches, no commits, no worktrees.
4
4
 
5
5
  Consumed by `generate.md`. This ref is never invoked directly.
6
6
 
@@ -0,0 +1,65 @@
1
+ # Readiness Review (shared flow for review-jira + review-issue)
2
+
3
+ Assess whether a tracker item (Jira issue or GitHub issue) is READY to hand to the multi-agent pipeline, list the concrete gaps, and - after confirmation - post them back as a comment on the item so the reporter can fix it. Read-only on code: no worktree, no branch, no commits, no dev chaining. This is the inverse of `/multi-agent:create-jira` (which authors a well-formed item); here we grade an existing one.
4
+
5
+ Both `/multi-agent:review-jira` and `/multi-agent:review-issue` execute this flow; only the provider (fetch + comment endpoint + picker) differs.
6
+
7
+ ## Language
8
+ Instruction prose here is English. The verdict shown in chat and the comment body follow `prefs.global.outputLanguage` (the comment is authored for the user's team, same exception as create-jira). AskUserQuestion `label`/`header` stay English; `question`/`description` follow `outputLanguage`.
9
+
10
+ ## Step 1 - resolve the item
11
+ - With an argument: `review-jira KEY-123` / `https://<jira>/browse/KEY-123`; `review-issue #N` / `repo#N` / GitHub issue URL.
12
+ - With no argument: offer the picker - review-jira reuses the `jira` command's issue list (`jira/SKILL.md` JQL, assignee=currentUser, open); review-issue reuses the `issue` command's list (`gh issue list`). Single-select (one item reviewed per run; re-run for more).
13
+
14
+ ## Step 2 - fetch + base maturity
15
+ Run `$HOME/.claude/lib/issue-fetcher.sh` (the same fetcher Phase 0 uses). It returns a descriptor with `title`, `type`, `status`, `description`, and `maturity = { score (0..100), blockers[], warnings[], summary }`. Reuse that maturity verbatim as the baseline; never re-fetch through MCP.
16
+
17
+ ## Step 3 - readiness rubric (extends maturity)
18
+ Maturity is generic; add these pipeline-readiness dimensions by reading the fetched `title` + `description` (no invention - only judge what is written). Each is `pass` / `gap`:
19
+
20
+ | Dimension | Ready when | Gap signal |
21
+ |---|---|---|
22
+ | Scope is testable | the change is bounded + verifiable (what "done" means is stated) | vague ("improve X"), no measurable outcome |
23
+ | Acceptance criteria / DoD | AC or DoD present (Task/Story/Feature) | none (aligns with maturity `no_acceptance_criteria`) |
24
+ | Reproduction | Bugs have steps + expected/actual | none (aligns with maturity `no_repro_steps`) |
25
+ | Design reference | UI work links a Figma frame or attaches a screenshot | UI implied but no design source |
26
+ | API contract | backend/integration work names endpoints or a Swagger/OpenAPI ref | data/contract implied, none given |
27
+ | Platform / stack signal | the target stack is inferable (iOS / Android / frontend / backend) | ambiguous - Phase 1 could not route |
28
+ | Dependencies | blocking deps/links are called out when they exist | hidden dependency likely |
29
+
30
+ Only emit a dimension as a gap when its trigger applies (do not demand an API contract on a copy-change task). Merge: `gaps = maturity.blockers + maturity.warnings + rubric gaps`.
31
+
32
+ ## Step 4 - verdict (chat, always)
33
+ Print a compact verdict; reuse the maturity blocker-vs-warning severity contract (same as the Phase 0 maturity check):
34
+
35
+ ```
36
+ Readiness: KEY-123 - score 60/100 - NEEDS WORK
37
+ BLOCK Description is empty
38
+ WARN No acceptance criteria detected
39
+ GAP UI work but no design reference
40
+ GAP Target stack ambiguous
41
+ ```
42
+ Verdict rule: any blocker -> NOT READY (blocking); else any warning/gap -> NEEDS WORK; else READY. Mirrors `jira/SKILL.md` maturity handling: blockers would halt a real run, warnings would prompt.
43
+
44
+ ## Step 5 - post the comment (confirmed)
45
+ Posting to a tracker is outward-facing - confirm first (autopilot auto-posts):
46
+
47
+ ```
48
+ question (outputLanguage): "Eksiklikleri {KEY|#N} üzerine yorum olarak ekleyeyim mi?"
49
+ header (English): "Post readiness comment"
50
+ options:
51
+ - label "Post comment", description (outputLanguage): "Eksiklik listesini item'a yorum olarak yaz"
52
+ - label "Chat only", description (outputLanguage): "Sadece sohbet özeti, item'a dokunma"
53
+ default: option 1
54
+ ```
55
+
56
+ Comment body: a short "Multi-agent readiness review" heading, the score + verdict, then the gap list grouped Blockers / Warnings / Gaps, each with a one-line fix suggestion. Tone rules (same as `channels/issue-comment.md`): no AI/Claude/Copilot attribution, no "generated by", no em-dash/section-sign, plain ASCII; if referencing another item use `Ref: #N` never `Closes/Fixes`. READY items get a short "ready to pick up" confirmation instead of a gap list.
57
+
58
+ Provider dispatch:
59
+ - **Jira** (`review-jira`): post via `$HOME/.claude/multi-agent-refs/channels/jira.md` comment path - `POST /rest/api/2/issue/{id}/comment`, Bearer token from `keychainMapping.jira` via `credential-store.sh`, UTF-8 verbatim (`jq --rawfile` + `curl --data-binary @payload.json`), markdown->wiki conversion.
60
+ - **GitHub** (`review-issue`): `gh issue comment "$N" --repo "$org/$repo" --body-file <file>` per `channels/issue-comment.md` (auth via the Phase 0 `gh` account).
61
+
62
+ On post failure, surface the failing endpoint on stderr; the chat verdict remains the source of truth.
63
+
64
+ ## Not in scope
65
+ No status transitions, no assignment changes, no issue creation, no code review (that is `/multi-agent:review`). This command only reads the item and comments its readiness.
@@ -1,17 +1,17 @@
1
1
  .claude/CLAUDE.md 1
2
2
  .claude/agents 8
3
- .claude/commands 42
3
+ .claude/commands 44
4
4
  .claude/lib 24
5
5
  .claude/multi-agent-preferences.json 1
6
- .claude/multi-agent-refs 50
6
+ .claude/multi-agent-refs 51
7
7
  .claude/rules 12
8
8
  .claude/schemas 23
9
- .claude/scripts 178
9
+ .claude/scripts 180
10
10
  .claude/settings.json 1
11
11
  .claude/skills 428
12
12
  .copilot/agents 8
13
13
  .copilot/copilot-instructions.md 1
14
14
  .copilot/lib 24
15
15
  .copilot/schemas 23
16
- .copilot/scripts 178
17
- .copilot/skills 465
16
+ .copilot/scripts 180
17
+ .copilot/skills 467
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env bash
2
- # smoke-generate-issue.sh - contract for /multi-agent:generate.
2
+ # smoke-generate-issue.sh - contract for /multi-agent:create-jira.
3
3
  #
4
4
  # Verifies:
5
5
  # 1. All 3 files exist (1 command, shared ref, 1 Copilot/plugin SKILL.md).
@@ -16,9 +16,9 @@ set -euo pipefail
16
16
 
17
17
  HERE="$(cd "$(dirname "$0")" && pwd)"
18
18
  ROOT="$(cd "$HERE/../.." && pwd)"
19
- CMD="$ROOT/pipeline/commands/multi-agent/generate/SKILL.md"
19
+ CMD="$ROOT/pipeline/commands/multi-agent/create-jira/SKILL.md"
20
20
  REF="$ROOT/pipeline/multi-agent-refs/generate-issue.md"
21
- SKILL="$ROOT/pipeline/skills/shared/core/multi-agent-generate/SKILL.md"
21
+ SKILL="$ROOT/pipeline/skills/shared/core/multi-agent-create-jira/SKILL.md"
22
22
  DISPATCHER="$ROOT/pipeline/commands/multi-agent/SKILL.md"
23
23
  CONTRACT="$ROOT/pipeline/multi-agent-refs/cross-cli-contract.md"
24
24
  SYNC="$ROOT/pipeline/commands/multi-agent/sync/SKILL.md"
@@ -43,7 +43,7 @@ echo ""
43
43
  echo "→ 2. frontmatter keys"
44
44
  head -5 "$CMD" | grep -q '^description:' && pass "description: ${CMD##*/}" || fail "description missing: ${CMD##*/}"
45
45
  head -5 "$CMD" | grep -q '^argument-hint:' && pass "argument-hint: ${CMD##*/}" || fail "argument-hint missing: ${CMD##*/}"
46
- head -8 "$SKILL" | grep -q '^name: multi-agent-generate$' && pass "name: multi-agent-generate" || fail "name wrong: $SKILL"
46
+ head -8 "$SKILL" | grep -q '^name: multi-agent-create-jira$' && pass "name: multi-agent-create-jira" || fail "name wrong: $SKILL"
47
47
  head -8 "$SKILL" | grep -q '^language: en' && pass "language en" || fail "language missing: $SKILL"
48
48
  head -8 "$SKILL" | grep -q '^user-invocable: true' && pass "user-invocable" || fail "user-invocable missing: $SKILL"
49
49
 
@@ -89,15 +89,15 @@ grep -Fqi "swagger" "$REF" && pass "swagger context present" || fail "swagger co
89
89
 
90
90
  echo ""
91
91
  echo "→ 8. registration + count consistency (36)"
92
- grep -Fq '| `generate ' "$DISPATCHER" && pass "dispatcher routing: generate" || fail "dispatcher routing missing: generate"
93
- grep -Fq "generate/SKILL.md" "$DISPATCHER" && pass "dispatcher loading row" || fail "dispatcher loading row missing"
94
- grep -Fq "## 1. Command Inventory (36 commands)" "$CONTRACT" && pass "contract count = 36" || fail "contract count wrong"
95
- grep -Eq '(^|[ ,])generate, help([ ,]|$)' "$CONTRACT" && pass "contract list has generate" || fail "contract list missing generate"
96
- grep -Fq "**36 commands are synced**" "$SYNC" && pass "sync count = 36" || fail "sync count wrong"
92
+ grep -Fq '| `create-jira ' "$DISPATCHER" && pass "dispatcher routing: create-jira" || fail "dispatcher routing missing: generate"
93
+ grep -Fq "create-jira/SKILL.md" "$DISPATCHER" && pass "dispatcher loading row" || fail "dispatcher loading row missing"
94
+ grep -Fq "## 1. Command Inventory (38 commands)" "$CONTRACT" && pass "contract count = 38" || fail "contract count wrong"
95
+ grep -Eq '(^|[ ,])create-jira([ ,]|$)' "$CONTRACT" && pass "contract list has create-jira" || fail "contract list missing generate"
96
+ grep -Fq "**38 commands are synced**" "$SYNC" && pass "sync count = 38" || fail "sync count wrong"
97
97
  SYNC_SKILL="$ROOT/pipeline/skills/shared/core/multi-agent-sync/SKILL.md"
98
- grep -Fq "**36 commands are synced**" "$SYNC_SKILL" && pass "sync SKILL count = 36" || fail "sync SKILL count wrong (Copilot parity)"
99
- grep -Fq "generate" "$ROOT/pipeline/skills/shared/core/multi-agent-help/SKILL.md" && pass "help SKILL lists generate" || fail "help SKILL missing generate (Copilot parity)"
100
- grep -c "multi-agent:generate" "$HELP" | awk '{exit !($1>=2)}' && pass "help.md has EN + TR entries" || fail "help.md entries incomplete"
98
+ grep -Fq "**38 commands are synced**" "$SYNC_SKILL" && pass "sync SKILL count = 38" || fail "sync SKILL count wrong (Copilot parity)"
99
+ grep -Fq "create-jira" "$ROOT/pipeline/skills/shared/core/multi-agent-help/SKILL.md" && pass "help SKILL lists create-jira" || fail "help SKILL missing create-jira (Copilot parity)"
100
+ grep -c "multi-agent:create-jira" "$HELP" | awk '{exit !($1>=2)}' && pass "help.md has EN + TR entries" || fail "help.md entries incomplete"
101
101
  # no stale split-command references anywhere in the synced surfaces
102
102
  if grep -rqE "generate-task|generate-bug" "$DISPATCHER" "$CONTRACT" "$SYNC" "$HELP" "$CMD" "$REF" "$SKILL"; then
103
103
  fail "stale generate-task/generate-bug reference found"
@@ -0,0 +1,91 @@
1
+ #!/usr/bin/env bash
2
+ # smoke-review-readiness.sh - contract for /multi-agent:review-jira + /multi-agent:review-issue.
3
+ #
4
+ # Verifies:
5
+ # 1. Files exist: 2 commands, 2 Copilot skills, 1 shared ref.
6
+ # 2. Frontmatter keys on both surfaces.
7
+ # 3. Both commands delegate to refs/readiness-review.md and reuse issue-fetcher.
8
+ # 4. The shared ref names the maturity engine + both comment channels + the confirm gate.
9
+ # 5. Registration: dispatcher rows, routing rows, help EN+TR, contract inventory + count (38).
10
+ # 6. Read-only guarantee (no worktree/commit/create) stated.
11
+ # 7. Forbidden strings absent (em-dash, section sign, the M-word).
12
+
13
+ set -euo pipefail
14
+ HERE="$(cd "$(dirname "$0")" && pwd)"
15
+ ROOT="$(cd "$HERE/../.." && pwd)"
16
+
17
+ REF="$ROOT/pipeline/multi-agent-refs/readiness-review.md"
18
+ CMD_J="$ROOT/pipeline/commands/multi-agent/review-jira/SKILL.md"
19
+ CMD_I="$ROOT/pipeline/commands/multi-agent/review-issue/SKILL.md"
20
+ SK_J="$ROOT/pipeline/skills/shared/core/multi-agent-review-jira/SKILL.md"
21
+ SK_I="$ROOT/pipeline/skills/shared/core/multi-agent-review-issue/SKILL.md"
22
+ DISPATCHER="$ROOT/pipeline/commands/multi-agent/SKILL.md"
23
+ CONTRACT="$ROOT/pipeline/multi-agent-refs/cross-cli-contract.md"
24
+ HELP="$ROOT/pipeline/commands/multi-agent/help/SKILL.md"
25
+
26
+ PASS=0; FAIL=0
27
+ pass() { PASS=$((PASS+1)); echo " ✓ $1"; }
28
+ fail() { FAIL=$((FAIL+1)); echo " ✗ $1"; }
29
+
30
+ echo "→ 1. files exist"
31
+ for f in "$REF" "$CMD_J" "$CMD_I" "$SK_J" "$SK_I"; do
32
+ if [ -f "$f" ]; then pass "exists: ${f#$ROOT/}"; else fail "missing: ${f#$ROOT/}"; fi
33
+ done
34
+ [ "$FAIL" -eq 0 ] || { echo "══ review-readiness smoke: $PASS passed, $FAIL failed ══"; exit 1; }
35
+
36
+ echo ""
37
+ echo "→ 2. frontmatter keys"
38
+ for f in "$CMD_J" "$CMD_I"; do
39
+ head -4 "$f" | grep -q '^description:' && pass "description: ${f#$ROOT/}" || fail "description missing: ${f#$ROOT/}"
40
+ head -4 "$f" | grep -q '^argument-hint:' && pass "argument-hint: ${f#$ROOT/}" || fail "argument-hint missing: ${f#$ROOT/}"
41
+ done
42
+ head -8 "$SK_J" | grep -q '^name: multi-agent-review-jira$' && pass "name: multi-agent-review-jira" || fail "name wrong: $SK_J"
43
+ head -8 "$SK_I" | grep -q '^name: multi-agent-review-issue$' && pass "name: multi-agent-review-issue" || fail "name wrong: $SK_I"
44
+ for f in "$SK_J" "$SK_I"; do
45
+ head -8 "$f" | grep -q '^user-invocable: true' && pass "user-invocable: ${f#$ROOT/}" || fail "user-invocable missing: ${f#$ROOT/}"
46
+ done
47
+
48
+ echo ""
49
+ echo "→ 3. delegate to shared ref + reuse issue-fetcher"
50
+ for f in "$CMD_J" "$CMD_I" "$SK_J" "$SK_I"; do
51
+ grep -Fq "readiness-review.md" "$f" && pass "ref link: ${f#$ROOT/}" || fail "ref link missing: ${f#$ROOT/}"
52
+ grep -Fq "issue-fetcher.sh" "$f" && pass "issue-fetcher reuse: ${f#$ROOT/}" || fail "issue-fetcher missing: ${f#$ROOT/}"
53
+ done
54
+
55
+ echo ""
56
+ echo "→ 4. shared ref names maturity + channels + confirm gate"
57
+ grep -Fqi "maturity" "$REF" && pass "ref uses maturity engine" || fail "ref missing maturity"
58
+ grep -Fq "channels/jira.md" "$REF" && pass "ref -> jira comment channel" || fail "ref missing jira channel"
59
+ grep -Fq "channels/issue-comment.md" "$REF" && pass "ref -> github comment channel" || fail "ref missing issue channel"
60
+ grep -Fqi "confirm" "$REF" && pass "ref has confirm-before-post gate" || fail "ref missing confirm gate"
61
+ grep -Fqi "rubric" "$REF" && pass "ref has readiness rubric" || fail "ref missing rubric"
62
+
63
+ echo ""
64
+ echo "→ 5. registration + count (38)"
65
+ grep -Fq '| `review-jira ' "$DISPATCHER" && pass "dispatcher desc: review-jira" || fail "dispatcher desc missing review-jira"
66
+ grep -Fq '| `review-issue ' "$DISPATCHER" && pass "dispatcher desc: review-issue" || fail "dispatcher desc missing review-issue"
67
+ grep -Fq "review-jira/SKILL.md" "$DISPATCHER" && pass "dispatcher routing: review-jira" || fail "dispatcher routing missing review-jira"
68
+ grep -Fq "review-issue/SKILL.md" "$DISPATCHER" && pass "dispatcher routing: review-issue" || fail "dispatcher routing missing review-issue"
69
+ grep -Fq "## 1. Command Inventory (38 commands)" "$CONTRACT" && pass "contract count = 38" || fail "contract count wrong"
70
+ grep -Eq '(^|[ ,])review-jira([ ,]|$)' "$CONTRACT" && pass "contract inventory has review-jira" || fail "contract missing review-jira"
71
+ grep -Eq '(^|[ ,])review-issue([ ,]|$)' "$CONTRACT" && pass "contract inventory has review-issue" || fail "contract missing review-issue"
72
+ grep -Fq "multi-agent:review-jira" "$HELP" && pass "help lists review-jira" || fail "help missing review-jira"
73
+ grep -Fq "multi-agent:review-issue" "$HELP" && pass "help lists review-issue" || fail "help missing review-issue"
74
+
75
+ echo ""
76
+ echo "→ 6. read-only guarantee stated"
77
+ for f in "$CMD_J" "$CMD_I"; do
78
+ grep -Fqi "no worktree" "$f" && pass "read-only stated: ${f#$ROOT/}" || fail "read-only note missing: ${f#$ROOT/}"
79
+ done
80
+
81
+ echo ""
82
+ echo "→ 7. forbidden strings absent"
83
+ MWORD="MAN""DATORY"
84
+ for f in "$REF" "$CMD_J" "$CMD_I" "$SK_J" "$SK_I"; do
85
+ if grep -q $'—\|§\|…' "$f"; then fail "forbidden unicode punctuation in ${f##*/}"; else pass "punctuation clean: ${f##*/}"; fi
86
+ if grep -q "$MWORD" "$f"; then fail "forbidden word in ${f##*/}"; else pass "vocabulary clean: ${f##*/}"; fi
87
+ done
88
+
89
+ echo ""
90
+ echo "══ review-readiness smoke: $PASS passed, $FAIL failed ══"
91
+ [ "$FAIL" -eq 0 ]
@@ -0,0 +1,68 @@
1
+ #!/usr/bin/env bash
2
+ # smoke-wrapper-preservation.sh - local-only alias wrappers must survive install/update.
3
+ #
4
+ # Local-only wrappers (frontmatter `local-only: true`) live ONLY under
5
+ # ~/.claude/commands/multi-agent/ (never in pipeline/, never synced). install
6
+ # wipes that namespace before copying from pipeline; without the snapshot+restore
7
+ # carve-out in install/claude.mjs installCommands, wrappers are destroyed on every
8
+ # run. This asserts they survive a second install.
9
+
10
+ set -uo pipefail
11
+ HERE="$(cd "$(dirname "$0")" && pwd)"
12
+ ROOT="$(cd "$HERE/../.." && pwd)"
13
+ INSTALL_JS="$ROOT/install.js"
14
+
15
+ PASS=0; FAIL=0
16
+ pass() { PASS=$((PASS+1)); echo " ✓ $1"; }
17
+ fail() { FAIL=$((FAIL+1)); echo " ✗ $1"; }
18
+
19
+ TMP="$(mktemp -d)"
20
+ trap 'rm -rf "$TMP"' EXIT
21
+
22
+ echo "→ 1. first install lays down the namespace"
23
+ if HOME="$TMP" node "$INSTALL_JS" --claude >/dev/null 2>&1; then
24
+ pass "install --claude (1st) exited 0"
25
+ else
26
+ fail "install --claude (1st) failed"
27
+ echo "══ wrapper-preservation smoke: $PASS passed, $FAIL failed ══"; exit 1
28
+ fi
29
+
30
+ WRAP_DIR="$TMP/.claude/commands/multi-agent/zz-wrapper-probe"
31
+ mkdir -p "$WRAP_DIR"
32
+ cat > "$WRAP_DIR/SKILL.md" <<'EOF'
33
+ ---
34
+ description: "probe local-only wrapper"
35
+ allowed-tools: Skill
36
+ local-only: true
37
+ ---
38
+ Use the Skill tool to invoke `some-plugin:some-skill`.
39
+ EOF
40
+ [ -f "$WRAP_DIR/SKILL.md" ] && pass "seeded a local-only wrapper" || fail "could not seed wrapper"
41
+
42
+ echo ""
43
+ echo "→ 2. second install must PRESERVE the wrapper"
44
+ if HOME="$TMP" node "$INSTALL_JS" --claude >/dev/null 2>&1; then
45
+ pass "install --claude (2nd) exited 0"
46
+ else
47
+ fail "install --claude (2nd) failed"
48
+ fi
49
+ if [ -f "$WRAP_DIR/SKILL.md" ] && grep -q '^local-only: true' "$WRAP_DIR/SKILL.md"; then
50
+ pass "local-only wrapper survived re-install"
51
+ else
52
+ fail "local-only wrapper was DESTROYED by re-install (carve-out regressed)"
53
+ fi
54
+
55
+ echo ""
56
+ echo "→ 3. a normal (non-local-only) stray dir is still wiped"
57
+ STRAY="$TMP/.claude/commands/multi-agent/zz-stray-probe"
58
+ mkdir -p "$STRAY"; printf -- '---\ndescription: "stray"\n---\n' > "$STRAY/SKILL.md"
59
+ HOME="$TMP" node "$INSTALL_JS" --claude >/dev/null 2>&1
60
+ if [ -f "$STRAY/SKILL.md" ]; then
61
+ fail "non-local-only stray survived (wipe too weak)"
62
+ else
63
+ pass "non-local-only stray correctly wiped"
64
+ fi
65
+
66
+ echo ""
67
+ echo "══ wrapper-preservation smoke: $PASS passed, $FAIL failed ══"
68
+ [ "$FAIL" -eq 0 ]
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
- "generatedAt": "2026-07-09T19:01:45Z",
4
- "skillCount": 187,
3
+ "generatedAt": "2026-07-10T13:33:19Z",
4
+ "skillCount": 189,
5
5
  "entries": [
6
6
  {
7
7
  "path": "shared/core/apple-archive-compliance/SKILL.md",
@@ -13,11 +13,11 @@
13
13
  },
14
14
  {
15
15
  "path": "shared/core/multi-agent-analysis-resolve/SKILL.md",
16
- "sha256": "53e05855937c28986e9328589ecc9e7361473bf71a548a1207c325a13da82488"
16
+ "sha256": "e1c400e1db0ed1c8956a9989f6232c4d45a6b9002331379a2e119b344e948622"
17
17
  },
18
18
  {
19
19
  "path": "shared/core/multi-agent-analysis/SKILL.md",
20
- "sha256": "1711d118edd37fb64051f9dba3d9bf8f7a7565ff3b91e5336f547cff905d6d5b"
20
+ "sha256": "8d37d4d90493ccda7a39084651537fd4d28f2bdde82ecaac835d8c0f2d996363"
21
21
  },
22
22
  {
23
23
  "path": "shared/core/multi-agent-autopilot/SKILL.md",
@@ -25,11 +25,15 @@
25
25
  },
26
26
  {
27
27
  "path": "shared/core/multi-agent-build-optimize/SKILL.md",
28
- "sha256": "9ffd6f8eb758c079bb6b84817023566dc46ff8a1e2d4b6f23e5ab3c0300b23dc"
28
+ "sha256": "0ba38c451d193063cf20e5efe6e6af1e1c738e03448d8f917259a8e2f6b2cd9b"
29
29
  },
30
30
  {
31
31
  "path": "shared/core/multi-agent-channels/SKILL.md",
32
- "sha256": "d31fea96c01fb48b7dbbd496cb378593fe3b17d2ee821c093e8997fe2d4ba61f"
32
+ "sha256": "122792d25a2b7329af80086b6e0e563a7b8c3ec2e954ceb7e7c9dc8ea7cf71ba"
33
+ },
34
+ {
35
+ "path": "shared/core/multi-agent-create-jira/SKILL.md",
36
+ "sha256": "40caf0489ad8322cd00d792a244e772d4ddb6ccfd7c3807729d6b17590e7f81c"
33
37
  },
34
38
  {
35
39
  "path": "shared/core/multi-agent-delete/SKILL.md",
@@ -57,19 +61,15 @@
57
61
  },
58
62
  {
59
63
  "path": "shared/core/multi-agent-finish/SKILL.md",
60
- "sha256": "086438494380328e3ed06c7e0ad87351c0b620d7e46dd9ff406b503c35a4ad92"
64
+ "sha256": "3e8e430f7aee626be96129a9d0ae6c9ac5ef0dbf80cbe580dde2d7fb5fccfed1"
61
65
  },
62
66
  {
63
67
  "path": "shared/core/multi-agent-garbage-collect/SKILL.md",
64
68
  "sha256": "24736f163e645e2bee7d552e555ae6e32cd3fc3d15c844813a75b908a58d52fd"
65
69
  },
66
- {
67
- "path": "shared/core/multi-agent-generate/SKILL.md",
68
- "sha256": "be92e3c2599bbbab79bd4368ac8a62c55f97e49363e195926039dc2d1111324f"
69
- },
70
70
  {
71
71
  "path": "shared/core/multi-agent-help/SKILL.md",
72
- "sha256": "0a8da9321dcae6d5dc3be664fcaaa5c575d346d29acf39c65aea99f37a9629ba"
72
+ "sha256": "00772bab27906cdbdcae72d115c4e1f12ddd914fa7aa274923618a3a906e6caa"
73
73
  },
74
74
  {
75
75
  "path": "shared/core/multi-agent-issue/SKILL.md",
@@ -113,15 +113,23 @@
113
113
  },
114
114
  {
115
115
  "path": "shared/core/multi-agent-refactor/SKILL.md",
116
- "sha256": "bbf735fc92cd0d8577f5f9a6ec8ded7afeb6017e54be1207b79e3a2ab73a24e1"
116
+ "sha256": "f8a9495f6aebacba634672d6c9416046521cbdfa769746c9ff3a4a993482a85a"
117
117
  },
118
118
  {
119
119
  "path": "shared/core/multi-agent-resume/SKILL.md",
120
120
  "sha256": "2d781df8da65dc3def03e9064d191bbf7d17411470ecd16d8473cccd74a2927a"
121
121
  },
122
+ {
123
+ "path": "shared/core/multi-agent-review-issue/SKILL.md",
124
+ "sha256": "76c742bc7ac2cd1f909216989a235a8953aa4e6997a31801c9953bcd431c9317"
125
+ },
126
+ {
127
+ "path": "shared/core/multi-agent-review-jira/SKILL.md",
128
+ "sha256": "4121907fd27fae70491785f8e15e7c2c8fd6f1bf1b1846262070639063cc83ee"
129
+ },
122
130
  {
123
131
  "path": "shared/core/multi-agent-review/SKILL.md",
124
- "sha256": "e2b8cf23775cfd6be2727cef1c47d78030c6600240e4446f7ceb4297e8cf7d46"
132
+ "sha256": "b1fd57d2b80ee0fe2490439d9f2688fcf415857c2aab60549c5456e27693b9a9"
125
133
  },
126
134
  {
127
135
  "path": "shared/core/multi-agent-scan/SKILL.md",
@@ -145,7 +153,7 @@
145
153
  },
146
154
  {
147
155
  "path": "shared/core/multi-agent-sync/SKILL.md",
148
- "sha256": "c9459954dfd20f9b823a9ef7730baa474a1332efbbe76c92558153569c4de99b"
156
+ "sha256": "28a057b30ec642f5cc1f22c9c50834aae280e6abaf58194b36d85bde717cfb14"
149
157
  },
150
158
  {
151
159
  "path": "shared/core/multi-agent-test/SKILL.md",
@@ -157,7 +165,7 @@
157
165
  },
158
166
  {
159
167
  "path": "shared/core/multi-agent/SKILL.md",
160
- "sha256": "0efe9bacd0e459c58260fb25e31e82d82aa73437e5c7953f680eab49484a76b3"
168
+ "sha256": "758646b660047bb4595528a57153afda0e1b331c70ad8c04bbd18066fc4bb336"
161
169
  },
162
170
  {
163
171
  "path": "shared/external/accessibility-compliance-accessibility-audit/SKILL.md",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
- "skillCount": 187,
3
+ "skillCount": 189,
4
4
  "entries": [
5
5
  {
6
6
  "name": "accessibility-compliance-accessibility-audit",
@@ -785,6 +785,15 @@
785
785
  "triggerPaths": [],
786
786
  "relativePath": "shared/core/multi-agent-channels/SKILL.md"
787
787
  },
788
+ {
789
+ "name": "multi-agent-create-jira",
790
+ "description": "Create a standards-compliant Jira issue (Task / Bug / Story): asks the type, mines project conventions, drafts from a standard template with auto-sizing sections, full preview + explicit approval before create.",
791
+ "platform": null,
792
+ "group": "core",
793
+ "triggerKeywords": [],
794
+ "triggerPaths": [],
795
+ "relativePath": "shared/core/multi-agent-create-jira/SKILL.md"
796
+ },
788
797
  {
789
798
  "name": "multi-agent-delete",
790
799
  "description": "Uninstall the pipeline from Claude Code + Copilot CLI. Keychain access tokens are left untouched. Asks for double confirmation.",
@@ -857,15 +866,6 @@
857
866
  "triggerPaths": [],
858
867
  "relativePath": "shared/core/multi-agent-garbage-collect/SKILL.md"
859
868
  },
860
- {
861
- "name": "multi-agent-generate",
862
- "description": "Create a standards-compliant Jira issue (Task / Bug / Story): asks the type, mines project conventions, drafts from a standard template with auto-sizing sections, full preview + explicit approval before create.",
863
- "platform": null,
864
- "group": "core",
865
- "triggerKeywords": [],
866
- "triggerPaths": [],
867
- "relativePath": "shared/core/multi-agent-generate/SKILL.md"
868
- },
869
869
  {
870
870
  "name": "multi-agent-help",
871
871
  "description": "Multi-agent pipeline usage guide - renders in EN or TR per prefs.global.outputLanguage (falls back to promptLanguage for backward compatibility).",
@@ -985,13 +985,31 @@
985
985
  },
986
986
  {
987
987
  "name": "multi-agent-review",
988
- "description": "Run parallel review on the current branch's diff: 2 models on Claude Code (Fable + Sonnet), 3 models on Copilot CLI (GPT + Opus + Sonnet). Review-only slice of the pipeline.",
988
+ "description": "Run parallel review on a branch diff or a Pull Request: 2 models on Claude Code (Fable + Sonnet), 3 models on Copilot CLI (GPT + Opus + Sonnet). On PR input, posts per-finding inline comments + approve/needs-work. With no input (interactive), lists open GitHub + Bitbucket PRs to multi-select.",
989
989
  "platform": null,
990
990
  "group": "core",
991
991
  "triggerKeywords": [],
992
992
  "triggerPaths": [],
993
993
  "relativePath": "shared/core/multi-agent-review/SKILL.md"
994
994
  },
995
+ {
996
+ "name": "multi-agent-review-issue",
997
+ "description": "Assess whether a GitHub issue is ready for multi-agent development: fetch it, grade scope / acceptance criteria / repro / design / API / stack readiness, then (after confirm) post the gaps as an issue comment. Read-only on code.",
998
+ "platform": null,
999
+ "group": "core",
1000
+ "triggerKeywords": [],
1001
+ "triggerPaths": [],
1002
+ "relativePath": "shared/core/multi-agent-review-issue/SKILL.md"
1003
+ },
1004
+ {
1005
+ "name": "multi-agent-review-jira",
1006
+ "description": "Assess whether a Jira issue is ready for multi-agent development: fetch it, grade scope / acceptance criteria / repro / design / API / stack readiness, then (after confirm) post the gaps as a Jira comment. Read-only on code.",
1007
+ "platform": null,
1008
+ "group": "core",
1009
+ "triggerKeywords": [],
1010
+ "triggerPaths": [],
1011
+ "relativePath": "shared/core/multi-agent-review-jira/SKILL.md"
1012
+ },
995
1013
  {
996
1014
  "name": "multi-agent-scan",
997
1015
  "description": "Skill security scan: walks local skill directories against a tiered pattern catalog.",
@@ -1,12 +1,12 @@
1
1
  ---
2
- name: multi-agent-generate
2
+ name: multi-agent-create-jira
3
3
  language: en
4
4
  description: "Create a standards-compliant Jira issue (Task / Bug / Story): asks the type, mines project conventions, drafts from a standard template with auto-sizing sections, full preview + explicit approval before create."
5
5
  user-invocable: true
6
6
  argument-hint: "[\"<free-text description>\"] [figma-url] [swagger-url] - all optional, asked interactively when missing"
7
7
  ---
8
8
 
9
- # multi-agent generate - Standards-Compliant Jira Issue Creator
9
+ # multi-agent create-jira - Standards-Compliant Jira Issue Creator
10
10
 
11
11
  **Input**: $ARGUMENTS
12
12
 
@@ -97,8 +97,10 @@ Utility Commands (dash form on Copilot, colon form on Claude Code):
97
97
  /multi-agent:clear-logs Clean global log directory
98
98
  /multi-agent:purge Worktree + logs - full reset (double confirm)
99
99
  /multi-agent:channels Post multi-channel report (Jira/Confluence/Wiki/PR)
100
- /multi-agent:review Review current diff only
101
- /multi-agent:generate ["desc"] [figma-url] [swagger-url] Create a Jira Task/Bug/Story matching team conventions (asks type + preview + approval)
100
+ /multi-agent:review Review a PR or branch diff; no URL -> pick open GitHub/Bitbucket PRs
101
+ /multi-agent:review-jira Grade a Jira issue's pipeline-readiness -> comment the gaps
102
+ /multi-agent:review-issue Grade a GitHub issue's pipeline-readiness -> comment the gaps
103
+ /multi-agent:create-jira ["desc"] [figma-url] [swagger-url] Create a Jira Task/Bug/Story matching team conventions (asks type + preview + approval)
102
104
  /multi-agent:sync Sync ecosystem (Claude + Copilot + website)
103
105
  /multi-agent:setup Keychain tokens + Git identity + language onboarding
104
106
  /multi-agent:language [en|tr] Show or set prompt language
@@ -233,8 +235,10 @@ Utility Komutları:
233
235
  /multi-agent:clear-logs Global log dizinini temizle
234
236
  /multi-agent:purge Worktree + log'lar - tam reset (çift onay)
235
237
  /multi-agent:channels Multi-channel rapor gönder (Jira/Confluence/Wiki/PR)
236
- /multi-agent:review Sadece mevcut diff'i review et
237
- /multi-agent:generate ["açıklama"] [figma-url] [swagger-url] Takım standartlarına uygun Jira Task/Bug/Story oluştur (tip sorar + önizleme + onay)
238
+ /multi-agent:review PR veya branch diff'ini review et; URL yoksa -> açık GitHub/Bitbucket PR seç
239
+ /multi-agent:review-jira Jira maddesinin pipeline hazırlığını değerlendir -> eksikleri yorumla
240
+ /multi-agent:review-issue GitHub issue hazırlığını değerlendir -> eksikleri yorumla
241
+ /multi-agent:create-jira ["açıklama"] [figma-url] [swagger-url] Takım standartlarına uygun Jira Task/Bug/Story oluştur (tip sorar + önizleme + onay)
238
242
  /multi-agent:sync Ekosistemi senkronize et
239
243
  /multi-agent:setup Keychain token + Git kimliği + dil onboarding
240
244
  /multi-agent:language [en|tr] Prompt dilini göster veya ayarla
@@ -1,27 +1,34 @@
1
1
  ---
2
2
  name: multi-agent-review
3
3
  language: en
4
- description: "Run parallel review on the current branch's diff: 2 models on Claude Code (Fable + Sonnet), 3 models on Copilot CLI (GPT + Opus + Sonnet). Review-only slice of the pipeline."
4
+ description: "Run parallel review on a branch diff or a Pull Request: 2 models on Claude Code (Fable + Sonnet), 3 models on Copilot CLI (GPT + Opus + Sonnet). On PR input, posts per-finding inline comments + approve/needs-work. With no input (interactive), lists open GitHub + Bitbucket PRs to multi-select."
5
5
  user-invocable: true
6
- argument-hint: "[branch] - optional: branch to review. If omitted, the current branch is used."
6
+ argument-hint: "[#N | repo#N | PR-URL | branch] - PR by number/URL, repo+number, or branch (GitHub + Bitbucket Server). If omitted: interactive PR picker, else current branch."
7
7
  ---
8
8
 
9
9
  # multi-agent review - Review Only Mode
10
10
 
11
11
  **Input**: $ARGUMENTS
12
12
 
13
- Skip Phase 0-3 and review the current diff only.
13
+ Skip Phase 0-3 and review a diff only. Input shapes: a PR (`#N`, `repo#N`, GitHub/Bitbucket-Server PR URL), a branch name, or empty.
14
14
 
15
15
  ## Steps
16
16
 
17
- 1. **Determine the branch** - if there is an argument, that branch; otherwise the current branch:
18
- ```bash
19
- git rev-parse --abbrev-ref HEAD
20
- ```
17
+ 1. **Resolve the input** (`{kind, provider}`):
18
+ - PR URL / `#N` / `repo#N` -> `kind=pr` (`github` or `bitbucket-server`).
19
+ - branch name -> `kind=branch` (local).
20
+ - **empty + interactive** -> `kind=pick` (Step 1a picker); **empty + autopilot** -> current branch.
21
21
 
22
- 2. **Get the diff** - diff against the target branch:
22
+ 1a. **No-input PR picker** (interactive only): list open PRs across both providers and multi-select which to review.
23
+ - GitHub: `gh pr list --state open --json number,title,url,headRefName,updatedAt` (current repo) plus `gh search prs --state open --review-requested=@me`/`--author=@me`.
24
+ - Bitbucket Server: for each configured repo, `GET /rest/api/1.0/projects/{KEY}/repos/{slug}/pull-requests?state=OPEN` (creds via `credential-store`).
25
+ - Merge + label each row `(github)`/`(bitbucket)`, then AskUserQuestion `multiSelect: true` (breadcrumb per `multi-agent-refs/picker-contract.md`). Review each selected PR (loop steps 2-6). Empty list or none selected -> fall back to the current branch.
26
+
27
+ 2. **Get the diff** - kind-aware:
23
28
  ```bash
24
- git diff origin/develop...HEAD
29
+ # branch: git diff origin/develop...HEAD
30
+ # github PR: gh pr diff "$N" --repo "$org/$repo" (+ head SHA for inline anchors)
31
+ # bitbucket PR: curl -u "$BB_USER:$BB_TOKEN" .../pull-requests/$N/diff?contextLines=10
25
32
  ```
26
33
 
27
34
  3. **Start parallel reviewers** - reviewer set depends on the host CLI:
@@ -53,9 +60,11 @@ Skip Phase 0-3 and review the current diff only.
53
60
  - 🟡 **Important** → fix recommended
54
61
  - 🟢 **Suggestion** → optional
55
62
 
56
- 6. **Show a summary**:
63
+ 6. **Show a summary** (always prints, any mode):
57
64
  ```
58
65
  🔍 Review Complete
59
66
  | Model | Verdict | Blocking | Important | Suggestion |
60
67
  Consensus: ✅ APPROVED
61
68
  ```
69
+
70
+ 7. **Post to PR** - only when `kind=pr` (full contract: `$HOME/.copilot/multi-agent-refs/channels/pr-review-actions.md`). Decision from accepted findings: 0 accepted blocking AND 0 accepted important -> APPROVE, else NEEDS WORK. Posts one inline comment per accepted blocking/important finding (in `outputLanguage`), then sets the review state via the provider API. Interactive prompts to post (default yes); autopilot auto-posts; `--no-post` skips. Entry point: `bash $HOME/.copilot/lib/post-pr-review.sh "$TASK_ID"`. No monolithic advisory comment. Branch/pick-fallback runs stay chat-only.
@@ -0,0 +1,25 @@
1
+ ---
2
+ name: multi-agent-review-issue
3
+ language: en
4
+ description: "Assess whether a GitHub issue is ready for multi-agent development: fetch it, grade scope / acceptance criteria / repro / design / API / stack readiness, then (after confirm) post the gaps as an issue comment. Read-only on code."
5
+ user-invocable: true
6
+ argument-hint: "[#N | repo#N | GitHub issue URL] - optional; with no argument, pick from open issues"
7
+ ---
8
+
9
+ # multi-agent review-issue - GitHub issue readiness review
10
+
11
+ **Input**: $ARGUMENTS
12
+
13
+ Grades an existing GitHub issue for pipeline-readiness and comments the gaps back onto it. No worktree, no branch, no code commits.
14
+
15
+ ## Flow
16
+
17
+ Read `$HOME/.copilot/multi-agent-refs/readiness-review.md` and execute the shared readiness flow with **provider = github**:
18
+
19
+ 1. Resolve the item (`#N` / `repo#N` / GitHub issue URL); no argument -> pick from `gh issue list`, single-select.
20
+ 2. Fetch + base maturity via `$HOME/.copilot/lib/issue-fetcher.sh` (`gh issue view`; reuse its `maturity`; no MCP).
21
+ 3. Apply the readiness rubric (testable scope, acceptance criteria / DoD, repro for bugs, design reference for UI, API contract for backend, stack signal, dependencies).
22
+ 4. Print the chat verdict (score + Blockers / Warnings / Gaps) using the maturity severity contract.
23
+ 5. Confirm, then post the gaps as an issue comment via `channels/issue-comment.md` (`gh issue comment "$N" --repo "$org/$repo" --body-file <file>`). Autopilot auto-posts.
24
+
25
+ Verdict + comment body follow `outputLanguage`; comment tone rules (no AI attribution, no em-dash / section-sign, `Ref:` never `Closes/Fixes`). No label/assignment change, no creation, no auto-close.
@@ -0,0 +1,25 @@
1
+ ---
2
+ name: multi-agent-review-jira
3
+ language: en
4
+ description: "Assess whether a Jira issue is ready for multi-agent development: fetch it, grade scope / acceptance criteria / repro / design / API / stack readiness, then (after confirm) post the gaps as a Jira comment. Read-only on code."
5
+ user-invocable: true
6
+ argument-hint: "[JIRA-KEY | Jira URL] - optional; with no argument, pick from your open Jira issues"
7
+ ---
8
+
9
+ # multi-agent review-jira - Jira readiness review
10
+
11
+ **Input**: $ARGUMENTS
12
+
13
+ Grades an existing Jira issue for pipeline-readiness and comments the gaps back onto it. No worktree, no branch, no code commits. Inverse of `multi-agent-create-jira`.
14
+
15
+ ## Flow
16
+
17
+ Read `$HOME/.copilot/multi-agent-refs/readiness-review.md` and execute the shared readiness flow with **provider = jira**:
18
+
19
+ 1. Resolve the item (`KEY-123` / `.../browse/KEY-123`); no argument -> pick from the `jira` command's open-issue list, single-select.
20
+ 2. Fetch + base maturity via `$HOME/.copilot/lib/issue-fetcher.sh` (reuse its `maturity`; no MCP).
21
+ 3. Apply the readiness rubric (testable scope, acceptance criteria / DoD, repro for bugs, design reference for UI, API contract for backend, stack signal, dependencies).
22
+ 4. Print the chat verdict (score + Blockers / Warnings / Gaps) using the maturity severity contract.
23
+ 5. Confirm, then post the gaps as a Jira comment via `channels/jira.md` (`POST /rest/api/2/issue/{id}/comment`, Bearer token via `credential-store`, UTF-8 verbatim, markdown->wiki). Autopilot auto-posts.
24
+
25
+ Verdict + comment body follow `outputLanguage`; comment tone rules (no AI attribution, no em-dash / section-sign, `Ref:` never `Closes`). No status/assignment change, no creation.
@@ -29,7 +29,7 @@ Run all steps automatically:
29
29
 
30
30
  ```
31
31
  Step 1: DETECT Compare timestamps, find stale targets
32
- Step 2: COPILOT Claude Code -> Copilot CLI (instructions + 36 sub-command skills)
32
+ Step 2: COPILOT Claude Code -> Copilot CLI (instructions + 38 sub-command skills)
33
33
  Step 3: REPO Claude Code -> pipeline repo (genericized, personal data scrub)
34
34
  Step 4: WEBSITE Version + phase/model counts -> {website-host} (i18n + projects.ts)
35
35
  Step 5: Commit Commit + push all changed repos
@@ -136,13 +136,13 @@ When invoked with the `release` argument:
136
136
  |-------------|-------------|
137
137
  | `~/.claude/commands/multi-agent/{cmd}.md` | `~/.copilot/skills/multi-agent-{cmd}/SKILL.md` |
138
138
 
139
- **36 commands are synced** (canonical inventory - must match `cross-cli-contract.md` section 1; drift = contract violation):
139
+ **38 commands are synced** (canonical inventory - must match `cross-cli-contract.md` section 1; drift = contract violation):
140
140
 
141
141
  ```
142
- analysis, analysis-resolve, autopilot, build-optimize, channels, delete, dev,
142
+ analysis, analysis-resolve, autopilot, build-optimize, channels, create-jira, delete, dev,
143
143
  dev-autopilot, dev-local, dev-local-autopilot, diff-explain, finish, garbage-collect,
144
- generate, help, issue, jira, kill, language, local,
145
- local-autopilot, log, manual-test, prune-logs, purge, refactor, resume, review,
144
+ help, issue, jira, kill, language, local,
145
+ local-autopilot, log, manual-test, prune-logs, purge, refactor, resume, review, review-issue, review-jira,
146
146
  scan, search, setup, stack, status, sync, test, update
147
147
  ```
148
148
 
@@ -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
- **187 skills** across 2 groups.
6
+ **189 skills** across 2 groups.
7
7
 
8
8
  | Group | Name | Platform | Description |
9
9
  |-------|------|----------|-------------|
@@ -94,6 +94,7 @@
94
94
  | core | `multi-agent-autopilot` | - | Launch any task in autopilot mode: skips every confirmation, runs end-to-end autonomously. |
95
95
  | 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 |
96
96
  | core | `multi-agent-channels` | - | Multi-channel reporter - Jira/Confluence/Wiki/PR description. Multi-select channels + content, humanizer pass, reviewer-preserving Bitbuck |
97
+ | 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 |
97
98
  | core | `multi-agent-delete` | - | Uninstall the pipeline from Claude Code + Copilot CLI. Keychain access tokens are left untouched. Asks for double confirmation. |
98
99
  | core | `multi-agent-dev` | - | Fast development mode: Init → Dev (Opus) → Test → Commit → Report. Analysis, planning, and review phases are skipped. |
99
100
  | core | `multi-agent-dev-autopilot` | - | Fastest mode: Dev (Opus) plus Autopilot. Init → Dev → Commit → Report with zero confirmations. |
@@ -102,7 +103,6 @@
102
103
  | 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 |
103
104
  | core | `multi-agent-finish` | - | Continue already-done LOCAL work through the pipeline tail: Review → Build+Test → Commit/PR → Report (technical analysis + Jira test-scenari |
104
105
  | 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 |
105
- | core | `multi-agent-generate` | - | Create a standards-compliant Jira issue (Task / Bug / Story): asks the type, mines project conventions, drafts from a standard template with |
106
106
  | core | `multi-agent-help` | - | Multi-agent pipeline usage guide - renders in EN or TR per prefs.global.outputLanguage (falls back to promptLanguage for backward compatib |
107
107
  | core | `multi-agent-issue` | - | List unassigned GitHub issues, pick one, auto-assign, and launch the multi-agent pipeline. |
108
108
  | core | `multi-agent-jira` | - | List open Jira issues, pick one, and launch the multi-agent pipeline. |
@@ -116,7 +116,9 @@
116
116
  | core | `multi-agent-purge` | - | ⚠️ Wipes every worktree, branch, log, and state file. Irreversible; asks for double confirmation. |
117
117
  | core | `multi-agent-refactor` | - | Analyse the project: extract adapted best-practices, hunt real bugs + improvement areas, check upstream drift of derived skills, draft one p |
118
118
  | core | `multi-agent-resume` | - | Resume a stopped or failed task from the phase where it left off. |
119
- | core | `multi-agent-review` | - | Run parallel review on the current branch's diff: 2 models on Claude Code (Fable + Sonnet), 3 models on Copilot CLI (GPT + Opus + Sonnet). R |
119
+ | core | `multi-agent-review` | - | Run parallel review on a branch diff or a Pull Request: 2 models on Claude Code (Fable + Sonnet), 3 models on Copilot CLI (GPT + Opus + Sonn |
120
+ | core | `multi-agent-review-issue` | - | Assess whether a GitHub issue is ready for multi-agent development: fetch it, grade scope / acceptance criteria / repro / design / API / sta |
121
+ | core | `multi-agent-review-jira` | - | Assess whether a Jira issue is ready for multi-agent development: fetch it, grade scope / acceptance criteria / repro / design / API / stack |
120
122
  | core | `multi-agent-scan` | - | Skill security scan: walks local skill directories against a tiered pattern catalog. |
121
123
  | core | `multi-agent-search` | - | Log search across every agent-log.md with smart ranking and filters. Optional --semantic flag queries the per-repo triage corpus. |
122
124
  | core | `multi-agent-setup` | - | First-run setup wizard: keychain token discovery, Git Identity onboarding, and pipeline preparation. |