@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.
Files changed (55) hide show
  1. package/CHANGELOG.md +130 -0
  2. package/README.md +1 -1
  3. package/docs/features.md +20 -0
  4. package/index.js +7 -1
  5. package/install/_dev-only-files.mjs +1 -0
  6. package/package.json +4 -3
  7. package/pipeline/agents/security-auditor.md +1 -1
  8. package/pipeline/commands/archive-guard.md +5 -5
  9. package/pipeline/commands/multi-agent/SKILL.md +2 -0
  10. package/pipeline/commands/multi-agent/design-check/SKILL.md +287 -0
  11. package/pipeline/commands/multi-agent/help/SKILL.md +45 -5
  12. package/pipeline/commands/multi-agent/refactor/SKILL.md +92 -12
  13. package/pipeline/commands/multi-agent/review/SKILL.md +1 -1
  14. package/pipeline/commands/multi-agent/sync/SKILL.md +119 -12
  15. package/pipeline/commands/multi-agent/test/SKILL.md +1 -1
  16. package/pipeline/commands/sim-test.md +5 -5
  17. package/pipeline/lib/credential-store.sh +32 -0
  18. package/pipeline/multi-agent-refs/cross-cli-contract.md +3 -3
  19. package/pipeline/multi-agent-refs/phases/phase-3-dev.md +2 -2
  20. package/pipeline/multi-agent-refs/phases/phase-5-test.md +4 -4
  21. package/pipeline/preferences-template.json +18 -1
  22. package/pipeline/schemas/agent-state.schema.json +90 -0
  23. package/pipeline/schemas/design-check-config.schema.json +162 -0
  24. package/pipeline/schemas/migrations/state-2.0.0-to-2.1.0.mjs +30 -12
  25. package/pipeline/schemas/prefs.schema.json +161 -5
  26. package/pipeline/scripts/README.md +7 -5
  27. package/pipeline/scripts/classify-plan-safety.mjs +8 -3
  28. package/pipeline/scripts/cost-budget-check.mjs +9 -5
  29. package/pipeline/scripts/fixtures/install-layout.tsv +6 -6
  30. package/pipeline/scripts/learnings-ledger.mjs +18 -0
  31. package/pipeline/scripts/lint-mcp-refs.mjs +207 -0
  32. package/pipeline/scripts/memory-load.sh +5 -1
  33. package/pipeline/scripts/render-work-summary.sh +4 -1
  34. package/pipeline/scripts/smoke-command-inventory.sh +81 -0
  35. package/pipeline/scripts/smoke-commands-skills-parity.sh +1 -1
  36. package/pipeline/scripts/smoke-compliance-skills.sh +4 -4
  37. package/pipeline/scripts/smoke-cross-cli-behavior.sh +12 -2
  38. package/pipeline/scripts/smoke-generate-issue.sh +6 -5
  39. package/pipeline/scripts/smoke-per-repo-memory.sh +2 -2
  40. package/pipeline/scripts/smoke-review-readiness.sh +3 -2
  41. package/pipeline/scripts/smoke-schema-validation.sh +19 -5
  42. package/pipeline/scripts/smoke-shadow-git.sh +4 -2
  43. package/pipeline/scripts/triage-memory.mjs +18 -0
  44. package/pipeline/scripts/uninstall.mjs +1 -1
  45. package/pipeline/skills/.skill-manifest.json +24 -8
  46. package/pipeline/skills/.skills-index.json +39 -3
  47. package/pipeline/skills/shared/README.md +10 -6
  48. package/pipeline/skills/shared/core/apple-archive-compliance/SKILL.md +10 -8
  49. package/pipeline/skills/shared/core/multi-agent-design-check/SKILL.md +248 -0
  50. package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +22 -0
  51. package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +67 -11
  52. package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +1 -1
  53. package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +51 -9
  54. package/pipeline/skills/shared/core/multi-agent-test/SKILL.md +1 -1
  55. 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 check -> one plan, approval, dev + sync
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 17-rule iOS audit (ITMS / Privacy Manifest /
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 kontrolü -> tek plan, onay, dev + sync
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), priority-ordered
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 four feed the single Step 4 table):
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 four bands into a single plan. Tag each row with its band (A best-practice / B bug / C improvement / D drift) so the source is visible.
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 | P2 | C | DevEx | Rename npm scripts for consistency | Low |
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 upstream drift. Should I start the work?"
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` - 17 rules + ITMS refs |
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 website."
3
- description-tr: "Tüm multi-agent ekosisteminin tek atımlık senkronu: Claude Code, Copilot CLI, pipeline repo ve website."
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 + 41 sub-command skills)
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. WEBSITE Version + features -> {website-host}
246
- 8. COPILOT Copilot CLI instructions + skills sync
247
- 9. Report Summary: version, touched repos, deploy status
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
- **41 commands are synced** (canonical inventory - must match `cross-cli-contract.md` section 1; drift = contract violation):
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 `mcp__dev_toolkit__`)
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, 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
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 `mcp__dev_toolkit__ios_*` tools
26
- For Android: use `mcp__dev_toolkit__android_*` tools
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.4 (provides ios_app_store_audit MCP tool)
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: mcp__dev_toolkit__ios_app_store_audit({ archive_path: <path>, rules: "all" })
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 (41 commands)
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.4) | 17 (Apple ITMS + App Store Review Guidelines) |
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).