@mmerterden/multi-agent-pipeline 20.19.0 → 20.21.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 +44 -0
- package/README.md +25 -14
- package/README.tr.md +22 -11
- package/docs/ecosystem.md +14 -8
- package/docs/facts.json +7 -6
- package/docs/features.md +2 -1
- package/install/catalog-history.json +1 -1
- package/manifest.json +49 -46
- package/package.json +1 -1
- package/pipeline/commands/multi-agent/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/route-on/SKILL.md +32 -8
- package/pipeline/commands/multi-agent/route-status/SKILL.md +12 -2
- package/pipeline/commands/multi-agent/setup/SKILL.md +2 -1
- package/pipeline/lib/model-dispatch.sh +72 -24
- package/pipeline/lib/outbound-gate.mjs +2 -0
- package/pipeline/lib/route-state.sh +118 -10
- package/pipeline/lib/toolkit-llm.sh +30 -0
- package/pipeline/lib/unattended-profile-check.mjs +23 -2
- package/pipeline/multi-agent-refs/analysis/evidence.md +3 -1
- package/pipeline/multi-agent-refs/cross-cli-contract.md +12 -3
- package/pipeline/multi-agent-refs/features/doctor.md +11 -0
- package/pipeline/multi-agent-refs/features/exploratory-testing.md +7 -0
- package/pipeline/multi-agent-refs/features/external-context-injection.md +1 -1
- package/pipeline/multi-agent-refs/features/free-models.md +111 -0
- package/pipeline/multi-agent-refs/features/model-fallback.md +21 -15
- package/pipeline/multi-agent-refs/features/unattended-security.md +7 -4
- package/pipeline/multi-agent-refs/refactor/toolkit-research.md +3 -1
- package/pipeline/multi-agent-refs/setup/free-models.md +22 -0
- package/pipeline/preferences-template.json +1 -0
- package/pipeline/schemas/prefs.schema.json +10 -1
- package/pipeline/schemas/route-config.schema.json +33 -8
- package/pipeline/schemas/secret-patterns.json +14 -0
- package/pipeline/schemas/unattended-profile.json +1 -1
- package/pipeline/scripts/bulk-read.sh +98 -12
- package/pipeline/scripts/cost-table.json +9 -1
- package/pipeline/scripts/doctor.mjs +100 -0
- package/pipeline/scripts/pre-commit-check.sh +1 -1
- package/pipeline/scripts/unattended_policy.py +28 -0
- package/pipeline/skills/.skill-manifest.json +8 -8
- package/pipeline/skills/shared/core/multi-agent/SKILL.md +2 -0
- package/pipeline/skills/shared/core/multi-agent-route-on/SKILL.md +31 -7
- package/pipeline/skills/shared/core/multi-agent-route-status/SKILL.md +12 -2
- package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +1 -0
- package/pipeline/skills/shared/external/e2e-testing/SKILL.md +39 -7
- package/pipeline/skills/shared/external/signal-community/SKILL.md +7 -1
- package/pipeline/skills/shared/external/web-testing/SKILL.md +57 -0
package/CHANGELOG.md
CHANGED
|
@@ -16,6 +16,50 @@ Internal file-layout changes that don't affect the slash-command surface are sti
|
|
|
16
16
|
|
|
17
17
|
## [Unreleased]
|
|
18
18
|
|
|
19
|
+
## [20.21.0] - 2026-10-12
|
|
20
|
+
|
|
21
|
+
### Added
|
|
22
|
+
|
|
23
|
+
- **Free models for simple work: `/multi-agent:route-on --free`.** Layer 2 of model routing. The new `free` rung sends a large-file read (`bulk-read.sh`) and simple text tasks at the new `delegate` call site (log and document summaries, field extraction, labels, translation and commit-body drafts) to the multi-agent-toolkit's verified free-model chain first. Every answer is checked against its source by the toolkit, and `bulk-read.sh` also checks cited lines against the file; when nothing passes, the Anthropic default answers as before. Decisions, plans, code, reviews and triage never leave Claude. A subagent stays on the Anthropic ladder: the router refuses `free` there. Contract: `multi-agent-refs/features/free-models.md`.
|
|
24
|
+
- `modelRouting.free` (`enabled`, `allowTraining`) and the `delegate` scope. By default only providers whose free tier does not train on prompts (Groq) and a local Ollama receive text; `--allow-training` widens it. `--no-free` turns only the free chain off, and `route-off` keeps it configured.
|
|
25
|
+
- `/multi-agent:route-status` reports the last seven days of free-model work from the toolkit's usage log: tasks answered free and verified, cache hits, tasks handed back to Claude, and the tokens kept off Claude with an estimated saving at haiku rates.
|
|
26
|
+
- `route-on --free` lists usable providers by key source and, with none, names the one step that fixes it. `/multi-agent:setup` Step 3e stores free-model keys under `llm-<id>` through the clipboard flow.
|
|
27
|
+
- `doctor` check `free-models`: WARN when the free chain is on and no provider is usable under the data policy, or when the toolkit CLI cannot run; `--probe` sends each configured provider one tiny request and WARNs when every usable one fails.
|
|
28
|
+
- `lib/toolkit-llm.sh` runs the toolkit's `multi-agent-toolkit-llm` CLI from `MULTI_AGENT_TOOLKIT_LLM`, `PATH` or `npx`.
|
|
29
|
+
- Analysis evidence gathering summarizes long Confluence, document, Jira and `generic-doc` texts through the free chain when it is on; `binding: true` standards are never delegated.
|
|
30
|
+
- The `task-fit` and `cost-ceiling` strategies change dispatch: `task-fit` tries the matched rule's cheapest rung first, `cost-ceiling` does so once `cost-budget-check.mjs` reports the run at the warn threshold of `budgetCeilingUsd`.
|
|
31
|
+
- Unattended runs: agent-guard allows `llm_delegate` only while `route-on --free` is on, and checks its `path` like a write target. The sandbox network list adds the free-model hosts the data policy allows once the free chain is on, and a sandboxed `bulk-read.sh` keeps the toolkit's quota and usage files under `~/.multi-agent-unattended/toolkit-index`.
|
|
32
|
+
- Groq (`gsk_`) and OpenRouter (`sk-or-v1-`) keys are blocked by both secret surfaces, the commit hook and the outbound gate.
|
|
33
|
+
- The cross-CLI contract lists the multi-agent-toolkit 3.21.0 minimum for `llm_delegate`, `llm_providers` and the CLI.
|
|
34
|
+
|
|
35
|
+
### Fixed
|
|
36
|
+
|
|
37
|
+
- `route-state.sh set-rules` validates each rule against the schema and the cost table (keys, phase range, taskKind, known rungs) and writes nothing when one fails, instead of storing any JSON array.
|
|
38
|
+
- `recordDecisions: false` is honoured by `model-dispatch.sh` and shown correctly by `route-status`; jq's `//` read `false` as missing, so every decision was logged.
|
|
39
|
+
|
|
40
|
+
### Changed
|
|
41
|
+
|
|
42
|
+
- The ecosystem doc counts the toolkit from its 3.21.0 `tools/list`: 191 tools in 20 categories.
|
|
43
|
+
|
|
44
|
+
## [20.20.0] - 2026-10-12
|
|
45
|
+
|
|
46
|
+
### Added
|
|
47
|
+
|
|
48
|
+
- The cross-CLI contract lists the multi-agent-toolkit 3.20.0 minimums: `expect_aria` and `web_assert_aria`, the web state tools (`web_route`, `web_network_state`, `web_clock`, `web_dialog`, `web_upload`, `web_drag`, `web_hover`, `web_fill_form`, `web_find`, `web_generate_locator`, `web_trace`), `web_scrape` with `web_crawl` / `web_map` sitemap and path scoping, and the `research_ask` modes, filters and follow-up threads.
|
|
49
|
+
- `e2e-testing` covers error, empty, slow and offline web states with the toolkit's routing, offline, clock and dialog tools, `web_find` and locator objects, and `web_generate_locator` for a stable locator in a saved step or a generated test. Exploratory testing reaches the same states on purpose.
|
|
50
|
+
- `web-testing` shows `toMatchAriaSnapshot`, `page.route`, `context.setOffline` and `page.clock` for a project's own Playwright tests.
|
|
51
|
+
- `signal-community` uses the research modes, recency, domain and academic filters, arXiv and `fetch_content`, and treats a result whose untrusted fence carries injection flags as evidence to quote, never as an instruction.
|
|
52
|
+
- Phase 1 reads a load-bearing `generic-doc` link through the toolkit's `web_scrape` when the server is registered, else WebFetch.
|
|
53
|
+
- `/multi-agent:refactor` band E runs its research axes through the toolkit and watches `microsoft/playwright-mcp` and `firecrawl/firecrawl-mcp-server`, with a license check before any peer code is read.
|
|
54
|
+
|
|
55
|
+
### Fixed
|
|
56
|
+
|
|
57
|
+
- Unattended runs: the guard checks every entry of a `paths` list (`web_upload`) against the path rules instead of only single path arguments, and host-checks `web_scrape` and `web_map` URLs like `web_goto`.
|
|
58
|
+
|
|
59
|
+
### Changed
|
|
60
|
+
|
|
61
|
+
- The ecosystem doc and facts count the toolkit from its 3.20.0 `tools/list`: 189 tools in 19 categories.
|
|
62
|
+
|
|
19
63
|
## [20.19.0] - 2026-10-09
|
|
20
64
|
|
|
21
65
|
### Changed
|
package/README.md
CHANGED
|
@@ -17,7 +17,7 @@ Runs natively on Claude Code, Copilot CLI and Codex CLI. macOS only. Zero runtim
|
|
|
17
17
|
### Prerequisites
|
|
18
18
|
|
|
19
19
|
- **Node.js >= 20.11** - required; the pipeline's own tooling runs on it.
|
|
20
|
-
- **`jq`** - required for nine paths, optional for the rest.
|
|
20
|
+
- **`jq`** - required for nine paths, optional for the rest. 92 shell files call it. The nine that publish or decide - the autopilot queue, Jira comments, PR reviews, issue updates, the plan file, both Figma fetchers, log search and Jira auth - refuse with exit 3 rather than run, because a missing `jq` renders as empty DATA and the work carries on with it. Everywhere else it still degrades. The install prints a note when it is missing.
|
|
21
21
|
- **`gh`** - for GitHub issue and PR work. Its built-in `--jq` is independent of the `jq` binary.
|
|
22
22
|
|
|
23
23
|
## Quick Start
|
|
@@ -359,23 +359,34 @@ turn it on.
|
|
|
359
359
|
|
|
360
360
|
| Command | What it does |
|
|
361
361
|
| --------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
362
|
-
| `/multi-agent:route-on` | Pick a strategy, a scope and the rules that say which rung a call lands on. Validated against `route-config.schema.json` before anything is written |
|
|
362
|
+
| `/multi-agent:route-on` | Pick a strategy, a scope and the rules that say which rung a call lands on; `--free` sends simple text work to verified free models first. Validated against `route-config.schema.json` before anything is written |
|
|
363
363
|
| `/multi-agent:route-off` | Disarm it. The rules are KEPT, so turning it back on does not re-ask for the same configuration |
|
|
364
364
|
| `/multi-agent:route-status` | Whether it is armed, which rule applies where, which rung the last dispatches took, and what this run has cost |
|
|
365
365
|
| `/multi-agent:model` | Turn the top rung on or off, and move the cost ledger's pricing with it in the same step |
|
|
366
366
|
|
|
367
367
|
**The scope cannot be the whole session.** `scope` accepts `subagent`,
|
|
368
|
-
`bulk-read` and `research`; there is no `host-session` value and that
|
|
369
|
-
gate, not a convention. Owning the host's base URL would send every
|
|
370
|
-
through a third layer, including work that has nothing to do with
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
the
|
|
368
|
+
`bulk-read`, `delegate` and `research`; there is no `host-session` value and that
|
|
369
|
+
is a schema gate, not a convention. Owning the host's base URL would send every
|
|
370
|
+
call you make through a third layer, including work that has nothing to do with
|
|
371
|
+
this pipeline.
|
|
372
|
+
|
|
373
|
+
**Free models for simple work: `route-on --free`.** Large-file reads, log and
|
|
374
|
+
document summaries, field extraction, labels and translation or commit-body
|
|
375
|
+
drafts go to the multi-agent-toolkit's free-model chain first (Groq, Mistral,
|
|
376
|
+
Gemini, OpenRouter free models, Z.AI GLM Flash, a local Ollama). Every answer is
|
|
377
|
+
verified against its source before it is used - no truncation or refusal, schema
|
|
378
|
+
and label checks, every identifier, number and file name present in the source -
|
|
379
|
+
and when none passes, Claude does the task as before. By default only providers
|
|
380
|
+
that do not train on prompts see the text; `--allow-training` widens that. One
|
|
381
|
+
free Groq key is enough; `route-status` reports what was answered free, what went
|
|
382
|
+
back to Claude and the tokens kept off Claude. Contract:
|
|
383
|
+
[`free-models.md`](pipeline/multi-agent-refs/features/free-models.md).
|
|
384
|
+
|
|
385
|
+
**The honest limit, which `route-status` prints rather than hides.** A subagent
|
|
386
|
+
is dispatched by the host, so Phase 1-3 personas stay inside the Anthropic ladder
|
|
387
|
+
whatever the rules say. The `free` rung answers only where the pipeline makes the
|
|
388
|
+
call itself, `bulk-read.sh` and the `delegate` call site, and decisions, plans,
|
|
389
|
+
code, reviews and triage never leave Claude.
|
|
379
390
|
|
|
380
391
|
**The top rung is a switch.** `/multi-agent:model` turns `fable` on or off
|
|
381
392
|
(`prefs.global.modelFallback.fableEnabled`, shipped off). The review commands,
|
|
@@ -443,7 +454,7 @@ Installing the pipeline is not only useful when you run it. Open an ordinary ses
|
|
|
443
454
|
|
|
444
455
|
- **Services you already onboarded.** The token `setup` mapped is readable now - resolve the logical name through `credential-store.sh` and fetch the issue, the page, the log. **Reads are ordinary work; writes are not.** Posting a Jira comment, editing an issue or opening a PR goes through the pipeline commands, because the rules that make those safe (never auto-close, `Ref:` not `Closes:`, humanizer on outward prose) live there.
|
|
445
456
|
- **The stack skills `/multi-agent:stack` enabled for the repo.** Each toolkit's own `index` skill routes; the pipeline keeps no copy of that table.
|
|
446
|
-
- **The `multi-agent-toolkit` MCP.**
|
|
457
|
+
- **The `multi-agent-toolkit` MCP.** 180+ tools for a running app - screen state, crash logs, design comparison, store pre-submission, web scraping and browser test states.
|
|
447
458
|
|
|
448
459
|
Uninstall preserves this layer: the tokens, the reader that opens them, the mapping that names them, and the MCP registration. Removing the pipeline should not cost you the credentials you onboarded through it.
|
|
449
460
|
|
package/README.tr.md
CHANGED
|
@@ -358,23 +358,34 @@ kadar kapalıdır.
|
|
|
358
358
|
|
|
359
359
|
| Komut | Ne yapar |
|
|
360
360
|
| --------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
361
|
-
| `/multi-agent:route-on` | Strateji, kapsam ve hangi çağrının hangi basamağa düşeceğini söyleyen kuralları sorar. Hiçbir şey yazılmadan önce `route-config.schema.json`'a karşı doğrulanır |
|
|
361
|
+
| `/multi-agent:route-on` | Strateji, kapsam ve hangi çağrının hangi basamağa düşeceğini söyleyen kuralları sorar; `--free` basit metin işlerini önce doğrulanmış ücretsiz modellere gönderir. Hiçbir şey yazılmadan önce `route-config.schema.json`'a karşı doğrulanır |
|
|
362
362
|
| `/multi-agent:route-off` | Kapatır. Kurallar SAKLANIR, tekrar açıldığında aynı yapılandırma yeniden sorulmaz |
|
|
363
363
|
| `/multi-agent:route-status` | Açık mı, hangi kural nerede geçerli, son çağrılar hangi basamağa gitti, bu koşu ne tuttu |
|
|
364
364
|
| `/multi-agent:model` | Üst basamağı açıp kapatır ve maliyet defterinin fiyatlamasını aynı adımda onunla taşır |
|
|
365
365
|
|
|
366
|
-
**Kapsam oturumun tamamı olamaz.** `scope` yalnız `subagent`, `bulk-read
|
|
367
|
-
`research` kabul eder; `host-session` diye bir değer yoktur ve bu bir teamül
|
|
366
|
+
**Kapsam oturumun tamamı olamaz.** `scope` yalnız `subagent`, `bulk-read`,
|
|
367
|
+
`delegate` ve `research` kabul eder; `host-session` diye bir değer yoktur ve bu bir teamül
|
|
368
368
|
değil, şema kapısıdır. Host'un base URL'ini sahiplenmek, bu pipeline'la ilgisi
|
|
369
369
|
olmayan işler dahil yaptığın her çağrıyı üçüncü bir katmandan geçirirdi.
|
|
370
370
|
|
|
371
|
-
**
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
371
|
+
**Basit işler için ücretsiz modeller: `route-on --free`.** Büyük dosya okumaları,
|
|
372
|
+
log ve doküman özetleri, alan çıkarımı, etiketler ve çeviri ya da commit gövdesi
|
|
373
|
+
taslakları önce multi-agent-toolkit'in ücretsiz model zincirine gider (Groq,
|
|
374
|
+
Mistral, Gemini, OpenRouter ücretsiz modelleri, Z.AI GLM Flash, yerel Ollama).
|
|
375
|
+
Her cevap kullanılmadan önce kaynağına karşı doğrulanır - kesik ya da ret değil,
|
|
376
|
+
şema ve etiket kontrolü, her tanımlayıcı, sayı ve dosya adı kaynakta geçmeli -
|
|
377
|
+
ve hiçbiri geçmezse işi Claude eskisi gibi yapar. Varsayılan olarak metni yalnız
|
|
378
|
+
prompt'larla eğitim yapmayan sağlayıcılar görür; `--allow-training` bunu
|
|
379
|
+
genişletir. Tek bir ücretsiz Groq anahtarı yeter; `route-status` neyin ücretsiz
|
|
380
|
+
cevaplandığını, neyin Claude'a döndüğünü ve Claude'dan uzak tutulan token'ları
|
|
381
|
+
raporlar. Sözleşme:
|
|
382
|
+
[`free-models.md`](pipeline/multi-agent-refs/features/free-models.md).
|
|
383
|
+
|
|
384
|
+
**Dürüst sınır, ve `route-status` bunu gizlemek yerine yazar.** Subagent'ı host
|
|
385
|
+
dağıtır; bu yüzden Phase 1-3 personaları kurallar ne derse desin Anthropic
|
|
386
|
+
merdiveninde kalır. `free` basamağı yalnız pipeline'ın çağrıyı kendisi yaptığı
|
|
387
|
+
yerlerde cevap verir, `bulk-read.sh` ve `delegate` çağrı noktası; karar, plan,
|
|
388
|
+
kod, review ve triyaj asla Claude'dan çıkmaz.
|
|
378
389
|
|
|
379
390
|
**Üst basamak bir anahtar.** `/multi-agent:model` `fable`'ı açar ya da kapatır
|
|
380
391
|
(`prefs.global.modelFallback.fableEnabled`, kapalı gelir). Review komutları,
|
|
@@ -443,7 +454,7 @@ Pipeline'ı kurmak yalnız onu çalıştırdığında işe yaramıyor. Sıradan
|
|
|
443
454
|
|
|
444
455
|
- **Zaten onboard ettiğin servisler.** `setup`'ın eşlediği token okunabilir durumda - mantıksal adı `credential-store.sh` ile çöz, issue'yu, sayfayı, logu getir. **Okuma sıradan iş, yazma değil.** Jira yorumu, issue düzenleme ve PR açma pipeline komutlarından geçer, çünkü onları güvenli kılan kurallar (issue asla otomatik kapanmaz, `Closes:` değil `Ref:`, dışa dönük metinde humanizer) orada yaşıyor.
|
|
445
456
|
- **`/multi-agent:stack`'in bu repo için açtığı stack skilleri.** Yönlendirmeyi her toolkit'in kendi `index` skill'i yapar; pipeline o tablonun kopyasını tutmaz.
|
|
446
|
-
- **`multi-agent-toolkit` MCP.** Çalışan uygulama için
|
|
457
|
+
- **`multi-agent-toolkit` MCP.** Çalışan uygulama için 180+ araç - ekran durumu, crash logu, tasarım karşılaştırma, store ön-kontrolü, web kazıma ve tarayıcı test durumları.
|
|
447
458
|
|
|
448
459
|
Uninstall bu katmanı korur: token'lar, onları açan okuyucu, adlarını tutan eşleme ve MCP kaydı. Pipeline'ı kaldırmak, onun üzerinden onboard ettiğin credential'ları kaybetmek anlamına gelmemeli.
|
|
449
460
|
|
package/docs/ecosystem.md
CHANGED
|
@@ -7,7 +7,7 @@ separately, wired together at install time and at run time:
|
|
|
7
7
|
|---|---|---|
|
|
8
8
|
| **`multi-agent-pipeline`** (this repo) | Orchestration: the 6-phase flow, the 64 slash commands, quality gates, review/triage, cross-CLI parity | npm package (`@mmerterden/multi-agent-pipeline`), installs itself onto Claude Code / Copilot CLI / Codex CLI |
|
|
9
9
|
| **`multi-agent-plugins`** | Stack knowledge: per-platform component/lifecycle skills (iOS, Android, Frontend, Backend) + shared knowledge | Claude Code marketplace, 6 independently-versioned plugins |
|
|
10
|
-
| **`multi-agent-toolkit-mcp`** | The pipeline's hands on devices and browsers:
|
|
10
|
+
| **`multi-agent-toolkit-mcp`** | The pipeline's hands on devices and browsers: 191 MCP tools across 20 categories (simulator/emulator control, end-to-end locators and assertions, memory, crash diagnostics, accessibility audit, store compliance, web automation and scraping, Figma-vs-mock design audit, code intelligence, wallet passes, an agent-DSL batch runner, a full-text context index with text-to-image rendering, provider-backed research, verified hand-off of simple text tasks to free models, video key frames, offline security scoring, travel document fixtures, a voice channel, App Store Connect and Play Console APIs, virtual iPhones) | npm package, registered as a standard stdio MCP server on every host |
|
|
11
11
|
|
|
12
12
|
None of the three depends on the others at the code level. They compose through two
|
|
13
13
|
narrow contracts: the **Skill tool** (pipeline → plugin, at Phase 2) and the **MCP
|
|
@@ -234,32 +234,38 @@ Detail: [`unattended-security.md`](../pipeline/multi-agent-refs/features/unatten
|
|
|
234
234
|
|
|
235
235
|
### multi-agent-toolkit-mcp's tools, by category
|
|
236
236
|
|
|
237
|
-
|
|
238
|
-
at toolkit 3.
|
|
237
|
+
191 tools in 20 categories, counted from the server's own `tools/list` response
|
|
238
|
+
at toolkit 3.21.0 rather than from a README. Three families are defined in
|
|
239
239
|
modules the main file only spreads in, so a count taken from the source reads
|
|
240
240
|
low; the response is the only place the whole surface appears at once.
|
|
241
241
|
|
|
242
242
|
The families can be narrowed per host: `MCP_TOOLKIT_CAPS` serves only the named
|
|
243
|
-
ones, and unset serves all
|
|
244
|
-
sees
|
|
243
|
+
ones, and unset serves all 191. A frontend repo that sets `web,code,context`
|
|
244
|
+
sees 47 tools instead of 191, which matters because every registered server's
|
|
245
245
|
tool list is charged against the context window on every turn.
|
|
246
246
|
|
|
247
247
|
| Category | Tools | Primary pipeline consumers |
|
|
248
248
|
|---|---|---|
|
|
249
249
|
| Device Control | 59 | `/multi-agent:test`, `test-dark-mode`, `test-accessibility`, `test-dynamic-type`, `test-screenshots`, `manual-test`, `design-check` |
|
|
250
|
+
| End-to-end Testing | 5 (`ui_locate`, `ios_tap_element`, `ios_type_element`, `android_tap_element`, `android_type_element`) | `/multi-agent:test`, `/multi-agent:bug-bash`, the `e2e-testing` skill; with the `expect_*` steps of `agent_run_steps` |
|
|
250
251
|
| Memory | 2 (`ios_leaks`, `android_meminfo`) | none yet; available outside the pipeline |
|
|
251
252
|
| Crash Diagnostics | 2 (`ios_list_crashes`, `android_list_crashes`) | `/multi-agent:test` full scenario (end-of-run crash sweep), outside-the-pipeline sessions |
|
|
252
253
|
| Accessibility Audit | 3 (`ios_accessibility_audit`, `android_accessibility_audit`, `ios_accessibility_audit_deep`) | `/multi-agent:test` accessibility scenario, `test-accessibility` |
|
|
253
254
|
| Store Compliance | 5 | `store-ready`, `testflight-validation`, `apple-archive-compliance` skill, Phase 3 Security Auditor |
|
|
254
|
-
| Web Automation |
|
|
255
|
+
| Web Automation | 35 | frontend-stack UI testing (via `test`) and the `e2e-testing` skill: snapshot `ref` targeting and `web_find`, console/network capture with request detail, request mocking, offline, clock, dialogs, uploads, traces, ARIA assertions; `web_scrape` (formats, cache, change tracking) for Phase 1 `generic-doc` links; sitemap-aware `web_map` and `web_crawl` with `llms.txt` |
|
|
255
256
|
| Design Audit | 7 | `design-check` (mock-mode vs Figma conformance, component variants) |
|
|
256
257
|
| Autonomous Agent DSL | 2 (`agent_run_steps`, `agent_query_output`) | any skill that needs a scripted multi-step device flow in one round trip |
|
|
257
258
|
| Code Intelligence | 8 (`code_definition`, `code_references`, `code_hover`, `code_diagnostics`, `code_document_symbols`, `code_workspace_symbols`, `code_index_status`, `code_server_reset`) | `/multi-agent:refactor`, Phase 3 reviewers needing a real symbol graph rather than grep |
|
|
258
259
|
| Wallet Passes | 4 (`pass_build`, `pass_validate`, `pass_inspect`, `pass_certificates`) | pass-kit work outside the pipeline; no pipeline phase consumes them |
|
|
259
|
-
| Context Index |
|
|
260
|
-
| Research | 2 (`research_search`, `research_ask`) | closes the parity exemption that had web search outside the MCP channel |
|
|
260
|
+
| Context Index | 4 (`context_index`, `context_search`, `context_get`, `context_render`) | any skill holding an offloaded payload too large to read; ranks passages instead of grepping lines. `context_render` pages long text into images and reports whether that is cheaper than the text |
|
|
261
|
+
| Research | 2 (`research_search`, `research_ask`) | closes the parity exemption that had web search outside the MCP channel; `signal-community` and `/multi-agent:refactor` band E (modes, recency and academic filters, follow-up threads, arXiv). Denied in unattended runs and autonomous research |
|
|
262
|
+
| Free Models | 2 (`llm_delegate`, `llm_providers`) | `route-on --free`: `bulk-read.sh` through the `multi-agent-toolkit-llm` CLI, the `delegate` call site in skills and analysis evidence gathering ([`free-models.md`](../pipeline/multi-agent-refs/features/free-models.md)). Allowed in unattended runs only while the free chain is on |
|
|
261
263
|
| Media | 1 (`media_frames`) | Phase 2 visual evidence: turns a screen recording into frames a reviewer and a model can both look at |
|
|
262
264
|
| Security | 2 (`security_cvss_score`, `security_dep_inventory`) | the Phase 3 Step 2.7 security audit (`security-auditor`) and `/multi-agent:security-review`; offline, no egress |
|
|
265
|
+
| Travel Document Fixtures | 2 (`document_mrz_build`, `document_generate`) | the `e2e-testing` skill's MRZ and document-scan recipes |
|
|
266
|
+
| Voice | 6 | none in the pipeline; a local voice host outside it |
|
|
267
|
+
| Store APIs | 30 | `/multi-agent:store-ready`, `/multi-agent:setup` credential onboarding |
|
|
268
|
+
| Virtual iPhone | 10 | none in the pipeline yet; available outside it |
|
|
263
269
|
|
|
264
270
|
---
|
|
265
271
|
|
package/docs/facts.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$comment": "Generated by pipeline/scripts/gen-facts.mjs. Do not hand-edit: the site reads this, and a number edited here instead of at its source is the drift this file removes.",
|
|
3
|
-
"generatedAt": "2026-10-
|
|
4
|
-
"version": "20.
|
|
3
|
+
"generatedAt": "2026-10-12",
|
|
4
|
+
"version": "20.21.0",
|
|
5
5
|
"phaseSchema": 2,
|
|
6
6
|
"phases": [
|
|
7
7
|
{
|
|
@@ -40,25 +40,26 @@
|
|
|
40
40
|
"skillCountAll": 228,
|
|
41
41
|
"agentCount": 10,
|
|
42
42
|
"hosts": ["Claude Code", "Codex CLI", "Copilot CLI"],
|
|
43
|
-
"toolCount":
|
|
43
|
+
"toolCount": 191,
|
|
44
44
|
"toolCategories": {
|
|
45
45
|
"ios": 42,
|
|
46
|
+
"web": 35,
|
|
46
47
|
"android": 33,
|
|
47
48
|
"store": 30,
|
|
48
|
-
"web": 21,
|
|
49
49
|
"vphone": 10,
|
|
50
50
|
"code": 8,
|
|
51
51
|
"design": 7,
|
|
52
52
|
"voice": 6,
|
|
53
|
+
"context": 4,
|
|
53
54
|
"pass": 4,
|
|
54
|
-
"context": 3,
|
|
55
55
|
"agent": 2,
|
|
56
56
|
"document": 2,
|
|
57
|
+
"llm": 2,
|
|
57
58
|
"research": 2,
|
|
58
59
|
"security": 2,
|
|
59
60
|
"media": 1,
|
|
60
61
|
"ui": 1
|
|
61
62
|
},
|
|
62
63
|
"pluginSkillCount": 252,
|
|
63
|
-
"toolkitVersion": "3.
|
|
64
|
+
"toolkitVersion": "3.21.1"
|
|
64
65
|
}
|
package/docs/features.md
CHANGED
|
@@ -54,7 +54,7 @@ The install is not only useful while `/multi-agent` is running. `rules/outside-t
|
|
|
54
54
|
|
|
55
55
|
- **Onboarded service credentials.** Resolve the logical name through `credential-store.sh` and read the issue, page or log. Writes route through the pipeline commands, which carry the rules that make them safe - issues are never auto-closed, PR bodies use `Ref:`, outward prose goes through the humanizer.
|
|
56
56
|
- **The stack skills enabled for this repo.** Each toolkit's own `index` skill routes. The pipeline reads the effective `enabledPlugins` rather than keeping a stack table, so a seventh toolkit needs no code change.
|
|
57
|
-
- **The `multi-agent-toolkit` MCP.**
|
|
57
|
+
- **The `multi-agent-toolkit` MCP.** 180+ tools for a running app.
|
|
58
58
|
|
|
59
59
|
Uninstall preserves the whole layer - tokens, the reader that opens them, the mapping that names them, the MCP registration. It is 1.5 kB of always-loaded text; the detail lives in a ref that loads on demand, and a gate keeps both under a ceiling because every byte there is paid by every session.
|
|
60
60
|
|
|
@@ -354,6 +354,7 @@ Commands (`commands.mjs --json`) and run questions (`launch-request.mjs question
|
|
|
354
354
|
|
|
355
355
|
- **Pre-Commit Secret Detection** (12 patterns): `PreToolUse` hook scans staged files for API keys/tokens, AWS access keys, private keys, `.env` files, service account JSON. Commit **blocked** if found.
|
|
356
356
|
- **Read-Size Gate** (opt-in, `prefs.global.bulkRead.mode`): a `PreToolUse` hook inspects `Read` and the shell commands that read a file whole. In `observe` it only logs what it would have caught - the baseline you measure before routing anything. In `enforce` a file over `minLines` (default 350) is blocked and delegated to a haiku-rung worker (`bulk-read.sh`), which returns a line-numbered summary so the follow-up is a bounded `Read(offset:limit:)` instead of the whole file; the full text is parked under `.multi-agent/refs/`. The development phase and any file the run has already touched are exempt, because Claude Code's `Edit` requires its own `Read` first.
|
|
357
|
+
- **Free models for simple work** (opt-in, `/multi-agent:route-on --free`): large-file reads, log and document summaries, field extraction, labels and translation or commit-body drafts go to the multi-agent-toolkit's free-model chain (`llm_delegate`) first. Every answer is verified against its source and discarded when it does not hold, Claude takes over whenever none passes, and decisions, plans, code and reviews never leave Claude. By default only providers that do not train on prompts receive text. `route-status` reports what was answered free and the tokens kept off Claude; `doctor --probe` checks each provider key. Contract: `multi-agent-refs/features/free-models.md`.
|
|
357
358
|
- **Capture Hooks** (`SessionEnd`, `PreCompact`, `SessionStart`): every durable write used to live in Phase 5, the phase a run is least likely to reach. `SessionEnd` flushes a run that never got there; `PreCompact` flushes before an auto-compaction summarizes a long phase mid-flight, which is the same loss one level down; `SessionStart` prints at most two lines about an unfinished run. None calls a model, none reads a payload, and all exit 0 on every path - a hook that fails a session over bookkeeping is worse than the bookkeeping.
|
|
358
359
|
- **Operational Reporting** (`prefs.global.usageLog`): coarse run metadata - task id and type, current phase, run status (in progress, completed, halted, parked), phase durations, whether a PR opened, token counts - sent at every phase transition and at completion, halt and park, and never prompts, code, diffs or absolute paths (task title and PR URL only when `includeTitle` / `includePrUrl` are set). Runs are reported under the GitHub account on the machine that can read the pipeline repository, found with no question asked through gh, the git credential helper or an SSH key (`usage-identity.mjs`, cached in `usageLog.login` / `loginMethod`, `--refresh` to re-check); with no such account nothing is sent. The per-machine token is REQUESTED from the endpoint by `usage-register.mjs` (setup, update, and the Phase 0 exit gate as a backstop), is write-only, and lives in the OS credential store; prefs hold only the entry name and the switch. `usageLog.optOut: true` blocks registration permanently and is checked before the network call. Registration proves the login with that account's gh or credential-helper token, or with an SSH signature over a server challenge. The server issues a token only to the repository owner or a collaborator, pins the login to it, and shows only those accounts' records on the panel. An unreachable endpoint leaves reporting off with one line and exit 0 - a run is never failed over bookkeeping.
|
|
359
360
|
- **Build Queue**: All `xcodebuild` calls acquire a lock. Each worktree uses own `-derivedDataPath`. Stale locks auto-clean after 15 min. Non-Xcode builds don't need the lock.
|