@mmerterden/multi-agent-pipeline 10.8.0 → 10.12.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 +182 -0
- package/README.md +3 -1
- package/docs/engineering.md +76 -0
- package/docs/features.md +40 -36
- package/package.json +1 -1
- package/pipeline/commands/multi-agent/channels.md +42 -6
- package/pipeline/commands/multi-agent/finish.md +15 -6
- package/pipeline/commands/multi-agent/generate-bug.md +33 -0
- package/pipeline/commands/multi-agent/generate-task.md +33 -0
- package/pipeline/commands/multi-agent/help.md +12 -0
- package/pipeline/commands/multi-agent/manual-test.md +9 -2
- package/pipeline/commands/multi-agent/refs/channels/pr.md +1 -1
- package/pipeline/commands/multi-agent/refs/cross-cli-contract.md +7 -6
- package/pipeline/commands/multi-agent/refs/generate-issue.md +197 -0
- package/pipeline/commands/multi-agent/refs/keychain.md +12 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-0-init.md +40 -2
- package/pipeline/commands/multi-agent/refs/phases/phase-3-dev.md +12 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-4-review.md +4 -23
- package/pipeline/commands/multi-agent/refs/phases/phase-5-test.md +6 -1
- package/pipeline/commands/multi-agent/refs/phases/phase-7-report.md +5 -1
- package/pipeline/commands/multi-agent/refs/progress-contract.md +1 -0
- package/pipeline/commands/multi-agent/refs/tracker-contract.md +56 -13
- package/pipeline/commands/multi-agent/resume.md +6 -2
- package/pipeline/commands/multi-agent/sync.md +5 -5
- package/pipeline/commands/multi-agent.md +4 -0
- package/pipeline/lib/figma-mcp-refresh.sh +79 -0
- package/pipeline/preferences-template.json +2 -1
- package/pipeline/schemas/prefs.schema.json +35 -0
- package/pipeline/schemas/token-budget.json +7 -7
- package/pipeline/scripts/README.md +1 -0
- package/pipeline/scripts/fixtures/install-layout.tsv +6 -6
- package/pipeline/scripts/phase-tracker.sh +134 -22
- package/pipeline/scripts/smoke-channels-approval-gate.sh +60 -0
- package/pipeline/scripts/smoke-generate-issue.sh +114 -0
- package/pipeline/scripts/smoke-phase-tracker.sh +69 -0
- package/pipeline/scripts/smoke-progress-contract.sh +9 -0
- package/pipeline/scripts/smoke-tasklist-ordering.sh +1 -0
- package/pipeline/scripts/smoke-token-preflight.sh +82 -0
- package/pipeline/scripts/smoke-tracker-contract.sh +62 -0
- package/pipeline/scripts/smoke-update-check.sh +122 -0
- package/pipeline/scripts/update-check.sh +82 -0
- package/pipeline/skills/.skills-index.json +22 -4
- package/pipeline/skills/shared/core/multi-agent/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +4 -2
- package/pipeline/skills/shared/core/multi-agent-generate-bug/SKILL.md +39 -0
- package/pipeline/skills/shared/core/multi-agent-generate-task/SKILL.md +39 -0
- package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +4 -0
- package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +5 -5
- package/pipeline/skills/skills-index.md +5 -3
|
@@ -123,6 +123,68 @@ for mode_file in "${MODE_FILES[@]}"; do
|
|
|
123
123
|
fi
|
|
124
124
|
done
|
|
125
125
|
|
|
126
|
+
# ──────────────────────────────────────────────────────────────────────────
|
|
127
|
+
echo "→ 7. Live-tracker UX contract (now/cost actions, mirror rule, continuation)"
|
|
128
|
+
if grep -q 'phase-tracker.sh now' "$CONTRACT_FILE" \
|
|
129
|
+
&& grep -q 'cost <N>' "$CONTRACT_FILE"; then
|
|
130
|
+
pass "tracker-contract documents now + cost actions"
|
|
131
|
+
else
|
|
132
|
+
fail "tracker-contract missing now/cost action docs"
|
|
133
|
+
fi
|
|
134
|
+
if grep -q '\[cached\]' "$CONTRACT_FILE" || grep -q '\[cached_count\]' "$CONTRACT_FILE"; then
|
|
135
|
+
pass "tracker-contract documents the 4th cached tokens arg"
|
|
136
|
+
else
|
|
137
|
+
fail "tracker-contract missing the cached tokens arg"
|
|
138
|
+
fi
|
|
139
|
+
if grep -q 'Progress-line mirror' "$CONTRACT_FILE"; then
|
|
140
|
+
pass "tracker-contract declares the progress-line mirror rule"
|
|
141
|
+
else
|
|
142
|
+
fail "tracker-contract missing the progress-line mirror rule"
|
|
143
|
+
fi
|
|
144
|
+
if grep -q 'Continuation runs' "$CONTRACT_FILE" \
|
|
145
|
+
&& grep -q 'never re-initialized' "$CONTRACT_FILE"; then
|
|
146
|
+
pass "tracker-contract declares the continuation-runs rule"
|
|
147
|
+
else
|
|
148
|
+
fail "tracker-contract missing the continuation-runs rule"
|
|
149
|
+
fi
|
|
150
|
+
if grep -q 'Completion tile suffix' "$CONTRACT_FILE"; then
|
|
151
|
+
pass "tracker-contract declares the completion tile suffix"
|
|
152
|
+
else
|
|
153
|
+
fail "tracker-contract missing the completion tile suffix"
|
|
154
|
+
fi
|
|
155
|
+
|
|
156
|
+
# ──────────────────────────────────────────────────────────────────────────
|
|
157
|
+
echo "→ 8. Continuation wiring in finish + manual-test + phase-5"
|
|
158
|
+
FINISH_FILE="$CMDS_DIR/finish.md"
|
|
159
|
+
if grep -q '\[ ! -f "\$STATE" \]' "$FINISH_FILE"; then
|
|
160
|
+
pass "finish.md guards init behind a state-file existence check"
|
|
161
|
+
else
|
|
162
|
+
fail "finish.md must not init the tracker unconditionally"
|
|
163
|
+
fi
|
|
164
|
+
if grep -q 'Continuing' "$FINISH_FILE" && grep -q 'cost total' "$FINISH_FILE"; then
|
|
165
|
+
pass "finish.md prints the inherited-history line via cost total"
|
|
166
|
+
else
|
|
167
|
+
fail "finish.md missing the continuation summary line"
|
|
168
|
+
fi
|
|
169
|
+
MANUAL_FILE="$CMDS_DIR/manual-test.md"
|
|
170
|
+
if grep -q 'now 5 "awaiting local test (user)"' "$MANUAL_FILE"; then
|
|
171
|
+
pass "manual-test.md sets the waiting state via now 5"
|
|
172
|
+
else
|
|
173
|
+
fail "manual-test.md missing the now 5 waiting state"
|
|
174
|
+
fi
|
|
175
|
+
PHASE5_FILE="$CMDS_DIR/refs/phases/phase-5-test.md"
|
|
176
|
+
if grep -q 'now 5 "awaiting local test (user)"' "$PHASE5_FILE"; then
|
|
177
|
+
pass "phase-5-test.md sets the waiting state via now 5"
|
|
178
|
+
else
|
|
179
|
+
fail "phase-5-test.md missing the now 5 waiting state"
|
|
180
|
+
fi
|
|
181
|
+
RESUME_FILE="$CMDS_DIR/resume.md"
|
|
182
|
+
if grep -q 'Rebuild the phase tiles' "$RESUME_FILE"; then
|
|
183
|
+
pass "resume.md rebuilds the phase tiles from state"
|
|
184
|
+
else
|
|
185
|
+
fail "resume.md missing the tile-rebuild step"
|
|
186
|
+
fi
|
|
187
|
+
|
|
126
188
|
# ──────────────────────────────────────────────────────────────────────────
|
|
127
189
|
echo ""
|
|
128
190
|
echo "══ tracker-contract smoke: $PASS passed, $FAIL failed ══"
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# smoke-update-check.sh
|
|
3
|
+
#
|
|
4
|
+
# Verifies the Phase 0 Step 0.6 advisory update-check contract:
|
|
5
|
+
# 1. update-check.sh exists, parses (bash -n), and honors the advisory contract
|
|
6
|
+
# offline: exit 0 + empty stdout when the registry is unreachable
|
|
7
|
+
# 2. Cached path: fresh cache short-circuits without a network call
|
|
8
|
+
# 3. Newer latest -> "<local>|<latest>"; same or older latest -> silent
|
|
9
|
+
# 4. prefs.schema.json exposes updateCheck.{enabled,ttlHours,autoUpdate}
|
|
10
|
+
# with the documented defaults (enabled=true, autoUpdate=false)
|
|
11
|
+
# 5. phase-0-init.md documents Step 0.6 with the autopilot log-only rule
|
|
12
|
+
#
|
|
13
|
+
# Exit 0 = all pass, 1 = any failure.
|
|
14
|
+
|
|
15
|
+
set -euo pipefail
|
|
16
|
+
|
|
17
|
+
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
|
|
18
|
+
SCRIPT="$ROOT/pipeline/scripts/update-check.sh"
|
|
19
|
+
PREFS_SCHEMA="$ROOT/pipeline/schemas/prefs.schema.json"
|
|
20
|
+
PHASE0_DOC="$ROOT/pipeline/commands/multi-agent/refs/phases/phase-0-init.md"
|
|
21
|
+
|
|
22
|
+
pass=0
|
|
23
|
+
fail=0
|
|
24
|
+
failures=()
|
|
25
|
+
record_pass() { pass=$((pass + 1)); printf ' \033[0;32mPASS\033[0m %s\n' "$1"; }
|
|
26
|
+
record_fail() { fail=$((fail + 1)); failures+=("$1"); printf ' \033[0;31mFAIL\033[0m %s\n' "$1"; }
|
|
27
|
+
|
|
28
|
+
printf '→ smoke-update-check: Phase 0 Step 0.6 advisory contract\n'
|
|
29
|
+
|
|
30
|
+
tmpdir=$(mktemp -d)
|
|
31
|
+
trap 'rm -rf "$tmpdir"' EXIT
|
|
32
|
+
CACHE="$tmpdir/update-check-cache"
|
|
33
|
+
|
|
34
|
+
# 1. Script parses
|
|
35
|
+
if bash -n "$SCRIPT" 2>/dev/null; then
|
|
36
|
+
record_pass "update-check.sh parses (bash -n)"
|
|
37
|
+
else
|
|
38
|
+
record_fail "update-check.sh has syntax errors"
|
|
39
|
+
fi
|
|
40
|
+
|
|
41
|
+
now=$(date +%s)
|
|
42
|
+
|
|
43
|
+
# 2. Fresh cache with newer latest -> reports, no network needed
|
|
44
|
+
printf '%s|99.0.0\n' "$now" > "$CACHE"
|
|
45
|
+
out=$(UPDATE_CHECK_CACHE="$CACHE" bash "$SCRIPT" --local 10.0.0 2>/dev/null); rc=$?
|
|
46
|
+
if [ "$rc" -eq 0 ] && [ "$out" = "10.0.0|99.0.0" ]; then
|
|
47
|
+
record_pass "newer cached latest -> '<local>|<latest>' (exit 0)"
|
|
48
|
+
else
|
|
49
|
+
record_fail "newer cached latest should print '10.0.0|99.0.0' (got '$out', rc=$rc)"
|
|
50
|
+
fi
|
|
51
|
+
|
|
52
|
+
# 3. Same version -> silent
|
|
53
|
+
printf '%s|10.0.0\n' "$now" > "$CACHE"
|
|
54
|
+
out=$(UPDATE_CHECK_CACHE="$CACHE" bash "$SCRIPT" --local 10.0.0 2>/dev/null); rc=$?
|
|
55
|
+
if [ "$rc" -eq 0 ] && [ -z "$out" ]; then
|
|
56
|
+
record_pass "same version -> silent"
|
|
57
|
+
else
|
|
58
|
+
record_fail "same version should be silent (got '$out', rc=$rc)"
|
|
59
|
+
fi
|
|
60
|
+
|
|
61
|
+
# 3b. Local ahead of registry (dev machine) -> silent
|
|
62
|
+
printf '%s|10.0.0\n' "$now" > "$CACHE"
|
|
63
|
+
out=$(UPDATE_CHECK_CACHE="$CACHE" bash "$SCRIPT" --local 10.1.0 2>/dev/null); rc=$?
|
|
64
|
+
if [ "$rc" -eq 0 ] && [ -z "$out" ]; then
|
|
65
|
+
record_pass "local ahead of registry -> silent (no downgrade prompt)"
|
|
66
|
+
else
|
|
67
|
+
record_fail "local-ahead should be silent (got '$out', rc=$rc)"
|
|
68
|
+
fi
|
|
69
|
+
|
|
70
|
+
# 3c. Offline + stale cache -> silent exit 0 (advisory: never blocks)
|
|
71
|
+
printf '0|10.0.0\n' > "$CACHE"
|
|
72
|
+
out=$(UPDATE_CHECK_CACHE="$CACHE" http_proxy="http://127.0.0.1:1" https_proxy="http://127.0.0.1:1" \
|
|
73
|
+
bash "$SCRIPT" --local 10.0.0 2>/dev/null); rc=$?
|
|
74
|
+
if [ "$rc" -eq 0 ] && [ -z "$out" ]; then
|
|
75
|
+
record_pass "offline + stale cache -> silent exit 0"
|
|
76
|
+
else
|
|
77
|
+
record_fail "offline should be a silent no-op (got '$out', rc=$rc)"
|
|
78
|
+
fi
|
|
79
|
+
|
|
80
|
+
# 4. Prefs schema knobs + defaults
|
|
81
|
+
for prop in enabled ttlHours autoUpdate; do
|
|
82
|
+
if jq -e ".properties.global.properties.updateCheck.properties.${prop}" "$PREFS_SCHEMA" >/dev/null 2>&1; then
|
|
83
|
+
record_pass "prefs schema exposes updateCheck.${prop}"
|
|
84
|
+
else
|
|
85
|
+
record_fail "prefs schema missing updateCheck.${prop}"
|
|
86
|
+
fi
|
|
87
|
+
done
|
|
88
|
+
if jq -e '.properties.global.properties.updateCheck.properties.enabled.default == true' "$PREFS_SCHEMA" >/dev/null 2>&1; then
|
|
89
|
+
record_pass "updateCheck.enabled defaults to true (notify-only, bounded cost)"
|
|
90
|
+
else
|
|
91
|
+
record_fail "updateCheck.enabled must default to true"
|
|
92
|
+
fi
|
|
93
|
+
if jq -e '.properties.global.properties.updateCheck.properties.autoUpdate | has("default") and .default == false' "$PREFS_SCHEMA" >/dev/null 2>&1; then
|
|
94
|
+
record_pass "updateCheck.autoUpdate defaults to false (no silent self-modify)"
|
|
95
|
+
else
|
|
96
|
+
record_fail "updateCheck.autoUpdate must default to false"
|
|
97
|
+
fi
|
|
98
|
+
|
|
99
|
+
# 5. Phase 0 doc wiring
|
|
100
|
+
if grep -qF "Step 0.6 - Update check" "$PHASE0_DOC"; then
|
|
101
|
+
record_pass "phase-0-init.md documents Step 0.6"
|
|
102
|
+
else
|
|
103
|
+
record_fail "phase-0-init.md missing Step 0.6"
|
|
104
|
+
fi
|
|
105
|
+
if grep -qF "update-check.sh" "$PHASE0_DOC"; then
|
|
106
|
+
record_pass "phase-0-init.md invokes update-check.sh"
|
|
107
|
+
else
|
|
108
|
+
record_fail "phase-0-init.md must invoke update-check.sh"
|
|
109
|
+
fi
|
|
110
|
+
if grep -qF "log-only" "$PHASE0_DOC" && grep -qF "never ask (zero-interaction contract)" "$PHASE0_DOC"; then
|
|
111
|
+
record_pass "phase-0-init.md states the autopilot log-only rule"
|
|
112
|
+
else
|
|
113
|
+
record_fail "phase-0-init.md must state autopilot never asks (log-only)"
|
|
114
|
+
fi
|
|
115
|
+
|
|
116
|
+
printf '\n══ update-check smoke: %d passed, %d failed ══\n' "$pass" "$fail"
|
|
117
|
+
if [ "$fail" -gt 0 ]; then
|
|
118
|
+
printf '\nFailures:\n'
|
|
119
|
+
for msg in "${failures[@]}"; do printf ' - %s\n' "$msg"; done
|
|
120
|
+
exit 1
|
|
121
|
+
fi
|
|
122
|
+
exit 0
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# update-check.sh - cached advisory version check (Phase 0 Step 0.6)
|
|
3
|
+
#
|
|
4
|
+
# Compares the locally installed pipeline version against the npm registry's
|
|
5
|
+
# dist-tags.latest. Cached with a TTL so at most one network call per TTL
|
|
6
|
+
# window; the call is bounded by a short timeout and every failure path is
|
|
7
|
+
# silent - this script NEVER blocks or fails the pipeline.
|
|
8
|
+
#
|
|
9
|
+
# stdout: "<local>|<latest>" when a newer version exists, nothing otherwise.
|
|
10
|
+
# Exit code: always 0 (advisory contract).
|
|
11
|
+
#
|
|
12
|
+
# Usage:
|
|
13
|
+
# bash pipeline/scripts/update-check.sh # auto-detect local version
|
|
14
|
+
# bash pipeline/scripts/update-check.sh --local 10.8.0 # explicit local version
|
|
15
|
+
# bash pipeline/scripts/update-check.sh --ttl-hours 24 # cache window (default 24)
|
|
16
|
+
# bash pipeline/scripts/update-check.sh --force # ignore cache
|
|
17
|
+
#
|
|
18
|
+
# Cache file: ~/.claude/logs/multi-agent/.update-check ("epoch|latest").
|
|
19
|
+
# Registry read is a plain curl - never `npm view` (a user-level .npmrc scope
|
|
20
|
+
# mapping can silently reroute npm to a different registry; curl cannot lie).
|
|
21
|
+
|
|
22
|
+
set -euo pipefail
|
|
23
|
+
|
|
24
|
+
PKG="@mmerterden/multi-agent-pipeline"
|
|
25
|
+
REGISTRY_URL="https://registry.npmjs.org/${PKG/\//%2F}"
|
|
26
|
+
CACHE_FILE="${UPDATE_CHECK_CACHE:-$HOME/.claude/logs/multi-agent/.update-check}"
|
|
27
|
+
TTL_HOURS=24
|
|
28
|
+
LOCAL_VERSION=""
|
|
29
|
+
FORCE=0
|
|
30
|
+
|
|
31
|
+
while [ $# -gt 0 ]; do
|
|
32
|
+
case "$1" in
|
|
33
|
+
--local) LOCAL_VERSION="${2:-}"; shift 2 ;;
|
|
34
|
+
--ttl-hours) TTL_HOURS="${2:-24}"; shift 2 ;;
|
|
35
|
+
--force) FORCE=1; shift ;;
|
|
36
|
+
*) shift ;;
|
|
37
|
+
esac
|
|
38
|
+
done
|
|
39
|
+
|
|
40
|
+
# Local version: explicit arg, else read from the pipeline repo clone.
|
|
41
|
+
if [ -z "$LOCAL_VERSION" ]; then
|
|
42
|
+
for candidate in "$HOME/multi-agent-pipeline" "$HOME/dev/multi-agent-pipeline" "$HOME/projects/multi-agent-pipeline"; do
|
|
43
|
+
if [ -f "$candidate/package.json" ]; then
|
|
44
|
+
LOCAL_VERSION=$(node -p "require('$candidate/package.json').version" 2>/dev/null || true)
|
|
45
|
+
[ -n "$LOCAL_VERSION" ] && break
|
|
46
|
+
fi
|
|
47
|
+
done
|
|
48
|
+
fi
|
|
49
|
+
[ -z "$LOCAL_VERSION" ] && exit 0 # cannot determine local version -> silent no-op
|
|
50
|
+
|
|
51
|
+
now=$(date +%s)
|
|
52
|
+
latest=""
|
|
53
|
+
|
|
54
|
+
# Fresh cache?
|
|
55
|
+
if [ "$FORCE" -eq 0 ] && [ -f "$CACHE_FILE" ]; then
|
|
56
|
+
cached_epoch=$(cut -d'|' -f1 "$CACHE_FILE" 2>/dev/null || echo 0)
|
|
57
|
+
cached_latest=$(cut -d'|' -f2 "$CACHE_FILE" 2>/dev/null || echo "")
|
|
58
|
+
case "$cached_epoch" in (*[!0-9]*|"") cached_epoch=0 ;; esac
|
|
59
|
+
if [ $((now - cached_epoch)) -lt $((TTL_HOURS * 3600)) ] && [ -n "$cached_latest" ]; then
|
|
60
|
+
latest="$cached_latest"
|
|
61
|
+
fi
|
|
62
|
+
fi
|
|
63
|
+
|
|
64
|
+
# Stale or missing cache -> one bounded registry call (silent on any failure).
|
|
65
|
+
if [ -z "$latest" ]; then
|
|
66
|
+
latest=$(curl -sm 3 "$REGISTRY_URL" 2>/dev/null \
|
|
67
|
+
| { command -v jq >/dev/null 2>&1 && jq -r '."dist-tags".latest // empty' \
|
|
68
|
+
|| sed -n 's/.*"latest":"\([^"]*\)".*/\1/p'; } | head -1) || true
|
|
69
|
+
[ -z "$latest" ] && exit 0
|
|
70
|
+
mkdir -p "$(dirname "$CACHE_FILE")" 2>/dev/null || exit 0
|
|
71
|
+
printf '%s|%s\n' "$now" "$latest" > "$CACHE_FILE" 2>/dev/null || true
|
|
72
|
+
fi
|
|
73
|
+
|
|
74
|
+
[ "$latest" = "$LOCAL_VERSION" ] && exit 0
|
|
75
|
+
|
|
76
|
+
# Update available only when latest sorts strictly ABOVE local (a dev machine
|
|
77
|
+
# running ahead of the registry must not see an "update" prompt).
|
|
78
|
+
highest=$(printf '%s\n%s\n' "$LOCAL_VERSION" "$latest" | sort -t. -k1,1n -k2,2n -k3,3n | tail -1)
|
|
79
|
+
if [ "$highest" = "$latest" ]; then
|
|
80
|
+
printf '%s|%s\n' "$LOCAL_VERSION" "$latest"
|
|
81
|
+
fi
|
|
82
|
+
exit 0
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "1.0.0",
|
|
3
|
-
"generatedAt": "2026-07-
|
|
4
|
-
"skillCount":
|
|
3
|
+
"generatedAt": "2026-07-06T11:38:47.307Z",
|
|
4
|
+
"skillCount": 224,
|
|
5
5
|
"entries": [
|
|
6
6
|
{
|
|
7
7
|
"name": "accessibility-compliance-accessibility-audit",
|
|
@@ -1031,7 +1031,7 @@
|
|
|
1031
1031
|
},
|
|
1032
1032
|
{
|
|
1033
1033
|
"name": "multi-agent",
|
|
1034
|
-
"description": "Task orchestrator: runs the full pipeline from a Jira ID or GitHub Issue URL - analysis → plan → TDD development → parallel review (
|
|
1034
|
+
"description": "Task orchestrator: runs the full pipeline from a Jira ID or GitHub Issue URL - analysis → plan → TDD development → parallel review (Fable + Sonnet on Claude Code, GPT + Opus + Sonnet on Copilot CLI) → commit → log. Every step is written to agent-log.md.",
|
|
1035
1035
|
"platform": null,
|
|
1036
1036
|
"group": "core",
|
|
1037
1037
|
"triggerKeywords": [],
|
|
@@ -1155,6 +1155,24 @@
|
|
|
1155
1155
|
"triggerPaths": [],
|
|
1156
1156
|
"relativePath": "shared/core/multi-agent-garbage-collect/SKILL.md"
|
|
1157
1157
|
},
|
|
1158
|
+
{
|
|
1159
|
+
"name": "multi-agent-generate-bug",
|
|
1160
|
+
"description": "Create a standards-compliant Jira Bug: mines project conventions, drafts in outputLanguage, full preview + explicit approval before create.",
|
|
1161
|
+
"platform": null,
|
|
1162
|
+
"group": "core",
|
|
1163
|
+
"triggerKeywords": [],
|
|
1164
|
+
"triggerPaths": [],
|
|
1165
|
+
"relativePath": "shared/core/multi-agent-generate-bug/SKILL.md"
|
|
1166
|
+
},
|
|
1167
|
+
{
|
|
1168
|
+
"name": "multi-agent-generate-task",
|
|
1169
|
+
"description": "Create a standards-compliant Jira Task: mines project conventions, drafts in outputLanguage, full preview + explicit approval before create.",
|
|
1170
|
+
"platform": null,
|
|
1171
|
+
"group": "core",
|
|
1172
|
+
"triggerKeywords": [],
|
|
1173
|
+
"triggerPaths": [],
|
|
1174
|
+
"relativePath": "shared/core/multi-agent-generate-task/SKILL.md"
|
|
1175
|
+
},
|
|
1158
1176
|
{
|
|
1159
1177
|
"name": "multi-agent-help",
|
|
1160
1178
|
"description": "Multi-agent pipeline usage guide - renders in EN or TR per prefs.global.outputLanguage (falls back to promptLanguage for backward compatibility).",
|
|
@@ -1274,7 +1292,7 @@
|
|
|
1274
1292
|
},
|
|
1275
1293
|
{
|
|
1276
1294
|
"name": "multi-agent-review",
|
|
1277
|
-
"description": "Run parallel review on the current branch's diff: 2 models on Claude Code (
|
|
1295
|
+
"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.",
|
|
1278
1296
|
"platform": null,
|
|
1279
1297
|
"group": "core",
|
|
1280
1298
|
"triggerKeywords": [],
|
|
@@ -309,7 +309,8 @@ Every user-facing phase title - TaskCreate cards, `phase-banner.sh` headers, a
|
|
|
309
309
|
All TaskCreate calls fire in strict phase-number order BEFORE any TaskUpdate is applied (Claude Code path; Copilot CLI does not have a TaskList widget so this rule is Claude-only). The native widget renders by creation order, not by phase-number metadata - out-of-order calls produce visually scrambled tile stacks (e.g. `1 ✓ · 2 ✓ · 4 ✓ · 0 ▶ · 3 ☐`) even when the underlying state file is correct. Pre-marking phases as completed/skipped before Phase 0 starts is FORBIDDEN: register the tile in order with default `pending` status, then flip via TaskUpdate when the phase actually short-circuits. Mode-specific phase sets:
|
|
310
310
|
|
|
311
311
|
- Full pipeline (`multi-agent`, `multi-agent-autopilot`, `multi-agent-local`, `multi-agent-local-autopilot`): 0 → 1 → 2 → 3 → 4 → 5 → 6 → 7
|
|
312
|
-
-
|
|
312
|
+
- `multi-agent-dev`: 0 → 3 → 5 → 6 → 7 (phases 1/2/4 are NOT TaskCreate'd at all)
|
|
313
|
+
- `multi-agent-dev-autopilot`, `multi-agent-dev-local`, `multi-agent-dev-local-autopilot`: 0 → 3 → 6 → 7 (phases 1/2/4/5 are NOT TaskCreate'd at all - the autopilot/local variants drop the interactive Phase 5 test gate)
|
|
313
314
|
|
|
314
315
|
Full contract: `refs/tracker-contract.md` section "TaskCreate ordering (strict)".
|
|
315
316
|
|
|
@@ -41,8 +41,9 @@ multi-agent-channels PROJ-12345 --dry-run # preview, no POST
|
|
|
41
41
|
3. **Menu (multi-select)** - channel + content, previous selections pre-ticked from `prefs.global.reportChannels` + `prefs.global.reportContent`. Greyed-out rules per context availability.
|
|
42
42
|
4. **Mode short-circuit** - `--channels X,Y` + `--content A,B` flags skip menu. Autopilot ALWAYS pauses at the menu (v5.7+ Phase 7 exception).
|
|
43
43
|
5. **Generator** - for each selected content source, produce a section body. Humanizer pass per channel separately.
|
|
44
|
-
6. **
|
|
45
|
-
7. **
|
|
44
|
+
6. **Body preview + approval gate** - interactive runs render every selected channel's final body and ask Approve & post / Edit (loop) / Skip channels / Cancel BEFORE any external write. Skipped only by autopilot and `--dry-run`. What is posted is byte-identical to the approved preview.
|
|
45
|
+
7. **Channel dispatch** - parallel adapter calls, never before the gate resolves: PR description (reviewer-preserving PUT on Bitbucket), Jira comment (wiki markup), Confluence page (storage format + parent page), Wiki (component adapter - Case A scope multi-select or Case B precondition menu).
|
|
46
|
+
8. **Summary** - per-adapter status line, persist selections to prefs.
|
|
46
47
|
|
|
47
48
|
## Multi-select menu
|
|
48
49
|
|
|
@@ -222,6 +223,7 @@ Target length: < 80 lines (fits one screen). Auto-diff capped at 5 lines per sec
|
|
|
222
223
|
- No markers - full replace each run, no `<!-- channels:start -->` bookmarks.
|
|
223
224
|
- Every body item references a file/symbol/line from diff or pipeline log. No generic sentences.
|
|
224
225
|
- Adapter failures are non-blocking - one channel failing does NOT abort others.
|
|
226
|
+
- Approval before post - interactive runs never write to an external channel without the step 6 preview + approval. Autopilot and `--dry-run` are the only bypasses.
|
|
225
227
|
|
|
226
228
|
## Error handling
|
|
227
229
|
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: multi-agent-generate-bug
|
|
3
|
+
language: en
|
|
4
|
+
description: "Create a standards-compliant Jira Bug: mines project conventions, drafts in outputLanguage, full preview + explicit approval before create."
|
|
5
|
+
user-invocable: true
|
|
6
|
+
argument-hint: "[\"<free-text description>\"] [figma-url] - both optional; pasted logs/screens in the text land in Steps to Reproduce / Environment"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# multi-agent generate-bug - Standards-Compliant Jira Bug Creator
|
|
10
|
+
|
|
11
|
+
**Input**: $ARGUMENTS
|
|
12
|
+
|
|
13
|
+
Creates exactly one Jira **Bug**, and only after explicit approval. No branches, no commits, no worktrees. Profile: `ISSUE_TYPE=Bug`; default description sections: Steps to Reproduce, Expected Result, Actual Result, Environment, Design Reference (only when a Figma URL is given), Notes.
|
|
14
|
+
|
|
15
|
+
> **Language**: issue content (summary + description) and user-facing questions follow `prefs.global.outputLanguage` - intentional exception to the "external payloads stay English" default (the issue is authored for the user's team). Code identifiers and URLs stay verbatim.
|
|
16
|
+
|
|
17
|
+
## Steps
|
|
18
|
+
|
|
19
|
+
1. **Account + token** - pick the Jira account (auto-select when single), then:
|
|
20
|
+
```bash
|
|
21
|
+
TOKEN=$(~/.copilot/lib/credential-store.sh get "$ACCOUNT_JIRA_TOKEN_KEY")
|
|
22
|
+
```
|
|
23
|
+
Missing/expired (401) → Token Save Flow; user skips → abort, nothing created.
|
|
24
|
+
2. **Project key** - `figmaConfig.jira.projectKey` → `prefs.global.defaultJiraKey` → fetch `GET /rest/api/2/project`, ask, cache the choice.
|
|
25
|
+
3. **Parse input** - `figma.com` URL in `$ARGUMENTS` → `FIGMA_URL` (node-id `-` → `:`); the rest is `FREE_TEXT`. Logs, stack traces, and device/OS mentions map into Steps to Reproduce / Environment. Both empty → ask for a description. Figma URL is always optional.
|
|
26
|
+
4. **Convention mining + field discovery + sprint** (read-only GETs):
|
|
27
|
+
- Sample: `GET /rest/api/2/search?jql=project={KEY} AND issuetype=Bug ORDER BY created DESC&fields=summary,description,labels,components,priority,fixVersions&maxResults=30`. Extract summary prefix pattern (>= 40% threshold), dominant description heading set (>= 50% overrides the profile sections), top-5 labels/components, modal priority, epic usage rate.
|
|
28
|
+
- `GET /rest/api/2/issue/createmeta?projectKeys={KEY}&issuetypeNames=Bug&expand=projects.issuetypes.fields` (404/empty → paged DC endpoint fallback). Required custom fields → step 6 questions with allowedValues options. Detect Sprint/Epic/Team fields generically via `schema.custom` ids.
|
|
29
|
+
- `GET /rest/agile/1.0/board?projectKeyOrId={KEY}` → (ask when multiple) → `GET /rest/agile/1.0/board/{id}/sprint?state=active`. No board/Agile 404 → sprint option silently omitted.
|
|
30
|
+
5. **Figma context** (only when `FIGMA_URL` set) - 3-tier chain (MCP → REST figma_pat → user screenshot); standalone command, MCP allowed here. Figma failures never block issue creation.
|
|
31
|
+
6. **Draft + clarifying questions** - compose summary (`{minedPrefix} {title}`, 255 trunc) + description (mined heading set or profile sections, Jira wiki markup `h3.`, humanizer pass) in `outputLanguage`; body to a file for `jq -n --rawfile` (UTF-8 verbatim, `--data-binary @file`, no re-encode). Ask ONLY genuinely unknown fields: component, epic (when usage rate is high), priority (when norm ambiguous), labels, assignee, sprint vs backlog, required customs, missing Steps to Reproduce / Environment. Never invent repro steps or environments the user did not supply.
|
|
32
|
+
7. **Full preview + approval gate (never skipped)** - render the complete issue (all fields + full description + attachment plan, screenshot default off). Ask: `Approve` / `Edit` (apply → re-render → re-ask, loop) / `Cancel` (nothing created). No flag or mode bypasses this gate.
|
|
33
|
+
8. **Create** - `POST /rest/api/2/issue` with `jq -n --rawfile` payload + `curl --data-binary @file`. 400 field errors → show verbatim, re-ask those fields, re-preview.
|
|
34
|
+
9. **Post-create** (each failure-isolated: warn + continue): sprint chosen → `POST /rest/agile/1.0/sprint/{id}/issue` `{"issues":["KEY"]}`; Figma → `POST /rest/api/2/issue/{KEY}/remotelink`; screenshot opt-in → `POST /rest/api/2/issue/{KEY}/attachments` with `X-Atlassian-Token: no-check`.
|
|
35
|
+
10. **Report** - `Created {KEY}: https://{host}/browse/{KEY}` + which post-steps ran.
|
|
36
|
+
|
|
37
|
+
## Error paths
|
|
38
|
+
|
|
39
|
+
401 token → Save Flow or abort (nothing created); mining/createmeta 403 → profile defaults + reactive 400 handling; zero sampled issues → skip mining, note in preview; no board/active sprint → backlog implied, say so; create 5xx → one retry then abort keeping the draft file; post-create failure → warn + continue.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: multi-agent-generate-task
|
|
3
|
+
language: en
|
|
4
|
+
description: "Create a standards-compliant Jira Task: mines project conventions, drafts in outputLanguage, full preview + explicit approval before create."
|
|
5
|
+
user-invocable: true
|
|
6
|
+
argument-hint: "[\"<free-text description>\"] [figma-url] - both optional, asked interactively when missing"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# multi-agent generate-task - Standards-Compliant Jira Task Creator
|
|
10
|
+
|
|
11
|
+
**Input**: $ARGUMENTS
|
|
12
|
+
|
|
13
|
+
Creates exactly one Jira **Task**, and only after explicit approval. No branches, no commits, no worktrees. Profile: `ISSUE_TYPE=Task`; default description sections: Goal, Scope, Acceptance Criteria, Design Reference (only when a Figma URL is given), Notes.
|
|
14
|
+
|
|
15
|
+
> **Language**: issue content (summary + description) and user-facing questions follow `prefs.global.outputLanguage` - intentional exception to the "external payloads stay English" default (the issue is authored for the user's team). Code identifiers and URLs stay verbatim.
|
|
16
|
+
|
|
17
|
+
## Steps
|
|
18
|
+
|
|
19
|
+
1. **Account + token** - pick the Jira account (auto-select when single), then:
|
|
20
|
+
```bash
|
|
21
|
+
TOKEN=$(~/.copilot/lib/credential-store.sh get "$ACCOUNT_JIRA_TOKEN_KEY")
|
|
22
|
+
```
|
|
23
|
+
Missing/expired (401) → Token Save Flow; user skips → abort, nothing created.
|
|
24
|
+
2. **Project key** - `figmaConfig.jira.projectKey` → `prefs.global.defaultJiraKey` → fetch `GET /rest/api/2/project`, ask, cache the choice.
|
|
25
|
+
3. **Parse input** - `figma.com` URL in `$ARGUMENTS` → `FIGMA_URL` (node-id `-` → `:`); the rest is `FREE_TEXT`. Both empty → ask for a description. Figma URL is always optional.
|
|
26
|
+
4. **Convention mining + field discovery + sprint** (read-only GETs):
|
|
27
|
+
- Sample: `GET /rest/api/2/search?jql=project={KEY} AND issuetype=Task ORDER BY created DESC&fields=summary,description,labels,components,priority,fixVersions&maxResults=30`. Extract summary prefix pattern (>= 40% threshold), dominant description heading set (>= 50% overrides the profile sections), top-5 labels/components, modal priority, epic usage rate.
|
|
28
|
+
- `GET /rest/api/2/issue/createmeta?projectKeys={KEY}&issuetypeNames=Task&expand=projects.issuetypes.fields` (404/empty → paged DC endpoint fallback). Required custom fields → step 6 questions with allowedValues options. Detect Sprint/Epic/Team fields generically via `schema.custom` ids.
|
|
29
|
+
- `GET /rest/agile/1.0/board?projectKeyOrId={KEY}` → (ask when multiple) → `GET /rest/agile/1.0/board/{id}/sprint?state=active`. No board/Agile 404 → sprint option silently omitted.
|
|
30
|
+
5. **Figma context** (only when `FIGMA_URL` set) - 3-tier chain (MCP → REST figma_pat → user screenshot); standalone command, MCP allowed here. Figma failures never block issue creation.
|
|
31
|
+
6. **Draft + clarifying questions** - compose summary (`{minedPrefix} {title}`, 255 trunc) + description (mined heading set or profile sections, Jira wiki markup `h3.`, humanizer pass) in `outputLanguage`; body to a file for `jq -n --rawfile` (UTF-8 verbatim, `--data-binary @file`, no re-encode). Ask ONLY genuinely unknown fields: component, epic (when usage rate is high), priority (when norm ambiguous), labels, assignee, sprint vs backlog, required customs. Never invent content the user did not supply.
|
|
32
|
+
7. **Full preview + approval gate (never skipped)** - render the complete issue (all fields + full description + attachment plan, screenshot default off). Ask: `Approve` / `Edit` (apply → re-render → re-ask, loop) / `Cancel` (nothing created). No flag or mode bypasses this gate.
|
|
33
|
+
8. **Create** - `POST /rest/api/2/issue` with `jq -n --rawfile` payload + `curl --data-binary @file`. 400 field errors → show verbatim, re-ask those fields, re-preview.
|
|
34
|
+
9. **Post-create** (each failure-isolated: warn + continue): sprint chosen → `POST /rest/agile/1.0/sprint/{id}/issue` `{"issues":["KEY"]}`; Figma → `POST /rest/api/2/issue/{KEY}/remotelink`; screenshot opt-in → `POST /rest/api/2/issue/{KEY}/attachments` with `X-Atlassian-Token: no-check`.
|
|
35
|
+
10. **Report** - `Created {KEY}: https://{host}/browse/{KEY}` + which post-steps ran.
|
|
36
|
+
|
|
37
|
+
## Error paths
|
|
38
|
+
|
|
39
|
+
401 token → Save Flow or abort (nothing created); mining/createmeta 403 → profile defaults + reactive 400 handling; zero sampled issues → skip mining, note in preview; no board/active sprint → backlog implied, say so; create 5xx → one retry then abort keeping the draft file; post-create failure → warn + continue.
|
|
@@ -98,6 +98,8 @@ Utility Commands (dash form on Copilot, colon form on Claude Code):
|
|
|
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
100
|
/multi-agent:review Review current diff only
|
|
101
|
+
/multi-agent:generate-task ["desc"] [figma-url] Create a Jira Task matching team conventions (preview + approval)
|
|
102
|
+
/multi-agent:generate-bug ["desc"] [figma-url] Create a Jira Bug matching team conventions (preview + approval)
|
|
101
103
|
/multi-agent:sync Sync ecosystem (Claude + Copilot + website + remote-control)
|
|
102
104
|
/multi-agent:setup Keychain tokens + Git identity + language onboarding
|
|
103
105
|
/multi-agent:language [en|tr] Show or set prompt language
|
|
@@ -233,6 +235,8 @@ Utility Komutları:
|
|
|
233
235
|
/multi-agent:purge Worktree + log'lar - tam reset (çift onay)
|
|
234
236
|
/multi-agent:channels Multi-channel rapor gönder (Jira/Confluence/Wiki/PR)
|
|
235
237
|
/multi-agent:review Sadece mevcut diff'i review et
|
|
238
|
+
/multi-agent:generate-task ["açıklama"] [figma-url] Takım standartlarına uygun Jira Task oluştur (önizleme + onay)
|
|
239
|
+
/multi-agent:generate-bug ["açıklama"] [figma-url] Takım standartlarına uygun Jira Bug oluştur (önizleme + onay)
|
|
236
240
|
/multi-agent:sync Ekosistemi senkronize et
|
|
237
241
|
/multi-agent:setup Keychain token + Git kimliği + dil onboarding
|
|
238
242
|
/multi-agent:language [en|tr] Prompt dilini göster veya ayarla
|
|
@@ -33,7 +33,7 @@ Run all steps automatically:
|
|
|
33
33
|
Step 0: FIGMA_SYNC (opt-in) pipeline/scripts/sync-figma-source.sh
|
|
34
34
|
-- incremental pull from upstream if figmaSource.path is set
|
|
35
35
|
Step 1: DETECT Compare timestamps, find stale targets
|
|
36
|
-
Step 2: COPILOT Claude Code -> Copilot CLI (instructions +
|
|
36
|
+
Step 2: COPILOT Claude Code -> Copilot CLI (instructions + 37 sub-command skills)
|
|
37
37
|
Step 3: REPO Claude Code -> pipeline repo (genericized, personal data scrub)
|
|
38
38
|
Step 4: WEBSITE Version + phase/model counts -> {website-host} (i18n + projects.ts)
|
|
39
39
|
Step 5: REMOTE Pipeline references -> remote-control README
|
|
@@ -158,14 +158,14 @@ When invoked with the `release` argument:
|
|
|
158
158
|
|-------------|-------------|
|
|
159
159
|
| `~/.claude/commands/multi-agent/{cmd}.md` | `~/.copilot/skills/multi-agent-{cmd}/SKILL.md` |
|
|
160
160
|
|
|
161
|
-
**
|
|
161
|
+
**37 commands are synced** (canonical inventory - must match `cross-cli-contract.md` section 1; drift = contract violation):
|
|
162
162
|
|
|
163
163
|
```
|
|
164
164
|
analysis, analysis-resolve, autopilot, build-optimize, channels, delete, dev,
|
|
165
165
|
dev-autopilot, dev-local, dev-local-autopilot, diff-explain, finish, garbage-collect,
|
|
166
|
-
help, issue, jira, kill, language, local,
|
|
167
|
-
prune-logs, purge, refactor, resume, review,
|
|
168
|
-
sync, test, update
|
|
166
|
+
generate-bug, generate-task, help, issue, jira, kill, language, local,
|
|
167
|
+
local-autopilot, log, manual-test, prune-logs, purge, refactor, resume, review,
|
|
168
|
+
scan, search, setup, stack, status, sync, test, update
|
|
169
169
|
```
|
|
170
170
|
|
|
171
171
|
**NOT synced**: `refs/*` - Lazy-load references, Claude Code specific
|
|
@@ -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
|
+
**224 skills** across 5 groups.
|
|
7
7
|
|
|
8
8
|
| Group | Name | Platform | Description |
|
|
9
9
|
|-------|------|----------|-------------|
|
|
@@ -121,7 +121,7 @@
|
|
|
121
121
|
| external | `mapkit-location` | - | Implement, review, or improve maps and location features in iOS/macOS apps using MapKit and CoreLocation. Use when working with Map views, a |
|
|
122
122
|
| external | `metrickit-diagnostics` | - | Collect and analyze on-device performance metrics and crash diagnostics using MetricKit. Use when setting up MXMetricManager, handling MXMet |
|
|
123
123
|
| external | `monorepo-architect` | - | Expert in monorepo architecture, build systems, and dependency management at scale. Masters Nx, Turborepo, Bazel, and Lerna for efficient mu |
|
|
124
|
-
| core | `multi-agent` | - | Task orchestrator: runs the full pipeline from a Jira ID or GitHub Issue URL - analysis → plan → TDD development → parallel review (
|
|
124
|
+
| core | `multi-agent` | - | Task orchestrator: runs the full pipeline from a Jira ID or GitHub Issue URL - analysis → plan → TDD development → parallel review (Fable |
|
|
125
125
|
| core | `multi-agent-analysis` | - | Standalone feature-spec analysis (v3 template). Platform-agnostic concept layer with repo-driven convention extraction and per-platform Pass |
|
|
126
126
|
| core | `multi-agent-analysis-resolve` | - | Resolve the Section 20 Risks and Open Questions of an analysis v3 document one row at a time. Proposes up to 3 source-labeled answer candida |
|
|
127
127
|
| core | `multi-agent-autopilot` | - | Launch any task in autopilot mode: skips every confirmation, runs end-to-end autonomously. |
|
|
@@ -135,6 +135,8 @@
|
|
|
135
135
|
| 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 |
|
|
136
136
|
| core | `multi-agent-finish` | - | Continue already-done LOCAL work through the pipeline tail: Review → Build+Test → Commit/PR → Report (technical analysis + Jira test-scenari |
|
|
137
137
|
| 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 |
|
|
138
|
+
| core | `multi-agent-generate-bug` | - | Create a standards-compliant Jira Bug: mines project conventions, drafts in outputLanguage, full preview + explicit approval before create. |
|
|
139
|
+
| core | `multi-agent-generate-task` | - | Create a standards-compliant Jira Task: mines project conventions, drafts in outputLanguage, full preview + explicit approval before create. |
|
|
138
140
|
| 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 |
|
|
139
141
|
| core | `multi-agent-issue` | - | List unassigned GitHub issues, pick one, auto-assign, and launch the multi-agent pipeline. |
|
|
140
142
|
| core | `multi-agent-jira` | - | List open Jira issues, pick one, and launch the multi-agent pipeline. |
|
|
@@ -148,7 +150,7 @@
|
|
|
148
150
|
| core | `multi-agent-purge` | - | ⚠️ Wipes every worktree, branch, log, and state file. Irreversible; asks for double confirmation. |
|
|
149
151
|
| core | `multi-agent-refactor` | - | Analyse the project, score it, draft an improvement plan, take approval, develop, then ask whether to sync. |
|
|
150
152
|
| core | `multi-agent-resume` | - | Resume a stopped or failed task from the phase where it left off. |
|
|
151
|
-
| core | `multi-agent-review` | - | Run parallel review on the current branch's diff: 2 models on Claude Code (
|
|
153
|
+
| 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 |
|
|
152
154
|
| core | `multi-agent-scan` | - | Skill security scan: walks local skill directories against a tiered pattern catalog. |
|
|
153
155
|
| 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. |
|
|
154
156
|
| core | `multi-agent-setup` | - | First-run setup wizard: keychain token discovery, Git Identity onboarding, and pipeline preparation. |
|