@mmerterden/multi-agent-pipeline 14.2.2 → 15.1.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 +186 -6
- package/README.md +19 -12
- package/README.tr.md +19 -12
- package/SECURITY.md +43 -0
- package/docs/FIGMA_PIPELINE.md +3 -3
- package/docs/adr/0006-skills-core-external-split.md +1 -1
- package/docs/adr/0007-multi-tool-adapter-framework.md +1 -1
- package/docs/adr/0009-claude-stack-skills-plugin-only.md +31 -0
- package/docs/adr/README.md +1 -0
- package/docs/architecture.md +13 -13
- package/docs/ecosystem.md +31 -31
- package/docs/features.md +5 -5
- package/index.js +6 -1
- package/install/_codex-agents.mjs +11 -2
- package/install/_common.mjs +109 -3
- package/install/_dev-only-files.mjs +0 -1
- package/install/_platform-filter.mjs +54 -113
- package/install/_plugin-skills.mjs +36 -36
- package/install/claude.mjs +251 -61
- package/install/codex.mjs +28 -6
- package/install/copilot.mjs +69 -9
- package/install/index.mjs +9 -3
- package/install/templates/codex-instructions.md +1 -1
- package/install/templates/copilot-instructions.md +3 -3
- package/package.json +2 -3
- package/pipeline/commands/multi-agent/SKILL.md +2 -0
- package/pipeline/commands/multi-agent/analysis/SKILL.md +3 -3
- package/pipeline/commands/multi-agent/analysis-resolve/SKILL.md +2 -2
- package/pipeline/commands/multi-agent/build-optimize/SKILL.md +9 -9
- package/pipeline/commands/multi-agent/channels/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/complaint-analysis/SKILL.md +186 -0
- package/pipeline/commands/multi-agent/dev/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/dev-autopilot/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/dev-local/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/dev-local-autopilot/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/garbage-collect/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/help/SKILL.md +19 -4
- package/pipeline/commands/multi-agent/ios-coding-standard/SKILL.md +2 -2
- package/pipeline/commands/multi-agent/jira/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/prune-prompts/SKILL.md +81 -0
- package/pipeline/commands/multi-agent/refactor/SKILL.md +36 -1
- package/pipeline/commands/multi-agent/resume/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/{ship → resume-local}/SKILL.md +8 -8
- package/pipeline/commands/multi-agent/scan/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/setup/SKILL.md +5 -5
- package/pipeline/commands/multi-agent/stack/SKILL.md +62 -40
- package/pipeline/commands/multi-agent/store-ready/SKILL.md +3 -3
- package/pipeline/commands/multi-agent/sync/SKILL.md +18 -11
- package/pipeline/commands/multi-agent/testflight-validation/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/uninstall/SKILL.md +2 -0
- package/pipeline/commands/multi-agent/update/SKILL.md +4 -4
- package/pipeline/lib/issue-fetcher.sh +1 -1
- package/pipeline/lib/parse-complaints.sh +316 -0
- package/pipeline/multi-agent-refs/channels/wiki.md +3 -3
- package/pipeline/multi-agent-refs/complaint-analysis-template.md +99 -0
- package/pipeline/multi-agent-refs/component-dispatch.md +6 -6
- package/pipeline/multi-agent-refs/cross-cli-contract.md +16 -16
- package/pipeline/multi-agent-refs/features/external-context-injection.md +1 -1
- package/pipeline/multi-agent-refs/features/stack-skill-routing.md +5 -5
- package/pipeline/multi-agent-refs/generate-issue.md +1 -1
- package/pipeline/multi-agent-refs/phases/modes.md +1 -1
- package/pipeline/multi-agent-refs/phases/operations.md +7 -1
- package/pipeline/multi-agent-refs/phases/phase-0-init.md +1 -1
- package/pipeline/multi-agent-refs/phases/phase-1-analysis.md +7 -7
- package/pipeline/multi-agent-refs/phases/phase-2-planning.md +5 -5
- package/pipeline/multi-agent-refs/phases/phase-3-dev.md +3 -3
- package/pipeline/multi-agent-refs/phases/phase-4-review.md +12 -12
- package/pipeline/multi-agent-refs/phases/phase-5-test.md +1 -1
- package/pipeline/multi-agent-refs/phases/phase-7-report.md +6 -0
- package/pipeline/multi-agent-refs/tracker-contract.md +3 -2
- package/pipeline/multi-agent-refs/wiki-capture.md +2 -2
- package/pipeline/preferences-template.json +18 -5
- package/pipeline/rules/figma-pipeline.md +2 -2
- package/pipeline/schemas/agent-state.schema.json +1 -1
- package/pipeline/schemas/complaint-analysis-spec.schema.json +216 -0
- package/pipeline/schemas/migrations/prefs-2.5.0-to-2.6.0.mjs +46 -0
- package/pipeline/schemas/prefs.schema.json +296 -66
- package/pipeline/schemas/token-budget.json +2 -2
- package/pipeline/scripts/README.md +4 -3
- package/pipeline/scripts/_stack-routing.mjs +79 -0
- package/pipeline/scripts/audit-log-rotate.sh +4 -1
- package/pipeline/scripts/build-skills-index.mjs +11 -0
- package/pipeline/scripts/build-stack-plugins.mjs +28 -60
- package/pipeline/scripts/check-derived-drift.mjs +55 -28
- package/pipeline/scripts/gc-worktrees.sh +4 -1
- package/pipeline/scripts/gen-skills-index.mjs +1 -1
- package/pipeline/scripts/match-skills.mjs +12 -2
- package/pipeline/scripts/migrate-prefs.mjs +33 -21
- package/pipeline/scripts/phase-tracker.sh +32 -5
- package/pipeline/scripts/phase0-exit-gate.mjs +3 -2
- package/pipeline/scripts/run-aggregator.mjs +7 -2
- package/pipeline/scripts/scan-agent-config.sh +1 -1
- package/pipeline/scripts/skill-conformance.mjs +165 -30
- package/pipeline/scripts/smoke-cross-cli-behavior.sh +1 -1
- package/pipeline/scripts/test-gap-rules/android.json +25 -0
- package/pipeline/scripts/test-gap-rules/ios.json +34 -0
- package/pipeline/scripts/test-gap-rules/node.json +29 -0
- package/pipeline/scripts/test-gap-rules/python.json +25 -0
- package/pipeline/scripts/uninstall.mjs +160 -11
- package/pipeline/scripts/usage-report.mjs +426 -0
- package/pipeline/scripts/validate-complaint-doc.mjs +250 -0
- package/pipeline/scripts/validate-reviewer.mjs +9 -3
- package/pipeline/skills/.skill-manifest.json +156 -108
- package/pipeline/skills/.skills-index.json +449 -12
- package/pipeline/skills/shared/README.md +14 -10
- package/pipeline/skills/shared/core/multi-agent-analysis-resolve/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-build-optimize/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-complaint-analysis/SKILL.md +49 -0
- package/pipeline/skills/shared/core/multi-agent-dev/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-dev-autopilot/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-dev-local/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-dev-local-autopilot/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-ios-coding-standard/SKILL.md +2 -2
- package/pipeline/skills/shared/core/multi-agent-prune-prompts/SKILL.md +83 -0
- package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +153 -90
- package/pipeline/skills/shared/core/{multi-agent-ship → multi-agent-resume-local}/SKILL.md +6 -6
- package/pipeline/skills/shared/core/multi-agent-stack/SKILL.md +89 -22
- package/pipeline/skills/shared/core/multi-agent-store-ready/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +8 -8
- package/pipeline/skills/shared/core/multi-agent-testflight-validation/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-update/SKILL.md +1 -1
- package/pipeline/skills/shared/external/ios-coding-standard/modules/_TEMPLATE.yml +2 -2
- package/pipeline/skills/shared/external/ios-coding-standard/references/rules.yml +368 -33
- package/pipeline/skills/shared/external/ios-coding-standard/references/swiftlint.draft.yml +1 -2
- package/pipeline/skills/shared/external/ios-coding-standard/scripts/check_structure.py +765 -0
- package/pipeline/skills/shared/external/ios-module-structure/SKILL.md +75 -0
- package/pipeline/skills/shared/external/ios-module-structure/modules/_TEMPLATE.yml +131 -0
- package/pipeline/skills/shared/external/ios-module-structure/references/rules.yml +559 -0
- package/pipeline/skills/shared/external/ios-module-structure/scripts/check_structure.py +765 -0
- package/pipeline/skills/shared/external/localization-reuse-map/example-mapping.json +53 -10
- package/pipeline/skills/shared/external/localization-reuse-map/reference/sources-and-recipes.md +4 -3
- package/pipeline/skills/skills-index.md +7 -4
|
@@ -91,7 +91,7 @@ Dedicated commands (same as flags above):
|
|
|
91
91
|
/multi-agent:local-autopilot "task" = multi-agent "task" --local autopilot
|
|
92
92
|
/multi-agent:dev-local "task" = multi-agent "task" --dev --local
|
|
93
93
|
/multi-agent:dev-local-autopilot "task" = multi-agent "task" --dev --local autopilot
|
|
94
|
-
/multi-agent:
|
|
94
|
+
/multi-agent:resume-local [jira-id] [autopilot] Continue already-done LOCAL work: Review → Build+Test → PR → Jira analysis + test scenarios (no dev)
|
|
95
95
|
|
|
96
96
|
------------------------------------------------------------
|
|
97
97
|
|
|
@@ -102,6 +102,7 @@ Status & Resume:
|
|
|
102
102
|
/multi-agent:resume [#id] Resume a paused or failed task from where it stopped
|
|
103
103
|
/multi-agent:kill [#id] Stop task + delete worktree (logs preserved)
|
|
104
104
|
/multi-agent:prune-logs Delete per-task project logs (audit + metrics kept; age/project/task filters, dry-run first)
|
|
105
|
+
/multi-agent:prune-prompts Zero-base prompt review: measure always-on instruction footprint, propose keep/trial/delete per rule (report first, apply on approval)
|
|
105
106
|
/multi-agent:garbage-collect Sweep leftover /tmp scratch from past runs (dry-run first)
|
|
106
107
|
/multi-agent:purge Worktree + logs - full reset (double confirm)
|
|
107
108
|
|
|
@@ -113,6 +114,7 @@ Post-Hoc & Side-Channel:
|
|
|
113
114
|
/multi-agent:review-issue Grade a GitHub issue's pipeline-readiness -> comment the gaps on it
|
|
114
115
|
/multi-agent:analysis ["analysis-name"] Feature-spec analysis (Figma + Swagger + Confluence + repos) → per-platform v3 doc (23-section Full / 7-section Lite)
|
|
115
116
|
/multi-agent:analysis-resolve [doc] Resolve Section 20 open questions of an analysis doc, one at a time with source-labeled candidates
|
|
117
|
+
/multi-agent:complaint-analysis ["run-name"] [--file path] Customer-complaint triage: Graylog evidence per trx/conv id + read-only repo correlation → client/bff root cause + fix plan + dev prompt, or core routing recommendation
|
|
116
118
|
/multi-agent:build-optimize iOS-only Xcode build perf wrapper → benchmark + analyze + recommend-first .build-benchmark/optimization-plan.md
|
|
117
119
|
/multi-agent:create-jira ["desc"] [figma-url] [swagger-url] Create a Jira Task/Bug/Story matching team conventions (asks type + mining + active sprint + auto-sizing sections + preview & approval)
|
|
118
120
|
/multi-agent:diff-explain Map a Phase 4 triage finding back to specific diff lines
|
|
@@ -132,13 +134,18 @@ Setup & Maintenance:
|
|
|
132
134
|
|
|
133
135
|
/multi-agent:setup First-run wizard - Keychain tokens + Git identity + language
|
|
134
136
|
/multi-agent:language [en|tr] Show or set outputLanguage (promptLanguage stays English)
|
|
135
|
-
/multi-agent:stack
|
|
137
|
+
/multi-agent:stack [ids...] Enable stack plugin(s); multi-select: ids together (ios backend) or no arg -> native picker (common always on)
|
|
136
138
|
/multi-agent:sync Sync ecosystem (Claude Code + Copilot CLI + pipeline + website + dev-toolkit MCP)
|
|
137
139
|
/multi-agent:update Pull latest pipeline + reinstall + run migrations
|
|
138
140
|
/multi-agent:uninstall Uninstall pipeline from every CLI (--all-data also clears settings + logs; Keychain tokens always intact, double confirm)
|
|
139
141
|
|
|
140
142
|
------------------------------------------------------------
|
|
141
143
|
|
|
144
|
+
Stack plugin skills: call directly as ai-<stack>-toolkit:<skill>. Catalog:
|
|
145
|
+
ai-<stack>-toolkit:help. Active plugins per repo: /multi-agent:stack.
|
|
146
|
+
|
|
147
|
+
------------------------------------------------------------
|
|
148
|
+
|
|
142
149
|
Routines (your own reusable jobs):
|
|
143
150
|
|
|
144
151
|
/multi-agent:save [name] Save a recurring job as a reusable /multi-agent:<name> command
|
|
@@ -353,7 +360,7 @@ Dedicated komutlar (yukarıdaki flag'lerin eşdeğeri):
|
|
|
353
360
|
/multi-agent:local-autopilot "task" = multi-agent "task" --local autopilot
|
|
354
361
|
/multi-agent:dev-local "task" = multi-agent "task" --dev --local
|
|
355
362
|
/multi-agent:dev-local-autopilot "task" = multi-agent "task" --dev --local autopilot
|
|
356
|
-
/multi-agent:
|
|
363
|
+
/multi-agent:resume-local [jira-id] [autopilot] Lokalde biten işi sürdür: Review → Build+Test → PR → Jira teknik analiz + test senaryoları (dev yok)
|
|
357
364
|
|
|
358
365
|
------------------------------------------------------------
|
|
359
366
|
|
|
@@ -364,6 +371,7 @@ Status & Resume:
|
|
|
364
371
|
/multi-agent:resume [#id] Duraklamış / hata almış task'ı kaldığı yerden devam ettir
|
|
365
372
|
/multi-agent:kill [#id] Task'ı durdur + worktree'yi sil (log'lar korunur)
|
|
366
373
|
/multi-agent:prune-logs Task bazlı proje log'larını sil (audit + metrics korunur; yaş/proje/task filtresi, önce dry-run)
|
|
374
|
+
/multi-agent:prune-prompts Sıfır-tabanlı prompt incelemesi: sürekli yüklü talimat yükünü ölç, kural başına tut/dene/sil öner (önce rapor, onayla uygula)
|
|
367
375
|
/multi-agent:garbage-collect Geçmiş koşumların /tmp artıklarını süpür (önce dry-run)
|
|
368
376
|
/multi-agent:purge Worktree + log'lar - tam reset (çift onay)
|
|
369
377
|
|
|
@@ -375,6 +383,7 @@ Post-Hoc & Side-Channel:
|
|
|
375
383
|
/multi-agent:review-issue GitHub issue'nun pipeline'a hazırlığını değerlendir -> eksikleri yorum olarak ekle
|
|
376
384
|
/multi-agent:analysis ["analysis-name"] Feature-spec analizi (Figma + Swagger + Confluence + repolar) → platform başına v3 doküman (23 bölüm Full / 7 bölüm Lite)
|
|
377
385
|
/multi-agent:analysis-resolve [doc] Analiz dokümanının Bölüm 20 açık sorularını kaynak etiketli adaylarla teker teker çözer
|
|
386
|
+
/multi-agent:complaint-analysis ["run-adı"] [--file yol] Müşteri şikayeti triyajı: trx/conv id ile Graylog kanıtı + salt-okunur repo eşleştirme → client/bff kök neden + fix planı + dev prompt'u, veya core'a yönlendirme önerisi
|
|
378
387
|
/multi-agent:build-optimize iOS-only Xcode build performance wrapper → benchmark + analiz + recommend-first .build-benchmark/optimization-plan.md
|
|
379
388
|
/multi-agent:create-jira ["açıklama"] [figma-url] [swagger-url] Takım standartlarına uygun Jira Task/Bug/Story oluştur (tip sorar + convention mining + aktif sprint + auto-sizing bölümler + önizleme & onay)
|
|
380
389
|
/multi-agent:diff-explain Phase 4 triage bulgusunu diff satırlarına eşle
|
|
@@ -394,13 +403,19 @@ Setup & Maintenance:
|
|
|
394
403
|
|
|
395
404
|
/multi-agent:setup İlk kurulum sihirbazı - Keychain token + Git kimliği + dil
|
|
396
405
|
/multi-agent:language [en|tr] outputLanguage'ı göster veya ayarla (promptLanguage İngilizce kalır)
|
|
397
|
-
/multi-agent:stack
|
|
406
|
+
/multi-agent:stack [ids...] Stack plugin'lerini etkinleştir; çoklu seçim: id'ler yan yana (ios backend) ya da argümansız -> native picker (common hep açık)
|
|
398
407
|
/multi-agent:sync Ekosistemi senkronize et (Claude Code + Copilot CLI + pipeline + website + dev-toolkit MCP)
|
|
399
408
|
/multi-agent:update En son pipeline'ı çek + reinstall + migration çalıştır
|
|
400
409
|
/multi-agent:uninstall Pipeline'ı tüm CLI'lerden kaldır (--all-data ayar + logları da siler; Keychain token her zaman dokunulmaz, çift onay)
|
|
401
410
|
|
|
402
411
|
------------------------------------------------------------
|
|
403
412
|
|
|
413
|
+
Stack plugin skill'leri: doğrudan ai-<stack>-toolkit:<skill> olarak çağrılır
|
|
414
|
+
(örn. ai-ios-toolkit:create-component). Lokal kopya ve sarmalayıcı yok. Katalog:
|
|
415
|
+
ai-<stack>-toolkit:help. Aktif plugin'ler repo bazında: /multi-agent:stack.
|
|
416
|
+
|
|
417
|
+
------------------------------------------------------------
|
|
418
|
+
|
|
404
419
|
Rutinler (kendi tekrar eden işlerin):
|
|
405
420
|
|
|
406
421
|
/multi-agent:save [ad] Sık yaptığın bir işi yeniden kullanılabilir /multi-agent:<ad> komutu olarak kaydet
|
|
@@ -9,9 +9,9 @@ allowed-tools: Skill, Bash, Read, Edit, Write, AskUserQuestion
|
|
|
9
9
|
|
|
10
10
|
**Input**: $ARGUMENTS - optionally a module name or path. When absent, Phase 1 discovers and asks.
|
|
11
11
|
|
|
12
|
-
This routine is the **procedure**. The rules live in the `ios-coding-standard` skill, whose registry is
|
|
12
|
+
This routine is the **procedure**. The rules live in the `ai-ios-toolkit:ios-coding-standard` skill, whose registry is
|
|
13
13
|
`references/rules.yml` and whose teaching doc is `references/STANDARD.md`. Load that
|
|
14
|
-
skill first;
|
|
14
|
+
skill first; Claude Code loads it from the iOS stack plugin, Copilot/Codex from their local copy, so
|
|
15
15
|
there is one registry rather than a copy per CLI. Never restate a rule here - cite its ID. A rule that is not in the
|
|
16
16
|
registry is not a rule; if the audit needs one, propose it as `status: proposed` and say so.
|
|
17
17
|
|
|
@@ -79,7 +79,7 @@ After issue selection, inspect `maturity` from `~/.claude/lib/issue-fetcher.sh`:
|
|
|
79
79
|
> **Empty description → parent candidate**: development sub-tasks are often filed with no description of their own, with the real requirements on the parent issue. Before scoring, `issue-fetcher.sh` fetches the issue's `parent` (single hop, no chasing the parent's parent). If the issue's own description is empty and the parent's isn't, it does **not** auto-substitute - it exposes `descriptor.parentKey` + `descriptor.parentDescription` as a candidate and adds `description_empty_parent_available` to `warnings` (not `blockers`) instead of the plain `description_empty` blocker. If the parent is also empty or unreachable, `description_empty` still blocks exactly as before.
|
|
80
80
|
>
|
|
81
81
|
> When `description_empty_parent_available` is present, ask a tailored question instead of the generic "Continue?" below:
|
|
82
|
-
> - `question` (outputLanguage): "Bu issue'nun (`{KEY}`) açıklaması boş, ama parent'ın (`{parentKey}`) açıklaması var. Parent'ın açıklamasından devam edilsin mi?" / "This issue's (`{KEY}`) description is empty, but its parent (`{parentKey}`) has one. Continue using the parent's description?"
|
|
82
|
+
> - `question` (outputLanguage): "Bu issue'nun (`{KEY}`) açıklaması boş, ama parent'ın (`{parentKey}`) açıklaması var. Parent'ın açıklamasından devam edilsin mi?" / "This issue's (`{KEY}`) description is empty, but its parent (`{parentKey}`) has one. Continue using the parent's description?" - show a short excerpt of `parentDescription` for context.
|
|
83
83
|
> - `header` (English, <=12 chars): `"Parent desc"`
|
|
84
84
|
> - `options`: `{ label: "Use parent's description" (Recommended), description: "Continue with descriptor.parentDescription as the working description for this task." }` / `{ label: "No, halt", description: "Treat like description_empty - fix the issue's own description in Jira first." }`
|
|
85
85
|
> - **Accept** → set the working `description` to `parentDescription` for every later phase (analysis/dev/review all read this one substituted value); log the substitution (source issue + parent key) to `agent-log.md`.
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Zero-base prompt review: measure the always-on instruction footprint, classify every rule block, propose keep/trial-removal/delete; applies only approved rows. Use when a new model ships or instructions have accumulated."
|
|
3
|
+
description-tr: "Sıfır-tabanlı prompt incelemesi: sürekli yüklü talimat yükünü ölçer, her kural bloğunu sınıflar, tut/dene/sil önerir; yalnızca onaylananı uygular."
|
|
4
|
+
argument-hint: "[--report-only]"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# multi-agent prune-prompts - Zero-Base Prompt Review
|
|
8
|
+
|
|
9
|
+
Instruction files only grow. Every rule was added because some model once got
|
|
10
|
+
something wrong, and nobody deletes a rule once a workaround ships. A newer
|
|
11
|
+
model needs fewer of them; the ones it no longer needs are pure context tax on
|
|
12
|
+
every session, and stale rules actively mislead.
|
|
13
|
+
|
|
14
|
+
The discipline this command applies (after Boris Cherny's advice): on a model
|
|
15
|
+
upgrade, assume ZERO instructions are needed, and let each line earn its way
|
|
16
|
+
back. A line earns its way back only after the model gets the same thing wrong
|
|
17
|
+
repeatedly (three strikes) WITHOUT it. Instructions are a cache of past model
|
|
18
|
+
failures; a new model invalidates that cache.
|
|
19
|
+
|
|
20
|
+
## Flow
|
|
21
|
+
|
|
22
|
+
### 1. MEASURE - the always-on footprint
|
|
23
|
+
|
|
24
|
+
Estimate tokens (chars/4) for each layer the model carries into every session:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
wc -c "$HOME/.claude/CLAUDE.md" 2>/dev/null
|
|
28
|
+
wc -c "$HOME"/.claude/rules/*.md 2>/dev/null
|
|
29
|
+
find "$PWD" -maxdepth 2 -name "CLAUDE.md" -exec wc -c {} + 2>/dev/null
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Report a table: layer, file, estimated tokens, share of total. Flag any single
|
|
33
|
+
file above ~2,000 estimated tokens.
|
|
34
|
+
|
|
35
|
+
### 2. CLASSIFY - what kind of line is each rule
|
|
36
|
+
|
|
37
|
+
Walk CLAUDE.md + each rules/ file section by section. Classify every
|
|
38
|
+
instruction block:
|
|
39
|
+
|
|
40
|
+
| Class | Meaning | Default verdict |
|
|
41
|
+
|---|---|---|
|
|
42
|
+
| **Constraint** | Facts the model cannot infer (hosts, key names, branch formats, team conventions) | keep |
|
|
43
|
+
| **Failure patch** | "Never do X" added after a model did X | trial removal - the current model may not need it |
|
|
44
|
+
| **Restatement** | Something the model does correctly anyway (write tests, guard early) | delete |
|
|
45
|
+
| **Stale** | References files, commands or workflows that no longer exist | delete |
|
|
46
|
+
|
|
47
|
+
For failure patches, note WHEN the patch was added if git history shows it -
|
|
48
|
+
a patch older than the current model's release is the strongest removal
|
|
49
|
+
candidate.
|
|
50
|
+
|
|
51
|
+
### 3. REPORT - the zero-base proposal
|
|
52
|
+
|
|
53
|
+
One table, every block accounted for: file, section, class, verdict
|
|
54
|
+
(keep / trial-removal / delete), and the one-line reason. Never a sample -
|
|
55
|
+
if a section is not in the table, the review did not happen.
|
|
56
|
+
|
|
57
|
+
With `--report-only`, stop here.
|
|
58
|
+
|
|
59
|
+
### 4. APPLY - only what the user approves
|
|
60
|
+
|
|
61
|
+
Present the table, ask which verdicts to apply (all deletes / all
|
|
62
|
+
trial-removals too / pick rows). For approved rows, edit the files. Trial
|
|
63
|
+
removals move the block into `~/.claude/rules/.pruned/<file>.md` with a
|
|
64
|
+
dated header rather than deleting outright, so a strike-out can be reverted
|
|
65
|
+
by moving the block back.
|
|
66
|
+
|
|
67
|
+
### 5. THE THREE-STRIKE RULE going forward
|
|
68
|
+
|
|
69
|
+
After a prune, when the model gets something wrong that a removed rule used
|
|
70
|
+
to cover, do NOT restore it on the first miss. Record the miss (the
|
|
71
|
+
`.pruned/` file has a `strikes:` line per block). Restore the line only on
|
|
72
|
+
the third occurrence of the SAME failure. One line back at a time - never
|
|
73
|
+
the whole file.
|
|
74
|
+
|
|
75
|
+
## Boundaries
|
|
76
|
+
|
|
77
|
+
- Never touches skill bodies or command files - those load on demand and are
|
|
78
|
+
not part of the always-on footprint. The lint gate (`lint-skills.mjs`)
|
|
79
|
+
owns their budgets.
|
|
80
|
+
- Never touches `multi-agent-preferences.json` or anything under `logs/`.
|
|
81
|
+
- Applies nothing without explicit approval on the report table.
|
|
@@ -18,10 +18,11 @@ Deep-analyses the current project, extracts the global best-practices worth adop
|
|
|
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
20
|
Step 0c: DEV-TOOLKIT Research current MCP practice + audit the companion dev-toolkit repo -> plan band E
|
|
21
|
+
Step 0d: RUN-ERRORS Read the local run-error ledger, rank recurring failures -> plan band F
|
|
21
22
|
Step 1: SCAN Walk the project structure (files, LOC, dependencies, CI, tests)
|
|
22
23
|
Step 2: ANALYZE 10 categories + an explicit BUG HUNT (real defects, not just scores) -> plan bands B, C
|
|
23
24
|
Step 3: SCORE Each category /10, overall /100
|
|
24
|
-
Step 4: PLAN Merge bands A (best-practice) + B (bugs) + C (improvements) + D (drift) + E (dev-toolkit)
|
|
25
|
+
Step 4: PLAN Merge bands A (best-practice) + B (bugs) + C (improvements) + D (drift) + E (dev-toolkit) + F (run-errors)
|
|
25
26
|
Step 5: ASK "Start the work?" - wait for user approval
|
|
26
27
|
Step 6: IMPLEMENT Apply approved items one by one (lint, test, commit)
|
|
27
28
|
Step 7: VERIFY Confirm every test + lint passes
|
|
@@ -34,6 +35,7 @@ Plan bands (all five feed the single Step 4 table):
|
|
|
34
35
|
- **C - Improvement**: quality/perf/DX gaps surfaced by the 10-category analysis.
|
|
35
36
|
- **D - Drift**: upstream updates to skills we derived from an external source.
|
|
36
37
|
- **E - Dev-toolkit**: current-practice gaps in the companion dev-toolkit MCP server (the pipeline's device and browser hands), applied in that repo.
|
|
38
|
+
- **F - Run-errors**: recurring real failures the pipeline actually hit across past runs, read from the local run-error ledger. These are lived evidence, not speculation - a failure that recurs across users or tasks is a prioritized improvement area.
|
|
37
39
|
|
|
38
40
|
## Step 0: BEST-PRACTICES - research the field, adapt to us
|
|
39
41
|
|
|
@@ -178,6 +180,39 @@ Rules for this band:
|
|
|
178
180
|
- 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.
|
|
179
181
|
- 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.
|
|
180
182
|
|
|
183
|
+
## Step 0d: RUN-ERRORS - what the pipeline actually failed on
|
|
184
|
+
|
|
185
|
+
Before speculating about improvements, read what real runs already failed on. When usage logging is enabled, every terminated run appends its errors to a local ledger:
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
LEDGER="$HOME/.claude/logs/multi-agent/errors-ledger.jsonl"
|
|
189
|
+
[ -f "$LEDGER" ] || echo "no run-error ledger yet - skip band F"
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
Each line is one run: `{ t, id, u, c, rp, ph, v, errs[] }`. The `errs[]` entries are cause tags (`<phase>:<cause>` halt reasons, `phase-<id>-failed`, `run-failed`).
|
|
193
|
+
|
|
194
|
+
1. Read the ledger (best-effort; a missing or unreadable file means skip band F, not a failure).
|
|
195
|
+
2. Group by error tag. For each tag compute: occurrences, distinct users affected, distinct repos, the phase it usually strikes, first + last seen, and which pipeline versions it spans (a tag that persists across versions is unfixed; one that stopped at a version is already resolved - do not re-raise it).
|
|
196
|
+
3. Rank by `occurrences x users-affected`. A failure that recurs across users or tasks is lived evidence, not a hypothesis - it outranks a speculative improvement.
|
|
197
|
+
4. For each surviving tag, trace it to the phase doc / script that emits that cause and propose the concrete fix.
|
|
198
|
+
|
|
199
|
+
This band mirrors the admin dashboard's "Gelişim alanları" panel, but reads the local ledger so it needs no auth and works offline. If `$ARGUMENTS` names a focus area, still read the ledger - a recurring run error in that area is the strongest possible signal.
|
|
200
|
+
|
|
201
|
+
Output (plan band F):
|
|
202
|
+
|
|
203
|
+
```
|
|
204
|
+
| # | Error tag | Occurrences | Users | Usual phase | Versions | Root cause (file) | Fix | In plan? |
|
|
205
|
+
|---|-----------|-------------|-------|-------------|----------|-------------------|-----|----------|
|
|
206
|
+
| 1 | 4:reviewer-json-invalid | 12 | 3 | 4 | 14.x-15.x | reviewer prompt lets prose leak | tighten schema instruction in phase-4-review.md | Yes (P0) |
|
|
207
|
+
| 2 | phase-3-failed | 5 | 2 | 3 | 15.0.x | build step misses a stack toolchain | add preflight in phase-3-dev.md | Yes (P1) |
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
Rules for this band:
|
|
211
|
+
|
|
212
|
+
- The ledger is evidence of the past, not a spec. A tag that stopped recurring after a version bump is resolved - report it as resolved, do not add a plan item.
|
|
213
|
+
- Never quote a user's identity as blame. The `u` field is for counting distinct affected users, not for naming anyone in the plan.
|
|
214
|
+
- If the ledger is empty or absent, skip band F silently - it is additive signal, never a gate.
|
|
215
|
+
|
|
181
216
|
## Step 1: SCAN
|
|
182
217
|
|
|
183
218
|
```
|
|
@@ -10,7 +10,7 @@ argument-hint: "[#id] - optional: task ID (e.g. #2). If omitted, the most rece
|
|
|
10
10
|
|
|
11
11
|
Resume a paused or failed task from the last successful phase.
|
|
12
12
|
|
|
13
|
-
> **Not the same as `/multi-agent:
|
|
13
|
+
> **Not the same as `/multi-agent:resume-local`.** `resume` continues a **tracked pipeline task** (needs its `agent-state.json`/worktree) from where it stopped. `/multi-agent:resume-local` takes **ad-hoc local work** on the current branch (no prior task required) and runs the pipeline tail - Review → Build+Test → PR → Jira report - over it.
|
|
14
14
|
|
|
15
15
|
## Steps
|
|
16
16
|
|
|
@@ -4,11 +4,11 @@ description-tr: "Halihazırda bitmiş LOKAL işi pipeline kuyruğundan geçirir:
|
|
|
4
4
|
allowed-tools: Agent, Bash, Read, Write, Edit, Glob, Grep, TaskCreate, TaskUpdate, TaskList, TaskGet, AskUserQuestion, WebFetch, WebSearch, Skill
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
# multi-agent
|
|
7
|
+
# multi-agent resume-local - Take Existing Branch Work Through the Pipeline Tail
|
|
8
8
|
|
|
9
9
|
> **Language (read FIRST)**: Before any status output, read `prefs.global.outputLanguage` and render every conversational line in it. `AskUserQuestion` `label`/`header` stay English, but its `question` and option `description`s render in `outputLanguage`; external payload bodies follow `outputLanguage` too (identifiers, commit messages, branch names stay English). Full contract: `$HOME/.claude/multi-agent-refs/rules.md` "Language Application".
|
|
10
10
|
|
|
11
|
-
You already did the work locally - wrote code on the current branch and maybe tested it by hand, or committed it outside the pipeline entirely. (As of v14.0.0 the `--dev` family reviews its own output, so this command is for work that had no pipeline run behind it, not a patch for a mode that skipped review.) `/multi-agent:
|
|
11
|
+
You already did the work locally - wrote code on the current branch and maybe tested it by hand, or committed it outside the pipeline entirely. (As of v14.0.0 the `--dev` family reviews its own output, so this command is for work that had no pipeline run behind it, not a patch for a mode that skipped review.) `/multi-agent:resume-local` picks up from there and runs the **pipeline tail** over that existing local work in one command: parallel review, a build + test success gate, commit/push + PR, then the technical analysis and a **Jira comment with test scenarios**. It does NOT re-develop - Analysis / Planning / Dev (phases 1-3) are intentionally skipped; the diff already on the branch IS the input.
|
|
12
12
|
|
|
13
13
|
## When to use it
|
|
14
14
|
|
|
@@ -24,10 +24,10 @@ You already did the work locally - wrote code on the current branch and maybe
|
|
|
24
24
|
## Input
|
|
25
25
|
|
|
26
26
|
```bash
|
|
27
|
-
/multi-agent:
|
|
28
|
-
/multi-agent:
|
|
29
|
-
/multi-agent:
|
|
30
|
-
/multi-agent:
|
|
27
|
+
/multi-agent:resume-local # current branch vs its base; resolve Jira id from branch name
|
|
28
|
+
/multi-agent:resume-local PROJ-12345 # bind to an explicit Jira id for the Phase 7 comment
|
|
29
|
+
/multi-agent:resume-local --base develop # override the base branch for the diff
|
|
30
|
+
/multi-agent:resume-local autopilot # no gate prompts: auto-fix blocking findings, auto-PR, auto-comment
|
|
31
31
|
```
|
|
32
32
|
|
|
33
33
|
## Pipeline
|
|
@@ -54,7 +54,7 @@ Phases 1-3 (Analysis / Planning / Dev) are skipped by design - `ship` treats t
|
|
|
54
54
|
|
|
55
55
|
- **Phase 4 Review** - run per `$HOME/.claude/multi-agent-refs/phases/phase-4-review.md` against the resolved diff: deterministic gates (Step 1.x), stack-specific parallel reviewers (Fable + Sonnet on Claude Code; GPT + Opus + Sonnet on Copilot CLI), Fable triage → `triage.accepted`. Blocking/important accepted findings:
|
|
56
56
|
- interactive: present them and ask (`AskUserQuestion`) whether to fix now (loop back through a minimal Phase-3-style TDD fix) or proceed;
|
|
57
|
-
- `autopilot` (or `prefs.global.
|
|
57
|
+
- `autopilot` (or `prefs.global.resumeLocal.autoFix == true`): auto-fix accepted blocking/important findings, then re-review the fix, before advancing.
|
|
58
58
|
- **Phase 5 Build+Test** - the **automated success gate** (this is what "build+test success" means here; the interactive device user-test is `/multi-agent:manual-test`). Stack-aware: build via `figma-config.build` (iOS scheme / Android gradle / detected backend/frontend build) and run the existing test suite if present (`swift test` / `xcodebuild test` / `./gradlew test` / `pytest` / `npm test` / `vitest`). Require success to advance; on failure, surface logs and (interactive) stop or (autopilot) attempt a bounded fix loop. **If the repo has no tests, report "no tests present" - never fabricate test results.**
|
|
59
59
|
- **Phase 6 Commit/PR** - per `$HOME/.claude/multi-agent-refs/phases/phase-6-commit.md`: stage + commit any remaining local changes with a conventional message (`{type}(scope): desc [{JIRA_KEY}-{id}]`), push, and open a PR **only if one does not already exist** for the branch. PR body per `$HOME/.claude/multi-agent-refs/rules.md "External System Outputs"` and `$HOME/.claude/rules/git-conventions.md` - `Ref: #N` / `Related: #N`, never `Closes/Fixes/Resolves`; NO AI/bot attribution anywhere.
|
|
60
60
|
- **Phase 7 Report** - per `$HOME/.claude/multi-agent-refs/phases/phase-7-report.md` + `channels.md`: produce the **technical analysis** and **test scenarios**, then post to the configured channels. Default content for `ship`: a Jira **comment** carrying the technical analysis + the test scenarios (and, when the PR was opened, the PR description). Every body runs through the humanizer; bot/tool/AI signatures are FORBIDDEN in comments.
|
|
@@ -108,5 +108,5 @@ No TaskList widget. After every state change call `bash $HOME/.claude/scripts/ph
|
|
|
108
108
|
```bash
|
|
109
109
|
/multi-agent:dev-local "PROJ-12345" # develop locally (Init→Dev→Commit→Report, no review/test)
|
|
110
110
|
# ... you inspect / hand-test the change ...
|
|
111
|
-
/multi-agent:
|
|
111
|
+
/multi-agent:resume-local # now: review + build/test + PR + Jira analysis & test scenarios
|
|
112
112
|
```
|
|
@@ -66,7 +66,7 @@ Known legitimate domains are embedded in the scanner (github, anthropic, figma,
|
|
|
66
66
|
|
|
67
67
|
## Smoke - self-verification
|
|
68
68
|
|
|
69
|
-
`pipeline/scripts/smoke-skill-scan.sh` confirms the scanner triggers on positive fixtures for every severity and produces no false positives on the real tree.
|
|
69
|
+
`pipeline/scripts/smoke-skill-scan.sh` confirms the scanner triggers on positive fixtures for every severity and produces no false positives on the real tree. This is a maintainer-repo gate (smoke scripts are excluded from the npm package): it runs from a pipeline checkout and in CI, where it must be 13/13 green before a team rollout.
|
|
70
70
|
|
|
71
71
|
## Integration points
|
|
72
72
|
|
|
@@ -883,12 +883,12 @@ Stack skills ship as versioned plugins in the `{owner}/multi-agent-plugins` mark
|
|
|
883
883
|
claude marketplace add {owner}/multi-agent-plugins 2>/dev/null || true
|
|
884
884
|
```
|
|
885
885
|
2. Detect the project stack from markers and enable the matching plugin(s) plus the always-on common plugin in the project's `.claude/settings.json` `enabledPlugins`:
|
|
886
|
-
- `.xcodeproj` / `Package.swift` / `*.xcworkspace` → `ai-ios-
|
|
887
|
-
- `build.gradle` / `settings.gradle` → `ai-android-
|
|
888
|
-
- `package.json` with `react`/`next` → `ai-frontend-
|
|
886
|
+
- `.xcodeproj` / `Package.swift` / `*.xcworkspace` → `ai-ios-toolkit`
|
|
887
|
+
- `build.gradle` / `settings.gradle` → `ai-android-toolkit`
|
|
888
|
+
- `package.json` with `react`/`next` → `ai-frontend-toolkit`
|
|
889
889
|
- `requirements.txt` / `pyproject.toml` / server `package.json` → `ai-backend-toolkit`
|
|
890
|
-
- **no clear marker → default `ai-ios-
|
|
891
|
-
`ai-common-
|
|
890
|
+
- **no clear marker → default `ai-ios-toolkit`**
|
|
891
|
+
`ai-common-toolkit@multi-agent-plugins` is always set `true` alongside the stack plugin.
|
|
892
892
|
3. Report the enabled set. To change later, run `/multi-agent:stack <ios|android|frontend|backend|...>` in the repo. Pipeline Phase 1 auto-detects the stack for its own routing regardless of enablement.
|
|
893
893
|
|
|
894
894
|
The marketplace repo name (`multi-agent-plugins`) is generic; a different org points `{owner}` at its own fork - nothing in the pipeline is coupled to a specific account.
|
|
@@ -1,25 +1,29 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "Select the active stack for this repo by enabling the matching marketplace plugin(s) in .claude/settings.json (ios
|
|
3
|
-
description-tr: "Bu repo için aktif stack'
|
|
4
|
-
|
|
2
|
+
description: "Select the active stack(s) for this repo by enabling the matching marketplace plugin(s) in .claude/settings.json. Multi-select: pass several stacks (ios backend) or pick them in the native picker. Use when a repo's stack changed or the wrong plugins are enabled for it."
|
|
3
|
+
description-tr: "Bu repo için aktif stack'leri seçer: eşleşen marketplace plugin'lerini .claude/settings.json'da etkinleştirir. Çoklu seçim: birden fazla stack yazılabilir (ios backend) ya da native picker'dan seçilir."
|
|
4
|
+
argument-hint: "[ios|android|frontend|web|backend|mobile|fullstack|all ...]"
|
|
5
|
+
allowed-tools: Bash, Read, Edit, Write, AskUserQuestion
|
|
5
6
|
---
|
|
6
7
|
|
|
7
|
-
# multi-agent stack - Select Stack via Plugin Enablement
|
|
8
|
+
# multi-agent stack - Select Stack(s) via Plugin Enablement
|
|
8
9
|
|
|
9
|
-
Stack skills ship as plugins in the `{owner}/multi-agent-plugins` marketplace. Selecting a stack = **enabling the matching plugin(s)** in the current repo's `.claude/settings.json` `enabledPlugins`. The `ai-common-
|
|
10
|
+
Stack skills ship as plugins in the `{owner}/multi-agent-plugins` marketplace. Selecting a stack = **enabling the matching plugin(s)** in the current repo's `.claude/settings.json` `enabledPlugins`. The `ai-common-toolkit` (accessibility audit, humanizer, Firebase) is always enabled alongside the stack plugin(s).
|
|
11
|
+
|
|
12
|
+
On Claude Code the marketplace plugins are the ONLY source of stack skills - nothing is copied into `~/.claude/skills` anymore. A stack that is not enabled here is simply absent from the session. Copilot CLI and Codex CLI have no plugin loader; they receive a local copy filtered to the enabled stacks at install time, which is why step 5 below offers to refresh those copies after a change.
|
|
10
13
|
|
|
11
14
|
This replaces the old `stack-swap.sh` mechanic that physically moved skill directories in `~/.claude/skills/`. There is no SessionStart hook and no directory shuffling - enablement is declarative, per-repo, and versioned.
|
|
12
15
|
|
|
13
16
|
## Usage
|
|
14
17
|
|
|
15
18
|
```bash
|
|
16
|
-
/multi-agent:stack #
|
|
19
|
+
/multi-agent:stack # no arg → native multi-select picker (current state pre-noted)
|
|
17
20
|
/multi-agent:stack ios # SwiftUI toolkit + common
|
|
21
|
+
/multi-agent:stack ios backend # any combination, space-separated
|
|
18
22
|
/multi-agent:stack android # Compose toolkit + common
|
|
19
|
-
/multi-agent:stack mobile #
|
|
23
|
+
/multi-agent:stack mobile # alias: ios + android + common
|
|
20
24
|
/multi-agent:stack backend # Python / Node spec-driven toolkit + common
|
|
21
|
-
/multi-agent:stack frontend # React / TSX toolkit + common
|
|
22
|
-
/multi-agent:stack fullstack # frontend + backend + common
|
|
25
|
+
/multi-agent:stack frontend # React / TSX toolkit + common (alias: web)
|
|
26
|
+
/multi-agent:stack fullstack # alias: frontend + backend + common
|
|
23
27
|
/multi-agent:stack all # all four stack toolkits + common
|
|
24
28
|
```
|
|
25
29
|
|
|
@@ -27,26 +31,38 @@ This replaces the old `stack-swap.sh` mechanic that physically moved skill direc
|
|
|
27
31
|
|
|
28
32
|
| Stack | Plugins enabled (all `@multi-agent-plugins`) |
|
|
29
33
|
|---|---|
|
|
30
|
-
| `ios` | `ai-common-
|
|
31
|
-
| `android` | `ai-common-
|
|
32
|
-
| `frontend` | `ai-common-
|
|
33
|
-
| `backend` | `ai-common-
|
|
34
|
-
| `mobile` | common + `ai-ios-
|
|
35
|
-
| `fullstack` | common + `ai-frontend-
|
|
34
|
+
| `ios` | `ai-common-toolkit`, `ai-ios-toolkit` |
|
|
35
|
+
| `android` | `ai-common-toolkit`, `ai-android-toolkit` |
|
|
36
|
+
| `frontend` / `web` | `ai-common-toolkit`, `ai-frontend-toolkit` |
|
|
37
|
+
| `backend` | `ai-common-toolkit`, `ai-backend-toolkit` |
|
|
38
|
+
| `mobile` | common + `ai-ios-toolkit` + `ai-android-toolkit` |
|
|
39
|
+
| `fullstack` | common + `ai-frontend-toolkit` + `ai-backend-toolkit` |
|
|
36
40
|
| `all` | common + all four stack toolkits |
|
|
37
41
|
|
|
42
|
+
Multiple args union their plugin sets: `ios backend` → common + iOS + backend.
|
|
43
|
+
|
|
38
44
|
## Behaviour
|
|
39
45
|
|
|
40
|
-
1. **No arg →
|
|
41
|
-
|
|
42
|
-
|
|
46
|
+
1. **No arg → native multi-select picker.** Read `.claude/settings.json` (repo) + `~/.claude/settings.json` (global) to learn the current state, then ask with `AskUserQuestion` (`multiSelect: true`) - NEVER a numbered text menu:
|
|
47
|
+
- `question` (in `outputLanguage`): which stacks should be active in this repo, noting the currently enabled ones
|
|
48
|
+
- `header`: "Stacks" (English, UI contract)
|
|
49
|
+
- `options` (4): `ios` / `android` / `frontend (web)` / `backend`, each `description` (in `outputLanguage`) naming the plugin it enables and marking the ones already enabled with "(currently on)" / "(şu an açık)"
|
|
50
|
+
- Map each selected label back to its canonical arg before step 2: the token before any parenthesis (`frontend (web)` → `frontend`).
|
|
51
|
+
- Empty selection or cancel → **status mode**: print the currently enabled `@multi-agent-plugins` plugins and exit without modifying anything. Status mode never runs the Implementation block below - that block is enable-mode only.
|
|
52
|
+
2. **Arg(s) present → enable mode.** Accept multiple space-separated stacks. Resolve each through the alias table (`web`→`frontend`, `mobile`→`ios android`, `fullstack`→`frontend backend`, `all`→every stack), union the plugin sets, then write the **current repo's** `.claude/settings.json`.
|
|
53
|
+
3. **Write rules:**
|
|
54
|
+
- every plugin in the union is set to `true`
|
|
55
|
+
- every stack toolkit **not** in the union is set to `false` (leave non-`@multi-agent-plugins` entries untouched)
|
|
56
|
+
- `ai-common-toolkit@multi-agent-plugins` is always `true`
|
|
57
|
+
- **legacy-key cleanup**: delete any `ai-*-engineering-toolkit@multi-agent-plugins` keys - those plugin names were retired by the `ai-<stack>-toolkit` rename and a stale `true` there enables a plugin that no longer exists in the marketplace
|
|
58
|
+
4. **Unknown arg** → show the table above; do not guess.
|
|
59
|
+
5. **Copilot/Codex refresh offer.** Their local skill copies are filtered to the enabled stacks at install time, so after a change ask (single `AskUserQuestion`, not silent): "Refresh Copilot/Codex local copies now?" - Yes runs `node <pipelineRepo>/install.js --copilot --codex`, No leaves them stale with a one-line warning naming the command to run later. Skip this question entirely when neither `~/.copilot` nor `~/.codex` exists.
|
|
43
60
|
|
|
44
61
|
## Implementation
|
|
45
62
|
|
|
46
63
|
```bash
|
|
47
64
|
REPO_SETTINGS=".claude/settings.json"
|
|
48
65
|
MP="multi-agent-plugins"
|
|
49
|
-
ARG="${1:-status}"
|
|
50
66
|
|
|
51
67
|
# --- ensure the marketplace is known (idempotent) -------------------------
|
|
52
68
|
if ! claude marketplace list 2>/dev/null | grep -q "$MP"; then
|
|
@@ -54,38 +70,44 @@ if ! claude marketplace list 2>/dev/null | grep -q "$MP"; then
|
|
|
54
70
|
|| echo "note: add the marketplace once with: claude marketplace add {owner}/multi-agent-plugins"
|
|
55
71
|
fi
|
|
56
72
|
|
|
57
|
-
COMMON="ai-common-
|
|
58
|
-
IOS="ai-ios-
|
|
59
|
-
ANDROID="ai-android-
|
|
60
|
-
FRONTEND="ai-frontend-
|
|
73
|
+
COMMON="ai-common-toolkit@${MP}"
|
|
74
|
+
IOS="ai-ios-toolkit@${MP}"
|
|
75
|
+
ANDROID="ai-android-toolkit@${MP}"
|
|
76
|
+
FRONTEND="ai-frontend-toolkit@${MP}"
|
|
61
77
|
BACKEND="ai-backend-toolkit@${MP}"
|
|
62
78
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
79
|
+
# Enable-mode only: with zero args the write rules below would set every stack
|
|
80
|
+
# toolkit to false (nothing but $COMMON is in $ON), silently wiping the repo's
|
|
81
|
+
# selection. No args belongs to the picker / status path (Behaviour step 1).
|
|
82
|
+
if [ "$#" -eq 0 ]; then
|
|
83
|
+
echo "No stack given - nothing changed. Pass stacks (ios backend ...) or use the picker."
|
|
67
84
|
exit 0
|
|
68
85
|
fi
|
|
69
86
|
|
|
70
|
-
# resolve the
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
87
|
+
# resolve every arg through the alias table, union the ON set
|
|
88
|
+
ON="$COMMON"
|
|
89
|
+
for ARG in "$@"; do
|
|
90
|
+
case "$ARG" in
|
|
91
|
+
ios) ON="$ON $IOS" ;;
|
|
92
|
+
android) ON="$ON $ANDROID" ;;
|
|
93
|
+
frontend|web) ON="$ON $FRONTEND" ;;
|
|
94
|
+
"frontend (web)") ON="$ON $FRONTEND" ;;
|
|
95
|
+
backend) ON="$ON $BACKEND" ;;
|
|
96
|
+
mobile) ON="$ON $IOS $ANDROID" ;;
|
|
97
|
+
fullstack) ON="$ON $FRONTEND $BACKEND" ;;
|
|
98
|
+
all) ON="$ON $IOS $ANDROID $FRONTEND $BACKEND" ;;
|
|
99
|
+
*) echo "Unknown stack '$ARG'. One of: ios android mobile backend frontend web fullstack all"; exit 1 ;;
|
|
100
|
+
esac
|
|
101
|
+
done
|
|
81
102
|
```
|
|
82
103
|
|
|
83
104
|
After resolving `$ON`, edit `.claude/settings.json` (create `{ "enabledPlugins": {} }` if absent) so that:
|
|
84
105
|
- every plugin in `$ON` is set to `true`,
|
|
85
106
|
- every stack toolkit **not** in `$ON` is set to `false` (leave non-`@multi-agent-plugins` entries untouched),
|
|
86
|
-
- `ai-common-
|
|
107
|
+
- `ai-common-toolkit@multi-agent-plugins` is always `true`,
|
|
108
|
+
- every `ai-*-engineering-toolkit@multi-agent-plugins` key is **deleted** (retired names).
|
|
87
109
|
|
|
88
|
-
Use the Read + Edit/Write tools (JSON must stay valid). Then print the resulting `enabledPlugins` block.
|
|
110
|
+
Use the Read + Edit/Write tools (JSON must stay valid). Then print the resulting `enabledPlugins` block and run step 5 (Copilot/Codex refresh offer).
|
|
89
111
|
|
|
90
112
|
## Notes
|
|
91
113
|
|
|
@@ -39,7 +39,7 @@ a package the store itself refuses, and a policy a human enforces.
|
|
|
39
39
|
|---|---|---|
|
|
40
40
|
| 1 Static | `ios_app_store_audit({archive_path, rules: "all"})` - 18 rules with real ITMS codes. Needs an `.xcarchive`. Reference: `apple-archive-compliance` skill | `android_apk_audit` plus the `google-play-compliance` skill's 21 rules: `bundletool validate` + manifest dump, `aapt2 dump badging`, `apksigner verify`, ABI / native scan. Needs an `.aab` (an `.apk` narrows it, see Step 3) |
|
|
41
41
|
| 2 Authoritative | `ios_testflight_validate({ipa_path, platform: "ios", <credentials>})` → `xcrun altool --validate-app`. Needs an `.ipa` + credentials | **No client shipped.** Play's authoritative check exists only server-side, through a Publishing API draft edit that is validated and then abandoned. The pipeline has no tool for it, so this gate reports `SKIPPED (no local Play validator)` and the report says so. Do not substitute `bundletool validate` - that is Gate 1 |
|
|
42
|
-
| 3 Policy | `app-store-review` skill vs repo source | `play-store-review` skill vs repo source |
|
|
42
|
+
| 3 Policy | `ai-ios-toolkit:app-store-review` skill vs repo source | `ai-android-toolkit:play-store-review` skill vs repo source |
|
|
43
43
|
|
|
44
44
|
Gate 2's asymmetry is real and is reported as an asymmetry, not smoothed over. On
|
|
45
45
|
iOS it is the only gate that catches a version+build pair already used - the most
|
|
@@ -248,7 +248,7 @@ reporting it here would fake a cleared gate.
|
|
|
248
248
|
Load the platform's review skill and review the repo against it. This is the gate
|
|
249
249
|
that catches what a human reviewer rejects, so it reads source, not the binary.
|
|
250
250
|
|
|
251
|
-
**iOS** - `app-store-review`:
|
|
251
|
+
**iOS** - `ai-ios-toolkit:app-store-review`:
|
|
252
252
|
|
|
253
253
|
| Area | Evidence to gather |
|
|
254
254
|
|---|---|
|
|
@@ -260,7 +260,7 @@ that catches what a human reviewer rejects, so it reads source, not the binary.
|
|
|
260
260
|
| IAP | anything unlocking features goes through StoreKit, with no external purchase path |
|
|
261
261
|
| Sign in with Apple | present when a third-party social login is offered |
|
|
262
262
|
|
|
263
|
-
**Android** - `play-store-review`:
|
|
263
|
+
**Android** - `ai-android-toolkit:play-store-review`:
|
|
264
264
|
|
|
265
265
|
| Area | Evidence to gather |
|
|
266
266
|
|---|---|
|