@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.
- package/CHANGELOG.md +24 -0
- package/README.md +6 -5
- package/README.tr.md +6 -5
- package/docs/architecture.md +3 -3
- package/docs/ecosystem.md +5 -5
- package/docs/facts.json +7 -6
- package/docs/features.md +9 -4
- package/install/catalog-history.json +1 -1
- package/install/templates/claude-hooks.json +1 -1
- package/install/templates/codex-hooks.json +18 -0
- package/manifest.json +89 -82
- package/package.json +1 -1
- package/pipeline/agents/task-clarifier.md +1 -1
- package/pipeline/commands/multi-agent/deps/SKILL.md +61 -0
- package/pipeline/commands/multi-agent/model/SKILL.md +2 -2
- package/pipeline/commands/multi-agent/postmortem/SKILL.md +18 -6
- package/pipeline/commands/multi-agent/review/SKILL.md +5 -5
- package/pipeline/commands/multi-agent/route-on/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/setup/SKILL.md +7 -5
- package/pipeline/commands/multi-agent/sync/SKILL.md +3 -3
- package/pipeline/commands/multi-agent/testflight-validation/SKILL.md +2 -3
- package/pipeline/contract/fixtures/runs-failed.json +1 -1
- package/pipeline/contract/fixtures/runs-old-schema.json +1 -1
- package/pipeline/contract/fixtures/runs-pr-opened-redacted.json +1 -1
- package/pipeline/contract/fixtures/runs-pr-opened.json +1 -1
- package/pipeline/contract/fixtures/runs-running.json +1 -1
- package/pipeline/lib/credential-inventory.sh +5 -5
- package/pipeline/lib/fetch-crashlytics.sh +6 -8
- package/pipeline/lib/model-rung.sh +1 -1
- package/pipeline/lib/plan-todos.sh +21 -4
- package/pipeline/lib/post-pr-review.sh +4 -6
- package/pipeline/lib/route-state.sh +1 -1
- package/pipeline/lib/shadow-git.sh +4 -5
- package/pipeline/multi-agent-refs/cross-cli-contract.md +8 -9
- package/pipeline/multi-agent-refs/features/cost-analysis.md +4 -0
- package/pipeline/multi-agent-refs/features/dep-bump.md +176 -0
- package/pipeline/multi-agent-refs/features/model-fallback.md +17 -12
- package/pipeline/multi-agent-refs/help/en.md +1 -0
- package/pipeline/multi-agent-refs/help/tr.md +1 -0
- package/pipeline/multi-agent-refs/phases/phase-0-init.md +1 -1
- package/pipeline/multi-agent-refs/phases/phase-2-dev.md +2 -0
- package/pipeline/multi-agent-refs/phases/phase-3-review.md +5 -5
- package/pipeline/multi-agent-refs/picker-contract.md +1 -1
- package/pipeline/multi-agent-refs/tracker-contract.md +6 -6
- package/pipeline/schemas/agent-state.schema.json +5 -0
- package/pipeline/schemas/phases.json +4 -0
- package/pipeline/schemas/plan-todos.schema.json +4 -4
- package/pipeline/schemas/prefs.schema.json +27 -4
- package/pipeline/scripts/_code-graph.mjs +2 -2
- package/pipeline/scripts/_transcript-hosts.mjs +406 -0
- package/pipeline/scripts/build-stack-plugins.mjs +3 -3
- package/pipeline/scripts/capture-flush.sh +7 -7
- package/pipeline/scripts/code-graph-rules/android.json +1 -1
- package/pipeline/scripts/cost-analyze.mjs +26 -19
- package/pipeline/scripts/cost-table.json +35 -19
- package/pipeline/scripts/dep-bump.mjs +1556 -0
- package/pipeline/scripts/edit-syntax-gate.mjs +151 -29
- package/pipeline/scripts/edit-syntax-gate.sh +9 -6
- package/pipeline/scripts/gc-abandoned.sh +2 -2
- package/pipeline/scripts/gen-mode-dispatch.mjs +3 -3
- package/pipeline/scripts/git-path.mjs +1 -2
- package/pipeline/scripts/host-hooks.mjs +265 -0
- package/pipeline/scripts/jira-attach.sh +1 -1
- package/pipeline/scripts/keychain.py +3 -3
- package/pipeline/scripts/output-quality-check.sh +1 -1
- package/pipeline/scripts/phase-tracker.sh +5 -6
- package/pipeline/scripts/phase0-exit-gate.mjs +3 -3
- package/pipeline/scripts/pre-push-check.sh +3 -6
- package/pipeline/scripts/transcript-index.mjs +423 -242
- package/pipeline/scripts/uninstall.mjs +90 -4
- package/pipeline/scripts/update-issue-progress.sh +4 -6
- package/pipeline/scripts/usage-report.mjs +2 -2
- package/pipeline/skills/.skill-manifest.json +14 -10
- package/pipeline/skills/.skills-index.json +12 -1
- package/pipeline/skills/shared/README.md +4 -3
- package/pipeline/skills/shared/core/multi-agent/SKILL.md +6 -6
- package/pipeline/skills/shared/core/multi-agent-deps/SKILL.md +60 -0
- package/pipeline/skills/shared/core/multi-agent-model/SKILL.md +2 -2
- package/pipeline/skills/shared/core/multi-agent-postmortem/SKILL.md +10 -7
- package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +5 -5
- package/pipeline/skills/shared/core/multi-agent-route-on/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +7 -5
- package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +3 -3
- package/pipeline/skills/shared/core/multi-agent-testflight-validation/SKILL.md +2 -3
- package/pipeline/skills/shared/external/ios-coding-standard/references/rules.yml +2 -2
- 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
|
|
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
|
|
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 +
|
|
416
|
-
| Codex CLI | `--codex` | one router skill +
|
|
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
|
|
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
|
|
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ı
|
|
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 +
|
|
415
|
-
| Codex CLI | `--codex` | bir router skill + ref olarak
|
|
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
|
|
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
|
package/docs/architecture.md
CHANGED
|
@@ -113,7 +113,7 @@ graph TB
|
|
|
113
113
|
end
|
|
114
114
|
|
|
115
115
|
subgraph "Pipeline Specs"
|
|
116
|
-
CMD[commands/<br/>
|
|
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 +
|
|
208
|
-
COD["Codex CLI<br/>(1 router skill +
|
|
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
|
|
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 ·
|
|
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/>
|
|
72
|
-
CC -->|"Step 2b: transform<br/>(install.js --codex)"| COD["Codex CLI<br/>1 router skill +
|
|
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** |
|
|
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-
|
|
4
|
-
"version": "20.
|
|
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":
|
|
39
|
+
"commandCount": 66,
|
|
39
40
|
"skillCount": 161,
|
|
40
|
-
"skillCountAll":
|
|
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.
|
|
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
|
|
225
|
-
| Reviewer 2 | `gpt-5.4`
|
|
226
|
-
| Reviewer 3 | `claude-sonnet-4
|
|
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`):
|
|
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.
|