@mmerterden/multi-agent-pipeline 12.5.0 → 12.6.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 +130 -0
- package/README.md +1 -1
- package/docs/features.md +20 -0
- package/index.js +7 -1
- package/install/_dev-only-files.mjs +1 -0
- package/package.json +4 -3
- package/pipeline/agents/security-auditor.md +1 -1
- package/pipeline/commands/archive-guard.md +5 -5
- package/pipeline/commands/multi-agent/SKILL.md +2 -0
- package/pipeline/commands/multi-agent/design-check/SKILL.md +287 -0
- package/pipeline/commands/multi-agent/help/SKILL.md +45 -5
- package/pipeline/commands/multi-agent/refactor/SKILL.md +92 -12
- package/pipeline/commands/multi-agent/review/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/sync/SKILL.md +119 -12
- package/pipeline/commands/multi-agent/test/SKILL.md +1 -1
- package/pipeline/commands/sim-test.md +5 -5
- package/pipeline/lib/credential-store.sh +32 -0
- package/pipeline/multi-agent-refs/cross-cli-contract.md +3 -3
- package/pipeline/multi-agent-refs/phases/phase-3-dev.md +2 -2
- package/pipeline/multi-agent-refs/phases/phase-5-test.md +4 -4
- package/pipeline/preferences-template.json +18 -1
- package/pipeline/schemas/agent-state.schema.json +90 -0
- package/pipeline/schemas/design-check-config.schema.json +162 -0
- package/pipeline/schemas/migrations/state-2.0.0-to-2.1.0.mjs +30 -12
- package/pipeline/schemas/prefs.schema.json +161 -5
- package/pipeline/scripts/README.md +7 -5
- package/pipeline/scripts/classify-plan-safety.mjs +8 -3
- package/pipeline/scripts/cost-budget-check.mjs +9 -5
- package/pipeline/scripts/fixtures/install-layout.tsv +6 -6
- package/pipeline/scripts/learnings-ledger.mjs +18 -0
- package/pipeline/scripts/lint-mcp-refs.mjs +207 -0
- package/pipeline/scripts/memory-load.sh +5 -1
- package/pipeline/scripts/render-work-summary.sh +4 -1
- package/pipeline/scripts/smoke-command-inventory.sh +81 -0
- package/pipeline/scripts/smoke-commands-skills-parity.sh +1 -1
- package/pipeline/scripts/smoke-compliance-skills.sh +4 -4
- package/pipeline/scripts/smoke-cross-cli-behavior.sh +12 -2
- package/pipeline/scripts/smoke-generate-issue.sh +6 -5
- package/pipeline/scripts/smoke-per-repo-memory.sh +2 -2
- package/pipeline/scripts/smoke-review-readiness.sh +3 -2
- package/pipeline/scripts/smoke-schema-validation.sh +19 -5
- package/pipeline/scripts/smoke-shadow-git.sh +4 -2
- package/pipeline/scripts/triage-memory.mjs +18 -0
- package/pipeline/scripts/uninstall.mjs +1 -1
- package/pipeline/skills/.skill-manifest.json +24 -8
- package/pipeline/skills/.skills-index.json +39 -3
- package/pipeline/skills/shared/README.md +10 -6
- package/pipeline/skills/shared/core/apple-archive-compliance/SKILL.md +10 -8
- package/pipeline/skills/shared/core/multi-agent-design-check/SKILL.md +248 -0
- package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +22 -0
- package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +67 -11
- package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +51 -9
- package/pipeline/skills/shared/core/multi-agent-test/SKILL.md +1 -1
- package/pipeline/skills/skills-index.md +8 -4
|
@@ -118,14 +118,14 @@ Post-Hoc & Side-Channel:
|
|
|
118
118
|
/multi-agent:diff-explain Map a Phase 4 triage finding back to specific diff lines
|
|
119
119
|
/multi-agent:search Cross-task log search with smart ranking; --semantic queries triage corpus
|
|
120
120
|
/multi-agent:scan Skill security scan against tiered pattern catalog
|
|
121
|
-
/multi-agent:refactor Adapted best-practices + bug hunt + upstream-drift
|
|
121
|
+
/multi-agent:refactor Adapted best-practices + bug hunt + upstream-drift + dev-toolkit MCP research -> one plan, approval, dev + sync
|
|
122
122
|
|
|
123
123
|
Setup & Maintenance:
|
|
124
124
|
|
|
125
125
|
/multi-agent:setup First-run wizard - Keychain tokens + Git identity + language
|
|
126
126
|
/multi-agent:language [en|tr] Show or set outputLanguage (promptLanguage stays English)
|
|
127
127
|
/multi-agent:stack <id> Select stack by enabling the matching marketplace plugin(s) (ios / android / mobile / backend / frontend / fullstack / all)
|
|
128
|
-
/multi-agent:sync Sync ecosystem (Claude Code + Copilot CLI + pipeline + website)
|
|
128
|
+
/multi-agent:sync Sync ecosystem (Claude Code + Copilot CLI + pipeline + website + dev-toolkit MCP)
|
|
129
129
|
/multi-agent:update Pull latest pipeline + reinstall + run migrations
|
|
130
130
|
/multi-agent:uninstall Uninstall pipeline from every CLI (--all-data also clears settings + logs; Keychain tokens always intact, double confirm)
|
|
131
131
|
|
|
@@ -170,6 +170,26 @@ Manual Test (Phase 5 standalone - Xcode hint flow):
|
|
|
170
170
|
/multi-agent:manual-test Checkout task branch, print Xcode/SourceTree hints,
|
|
171
171
|
/multi-agent:manual-test #N wait for your "ok" / "fix: ..." verdict.
|
|
172
172
|
|
|
173
|
+
Design Check (mock-mode vs Figma, local-only - powered by dev-toolkit-mcp design_* tools):
|
|
174
|
+
|
|
175
|
+
/multi-agent:design-check Whole-module design audit: pick repo+module, gate on mock support,
|
|
176
|
+
enumerate every state driver (launch args, scenario cases, scenario codes,
|
|
177
|
+
fixtures, deep links) into a countable target set, build Debug in a worktree,
|
|
178
|
+
drive each target in mock mode via idb, compare each vs its Figma frame
|
|
179
|
+
(padding/width/spacing/font/color/component/localization), and export a
|
|
180
|
+
report (HTML+PDF, ~/DesignChecks).
|
|
181
|
+
/multi-agent:design-check <screen> Scope to one screen's targets (e.g. boarding-pass).
|
|
182
|
+
/multi-agent:design-check <screen@var> Scope to a single variant (e.g. boarding-pass@expired).
|
|
183
|
+
/multi-agent:design-check <figma-url…> Scope to the frame(s) those URLs name.
|
|
184
|
+
/multi-agent:design-check --resume Audit the unaudited remainder of the last run for this repo+module.
|
|
185
|
+
# COVERAGE GATE: every target is either audited or skipped WITH a concrete reason. Anything else fails the
|
|
186
|
+
# gate and the run is reported INCOMPLETE with the missing target ids - a partial audit never reads as clean.
|
|
187
|
+
# "Requires a scenario / prefix / launch-arg" is not a reason; reaching those states is the run's job.
|
|
188
|
+
# When a live screen has no confident Figma match, it SHOWS you the screenshot and asks for the node-id.
|
|
189
|
+
|
|
190
|
+
dev-toolkit-mcp design_* tools it drives: design_mock_detect, design_scenario_inventory, design_mock_launch,
|
|
191
|
+
design_ui_geometry, design_visual_compare, design_report (+ ios_* / android_* device control).
|
|
192
|
+
|
|
173
193
|
------------------------------------------------------------
|
|
174
194
|
|
|
175
195
|
Setup:
|
|
@@ -195,7 +215,7 @@ Key Features:
|
|
|
195
215
|
Multi-Repo Per-repo worktrees, per-repo identity, integration build before commit
|
|
196
216
|
Identity Routing Git identity auto-picked from repo origin URL (corporate vs personal)
|
|
197
217
|
Issue Safety Never auto-closes issues (4 approvals required, GitHub + Jira)
|
|
198
|
-
Store Compliance /multi-agent:test "store-ready" runs
|
|
218
|
+
Store Compliance /multi-agent:test "store-ready" runs 18-rule iOS audit (ITMS / Privacy Manifest /
|
|
199
219
|
code signing / debug-tool leak / IPv6 / SDK list / etc.) and 21-rule Android audit
|
|
200
220
|
Bilingual EN + TR - outputLanguage toggles assistant explanations; promptLanguage is locked en
|
|
201
221
|
|
|
@@ -341,14 +361,14 @@ Post-Hoc & Side-Channel:
|
|
|
341
361
|
/multi-agent:diff-explain Phase 4 triage bulgusunu diff satırlarına eşle
|
|
342
362
|
/multi-agent:search Task log'larında akıllı arama; --semantic triage corpus'unu sorgular
|
|
343
363
|
/multi-agent:scan Skill güvenlik taraması (tiered pattern catalog)
|
|
344
|
-
/multi-agent:refactor Uyarlanmış best-practice + bug avı + upstream-drift
|
|
364
|
+
/multi-agent:refactor Uyarlanmış best-practice + bug avı + upstream-drift + dev-toolkit MCP araştırması -> tek plan, onay, dev + sync
|
|
345
365
|
|
|
346
366
|
Setup & Maintenance:
|
|
347
367
|
|
|
348
368
|
/multi-agent:setup İlk kurulum sihirbazı - Keychain token + Git kimliği + dil
|
|
349
369
|
/multi-agent:language [en|tr] outputLanguage'ı göster veya ayarla (promptLanguage İngilizce kalır)
|
|
350
370
|
/multi-agent:stack <id> Stack'i eşleşen marketplace plugin'i etkinleştirerek seç (ios / android / mobile / backend / frontend / fullstack / all)
|
|
351
|
-
/multi-agent:sync Ekosistemi senkronize et (Claude Code + Copilot CLI + pipeline + website)
|
|
371
|
+
/multi-agent:sync Ekosistemi senkronize et (Claude Code + Copilot CLI + pipeline + website + dev-toolkit MCP)
|
|
352
372
|
/multi-agent:update En son pipeline'ı çek + reinstall + migration çalıştır
|
|
353
373
|
/multi-agent:uninstall Pipeline'ı tüm CLI'lerden kaldır (--all-data ayar + logları da siler; Keychain token her zaman dokunulmaz, çift onay)
|
|
354
374
|
|
|
@@ -393,6 +413,26 @@ Manuel Test (Phase 5 standalone - Xcode hint akışı):
|
|
|
393
413
|
/multi-agent:manual-test Task branch'ine checkout, Xcode/SourceTree hint basar,
|
|
394
414
|
/multi-agent:manual-test #N "ok" / "fix: ..." yanıtını bekler.
|
|
395
415
|
|
|
416
|
+
Design Check (mock-mod vs Figma, yalnızca lokal - dev-toolkit-mcp design_* tool'larıyla):
|
|
417
|
+
|
|
418
|
+
/multi-agent:design-check Tüm modül tasarım denetimi: repo+modül seç, mock desteğini geçitle,
|
|
419
|
+
her state sürücüsünü (launch arg, senaryo case'leri, senaryo kodları,
|
|
420
|
+
fixture'lar, deep link'ler) sayılabilir bir hedef kümesine çıkar,
|
|
421
|
+
worktree'de Debug derle, her hedefi mock modda idb ile sür, her birini
|
|
422
|
+
Figma frame'iyle karşılaştır (padding/genişlik/spacing/font/renk/
|
|
423
|
+
component/localization), rapor çıkar (HTML+PDF, ~/DesignChecks).
|
|
424
|
+
/multi-agent:design-check <ekran> Tek ekranın hedeflerine kapsa (örn. boarding-pass).
|
|
425
|
+
/multi-agent:design-check <ekran@varyant> Tek varyanta kapsa (örn. boarding-pass@expired).
|
|
426
|
+
/multi-agent:design-check <figma-url…> URL'lerin işaret ettiği frame'lere kapsa.
|
|
427
|
+
/multi-agent:design-check --resume Bu repo+modül için son koşunun denetlenmemiş kalanını denetle.
|
|
428
|
+
# KAPSAM GEÇİDİ: her hedef ya denetlenir ya da SOMUT bir gerekçeyle atlanır. Başka her durum geçidi
|
|
429
|
+
# düşürür ve koşu eksik hedef id'leriyle EKSİK raporlanır - kısmi denetim asla temiz görünmez.
|
|
430
|
+
# "Senaryo / prefix / launch-arg gerektirir" gerekçe değildir; o state'lere ulaşmak koşunun işidir.
|
|
431
|
+
# Canlı ekranın Figma karşılığı kesin bulunamazsa SANA screenshot'ı gösterip node-id sorar.
|
|
432
|
+
|
|
433
|
+
Sürdüğü dev-toolkit-mcp design_* tool'ları: design_mock_detect, design_scenario_inventory, design_mock_launch,
|
|
434
|
+
design_ui_geometry, design_visual_compare, design_report (+ ios_* / android_* cihaz kontrolü).
|
|
435
|
+
|
|
396
436
|
------------------------------------------------------------
|
|
397
437
|
|
|
398
438
|
Setup:
|
|
@@ -1,37 +1,39 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "Analyse the project: extract adapted best-practices, hunt real bugs + improvement areas, check upstream drift of derived skills, draft one plan, take approval, develop, then ask whether to sync."
|
|
3
|
-
description-tr: "Projeyi analiz eder: uyarlanmış best-practice'leri çıkarır, gerçek bug + iyileştirme alanlarını avlar, türetilmiş skill'lerin upstream drift'ini kontrol eder, tek plan taslağı çıkarır, onay alır, geliştirir, sonra sync isteyip istemediğini sorar."
|
|
4
|
-
allowed-tools: Read, Write, Edit, Bash, Glob, Grep, Agent, AskUserQuestion, WebFetch
|
|
2
|
+
description: "Analyse the project: extract adapted best-practices, hunt real bugs + improvement areas, check upstream drift of derived skills, research the companion dev-toolkit MCP server against current MCP practice, draft one plan, take approval, develop, then ask whether to sync."
|
|
3
|
+
description-tr: "Projeyi analiz eder: uyarlanmış best-practice'leri çıkarır, gerçek bug + iyileştirme alanlarını avlar, türetilmiş skill'lerin upstream drift'ini kontrol eder, dev-toolkit MCP sunucusunu güncel MCP pratiklerine göre araştırır, tek plan taslağı çıkarır, onay alır, geliştirir, sonra sync isteyip istemediğini sorar."
|
|
4
|
+
allowed-tools: Read, Write, Edit, Bash, Glob, Grep, Agent, AskUserQuestion, WebFetch, WebSearch
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Multi-Agent Refactor
|
|
8
8
|
|
|
9
|
-
**One command. Best-practices + Bug hunt + Upstream drift -> Score -> Plan -> Approval -> Develop -> Sync.**
|
|
9
|
+
**One command. Best-practices + Bug hunt + Upstream drift + Dev-toolkit -> Score -> Plan -> Approval -> Develop -> Sync.**
|
|
10
10
|
|
|
11
|
-
Deep-analyses the current project, extracts the global best-practices worth adopting (adapted to our stack), hunts real bugs and improvement areas, checks whether any skills we derived from an upstream source have drifted, scores everything, drafts a single prioritized plan, asks the user for approval, applies the approved items, and asks about sync at the end.
|
|
11
|
+
Deep-analyses the current project, extracts the global best-practices worth adopting (adapted to our stack), hunts real bugs and improvement areas, checks whether any skills we derived from an upstream source have drifted, researches the companion dev-toolkit MCP server against current MCP practice, scores everything, drafts a single prioritized plan, asks the user for approval, applies the approved items, and asks about sync at the end.
|
|
12
12
|
|
|
13
|
-
**Input**: $ARGUMENTS (optional - area to focus on: "security", "performance", "tests", "bugs", "best-practices", "drift", etc.)
|
|
13
|
+
**Input**: $ARGUMENTS (optional - area to focus on: "security", "performance", "tests", "bugs", "best-practices", "drift", "dev-toolkit", etc.)
|
|
14
14
|
|
|
15
15
|
## Flow
|
|
16
16
|
|
|
17
17
|
```
|
|
18
18
|
Step 0: BEST-PRACTICES Research the field, extract the best approaches, ADAPT them to our stack -> plan band A
|
|
19
19
|
Step 0b: DRIFT Check upstream-derived skills for updates we have not pulled -> plan band D
|
|
20
|
+
Step 0c: DEV-TOOLKIT Research current MCP practice + audit the companion dev-toolkit repo -> plan band E
|
|
20
21
|
Step 1: SCAN Walk the project structure (files, LOC, dependencies, CI, tests)
|
|
21
22
|
Step 2: ANALYZE 10 categories + an explicit BUG HUNT (real defects, not just scores) -> plan bands B, C
|
|
22
23
|
Step 3: SCORE Each category /10, overall /100
|
|
23
|
-
Step 4: PLAN Merge bands A (best-practice) + B (bugs) + C (improvements) + D (drift)
|
|
24
|
+
Step 4: PLAN Merge bands A (best-practice) + B (bugs) + C (improvements) + D (drift) + E (dev-toolkit)
|
|
24
25
|
Step 5: ASK "Start the work?" - wait for user approval
|
|
25
26
|
Step 6: IMPLEMENT Apply approved items one by one (lint, test, commit)
|
|
26
27
|
Step 7: VERIFY Confirm every test + lint passes
|
|
27
28
|
Step 8: ASK SYNC "Run /multi-agent:sync?" - wait for user approval
|
|
28
29
|
```
|
|
29
30
|
|
|
30
|
-
Plan bands (all
|
|
31
|
+
Plan bands (all five feed the single Step 4 table):
|
|
31
32
|
- **A - Best-practice**: the best field approaches, adapted so they actually fit this repo.
|
|
32
33
|
- **B - Bug**: real defects found in the code (correctness, security, data-loss, crashes).
|
|
33
34
|
- **C - Improvement**: quality/perf/DX gaps surfaced by the 10-category analysis.
|
|
34
35
|
- **D - Drift**: upstream updates to skills we derived from an external source.
|
|
36
|
+
- **E - Dev-toolkit**: current-practice gaps in the companion dev-toolkit MCP server (the pipeline's device and browser hands), applied in that repo.
|
|
35
37
|
|
|
36
38
|
## Step 0: BEST-PRACTICES - research the field, adapt to us
|
|
37
39
|
|
|
@@ -96,6 +98,78 @@ Procedure:
|
|
|
96
98
|
|
|
97
99
|
5. For each drifted entry, add a band-D plan item: "port upstream <plugin> <version> changes into <localPath>", with the specific skills to update. Do not auto-apply upstream changes - they go through Step 5 approval like everything else, and after porting, bump the entry's `derivedFromVersion`.
|
|
98
100
|
|
|
101
|
+
## Step 0c: DEV-TOOLKIT - current MCP practice for the companion toolkit
|
|
102
|
+
|
|
103
|
+
The pipeline's hands on devices and browsers are MCP tools served by a companion repo (`dev-toolkit-mcp`): Phase 5 test, `manual-test`, `design-check` and `apple-archive-compliance` all call them, and several pipeline skills declare a minimum toolkit version (see `cross-cli-contract.md`). That repo therefore has to track the MCP field, not just its own README. This step researches what current practice is and audits the toolkit against it.
|
|
104
|
+
|
|
105
|
+
**Resolution** - configuration first, never a hardcoded path:
|
|
106
|
+
|
|
107
|
+
1. `prefs.global.devToolkit` in `~/.claude/multi-agent-preferences.json`:
|
|
108
|
+
|
|
109
|
+
```jsonc
|
|
110
|
+
{
|
|
111
|
+
"enabled": true,
|
|
112
|
+
"label": "<human name>",
|
|
113
|
+
"localPath": "$HOME/<repo-dir>", // the companion repo working copy
|
|
114
|
+
"mcpServerName": "<registered MCP server name>",
|
|
115
|
+
"packageName": "@<scope>/<package>",
|
|
116
|
+
"registry": "github-packages", // github-packages | npmjs | none
|
|
117
|
+
"repoUrl": "https://github.com/<owner>/<repo>"
|
|
118
|
+
}
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
2. If unset, auto-detect from the MCP registration: read `mcpServers` in `~/.claude.json` (including each `projects[*].mcpServers`) and in `~/.claude/settings.json`; for a stdio entry whose command is `node`, take `dirname(args[0])`. Accept it only when that directory is a git repo whose `package.json` depends on `@modelcontextprotocol/sdk`.
|
|
122
|
+
3. If neither resolves, skip this step and report "no dev-toolkit configured". Never guess a path, never clone.
|
|
123
|
+
4. `enabled: false` skips the step.
|
|
124
|
+
|
|
125
|
+
**Research axes** - a finding without a source link is not a finding:
|
|
126
|
+
|
|
127
|
+
| # | Axis | Where to look | What to extract |
|
|
128
|
+
|---|------|---------------|-----------------|
|
|
129
|
+
| 1 | MCP protocol | spec revisions + `@modelcontextprotocol/sdk` releases | protocol features released since the pinned SDK range that the server does not use yet: tool annotations (`readOnlyHint` / `destructiveHint` / `idempotentHint` / `openWorldHint`), `outputSchema` + structured content, resource links in results, progress + cancellation, `tools/list_changed`, pagination, elicitation |
|
|
130
|
+
| 2 | Host clients | Claude Code / Copilot CLI / Cursor / Antigravity docs + release notes | per-tool description budget, tool-count ceilings, naming conventions, image and output size limits, permission / allowlist ergonomics |
|
|
131
|
+
| 3 | Peer servers | GitHub search on the same domain terms + `stars:>50` | tool surfaces we lack, conventions peers converged on, and what to discard as out of scope |
|
|
132
|
+
| 4 | Wrapped tooling | `xcrun simctl help`, `idb`, `adb`, `xcodebuild`, Playwright release notes, Apple ITMS + App Store Review Guidelines | deprecated flags still in use, new capabilities worth a tool, audit rules that changed |
|
|
133
|
+
| 5 | Field practice | X / Twitter, Reddit, MCP community threads | what server authors actually changed recently (transport choice, output-token diets, sandboxing, error shape) |
|
|
134
|
+
|
|
135
|
+
**Audit the toolkit against the findings** - run the checks, do not assume:
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
DT="<resolved localPath>"
|
|
139
|
+
node --check "$DT/index.js"
|
|
140
|
+
find "$DT/tools" -name "*.js" -type f -exec node --check {} \;
|
|
141
|
+
|
|
142
|
+
# stdout carries the JSON-RPC frames: a stray stdout write corrupts the stream
|
|
143
|
+
grep -rn "console\.log(" "$DT/index.js" "$DT/tools" || echo "stdout clean"
|
|
144
|
+
|
|
145
|
+
# advertised tool counts vs reality (README header + package.json description)
|
|
146
|
+
grep -nE "[0-9]+ tools" "$DT/README.md" "$DT/package.json"
|
|
147
|
+
|
|
148
|
+
# packaging: every runtime directory must be inside files[]
|
|
149
|
+
node -p "require('$DT/package.json').files.join('\n')"
|
|
150
|
+
ls -d "$DT"/tools/*/
|
|
151
|
+
|
|
152
|
+
cd "$DT" && npm outdated; npm audit --omit=dev 2>/dev/null | tail -20
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
Also check: every tool carries a description and an `inputSchema`; token-heavy results (screenshots, UI trees, logs) are truncated or written to a file path instead of inlined; failures return an error result with an actionable message instead of throwing; `engines.node` matches what the SDK needs; `CHANGELOG.md`, a CI workflow and a test harness exist.
|
|
156
|
+
|
|
157
|
+
Output (plan band E):
|
|
158
|
+
|
|
159
|
+
```
|
|
160
|
+
| # | Axis | Finding | Source | Adaptation in the toolkit (file) | Effort | Impact | In plan? |
|
|
161
|
+
|---|------|---------|--------|----------------------------------|--------|--------|----------|
|
|
162
|
+
| 1 | Protocol | read-only tools carry no annotations | <spec link> | add `annotations` to the read-only tools in index.js | Low | Medium | Yes (P1) |
|
|
163
|
+
| 2 | Wrapped tooling | uses a simctl flag removed in Xcode <v> | <release notes> | switch tools/<family>/<file>.js to <new flag> | Low | High | Yes (P0) |
|
|
164
|
+
| 3 | Peer servers | peer exposes <surface> | <repo link> | does not fit: outside the pipeline's phases | - | - | No |
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
Rules for this band:
|
|
168
|
+
|
|
169
|
+
- Band-E work lands in the toolkit repo, never mirrored into this one. Shipping it is `/multi-agent:sync` Step 3d.
|
|
170
|
+
- A finding that changes the tool surface (new / renamed / removed tool) pairs with a pipeline-side item: bump the minimum toolkit version wherever a pipeline skill declares one.
|
|
171
|
+
- If the current working directory IS the toolkit repo, skip band E and let bands A/B/C cover it - never report the same finding twice.
|
|
172
|
+
|
|
99
173
|
## Step 1: SCAN
|
|
100
174
|
|
|
101
175
|
```
|
|
@@ -168,7 +242,7 @@ Each category is scored out of 10. Output:
|
|
|
168
242
|
|
|
169
243
|
## Step 4: PLAN - one merged, prioritized table
|
|
170
244
|
|
|
171
|
-
Merge all
|
|
245
|
+
Merge all five bands into a single plan. Tag each row with its band (A best-practice / B bug / C improvement / D drift / E dev-toolkit) so the source is visible.
|
|
172
246
|
|
|
173
247
|
```
|
|
174
248
|
| # | Priority | Band | Category | Item | Impact |
|
|
@@ -177,7 +251,8 @@ Merge all four bands into a single plan. Tag each row with its band (A best-prac
|
|
|
177
251
|
| 2 | P0 | B | Tests | Fix nil-deref on empty response (src/y:42) | High |
|
|
178
252
|
| 3 | P1 | A | CI/CD | Adopt matrix build (adapt: .github/workflows/ci.yml) | Medium |
|
|
179
253
|
| 4 | P1 | D | Skills | Port upstream <plugin> 0.3.0 fixes into <localPath> | Medium |
|
|
180
|
-
| 5 |
|
|
254
|
+
| 5 | P1 | E | Toolkit | Add read-only annotations to the dev-toolkit device tools | Medium |
|
|
255
|
+
| 6 | P2 | C | DevEx | Rename npm scripts for consistency | Low |
|
|
181
256
|
```
|
|
182
257
|
|
|
183
258
|
Priority levels:
|
|
@@ -189,13 +264,14 @@ Priority levels:
|
|
|
189
264
|
|
|
190
265
|
After showing the plan, ask:
|
|
191
266
|
|
|
192
|
-
> "Found X items (P0: N, P1: M, P2: K) across bugs, best-practices, improvements, and
|
|
267
|
+
> "Found X items (P0: N, P1: M, P2: K) across bugs, best-practices, improvements, upstream drift, and dev-toolkit practice. Should I start the work?"
|
|
193
268
|
|
|
194
269
|
Options:
|
|
195
270
|
- "Yes, do all"
|
|
196
271
|
- "Only P0"
|
|
197
272
|
- "P0 + P1 only"
|
|
198
273
|
- "Only bugs (band B)"
|
|
274
|
+
- "Only the dev-toolkit (band E)"
|
|
199
275
|
- (the user may pick specific items)
|
|
200
276
|
|
|
201
277
|
**Never start the work without approval.**
|
|
@@ -206,6 +282,7 @@ Apply the approved items one by one:
|
|
|
206
282
|
|
|
207
283
|
1. For each item:
|
|
208
284
|
- apply the change (for band D, port the upstream diff into `localPath`, then bump that entry's `derivedFromVersion` in preferences)
|
|
285
|
+
- band-E items are applied inside the toolkit repo, never mirrored here: edit there, re-run its gates (`node --check`, the `tools/list` handshake, advertised tool count matching reality), then commit there with that repo's own convention. Publishing is `/multi-agent:sync` Step 3d - do not publish from this step.
|
|
209
286
|
- run the relevant tests
|
|
210
287
|
- on success, move to the next
|
|
211
288
|
- on failure, roll back and notify the user
|
|
@@ -229,6 +306,8 @@ echo "Lint: PASS/FAIL"
|
|
|
229
306
|
echo "Test: PASS/FAIL (X/Y passed)"
|
|
230
307
|
```
|
|
231
308
|
|
|
309
|
+
If any band-E item was applied, verify the toolkit repo too - syntax check every file it loads, handshake the server and confirm `tools/list` still answers, and confirm the advertised tool counts (README header, `package.json` description) match the count the server reports.
|
|
310
|
+
|
|
232
311
|
## Step 8: ASK SYNC
|
|
233
312
|
|
|
234
313
|
After every approved item is applied, ask:
|
|
@@ -236,7 +315,7 @@ After every approved item is applied, ask:
|
|
|
236
315
|
> "Work is complete. Should I run /multi-agent:sync?"
|
|
237
316
|
|
|
238
317
|
Options:
|
|
239
|
-
- "Yes" -> run the `/multi-agent:sync` command (full ecosystem sync)
|
|
318
|
+
- "Yes" -> run the `/multi-agent:sync` command (full ecosystem sync - its Step 3d ships any band-E work in the toolkit repo)
|
|
240
319
|
- "No" -> emit a report and stop
|
|
241
320
|
- "Commit + push only" -> push the current repo without sync
|
|
242
321
|
|
|
@@ -249,6 +328,7 @@ If $ARGUMENTS is set, focus on that band/category only:
|
|
|
249
328
|
| `bugs` | Bug hunt only (band B) |
|
|
250
329
|
| `best-practices` | Field research + adapted plan only (band A) |
|
|
251
330
|
| `drift` | Upstream derived-skill drift only (band D) |
|
|
331
|
+
| `dev-toolkit` | Companion MCP toolkit research + audit only (band E) |
|
|
252
332
|
| `security` | Security analysis only |
|
|
253
333
|
| `tests` | Test coverage and quality only |
|
|
254
334
|
| `performance` | Performance optimisation only |
|
|
@@ -192,7 +192,7 @@ When release-relevant iOS/Android files change, load the matching catalog:
|
|
|
192
192
|
|
|
193
193
|
| Platform | Trigger files | Catalog |
|
|
194
194
|
|---|---|---|
|
|
195
|
-
| iOS | `**/Info.plist`, `**/PrivacyInfo.xcprivacy`, `**/*.entitlements`, `**/*App.swift`, `**/AppDelegate*.swift`, `**/SceneDelegate*.swift`, `**/project.pbxproj` | `pipeline/skills/shared/core/apple-archive-compliance/SKILL.md` -
|
|
195
|
+
| iOS | `**/Info.plist`, `**/PrivacyInfo.xcprivacy`, `**/*.entitlements`, `**/*App.swift`, `**/AppDelegate*.swift`, `**/SceneDelegate*.swift`, `**/project.pbxproj` | `pipeline/skills/shared/core/apple-archive-compliance/SKILL.md` - 18 rules + ITMS refs |
|
|
196
196
|
| Android | `**/AndroidManifest.xml`, `**/build.gradle(.kts)`, `**/proguard-rules.pro`, `**/network_security_config.xml` | `pipeline/skills/shared/core/google-play-compliance/SKILL.md` - 21 rules + Play policy refs |
|
|
197
197
|
|
|
198
198
|
Each finding gets the `ruleID` from the catalog plus the platform policy ref:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "One-shot sync of the entire multi-agent ecosystem: Claude Code, Copilot CLI, pipeline repo, and
|
|
3
|
-
description-tr: "Tüm multi-agent ekosisteminin tek atımlık senkronu: Claude Code, Copilot CLI, pipeline repo ve
|
|
4
|
-
argument-hint: "[release] [--platform=<macos|linux|windows>]"
|
|
2
|
+
description: "One-shot sync of the entire multi-agent ecosystem: Claude Code, Copilot CLI, pipeline repo, website, and the dev-toolkit MCP server."
|
|
3
|
+
description-tr: "Tüm multi-agent ekosisteminin tek atımlık senkronu: Claude Code, Copilot CLI, pipeline repo, website ve dev-toolkit MCP sunucusu."
|
|
4
|
+
argument-hint: "[release] [dev-toolkit] [--platform=<macos|linux|windows>]"
|
|
5
5
|
allowed-tools: Read, Write, Edit, Bash, Glob, Grep, AskUserQuestion, WebFetch
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -15,8 +15,9 @@ When invoked, it synchronizes all targets in order. It detects what changed, upd
|
|
|
15
15
|
|
|
16
16
|
| Arg | Meaning |
|
|
17
17
|
|---|---|
|
|
18
|
-
| (none) | Full ecosystem sync: Claude Code, Copilot CLI, pipeline repo, website. |
|
|
19
|
-
| `release` | Full sync + version bump + tag + npm publish + website deploy |
|
|
18
|
+
| (none) | Full ecosystem sync: Claude Code, Copilot CLI, pipeline repo, website, dev-toolkit MCP server. |
|
|
19
|
+
| `release` | Full sync + version bump + tag + npm publish + website deploy (includes the dev-toolkit ship path) |
|
|
20
|
+
| `dev-toolkit` | Run Step 3d only: gate, commit and publish the companion MCP server |
|
|
20
21
|
| `--platform=<macos\|linux\|windows>` | Override automatic platform detection. For CI / cross-platform smoke. |
|
|
21
22
|
| `"change description"` | Apply the description to every target at once |
|
|
22
23
|
|
|
@@ -28,6 +29,7 @@ When invoked, it synchronizes all targets in order. It detects what changed, upd
|
|
|
28
29
|
| 2 | Copilot CLI | `~/.copilot/copilot-instructions.md` + `~/.copilot/skills/` | <- from Claude |
|
|
29
30
|
| 3 | multi-agent-pipeline repo | `~/multi-agent-pipeline/pipeline/` | <- from Claude (genericized) |
|
|
30
31
|
| 4 | Website | `{owner}/{website-host}` | <- version + features |
|
|
32
|
+
| 5 | dev-toolkit MCP server | resolved from `prefs.global.devToolkit` or the `mcpServers` registration | own repo: gate, commit, publish |
|
|
31
33
|
|
|
32
34
|
## Platform Support (macOS / Linux / Windows)
|
|
33
35
|
|
|
@@ -56,13 +58,14 @@ Run every step automatically:
|
|
|
56
58
|
```
|
|
57
59
|
Step 1: PLATFORM Detect macOS / Linux / Windows (Git Bash / WSL); export PLATFORM env
|
|
58
60
|
Step 1.5: DETECT Compare timestamps, find stale targets
|
|
59
|
-
Step 2: COPILOT Claude Code -> Copilot CLI (instructions +
|
|
61
|
+
Step 2: COPILOT Claude Code -> Copilot CLI (instructions + 42 sub-command skills)
|
|
60
62
|
Step 3: REPO Claude Code -> pipeline repo (genericized, personal data scrub, bash -n on all sh)
|
|
61
63
|
Step 3c: PLUGINS pipeline shared/external -> multi-agent-plugins marketplace (rebuild knowledge/,
|
|
62
64
|
bump changed plugins' patch version, commit + push the plugins repo)
|
|
65
|
+
Step 3d: DEV-TOOLKIT companion MCP server -> detect movement, run the ship gates, commit + publish
|
|
63
66
|
Step 4: WEBSITE Version + phase/model counts -> {website-host} (i18n + projects.ts)
|
|
64
67
|
Step 5: Commit Commit + push all changed repos
|
|
65
|
-
Step 6: Report Summary: synced targets, platform, changed files, deploy status
|
|
68
|
+
Step 6: Report Summary: synced targets, platform, changed files, deploy status, dev-toolkit version
|
|
66
69
|
```
|
|
67
70
|
|
|
68
71
|
If nothing is stale → report "All targets up to date" and stop.
|
|
@@ -73,6 +76,7 @@ If nothing is stale → report "All targets up to date" and stop.
|
|
|
73
76
|
|-------|----------|
|
|
74
77
|
| (no args) | Full ecosystem sync (default) |
|
|
75
78
|
| `release` | Full sync + version bump + tag + npm publish + website deploy |
|
|
79
|
+
| `dev-toolkit` | Run Step 3d only: gate, commit and publish the companion MCP server |
|
|
76
80
|
| `"change description"` | Apply the description to EVERY target at once |
|
|
77
81
|
|
|
78
82
|
---
|
|
@@ -207,6 +211,107 @@ Never author skills directly in the plugins repo's `knowledge/` — they will be
|
|
|
207
211
|
|
|
208
212
|
---
|
|
209
213
|
|
|
214
|
+
## Dev-Toolkit Sync (Step 3d)
|
|
215
|
+
|
|
216
|
+
The companion MCP server (`dev-toolkit-mcp`) is its own repo with its own registry. Pipeline skills call its tools and several declare a minimum version, so when it moves it has to ship - otherwise the pipeline documents a tool no consumer has.
|
|
217
|
+
|
|
218
|
+
**Resolution**: identical to `/multi-agent:refactor` Step 0c - `prefs.global.devToolkit` first, then auto-detect from the `mcpServers` registration (`~/.claude.json`, `~/.claude/settings.json`), then skip. `enabled: false` skips.
|
|
219
|
+
|
|
220
|
+
**Detect movement**:
|
|
221
|
+
|
|
222
|
+
```bash
|
|
223
|
+
DT="<resolved localPath>"; cd "$DT"
|
|
224
|
+
git fetch origin --quiet 2>/dev/null || true
|
|
225
|
+
DIRTY=$(git status --porcelain)
|
|
226
|
+
AHEAD=$(git log --oneline @{u}..HEAD 2>/dev/null | wc -l | tr -d ' ')
|
|
227
|
+
VER=$(node -p "require('./package.json').version")
|
|
228
|
+
TAGGED=$(git tag --list "v$VER")
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
Moved = `DIRTY` non-empty, or `AHEAD` > 0, or no tag for `VER`. Nothing moved -> report `dev-toolkit: up to date (v$VER)` and continue with the sync.
|
|
232
|
+
|
|
233
|
+
**Ship gates** - all must pass before commit or publish. A gate failure aborts THIS step only, reported with file + line; the rest of the sync continues.
|
|
234
|
+
|
|
235
|
+
**Prefer the repo's own gate script.** When the toolkit ships one (`npm run gates`, or `scripts/gates.sh`), run THAT and skip the inline list below - the repo owns the definition, this skill only owns the requirement. The inline gates are the fallback for a repo that has none, and the checklist the gate script itself must cover.
|
|
236
|
+
|
|
237
|
+
```bash
|
|
238
|
+
cd "$DT"
|
|
239
|
+
if node -e "process.exit(require('./package.json').scripts?.gates ? 0 : 1)" 2>/dev/null; then
|
|
240
|
+
npm run gates || echo "ABORT: dev-toolkit gates failed"
|
|
241
|
+
elif [ -f scripts/gates.sh ]; then
|
|
242
|
+
bash scripts/gates.sh || echo "ABORT: dev-toolkit gates failed"
|
|
243
|
+
else
|
|
244
|
+
: # run the inline gates below
|
|
245
|
+
fi
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
1. **Syntax**: `node --check index.js` plus every `tools/**/*.js`.
|
|
249
|
+
2. **Boot + inventory**: handshake the server over stdio and count the registered tools.
|
|
250
|
+
|
|
251
|
+
```bash
|
|
252
|
+
TOOLS=$(printf '%s\n' \
|
|
253
|
+
'{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"sync","version":"1"}}}' \
|
|
254
|
+
'{"jsonrpc":"2.0","method":"notifications/initialized"}' \
|
|
255
|
+
'{"jsonrpc":"2.0","id":2,"method":"tools/list"}' \
|
|
256
|
+
| node index.js 2>/dev/null \
|
|
257
|
+
| node -e 'let b="";process.stdin.on("data",d=>b+=d).on("end",()=>{const m=b.split("\n").filter(Boolean).map(l=>{try{return JSON.parse(l)}catch{return null}}).find(x=>x&&x.id===2&&x.result&&x.result.tools);console.log(m?m.result.tools.length:0)})')
|
|
258
|
+
[ "${TOOLS:-0}" -gt 0 ] || echo "ABORT: the toolkit served 0 tools"
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
3. **Advertised-count match**: `$TOOLS` must equal every advertised count (`package.json` `description`, the `README.md` header and its per-family rows). Fix the docs, never the gate - a stale count has shipped before.
|
|
262
|
+
4. **Packaging**: every directory the server loads at runtime must be inside `files[]`. A missing entry publishes a broken package (this has already caused one patch release).
|
|
263
|
+
|
|
264
|
+
```bash
|
|
265
|
+
PACK=$(npm pack --dry-run 2>&1)
|
|
266
|
+
for d in tools/*/; do printf '%s' "$PACK" | grep -q "$d" || echo "ABORT: $d missing from files[]"; done
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
5. **stdout hygiene**: `grep -rn "console\.log(" index.js tools/` must be empty - stdout carries the JSON-RPC frames, diagnostics belong on `console.error`.
|
|
270
|
+
6. **Personal-data scan**: no absolute `/Users/<name>` paths, no tokens, no corporate hostnames in the shipped files.
|
|
271
|
+
7. **Version contract**: every pipeline-side minimum (the `cross-cli-contract.md` tool table, `design-check`'s MCP requirement, `apple-archive-compliance`) must be satisfied by the version about to ship. A newly added tool that a pipeline skill now needs -> bump that declared minimum in the pipeline during this same sync.
|
|
272
|
+
|
|
273
|
+
**Version bump**: patch for fixes and docs, minor for a new tool, major for a removed or renamed tool (pipeline minimums depend on the surface).
|
|
274
|
+
|
|
275
|
+
**Ship**:
|
|
276
|
+
|
|
277
|
+
```bash
|
|
278
|
+
gh auth switch --user {owner}
|
|
279
|
+
git add -A
|
|
280
|
+
git commit -m "{type}(v$NEW): {what changed}" # that repo's own commit convention
|
|
281
|
+
git tag "v$NEW" && git push origin main --tags
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
Publish to the registry declared in `publishConfig` through a throwaway userconfig. Never edit `~/.npmrc`, and never a bare `npm publish` - it lands on whichever registry the ambient config happens to name.
|
|
285
|
+
|
|
286
|
+
**The token depends on the registry**: `npm.pkg.github.com` authenticates with a GitHub PAT carrying `write:packages` (logical key `github`), `registry.npmjs.org` with an npm token (logical key `npm`). Picking the wrong one fails with a 401 that reads like a missing package.
|
|
287
|
+
|
|
288
|
+
```bash
|
|
289
|
+
NPMRC=$(mktemp); trap 'rm -f "$NPMRC"' EXIT
|
|
290
|
+
REG=$(node -p "require('./package.json').publishConfig?.registry || 'https://registry.npmjs.org'")
|
|
291
|
+
HOST=${REG#https://}; HOST=${HOST%/}
|
|
292
|
+
case "$HOST" in npm.pkg.github.com*) KEY=github ;; *) KEY=npm ;; esac
|
|
293
|
+
TOKEN=$(bash "$HOME/.claude/lib/credential-store.sh" get "$KEY")
|
|
294
|
+
[ -n "$TOKEN" ] || echo "ABORT: no '$KEY' token - onboard it via /multi-agent:setup before publishing"
|
|
295
|
+
printf '%s\n' "registry=$REG" "//$HOST/:_authToken=$TOKEN" > "$NPMRC"
|
|
296
|
+
npm publish --userconfig "$NPMRC"
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
Verify the publish landed: on GitHub Packages `npm view <package> version --userconfig "$NPMRC"`; on npmjs read the registry directly (`curl -s https://registry.npmjs.org/<package>/latest`) rather than `npm view`, which can answer from a stale cache.
|
|
300
|
+
|
|
301
|
+
**Approval**: outside autopilot and outside `release`, ask before shipping.
|
|
302
|
+
|
|
303
|
+
> "dev-toolkit moved (N changed files, M unpushed commits, v$VER). What should I do?"
|
|
304
|
+
|
|
305
|
+
- Commit + push (no publish)
|
|
306
|
+
- Commit + push + publish v$NEW
|
|
307
|
+
- Skip this step
|
|
308
|
+
|
|
309
|
+
With `release`, or in autopilot, run the full ship path without asking. If the working copy holds band-E work from `/multi-agent:refactor` that was never approved, do not ship it silently - report it and ask.
|
|
310
|
+
|
|
311
|
+
**Consumer note**: a path-based stdio registration (`node <localPath>/index.js`) picks the change up on the next MCP restart with no reinstall; a packaged registration (`npx <package>`) needs the published version. State which one the resolved config uses in the Step 6 report.
|
|
312
|
+
|
|
313
|
+
---
|
|
314
|
+
|
|
210
315
|
## Website Sync (Step 4)
|
|
211
316
|
|
|
212
317
|
Propagate pipeline version, phase count, model count, and feature descriptions to the website.
|
|
@@ -242,9 +347,10 @@ When invoked with the `release` argument:
|
|
|
242
347
|
4. VERSION package.json version bump (patch/minor/major)
|
|
243
348
|
5. Commit + TAG git commit + git tag v{VERSION}
|
|
244
349
|
6. PUSH git push --tags -> release.yml auto-publish
|
|
245
|
-
7.
|
|
246
|
-
8.
|
|
247
|
-
9.
|
|
350
|
+
7. DEV-TOOLKIT Ship the companion MCP server if it moved (Step 3d gates, then publish)
|
|
351
|
+
8. WEBSITE Version + features -> {website-host}
|
|
352
|
+
9. COPILOT Copilot CLI instructions + skills sync
|
|
353
|
+
10. Report Summary: version, touched repos, deploy status
|
|
248
354
|
```
|
|
249
355
|
|
|
250
356
|
---
|
|
@@ -257,10 +363,10 @@ This runs on the Claude <-> Copilot axis — the two CLIs the pipeline supports
|
|
|
257
363
|
|-------------|-------------|
|
|
258
364
|
| `~/.claude/commands/multi-agent/{cmd}/SKILL.md` | `~/.copilot/skills/multi-agent-{cmd}/SKILL.md` |
|
|
259
365
|
|
|
260
|
-
**
|
|
366
|
+
**42 commands are synced** (canonical inventory - must match `cross-cli-contract.md` section 1; drift = contract violation):
|
|
261
367
|
|
|
262
368
|
```
|
|
263
|
-
analysis, analysis-resolve, autopilot, build-optimize, channels, create-jira, dev,
|
|
369
|
+
analysis, analysis-resolve, autopilot, build-optimize, channels, create-jira, design-check, dev,
|
|
264
370
|
dev-autopilot, dev-local, dev-local-autopilot, diff-explain, finish, forget, garbage-collect,
|
|
265
371
|
help, issue, jira, kill, language, local,
|
|
266
372
|
local-autopilot, log, manual-test, prune-logs, purge, refactor, resume, review, review-issue, review-jira,
|
|
@@ -281,6 +387,7 @@ routines, save, scan, search, setup, stack, status, sync, test, uninstall, updat
|
|
|
281
387
|
| `gh` CLI (personal) | `{owner}` gh auth (Keychain) |
|
|
282
388
|
| `gh` CLI (work) | `{user}_<work-label>` gh auth (Keychain) - see `prefs.global.accounts[]` |
|
|
283
389
|
| npm publish | `NODE_AUTH_TOKEN` - `GITHUB_TOKEN` in CI, Keychain PAT locally |
|
|
390
|
+
| dev-toolkit publish (Step 3d) | `npm` logical Keychain key -> throwaway `--userconfig`, registry from that repo's `publishConfig` |
|
|
284
391
|
|
|
285
392
|
```bash
|
|
286
393
|
gh auth switch --user {owner} # for personal repos
|
|
@@ -35,6 +35,6 @@ Pass `$ARGUMENTS` through verbatim - sim-test.md decides which test matrix to
|
|
|
35
35
|
|
|
36
36
|
- **iOS**: Xcode + a booted Simulator (`xcrun simctl list | grep Booted`)
|
|
37
37
|
- **Android**: Android SDK + a running emulator or USB device (`adb devices`)
|
|
38
|
-
- **MCP**: the `dev-toolkit` MCP server must be installed (tool names start with `
|
|
38
|
+
- **MCP**: the `dev-toolkit` MCP server must be installed (tool names start with `mcp__dev-toolkit__`)
|
|
39
39
|
|
|
40
40
|
For manual-test mode (checkout the task branch + Xcode-open hint), see `/multi-agent:manual-test`.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: "Mobile UI Bug Hunter - iOS Simulator (simctl) + Android Emulator (adb) - auto-detects platform"
|
|
3
|
-
allowed-tools: Agent, Bash, Read, Write, Edit, TaskCreate, TaskUpdate, TaskList, TaskGet,
|
|
3
|
+
allowed-tools: Agent, Bash, Read, Write, Edit, TaskCreate, TaskUpdate, TaskList, TaskGet, mcp__dev-toolkit__ios_list_devices, mcp__dev-toolkit__ios_boot_device, mcp__dev-toolkit__ios_screenshot, mcp__dev-toolkit__ios_tap, mcp__dev-toolkit__ios_swipe, mcp__dev-toolkit__ios_type_text, mcp__dev-toolkit__ios_launch_app, mcp__dev-toolkit__ios_terminate_app, mcp__dev-toolkit__ios_list_apps, mcp__dev-toolkit__ios_go_home, mcp__dev-toolkit__ios_set_appearance, mcp__dev-toolkit__ios_set_content_size, mcp__dev-toolkit__ios_set_locale, mcp__dev-toolkit__ios_open_url, mcp__dev-toolkit__ios_status_bar, mcp__dev-toolkit__ios_push_notification, mcp__dev-toolkit__ios_grant_permission, mcp__dev-toolkit__ios_revoke_permission, mcp__dev-toolkit__ios_reset_permissions, mcp__dev-toolkit__ios_set_location, mcp__dev-toolkit__ios_clear_location, mcp__dev-toolkit__ios_set_increase_contrast, mcp__dev-toolkit__ios_record_video, mcp__dev-toolkit__ios_add_media, mcp__dev-toolkit__ios_keychain_reset, mcp__dev-toolkit__ios_get_app_container, mcp__dev-toolkit__ios_erase_device, mcp__dev-toolkit__ios_get_ui_tree, mcp__dev-toolkit__android_list_devices, mcp__dev-toolkit__android_screenshot, mcp__dev-toolkit__android_tap, mcp__dev-toolkit__android_swipe, mcp__dev-toolkit__android_type_text, mcp__dev-toolkit__android_key_event, mcp__dev-toolkit__android_launch_app, mcp__dev-toolkit__android_stop_app, mcp__dev-toolkit__android_list_packages, mcp__dev-toolkit__android_go_home, mcp__dev-toolkit__android_go_back, mcp__dev-toolkit__android_get_ui_tree, mcp__dev-toolkit__android_set_dark_mode, mcp__dev-toolkit__android_set_font_scale, mcp__dev-toolkit__android_set_locale, mcp__dev-toolkit__android_set_location, mcp__dev-toolkit__android_grant_permission, mcp__dev-toolkit__android_revoke_permission, mcp__dev-toolkit__android_record_screen, mcp__dev-toolkit__android_install_apk, mcp__dev-toolkit__android_uninstall_app, mcp__dev-toolkit__android_logcat, mcp__dev-toolkit__android_get_screen_size, mcp__dev-toolkit__android_open_url, mcp__dev-toolkit__android_clear_app_data
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Mobile UI Bug Hunter
|
|
@@ -22,8 +22,8 @@ Auto-detects platform: iOS (simctl) or Android (adb). No external apps needed.
|
|
|
22
22
|
5. If argument contains "android" or "ios" -> use that
|
|
23
23
|
```
|
|
24
24
|
|
|
25
|
-
For iOS: use `
|
|
26
|
-
For Android: use `
|
|
25
|
+
For iOS: use `mcp__dev-toolkit__ios_*` tools
|
|
26
|
+
For Android: use `mcp__dev-toolkit__android_*` tools
|
|
27
27
|
|
|
28
28
|
**Android extras**: `get_ui_tree` returns XML with bounds/text/resource-id (uiautomator dump), `logcat` for crash detection, `go_back` button.
|
|
29
29
|
|
|
@@ -134,11 +134,11 @@ Step A - run the standard visual + accessibility sweep (light + dark + large t
|
|
|
134
134
|
Step B - dispatch compliance skill:
|
|
135
135
|
iOS:
|
|
136
136
|
Load pipeline/skills/shared/core/apple-archive-compliance/SKILL.md
|
|
137
|
-
Prereq: @mmerterden/dev-toolkit-mcp ≥ v2.
|
|
137
|
+
Prereq: @mmerterden/dev-toolkit-mcp ≥ v2.9.0 (provides ios_app_store_audit MCP tool)
|
|
138
138
|
- installable via npm; standalone ArchiveGuard binary deprecated in v8.4.0
|
|
139
139
|
Artifact: pick newest .xcarchive under ~/Library/Developer/Xcode/Archives/**
|
|
140
140
|
OR accept explicit path argument after "store-ready"
|
|
141
|
-
Invoke:
|
|
141
|
+
Invoke: mcp__dev-toolkit__ios_app_store_audit({ archive_path: <path>, rules: "all" })
|
|
142
142
|
OR (Node fallback): node -e "import('@mmerterden/dev-toolkit-mcp/tools/ios-app-store-audit/index.js').then(m => m.runAudit({ archivePath: '<path>', rules: 'all' }).then(r => console.log(JSON.stringify(r))))"
|
|
143
143
|
Humanize via --lang en (promptLanguage is locked to "en"; pass --lang=tr explicitly to opt into Turkish)
|
|
144
144
|
Android:
|
|
@@ -84,10 +84,39 @@ require_cmd() {
|
|
|
84
84
|
fi
|
|
85
85
|
}
|
|
86
86
|
|
|
87
|
+
# --- Logical key -> backend key --------------------------------------------
|
|
88
|
+
# Callers pass a LOGICAL key ("github", "jira", "figma_pat"). The actual
|
|
89
|
+
# Keychain / libsecret / Credential Manager entry is named by
|
|
90
|
+
# prefs.global.keychainMapping, so a lookup that uses the logical key verbatim
|
|
91
|
+
# finds nothing whenever the two differ - silently, because a missing entry and
|
|
92
|
+
# a missing mapping look identical from here. Resolve the mapping first and fall
|
|
93
|
+
# back to the logical key when no mapping exists (backward compatible with
|
|
94
|
+
# entries whose name already equals the logical key).
|
|
95
|
+
PREFS_FILE="${MULTI_AGENT_PREFS:-$HOME/.claude/multi-agent-preferences.json}"
|
|
96
|
+
|
|
97
|
+
resolve_key() {
|
|
98
|
+
local logical="$1" mapped=""
|
|
99
|
+
if [ -f "$PREFS_FILE" ] && command -v python3 >/dev/null 2>&1; then
|
|
100
|
+
mapped=$(python3 -c '
|
|
101
|
+
import json, sys
|
|
102
|
+
try:
|
|
103
|
+
with open(sys.argv[1], encoding="utf-8") as fh:
|
|
104
|
+
prefs = json.load(fh)
|
|
105
|
+
except Exception:
|
|
106
|
+
sys.exit(0)
|
|
107
|
+
name = prefs.get("global", {}).get("keychainMapping", {}).get(sys.argv[2])
|
|
108
|
+
if isinstance(name, str) and name.strip():
|
|
109
|
+
sys.stdout.write(name.strip())
|
|
110
|
+
' "$PREFS_FILE" "$logical" 2>/dev/null || true)
|
|
111
|
+
fi
|
|
112
|
+
printf '%s' "${mapped:-$logical}"
|
|
113
|
+
}
|
|
114
|
+
|
|
87
115
|
# --- Subcommands ------------------------------------------------------------
|
|
88
116
|
do_get() {
|
|
89
117
|
local key="${1:-}"
|
|
90
118
|
[ -z "$key" ] && { echo "usage: $0 get <key>" >&2; exit 3; }
|
|
119
|
+
key=$(resolve_key "$key")
|
|
91
120
|
if delegate_to_python; then
|
|
92
121
|
local val rc
|
|
93
122
|
val=$(python3 "$KEYCHAIN_PY" get "$key" 2>/dev/null) || rc=$?
|
|
@@ -128,6 +157,8 @@ if (\$c) { \$c.GetNetworkCredential().Password }
|
|
|
128
157
|
do_set() {
|
|
129
158
|
local key="${1:-}" val="${2:-}"
|
|
130
159
|
[ -z "$key" ] && { echo "usage: $0 set <key> <value|->" >&2; exit 3; }
|
|
160
|
+
# Resolve through the same mapping as do_get so set/get stay symmetric.
|
|
161
|
+
key=$(resolve_key "$key")
|
|
131
162
|
# "-" means: read the secret from stdin (keeps it off argv).
|
|
132
163
|
if [ "$val" = "-" ]; then
|
|
133
164
|
val=$(cat)
|
|
@@ -173,6 +204,7 @@ New-StoredCredential -Target '$key_esc' -UserName '${USER:-${USERNAME:-claude}}'
|
|
|
173
204
|
do_delete() {
|
|
174
205
|
local key="${1:-}"
|
|
175
206
|
[ -z "$key" ] && { echo "usage: $0 delete <key>" >&2; exit 3; }
|
|
207
|
+
key=$(resolve_key "$key")
|
|
176
208
|
if delegate_to_python; then
|
|
177
209
|
python3 "$KEYCHAIN_PY" delete "$key" >/dev/null 2>&1 || true
|
|
178
210
|
return 0
|
|
@@ -6,10 +6,10 @@
|
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
## 1. Command Inventory (
|
|
9
|
+
## 1. Command Inventory (42 commands)
|
|
10
10
|
|
|
11
11
|
```
|
|
12
|
-
analysis, analysis-resolve, autopilot, build-optimize, channels, create-jira, dev,
|
|
12
|
+
analysis, analysis-resolve, autopilot, build-optimize, channels, create-jira, design-check, dev,
|
|
13
13
|
dev-autopilot, dev-local, dev-local-autopilot, diff-explain, finish, forget, garbage-collect,
|
|
14
14
|
help, issue, jira, kill, language, local,
|
|
15
15
|
local-autopilot, log, manual-test, prune-logs, purge, refactor, resume, review, review-issue, review-jira,
|
|
@@ -43,7 +43,7 @@ Two parallel shared/core skills under `pipeline/skills/shared/core/` wrap extern
|
|
|
43
43
|
|
|
44
44
|
| Skill | Path | Tool wrapper | Rules |
|
|
45
45
|
|---|---|---|---|
|
|
46
|
-
| `apple-archive-compliance` | `pipeline/skills/shared/core/apple-archive-compliance/` | `ios_app_store_audit` MCP tool (in `@mmerterden/dev-toolkit-mcp` ≥ v2.
|
|
46
|
+
| `apple-archive-compliance` | `pipeline/skills/shared/core/apple-archive-compliance/` | `ios_app_store_audit` MCP tool (in `@mmerterden/dev-toolkit-mcp` ≥ v2.9.0) | 18 (Apple ITMS + App Store Review Guidelines) |
|
|
47
47
|
| `google-play-compliance` | `pipeline/skills/shared/core/google-play-compliance/` | bundletool + aapt2 + apksigner | 21 (4 categories: Technical / Security / Privacy / Hygiene) |
|
|
48
48
|
|
|
49
49
|
Both skills are wired to 4 consumers: `/multi-agent:test "store-ready"` (primary), Phase 4 Security Auditor (`pipeline/agents/security-auditor.md`), `/multi-agent:review` + SKILL.md counterpart, `/multi-agent:channels` PR-body auto-augmentation. Contract enforced by `smoke-compliance-skills.sh` (46 assertions).
|