@mmerterden/multi-agent-pipeline 11.3.2 → 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.
- package/CHANGELOG.md +23 -0
- package/install/claude.mjs +43 -1
- package/package.json +1 -1
- package/pipeline/commands/multi-agent/SKILL.md +5 -1
- package/pipeline/commands/multi-agent/help/SKILL.md +6 -2
- package/pipeline/commands/multi-agent/review/SKILL.md +36 -4
- package/pipeline/commands/multi-agent/review-issue/SKILL.md +22 -0
- package/pipeline/commands/multi-agent/review-jira/SKILL.md +22 -0
- package/pipeline/commands/multi-agent/sync/SKILL.md +4 -4
- package/pipeline/multi-agent-refs/cross-cli-contract.md +4 -4
- package/pipeline/multi-agent-refs/readiness-review.md +65 -0
- package/pipeline/scripts/fixtures/install-layout.tsv +5 -5
- package/pipeline/scripts/smoke-generate-issue.sh +3 -3
- package/pipeline/scripts/smoke-review-readiness.sh +91 -0
- package/pipeline/scripts/smoke-wrapper-preservation.sh +68 -0
- package/pipeline/skills/.skill-manifest.json +13 -5
- package/pipeline/skills/.skills-index.json +20 -2
- package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +6 -2
- package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +19 -10
- package/pipeline/skills/shared/core/multi-agent-review-issue/SKILL.md +25 -0
- package/pipeline/skills/shared/core/multi-agent-review-jira/SKILL.md +25 -0
- package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +3 -3
- package/pipeline/skills/skills-index.md +4 -2
package/CHANGELOG.md
CHANGED
|
@@ -14,6 +14,29 @@ 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
|
+
|
|
17
40
|
## [11.3.2] - 2026-07-10
|
|
18
41
|
|
|
19
42
|
Command rename + website refresh.
|
package/install/claude.mjs
CHANGED
|
@@ -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
|
+
"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,7 +73,9 @@ 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` |
|
|
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. |
|
|
@@ -111,6 +113,8 @@ 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` |
|
|
@@ -107,7 +107,9 @@ 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
|
|
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
|
|
@@ -319,7 +321,9 @@ 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
|
|
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
|
|
@@ -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
|
|
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) |
|
|
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=
|
|
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 |
|
|
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 +
|
|
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|
|
|
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
|
-
**
|
|
242
|
+
**38 commands are synced** (canonical inventory - must match `cross-cli-contract.md` section 1; drift = contract violation):
|
|
243
243
|
|
|
244
244
|
```
|
|
245
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
247
|
help, issue, jira, kill, language, local,
|
|
248
|
-
local-autopilot, log, manual-test, prune-logs, purge, refactor, resume, review,
|
|
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,13 +6,13 @@
|
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
## 1. Command Inventory (
|
|
9
|
+
## 1. Command Inventory (38 commands)
|
|
10
10
|
|
|
11
11
|
```
|
|
12
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
14
|
help, issue, jira, kill, language, local,
|
|
15
|
-
local-autopilot, log, manual-test, prune-logs, purge, refactor, resume, review,
|
|
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
|
|
|
@@ -23,7 +23,7 @@ Categories:
|
|
|
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
|
|
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
|
|
@@ -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
|
|
3
|
+
.claude/commands 44
|
|
4
4
|
.claude/lib 24
|
|
5
5
|
.claude/multi-agent-preferences.json 1
|
|
6
|
-
.claude/multi-agent-refs
|
|
6
|
+
.claude/multi-agent-refs 51
|
|
7
7
|
.claude/rules 12
|
|
8
8
|
.claude/schemas 23
|
|
9
|
-
.claude/scripts
|
|
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
|
|
17
|
-
.copilot/skills
|
|
16
|
+
.copilot/scripts 180
|
|
17
|
+
.copilot/skills 467
|
|
@@ -91,11 +91,11 @@ echo ""
|
|
|
91
91
|
echo "→ 8. registration + count consistency (36)"
|
|
92
92
|
grep -Fq '| `create-jira ' "$DISPATCHER" && pass "dispatcher routing: create-jira" || fail "dispatcher routing missing: generate"
|
|
93
93
|
grep -Fq "create-jira/SKILL.md" "$DISPATCHER" && pass "dispatcher loading row" || fail "dispatcher loading row missing"
|
|
94
|
-
grep -Fq "## 1. Command Inventory (
|
|
94
|
+
grep -Fq "## 1. Command Inventory (38 commands)" "$CONTRACT" && pass "contract count = 38" || fail "contract count wrong"
|
|
95
95
|
grep -Eq '(^|[ ,])create-jira([ ,]|$)' "$CONTRACT" && pass "contract list has create-jira" || fail "contract list missing generate"
|
|
96
|
-
grep -Fq "**
|
|
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 "**
|
|
98
|
+
grep -Fq "**38 commands are synced**" "$SYNC_SKILL" && pass "sync SKILL count = 38" || fail "sync SKILL count wrong (Copilot parity)"
|
|
99
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
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
|
|
@@ -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-10T13:
|
|
4
|
-
"skillCount":
|
|
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",
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
},
|
|
70
70
|
{
|
|
71
71
|
"path": "shared/core/multi-agent-help/SKILL.md",
|
|
72
|
-
"sha256": "
|
|
72
|
+
"sha256": "00772bab27906cdbdcae72d115c4e1f12ddd914fa7aa274923618a3a906e6caa"
|
|
73
73
|
},
|
|
74
74
|
{
|
|
75
75
|
"path": "shared/core/multi-agent-issue/SKILL.md",
|
|
@@ -119,9 +119,17 @@
|
|
|
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": "
|
|
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": "
|
|
156
|
+
"sha256": "28a057b30ec642f5cc1f22c9c50834aae280e6abaf58194b36d85bde717cfb14"
|
|
149
157
|
},
|
|
150
158
|
{
|
|
151
159
|
"path": "shared/core/multi-agent-test/SKILL.md",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "1.0.0",
|
|
3
|
-
"skillCount":
|
|
3
|
+
"skillCount": 189,
|
|
4
4
|
"entries": [
|
|
5
5
|
{
|
|
6
6
|
"name": "accessibility-compliance-accessibility-audit",
|
|
@@ -985,13 +985,31 @@
|
|
|
985
985
|
},
|
|
986
986
|
{
|
|
987
987
|
"name": "multi-agent-review",
|
|
988
|
-
"description": "Run parallel review on
|
|
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.",
|
|
@@ -97,7 +97,9 @@ 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
|
|
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
|
|
101
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
|
|
@@ -233,7 +235,9 @@ 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
|
|
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
|
|
237
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
|
|
@@ -1,27 +1,34 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: multi-agent-review
|
|
3
3
|
language: en
|
|
4
|
-
description: "Run parallel review on
|
|
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] -
|
|
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
|
|
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. **
|
|
18
|
-
|
|
19
|
-
|
|
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
|
-
|
|
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 +
|
|
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
|
-
**
|
|
139
|
+
**38 commands are synced** (canonical inventory - must match `cross-cli-contract.md` section 1; drift = contract violation):
|
|
140
140
|
|
|
141
141
|
```
|
|
142
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
144
|
help, issue, jira, kill, language, local,
|
|
145
|
-
local-autopilot, log, manual-test, prune-logs, purge, refactor, resume, review,
|
|
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
|
-
**
|
|
6
|
+
**189 skills** across 2 groups.
|
|
7
7
|
|
|
8
8
|
| Group | Name | Platform | Description |
|
|
9
9
|
|-------|------|----------|-------------|
|
|
@@ -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
|
|
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. |
|