@mmerterden/multi-agent-pipeline 20.24.0 → 20.25.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 (86) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +6 -5
  3. package/README.tr.md +6 -5
  4. package/docs/architecture.md +3 -3
  5. package/docs/ecosystem.md +5 -5
  6. package/docs/facts.json +7 -6
  7. package/docs/features.md +9 -4
  8. package/install/catalog-history.json +1 -1
  9. package/install/templates/claude-hooks.json +1 -1
  10. package/install/templates/codex-hooks.json +18 -0
  11. package/manifest.json +89 -82
  12. package/package.json +1 -1
  13. package/pipeline/agents/task-clarifier.md +1 -1
  14. package/pipeline/commands/multi-agent/deps/SKILL.md +61 -0
  15. package/pipeline/commands/multi-agent/model/SKILL.md +2 -2
  16. package/pipeline/commands/multi-agent/postmortem/SKILL.md +18 -6
  17. package/pipeline/commands/multi-agent/review/SKILL.md +5 -5
  18. package/pipeline/commands/multi-agent/route-on/SKILL.md +1 -1
  19. package/pipeline/commands/multi-agent/setup/SKILL.md +7 -5
  20. package/pipeline/commands/multi-agent/sync/SKILL.md +3 -3
  21. package/pipeline/commands/multi-agent/testflight-validation/SKILL.md +2 -3
  22. package/pipeline/contract/fixtures/runs-failed.json +1 -1
  23. package/pipeline/contract/fixtures/runs-old-schema.json +1 -1
  24. package/pipeline/contract/fixtures/runs-pr-opened-redacted.json +1 -1
  25. package/pipeline/contract/fixtures/runs-pr-opened.json +1 -1
  26. package/pipeline/contract/fixtures/runs-running.json +1 -1
  27. package/pipeline/lib/credential-inventory.sh +5 -5
  28. package/pipeline/lib/fetch-crashlytics.sh +6 -8
  29. package/pipeline/lib/model-rung.sh +1 -1
  30. package/pipeline/lib/plan-todos.sh +21 -4
  31. package/pipeline/lib/post-pr-review.sh +4 -6
  32. package/pipeline/lib/route-state.sh +1 -1
  33. package/pipeline/lib/shadow-git.sh +4 -5
  34. package/pipeline/multi-agent-refs/cross-cli-contract.md +8 -9
  35. package/pipeline/multi-agent-refs/features/cost-analysis.md +4 -0
  36. package/pipeline/multi-agent-refs/features/dep-bump.md +176 -0
  37. package/pipeline/multi-agent-refs/features/model-fallback.md +17 -12
  38. package/pipeline/multi-agent-refs/help/en.md +1 -0
  39. package/pipeline/multi-agent-refs/help/tr.md +1 -0
  40. package/pipeline/multi-agent-refs/phases/phase-0-init.md +1 -1
  41. package/pipeline/multi-agent-refs/phases/phase-2-dev.md +2 -0
  42. package/pipeline/multi-agent-refs/phases/phase-3-review.md +5 -5
  43. package/pipeline/multi-agent-refs/picker-contract.md +1 -1
  44. package/pipeline/multi-agent-refs/tracker-contract.md +6 -6
  45. package/pipeline/schemas/agent-state.schema.json +5 -0
  46. package/pipeline/schemas/phases.json +4 -0
  47. package/pipeline/schemas/plan-todos.schema.json +4 -4
  48. package/pipeline/schemas/prefs.schema.json +27 -4
  49. package/pipeline/scripts/_code-graph.mjs +2 -2
  50. package/pipeline/scripts/_transcript-hosts.mjs +406 -0
  51. package/pipeline/scripts/build-stack-plugins.mjs +3 -3
  52. package/pipeline/scripts/capture-flush.sh +7 -7
  53. package/pipeline/scripts/code-graph-rules/android.json +1 -1
  54. package/pipeline/scripts/cost-analyze.mjs +26 -19
  55. package/pipeline/scripts/cost-table.json +35 -19
  56. package/pipeline/scripts/dep-bump.mjs +1556 -0
  57. package/pipeline/scripts/edit-syntax-gate.mjs +151 -29
  58. package/pipeline/scripts/edit-syntax-gate.sh +9 -6
  59. package/pipeline/scripts/gc-abandoned.sh +2 -2
  60. package/pipeline/scripts/gen-mode-dispatch.mjs +3 -3
  61. package/pipeline/scripts/git-path.mjs +1 -2
  62. package/pipeline/scripts/host-hooks.mjs +265 -0
  63. package/pipeline/scripts/jira-attach.sh +1 -1
  64. package/pipeline/scripts/keychain.py +3 -3
  65. package/pipeline/scripts/output-quality-check.sh +1 -1
  66. package/pipeline/scripts/phase-tracker.sh +5 -6
  67. package/pipeline/scripts/phase0-exit-gate.mjs +3 -3
  68. package/pipeline/scripts/pre-push-check.sh +3 -6
  69. package/pipeline/scripts/transcript-index.mjs +423 -242
  70. package/pipeline/scripts/uninstall.mjs +90 -4
  71. package/pipeline/scripts/update-issue-progress.sh +4 -6
  72. package/pipeline/scripts/usage-report.mjs +2 -2
  73. package/pipeline/skills/.skill-manifest.json +14 -10
  74. package/pipeline/skills/.skills-index.json +12 -1
  75. package/pipeline/skills/shared/README.md +4 -3
  76. package/pipeline/skills/shared/core/multi-agent/SKILL.md +6 -6
  77. package/pipeline/skills/shared/core/multi-agent-deps/SKILL.md +60 -0
  78. package/pipeline/skills/shared/core/multi-agent-model/SKILL.md +2 -2
  79. package/pipeline/skills/shared/core/multi-agent-postmortem/SKILL.md +10 -7
  80. package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +5 -5
  81. package/pipeline/skills/shared/core/multi-agent-route-on/SKILL.md +1 -1
  82. package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +7 -5
  83. package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +3 -3
  84. package/pipeline/skills/shared/core/multi-agent-testflight-validation/SKILL.md +2 -3
  85. package/pipeline/skills/shared/external/ios-coding-standard/references/rules.yml +2 -2
  86. package/pipeline/skills/skills-index.md +2 -1
package/CHANGELOG.md CHANGED
@@ -16,6 +16,30 @@ Internal file-layout changes that don't affect the slash-command surface are sti
16
16
 
17
17
  ## [Unreleased]
18
18
 
19
+ ## [20.25.0] - 2026-10-14
20
+
21
+ ### Added
22
+
23
+ - **Syntax check after an edit on Codex.** `edit-syntax-gate.sh` reads Codex's `PostToolUse` payload for `apply_patch` (every file the patch adds, updates or moves to) and answers in the shape Codex reads back. `/multi-agent:setup` Step 8 registers it through `host-hooks.mjs install --host codex` from the new `codex-hooks.json` template; Codex runs it once trusted in `/hooks`. Copilot CLI gets no registration: as of 1.0.45 it discards a `postToolUse` hook's output and applies no matcher, so the gate is Claude Code and Codex only. Still opt-in through `editSyntaxGate.enabled`, still never blocks; uninstall removes the registration, matching the template's full commands so the user's own hooks stay.
24
+ - **`/multi-agent:postmortem` reads Copilot CLI and Codex sessions.** `transcript-index.mjs` detects the format per file and indexes Copilot CLI session logs (`~/.copilot/session-state/<session>/events.jsonl`) and Codex rollouts (`~/.codex/sessions/**/rollout-*.jsonl`) into the same index with the same redaction, and `--run` finds a run's sessions on every host by session id or by checkout and time window. `COPILOT_TRANSCRIPTS_ROOT` and `CODEX_TRANSCRIPTS_ROOT` override the roots.
25
+ - **`/multi-agent:deps [package[@version]] [--major]`: bump one dependency and fix what it broke.** The normal pipeline with a fixed task (`state.mode: "deps"`, `taskType: chore`): pick a candidate (a picker when none is named), apply the bump, build and test, and when the run is red, fix rounds that may change only the files that use the dependency unless a build or test error names another. Each round is scope-checked; past `depBump.maxFixRounds` (default 2) the bump is rolled back (manifest, lockfile and the fix rounds' files; any other change is kept and listed) and the run reports what still fails instead of committing. A major, unparseable or prerelease bump needs `--major` or an explicit confirmation. Review gates, commit (`chore(deps): bump X from a to b`) and PR (`Ref:`, never a closing keyword) are the standard ones. Contract: `multi-agent-refs/features/dep-bump.md`.
26
+ - **`dep-bump.mjs`**, the deterministic half: `detect`, `list`, `apply`, `surface`, `scope`, `notes`, `rollback`, `config`, JSON out. SwiftPM (`Package.swift` / `Package.resolved`), Gradle version catalogs, npm and pip (`requirements*.txt`, `pyproject.toml`). Listing works offline from manifests, lockfiles, SwiftPM checkout tags and the Gradle module cache; `--registry` asks the ecosystem's own tool and notes a failed query per package. Risk is semver (a minor step under `0.x` counts as major, `+build` metadata is ignored, Maven release qualifiers such as `-jre` and `.Final` are stable under Gradle). Manifest names and urls are checked against their ecosystem's grammar before any registry tool sees them, and registry tools run in the manifest's directory. `apply` refuses a `--to` outside the ecosystem's version grammar (exit 2) and a worktree with uncommitted tracked changes; it edits only the dependency's own npm section, refuses a pip bump another clause excludes, widens SwiftPM ranges and skips commented `.package` calls, picks Poetry and yarn lockfile flags by tool version, uses a workspace root's lockfile, and lists Xcode-managed SwiftPM pins read-only. It updates the lockfile through the ecosystem tool and restores both files when that tool fails; a shared Gradle `version.ref` reports every module that moves with it. `scope` holds a fix to the surface recorded at apply: a file that starts importing the dependency passes only with an error line naming it in the `--log` it is given. `help` prints usage.
27
+ - **Settings** `depBump.maxFixRounds` (2) and `depBump.queryRegistry` (true); state root `depBump`.
28
+
29
+ ### Changed
30
+
31
+ - **Claude rungs move to the current generation.** `cost-table.json` resolves `fable` to `claude-fable-5-1` ($10 in / $50 out / $0.25 cache-read per MTok), `opus` to `claude-opus-5-5` ($4 / $20 / $0.20), `sonnet` to `claude-sonnet-5-5` ($2 / $10 / $0.10) and `haiku` to `claude-haiku-5-5` ($0.50 / $2.50 / $0.05, the over-100k-token tier, since the table holds one rate per rung and over-reporting is the safe direction for a ledger; prompts up to 100k bill at $0.10 / $0.50 / $0.01). The Claude Code column of the Phase 3 reviewer table, the review and orchestrator skills, the fallback contract and the live-eval pinned model follow. Copilot CLI dispatches the newest IDs `copilot help config` lists (1.0.45): `claude-opus-4.7`, `claude-sonnet-4.6` and `claude-haiku-4.5`, recorded per rung as `copilotModelId`; it lists no Fable model, so that rung is not offered there. `smoke-model-fallback.sh` accepts a `copilotModelId` as a known ID, checks each against `copilot help config` when the CLI is installed, and treats `claude-fable-5` and `claude-haiku-4-5` as retired. `cost-table.json` gains a `legacy` map of previous-generation wire IDs at their official prices (`claude-fable-5` $10 / $50 / $1, `claude-opus-5` $5 / $25 / $0.50, `claude-sonnet-5` $2 / $10 / $0.20, `claude-haiku-4-5` $1 / $5 / $0.10); `cost-analyze` prices a transcript by exact wire ID (current, Copilot or legacy) before matching a dated snapshot, so a session on a previous generation is priced at its own rate. A `models` map prices each `copilotModelId` at its own model's official rate (`claude-opus-4.7` $5 / $25 / $0.50, `claude-sonnet-4.6` $3 / $15 / $0.30, `claude-haiku-4.5` $1 / $5 / $0.10) ahead of the rung's, so a Copilot CLI session is not under-reported at the newer rung's lower price; the rung mapping still drives dispatch.
32
+ - The always-on description ceiling in `smoke-context-budget.sh` moves from 92500 to 93000 for the new command and its shared/core counterpart (181 bytes each).
33
+
34
+ ### Fixed
35
+
36
+ - `plan-todos.sh set` accepts the `T1`, `T2` ids a converted planning-output carries, and stops with exit 2 when a dependency matches no todo id exactly, naming an id that differs only in case.
37
+ - The syntax check after an edit looks at no more than 8 files per call and stops before a file would take the call past 8 s; the files it skipped are counted in its message, and when every checked file parsed a short note still says how many were not checked.
38
+ - `phases.json` declares the `deps` mode (all six phases), so the usage report counts a `/multi-agent:deps` run as `deps` rather than `unknown`.
39
+ - A Copilot CLI session with no `session.shutdown` record has its usage marked partial in the post-mortem.
40
+ - Uninstall removes every hook `claude-hooks.json` registers in `settings.json`, on every event, and leaves the user's own hooks in place.
41
+ - The Codex hooks file is written through a symlink with its mode kept, and a hooks file whose root or `hooks` value is not an object is refused with exit 1 and left unwritten.
42
+
19
43
  ## [20.24.0] - 2026-10-14
20
44
 
21
45
  ### Added
package/README.md CHANGED
@@ -158,7 +158,7 @@ The discipline behind all of this - bounded loops, evidence gates, token-budgete
158
158
 
159
159
  ## Commands
160
160
 
161
- `/multi-agent` plus 65 sub-commands. `/multi-agent:help` renders the same catalog in your terminal, in your `outputLanguage`.
161
+ `/multi-agent` plus 66 sub-commands. `/multi-agent:help` renders the same catalog in your terminal, in your `outputLanguage`.
162
162
 
163
163
  ### Pipeline entries
164
164
 
@@ -166,6 +166,7 @@ The discipline behind all of this - bounded loops, evidence gates, token-budgete
166
166
  | ------------------------------------- | ---------------------------------------------------------------------------------------------------- |
167
167
  | `/multi-agent "task"` | The pipeline; Phase 0 asks where the branch lives |
168
168
  | `/multi-agent:autopilot "task"` | The same pipeline, unattended: worktree resolved, no confirmations |
169
+ | `/multi-agent:deps [pkg[@ver]]` | Bump one dependency, fix only the breakage it caused, review, PR; rolls back past the fix round cap |
169
170
  | `/multi-agent:resume` | Unfinished work, either source: a stopped run picks up where it left off, a branch with no run behind it gets the tail (Review → Build+Test → Commit/PR → Report) |
170
171
 
171
172
  ### Task control
@@ -407,17 +408,17 @@ This enables the matching plugin (+ the shared `ai-common` plugin) in the repo's
407
408
 
408
409
  ## Tool support
409
410
 
410
- The pipeline runs natively on **Claude Code**, **Copilot CLI** and **Codex CLI** - all three install from the same `pipeline/` source and get the same 65 commands.
411
+ The pipeline runs natively on **Claude Code**, **Copilot CLI** and **Codex CLI** - all three install from the same `pipeline/` source and get the same 66 commands.
411
412
 
412
413
  | Tool | Flag | What it installs |
413
414
  | ----------- | -------------------- | ------------------------------------------------------------------------------------------------------ |
414
415
  | Claude Code | `--claude` (default) | slash commands + skills + agents + three `PreToolUse` hooks (secret scan, agent-guard, read-size gate) |
415
- | Copilot CLI | `--copilot` | instructions + 65 sub-command skills + scripts |
416
- | Codex CLI | `--codex` | one router skill + 65 specs as refs + 10 agent TOML + `AGENTS.md` block + `codex mcp add` |
416
+ | Copilot CLI | `--copilot` | instructions + 66 sub-command skills + scripts |
417
+ | Codex CLI | `--codex` | one router skill + 66 specs as refs + 10 agent TOML + `AGENTS.md` block + `codex mcp add` |
417
418
 
418
419
  Filter skills by stack with `--platform=ios\|android\|all`.
419
420
 
420
- **Why Codex gets one skill and not 65.** Codex assembles every discovered skill's name
421
+ **Why Codex gets one skill and not 66.** Codex assembles every discovered skill's name
421
422
  and description into a single prompt block and drops entries when it overflows, with no
422
423
  error. Measured on 0.145: installing one plugin that declares 142 skills surfaced only
423
424
  75 of them and evicted an unrelated user skill. So on Codex the pipeline ships a single
package/README.tr.md CHANGED
@@ -157,7 +157,7 @@ Koşunun kendisinde ayarlanabilen tek şey autopilot; geri kalan her şey kendi
157
157
 
158
158
  ## Komutlar
159
159
 
160
- `/multi-agent` ve 65 alt komut. `/multi-agent:help` aynı katalogu terminalde, `outputLanguage` ayarına göre gösterir.
160
+ `/multi-agent` ve 66 alt komut. `/multi-agent:help` aynı katalogu terminalde, `outputLanguage` ayarına göre gösterir.
161
161
 
162
162
  ### Pipeline girişleri
163
163
 
@@ -165,6 +165,7 @@ Koşunun kendisinde ayarlanabilen tek şey autopilot; geri kalan her şey kendi
165
165
  | ------------------------------------- | ----------------------------------------------------------------------------------------------- |
166
166
  | `/multi-agent "task"` | Pipeline; branch'in nerede yaşayacağını Faz 0 sorar |
167
167
  | `/multi-agent:autopilot "task"` | Aynı pipeline, gözetimsiz: worktree'ye çözülür, onay sorulmaz |
168
+ | `/multi-agent:deps [paket[@sürüm]]` | Tek bağımlılığı yükseltir, yalnızca kırdığını düzeltir, review, PR; düzeltme turu sınırında geri alır |
168
169
  | `/multi-agent:resume` | Yarım kalan iş, iki kaynaktan da: duran koşu kaldığı yerden devam eder, arkasında koşu olmayan branch kuyruğu alır (Review → Build+Test → Commit/PR → Report) |
169
170
 
170
171
  ### Görev kontrolü
@@ -406,17 +407,17 @@ Bu, ilgili plugin'i (+ ortak `ai-common` plugin'ini) repo'nun `.claude/settings.
406
407
 
407
408
  ## Araç desteği
408
409
 
409
- Pipeline **Claude Code**, **Copilot CLI** ve **Codex CLI** üzerinde native çalışır - üçü de aynı `pipeline/` kaynağından kurulur ve aynı 65 komutu alır.
410
+ Pipeline **Claude Code**, **Copilot CLI** ve **Codex CLI** üzerinde native çalışır - üçü de aynı `pipeline/` kaynağından kurulur ve aynı 66 komutu alır.
410
411
 
411
412
  | Araç | Bayrak | Ne kurar |
412
413
  | ----------- | ----------------------- | ---------------------------------------------------------------------------------------------------------------- |
413
414
  | Claude Code | `--claude` (varsayılan) | slash komutları + skill'ler + agent'lar + üç `PreToolUse` hook'u (secret scan, agent-guard, okuma-boyutu geçidi) |
414
- | Copilot CLI | `--copilot` | talimatlar + 65 alt-komut skill'i + script'ler |
415
- | Codex CLI | `--codex` | bir router skill + ref olarak 65 spec + 10 agent TOML + `AGENTS.md` bloğu + `codex mcp add` |
415
+ | Copilot CLI | `--copilot` | talimatlar + 66 alt-komut skill'i + script'ler |
416
+ | Codex CLI | `--codex` | bir router skill + ref olarak 66 spec + 10 agent TOML + `AGENTS.md` bloğu + `codex mcp add` |
416
417
 
417
418
  Skill'leri stack'e göre filtrele: `--platform=ios\|android\|all`.
418
419
 
419
- **Codex neden 65 değil de tek bir skill alıyor.** Codex, keşfettiği her skill'in adını
420
+ **Codex neden 66 değil de tek bir skill alıyor.** Codex, keşfettiği her skill'in adını
420
421
  ve açıklamasını tek bir prompt bloğuna toplar ve blok taştığında girdileri hatasızca
421
422
  düşürür. 0.145 üzerinde ölçüldü: 142 skill deklare eden bir plugin kurulduğunda sadece
422
423
  75'i yüzeye çıktı ve alakasız bir kullanıcı skill'i tahliye edildi. Bu yüzden Codex'te
@@ -113,7 +113,7 @@ graph TB
113
113
  end
114
114
 
115
115
  subgraph "Pipeline Specs"
116
- CMD[commands/<br/>65 command files]
116
+ CMD[commands/<br/>66 command files]
117
117
  AGT[agents/<br/>10 agent personas]
118
118
  RUL[rules/<br/>13 domain rules]
119
119
  PHS[multi-agent-refs/phases/<br/>phase specs + contracts]
@@ -204,8 +204,8 @@ repo and the website, plus the two independently shipped repos
204
204
  ```mermaid
205
205
  graph TD
206
206
  CC["Claude Code<br/>(source of truth)"]
207
- COP["Copilot CLI<br/>(instructions + 65 sub-command skills)"]
208
- COD["Codex CLI<br/>(1 router skill + 65 refs)"]
207
+ COP["Copilot CLI<br/>(instructions + 66 sub-command skills)"]
208
+ COD["Codex CLI<br/>(1 router skill + 66 refs)"]
209
209
  REPO["Pipeline Repo<br/>(npm package)"]
210
210
  WEB["Website"]
211
211
  PLUGREPO["multi-agent-plugins<br/>(6 plugins, own repo)"]
package/docs/ecosystem.md CHANGED
@@ -5,7 +5,7 @@ separately, wired together at install time and at run time:
5
5
 
6
6
  | Repo | What it owns | Ships as |
7
7
  |---|---|---|
8
- | **`multi-agent-pipeline`** (this repo) | Orchestration: the 6-phase flow, the 65 slash commands, quality gates, review/triage, cross-CLI parity | npm package (`@mmerterden/multi-agent-pipeline`), installs itself onto Claude Code / Copilot CLI / Codex CLI |
8
+ | **`multi-agent-pipeline`** (this repo) | Orchestration: the 6-phase flow, the 66 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
10
  | **`multi-agent-toolkit-mcp`** | The pipeline's hands on devices and browsers: 197 MCP tools across 21 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, read-only access to related repositories at their latest branch, 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
 
@@ -18,7 +18,7 @@ Either can be swapped or removed without touching the other two's source.
18
18
  graph LR
19
19
  subgraph PIPE ["multi-agent-pipeline (orchestrator)"]
20
20
  direction TB
21
- PHASES["6 phases · 65 commands"]
21
+ PHASES["6 phases · 66 commands"]
22
22
  GATES["deterministic gates + review triage"]
23
23
  end
24
24
 
@@ -68,8 +68,8 @@ only those:
68
68
  graph TD
69
69
  CC["Claude Code<br/>~/.claude/commands/multi-agent/<br/>(source of truth)"]
70
70
 
71
- CC -->|"Step 2: copy + reformat<br/>65 sub-command skills"| COP["Copilot CLI<br/>~/.copilot/skills/"]
72
- CC -->|"Step 2b: transform<br/>(install.js --codex)"| COD["Codex CLI<br/>1 router skill + 65 refs<br/>+ 10 agent TOML"]
71
+ CC -->|"Step 2: copy + reformat<br/>66 sub-command skills"| COP["Copilot CLI<br/>~/.copilot/skills/"]
72
+ CC -->|"Step 2b: transform<br/>(install.js --codex)"| COD["Codex CLI<br/>1 router skill + 66 refs<br/>+ 10 agent TOML"]
73
73
  CC -->|"Step 3: genericize<br/>(strip personal data)"| REPO["multi-agent-pipeline repo<br/>pipeline/"]
74
74
  CC -->|"Step 4: version + feature sync"| WEB["Website<br/>projects.ts / i18n.tsx"]
75
75
 
@@ -161,7 +161,7 @@ measurements behind this table):
161
161
 
162
162
  | | Claude Code | Copilot CLI | Codex CLI |
163
163
  |---|---|---|---|
164
- | **Pipeline commands** | 65 slash-command skills, native | 65 sub-command skills, `multi-agent-{cmd}` naming, copied in | 1 router skill (`multi-agent`) + 65 command specs as reference files - Codex silently truncates its skills block past a few dozen entries, so sub-commands are not peer skills here |
164
+ | **Pipeline commands** | 66 slash-command skills, native | 66 sub-command skills, `multi-agent-{cmd}` naming, copied in | 1 router skill (`multi-agent`) + 66 command specs as reference files - Codex silently truncates its skills block past a few dozen entries, so sub-commands are not peer skills here |
165
165
  | **Stack plugins** | Marketplace plugin, loaded natively, resolved by `.claude/settings.json` enabled-list | Enabled plugin's authored skills copied flat into `~/.copilot/skills/`; `knowledge/` **not** re-copied (already delivered via `shared/external`) | Copied as reference files under `~/.codex/multi-agent-refs/skills/`, plugin-prefixed on name clash (e.g. `architecture` → `ai-ios-toolkit-architecture`) |
166
166
  | **Component dispatch (Phase 3)** | Marketplace plugin's `create-component`/`create-screen` skill via the Skill tool | No plugin loader - the enabled stack plugin's authored skills (incl. `create-component`) are copied flat into `~/.copilot/skills/` at install time (the old frozen `figma-*` copies are pruned, they were never a fallback) | Not part of the enforced parity axis; classification + state-shape must match, skill *inventory* does not |
167
167
  | **multi-agent-toolkit-mcp** | `claude mcp add multi-agent-toolkit -- npx -y @mmerterden/multi-agent-toolkit-mcp` | `copilot mcp add multi-agent-toolkit -- npx -y @mmerterden/multi-agent-toolkit-mcp` | `codex mcp add multi-agent-toolkit -- npx -y @mmerterden/multi-agent-toolkit-mcp` (skipped with a warning if `codex` isn't on `PATH`) |
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-13",
4
- "version": "20.24.0",
3
+ "generatedAt": "2026-10-14",
4
+ "version": "20.25.0",
5
5
  "phaseSchema": 2,
6
6
  "phases": [
7
7
  {
@@ -33,11 +33,12 @@
33
33
  "modes": {
34
34
  "full": [0, 1, 2, 3, 4, 5],
35
35
  "autopilot": [0, 1, 2, 3, 4, 5],
36
- "analysis": [0, 1, 3, 4, 5]
36
+ "analysis": [0, 1, 3, 4, 5],
37
+ "deps": [0, 1, 2, 3, 4, 5]
37
38
  },
38
- "commandCount": 65,
39
+ "commandCount": 66,
39
40
  "skillCount": 161,
40
- "skillCountAll": 229,
41
+ "skillCountAll": 230,
41
42
  "agentCount": 10,
42
43
  "hosts": ["Claude Code", "Codex CLI", "Copilot CLI"],
43
44
  "toolCount": 197,
@@ -62,5 +63,5 @@
62
63
  "ui": 1
63
64
  },
64
65
  "pluginSkillCount": 252,
65
- "toolkitVersion": "3.22.2"
66
+ "toolkitVersion": "3.22.3"
66
67
  }
package/docs/features.md CHANGED
@@ -221,9 +221,9 @@ stamp fails the dispatch gate. Autopilot runs both phases; only the asking degra
221
221
 
222
222
  | Reviewer | Model | Focus | Where it runs |
223
223
  | ---------- | ------------------- | --------------------------------- | -------------------- |
224
- | Reviewer 1 | `claude-fable-5` (Claude Code) / `claude-opus-4-8` (Copilot CLI) | Deep security + architecture | Both CLIs |
225
- | Reviewer 2 | `gpt-5.4` | Edge cases, different perspective | **Copilot CLI only** |
226
- | Reviewer 3 | `claude-sonnet-4-6` | Quality + correctness + naming | Both CLIs |
224
+ | Reviewer 1 | `claude-fable-5-1` (Claude Code) / `claude-opus-4.7` (Copilot CLI) | Deep security + architecture | Both CLIs |
225
+ | Reviewer 2 | `claude-opus-5-5` (Claude Code) / `gpt-5.4` (Copilot CLI) | Edge cases, different perspective | Both CLIs |
226
+ | Reviewer 3 | `claude-sonnet-5-5` (Claude Code) / `claude-sonnet-4.6` (Copilot CLI) | Quality + correctness + naming | Both CLIs |
227
227
 
228
228
  The reviewer set is **CLI-aware**: Claude Code dispatches 3 reviewers in parallel (Fable + Opus + Sonnet - Opus fills the slot GPT-5.4 takes elsewhere); Copilot CLI dispatches all 3. Each returns structured JSON for deterministic aggregation. Cross-model diversity catches blind spots that any single model family would miss.
229
229
 
@@ -355,8 +355,9 @@ Commands (`commands.mjs --json`) and run questions (`launch-request.mjs question
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
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`.
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
+ - **Capture Hooks** (`SessionEnd`, `PreCompact`, `SessionStart`): durable writes do not wait for 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.
359
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.
360
+ - **Post-Edit Syntax Gate** (opt-in, `prefs.global.editSyntaxGate.enabled`): after a file edit, `edit-syntax-gate.sh` parses the file within 2 s (`swiftc -parse`, `node --check`, `py_compile` into a temp dir, JSON, `bash -n`; Kotlin skipped) and hands a syntax error to the model as hook context. It never blocks and stays silent when a parser is missing or slow. Registered on Claude Code and Codex: Claude Code `PostToolUse` on `Edit|Write|MultiEdit` (`claude-hooks.json`), Codex `PostToolUse` on `apply_patch`, checking every file the patch adds, updates or moves to (`codex-hooks.json`, merged into `~/.codex/hooks.json`, run once trusted in Codex's `/hooks`). `/multi-agent:setup` Step 8 offers it; on Codex it calls `host-hooks.mjs install`, and uninstall takes it back. Copilot CLI gets no registration: as of 1.0.45 it loads `~/.copilot/hooks/*.json` but discards a `postToolUse` hook's output and applies no matcher, so the gate would spawn on every tool call and the model would never see its message. Source for the Codex contract: the Codex hooks guide plus `codex-rs` (`hooks/src/engine`, `core/src/tools/handlers/apply_patch.rs`).
360
361
  - **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.
361
362
  - **Context Management**: `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE=65` - compaction at 65% usage (prevents degradation in 6-phase sessions).
362
363
  - **3-Iteration Hard Kill**: Any retry loop stops after 3 attempts, then pauses for user. No infinite loops.
@@ -403,6 +404,10 @@ Per-phase token budgets prevent runaway sessions. If a phase exceeds its budget,
403
404
  - **Phase Banner**: Terminal UI for phase transitions with Unicode box-drawing characters.
404
405
  - **Per-task Cost Breakdown in agent-log.md**: Phase 5 appends a 4-column block (Phase · Model · Tokens in/out · Est. USD) to every run's `agent-log.md`. Sourced from `phase-tracker.sh tokens` accumulators × `cost-table.json` prices. Independent of the channels-side `reportContent.costSummary` toggle. The `LOG_METRIC_FORWARD_TO_TRACKER=1` env flag mirrors `tokens_in`/`tokens_out`/`model` from `log-metric.sh` into the tracker so JSONL metrics and the cost block stay in sync from one call site.
405
406
 
407
+ ### Run Post-Mortem (`/multi-agent:postmortem`)
408
+
409
+ `transcript-index.mjs` reads a run's session transcripts from any host and detects the format per file: Claude Code (`~/.claude/projects/<dir>/<session>.jsonl` plus subagent files), Copilot CLI (`~/.copilot/session-state/<session>/events.jsonl`) and Codex (`~/.codex/sessions/YYYY/MM/DD/rollout-*.jsonl`). Each host's records are converted into one index: turns, tool calls, loops of identical calls, stalls, compactions, subagents, errors and denials, invocations and token use, every item cited as `file:line` and every excerpt redacted before it is printed. A run is found by its recorded session id on any host, else by the sessions whose working directory was the run's checkout inside its time window (reported as a heuristic). Copilot CLI reports tokens per session, so its totals come from the shutdown record; Codex reports them per request. `COPILOT_TRANSCRIPTS_ROOT` and `CODEX_TRANSCRIPTS_ROOT` override the two roots, as `TRANSCRIPTS_ROOT` does for Claude Code.
410
+
406
411
  ### Diff Risk Scoring
407
412
 
408
413
  `pipeline/scripts/diff-risk-score.mjs` runs at Phase 3 Step 1.75 - before reviewer dispatch. Heuristic, deterministic, sub-second, no LLM. Top-N risk-ranked files inject into each reviewer's prompt as a `${PRIORITY_FILES}` block; reviewers read those files first but still review the entire diff.