@mmerterden/multi-agent-pipeline 16.1.1 → 16.1.3
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 +28 -0
- package/README.md +10 -0
- package/README.tr.md +10 -0
- package/docs/architecture.md +1 -1
- package/docs/features.md +10 -0
- package/install/_mcp-register.mjs +1 -1
- package/install/codex.mjs +13 -0
- package/install/copilot.mjs +19 -4
- package/package.json +1 -1
- package/pipeline/commands/multi-agent/refactor/SKILL.md +1 -1
- package/pipeline/rules/outside-the-pipeline.md +2 -1
- package/pipeline/scripts/uninstall.mjs +4 -3
- package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +1 -1
- /package/pipeline/multi-agent-refs/refactor/{dev-toolkit-research.md → toolkit-research.md} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -16,6 +16,34 @@ Internal file-layout changes that don't affect the slash-command surface are sti
|
|
|
16
16
|
|
|
17
17
|
## [Unreleased]
|
|
18
18
|
|
|
19
|
+
## [16.1.3] - 2026-08-23
|
|
20
|
+
|
|
21
|
+
A dead-code and stale-name sweep. No dead symbols: every function and constant added this week is called from somewhere. Five stale names and one lie.
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
|
|
25
|
+
- **The uninstall preview described the wrong MCP entry, and claimed to remove one it now keeps.** The dry-run text named `dev-toolkit` - the pre-v15.12.0 name - and listed it as removed, while a current install registers `multi-agent-toolkit` and 16.1.0 made that one survive. The preview is the last thing a user reads before confirming a destructive action, so being wrong there is worse than being wrong in a comment. Both host lines now say which entry goes and which is kept, and that `lib/` keeps the credential reader.
|
|
26
|
+
- `refactor`'s research ref was still `dev-toolkit-research.md`, two releases after the server was renamed. Renamed to `toolkit-research.md` with both SKILL trees updated. The file was never dangling - just carrying a name that stopped being true.
|
|
27
|
+
- `docs/architecture.md` listed `dev-toolkit-mcp` as a sync target; the repo is `multi-agent-toolkit-mcp`. The plugins repo README and two site comments named the old server too.
|
|
28
|
+
- The MCP registration header still said "80 tools"; it serves 83.
|
|
29
|
+
|
|
30
|
+
### Added
|
|
31
|
+
|
|
32
|
+
- **Both READMEs and `docs/features.md` describe what 16.1.0 actually shipped.** They had been checked for stale `--dev` references and found clean, which is not the same as being current: the release's headline capability - the install being usable in an ordinary session - appeared in none of them. Now it does, in English and Turkish, including the part that constrains it: reads are ordinary work, writes route through the pipeline commands that carry the rules making them safe.
|
|
33
|
+
|
|
34
|
+
## [16.1.2] - 2026-08-23
|
|
35
|
+
|
|
36
|
+
The rule reached all three hosts in 16.1.1. It only WORKED on one.
|
|
37
|
+
|
|
38
|
+
### Fixed
|
|
39
|
+
|
|
40
|
+
- **Rules were installed with a byte copy, so every path in them dangled on two hosts.** Each CLI keeps its trees under its own root, and both installers carry a path-rewrite table that names `rules` explicitly - but `installRules` (Copilot) and `installTree` (Codex) used a plain `copyDir`, so the rewrite never ran on that tree. Result: all 13 rules told a Copilot or Codex session to run `~/.claude/lib/credential-store.sh`, a tree those installs never create. This is the same dangling-path class the Copilot rewrite was written to eliminate for skills; rules were named in the doctrine and left out of the code. It bites hardest on the one rule whose entire job is resolving that path. Both installers route rules through `copyTreeRewritten` now: `~/.copilot/lib/...` on Copilot, `~/.codex/lib/...` on Codex, unchanged on Claude Code. Twelve pre-existing rules were fixed along with the new one.
|
|
41
|
+
- `outside-the-pipeline.md` says what to do when the refs tree is absent. Copilot installs no `multi-agent-refs/` by design - the doctrine routes those references to `~/.claude` when Claude Code shares the machine - so a Copilot-only install was being sent to a file that is not there with no explanation. The rule now states that the summary it carries IS the contract in that case.
|
|
42
|
+
|
|
43
|
+
### Changed
|
|
44
|
+
|
|
45
|
+
- `smoke-context-budget.sh` asserts both installers put rules through the rewriter. Verified by reverting the Copilot fix and watching it go red. Shipping a rule to a host is not the same as shipping a rule that works there, and only the second one is worth the bytes it costs every session.
|
|
46
|
+
|
|
19
47
|
## [16.1.1] - 2026-08-23
|
|
20
48
|
|
|
21
49
|
Found by reviewing 16.1.0 after it shipped, and by the `/mcp` reconnect confirming the fix worked.
|
package/README.md
CHANGED
|
@@ -133,6 +133,16 @@ says so.
|
|
|
133
133
|
|
|
134
134
|
The **secret scan** runs as a `PreToolUse` hook on Claude Code (hard-blocks a commit on a hit) and as a pre-push check elsewhere.
|
|
135
135
|
|
|
136
|
+
## Outside a pipeline run
|
|
137
|
+
|
|
138
|
+
Installing the pipeline is not only useful when you run it. Open an ordinary session and the same three things are available, announced by `rules/outside-the-pipeline.md` which loads with every conversation:
|
|
139
|
+
|
|
140
|
+
- **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.
|
|
141
|
+
- **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.
|
|
142
|
+
- **The `multi-agent-toolkit` MCP.** 83 tools for a running app - screen state, crash logs, design comparison, store pre-submission.
|
|
143
|
+
|
|
144
|
+
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.
|
|
145
|
+
|
|
136
146
|
## Platform support
|
|
137
147
|
|
|
138
148
|
Runs on **macOS**, **Linux**, and **Windows** (Git Bash / WSL). Shell and credential access go through a platform-agnostic layer - the keychain resolves automatically to **macOS Keychain**, **Linux libsecret** (`secret-tool`), or **Windows Credential Manager**, and scripts fall back between BSD and GNU tool variants. Node.js 20.11+ (tested on 20 and 22).
|
package/README.tr.md
CHANGED
|
@@ -133,6 +133,16 @@ triage notu bunu belirtir.
|
|
|
133
133
|
|
|
134
134
|
**Secret scan**, Claude Code'da bir `PreToolUse` hook'u olarak (bulgu halinde commit'i sert-engeller) ve diğer yerlerde bir pre-push kontrolü olarak çalışır.
|
|
135
135
|
|
|
136
|
+
## Pipeline koşusu dışında
|
|
137
|
+
|
|
138
|
+
Pipeline'ı kurmak yalnız onu çalıştırdığında işe yaramıyor. Sıradan bir oturum açtığında aynı üç şey elinin altında; her sohbette yüklenen `rules/outside-the-pipeline.md` bunları duyuruyor:
|
|
139
|
+
|
|
140
|
+
- **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.
|
|
141
|
+
- **`/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.
|
|
142
|
+
- **`multi-agent-toolkit` MCP.** Çalışan uygulama için 83 araç - ekran durumu, crash logu, tasarım karşılaştırma, store ön-kontrolü.
|
|
143
|
+
|
|
144
|
+
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.
|
|
145
|
+
|
|
136
146
|
## Platform desteği
|
|
137
147
|
|
|
138
148
|
**macOS**, **Linux** ve **Windows** (Git Bash / WSL) üzerinde çalışır. Shell ve credential erişimi platform-agnostik bir katmandan geçer - keychain otomatik olarak **macOS Keychain**, **Linux libsecret** (`secret-tool`) veya **Windows Credential Manager**'a çözülür, ve script'ler BSD ile GNU araç varyantları arasında fallback yapar. Node.js 20.11+ (20 ve 22'de test edildi).
|
package/docs/architecture.md
CHANGED
|
@@ -164,7 +164,7 @@ User Input → Phase 0 (Init)
|
|
|
164
164
|
|
|
165
165
|
`/multi-agent:sync` actually walks **five** targets, not the three shown in earlier
|
|
166
166
|
revisions of this diagram - Codex CLI and the two independently-shipped repos
|
|
167
|
-
(`multi-agent-plugins`, `
|
|
167
|
+
(`multi-agent-plugins`, `multi-agent-toolkit-mcp`) are real sync targets too:
|
|
168
168
|
|
|
169
169
|
```mermaid
|
|
170
170
|
graph TD
|
package/docs/features.md
CHANGED
|
@@ -30,6 +30,16 @@ Each phase reads its own spec file under `pipeline/multi-agent-refs/phases/phase
|
|
|
30
30
|
|
|
31
31
|
Depth is not a flag. `/multi-agent` and `/multi-agent:local` ask Full or Short at Phase 0 Step 7.5, recommending from the detected `taskType`; Short strips to Init → Dev(Opus self-contained) → Review → Test → Commit → Report. Autopilot never asks and always runs Full - "fast plus unattended" was removed in v16.0.0, because something has to choose when nobody is asked and unattended is the worst place to drop analysis and planning.
|
|
32
32
|
|
|
33
|
+
### Outside a Pipeline Run
|
|
34
|
+
|
|
35
|
+
The install is not only useful while `/multi-agent` is running. `rules/outside-the-pipeline.md` loads with every session and announces three things a plain conversation would otherwise not know it had:
|
|
36
|
+
|
|
37
|
+
- **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.
|
|
38
|
+
- **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.
|
|
39
|
+
- **The `multi-agent-toolkit` MCP.** 83 tools for a running app.
|
|
40
|
+
|
|
41
|
+
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.
|
|
42
|
+
|
|
33
43
|
### Stack Auto-Detection
|
|
34
44
|
|
|
35
45
|
| Platform | Detection | Guide Loaded |
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Codex got MCP registration when its installer was written; Copilot never did, and
|
|
7
7
|
* neither did Claude Code. The result was a host that carried the full pipeline skill
|
|
8
|
-
* set and could not call a single one of the
|
|
8
|
+
* set and could not call a single one of the 83 toolkit tools those skills depend
|
|
9
9
|
* on - `design-check`, every `ios_*` / `android_*` simulator call, the archive audits.
|
|
10
10
|
* Nothing failed at install time, and the skills only fail when a run actually reaches
|
|
11
11
|
* for a tool.
|
package/install/codex.mjs
CHANGED
|
@@ -493,6 +493,14 @@ function installScripts(pipelineSrc, dest, useSymlinks) {
|
|
|
493
493
|
* Copy a pipeline tree verbatim (lib / schemas). These are executed, not read
|
|
494
494
|
* as prose, and they resolve their own paths at runtime.
|
|
495
495
|
*/
|
|
496
|
+
// Trees whose text references `$HOME/.claude/...` and therefore have to be
|
|
497
|
+
// retargeted on the way in. The rewrite table already carries rules -> .codex
|
|
498
|
+
// rules, but `rules` was installed with a byte copy, so every rule naming
|
|
499
|
+
// `~/.claude/lib/credential-store.sh` pointed at a tree a Codex-only install
|
|
500
|
+
// never creates. `lib` and `schemas` are data the pipeline reads by absolute
|
|
501
|
+
// path from the caller's side, so they stay byte-identical.
|
|
502
|
+
const REWRITTEN_TREES = new Set(["rules"]);
|
|
503
|
+
|
|
496
504
|
function installTree(name, pipelineSrc, dest, useSymlinks) {
|
|
497
505
|
const src = join(pipelineSrc, name);
|
|
498
506
|
if (!existsSync(src)) return;
|
|
@@ -501,6 +509,11 @@ function installTree(name, pipelineSrc, dest, useSymlinks) {
|
|
|
501
509
|
ensureDir(dest);
|
|
502
510
|
}
|
|
503
511
|
wipeDir(dest);
|
|
512
|
+
if (!useSymlinks && REWRITTEN_TREES.has(name)) {
|
|
513
|
+
const n = copyTreeRewritten(src, dest);
|
|
514
|
+
console.log(` -> ${n} ${name} file(s) copied to ${dest} (paths retargeted)`);
|
|
515
|
+
return;
|
|
516
|
+
}
|
|
504
517
|
copyDir(src, dest, { useSymlinks });
|
|
505
518
|
console.log(` -> ${countFiles(src)} ${name} file(s) copied to ${dest}`);
|
|
506
519
|
}
|
package/install/copilot.mjs
CHANGED
|
@@ -283,8 +283,20 @@ function installRules(pipelineSrc, dest, useSymlinks) {
|
|
|
283
283
|
if (!existsSync(rulesSrc)) return;
|
|
284
284
|
if (!useSymlinks) ensureRealDir(dest);
|
|
285
285
|
wipeDir(dest);
|
|
286
|
-
|
|
287
|
-
|
|
286
|
+
if (useSymlinks) {
|
|
287
|
+
copyDir(rulesSrc, dest, { useSymlinks });
|
|
288
|
+
console.log(` -> ${countFiles(rulesSrc)} files linked to ${dest}`);
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
291
|
+
// Rewritten, not copied. COPILOT_PATH_REWRITES lists `rules` among the trees
|
|
292
|
+
// Copilot owns, but this function used plain copyDir - so every rule shipped
|
|
293
|
+
// here naming `~/.claude/lib/credential-store.sh` pointed at a tree a
|
|
294
|
+
// Copilot-only install never creates. The same dangling-path class the
|
|
295
|
+
// rewrite was introduced to kill for skills, still live in rules because
|
|
296
|
+
// rules never went through it. It matters most for the one rule whose whole
|
|
297
|
+
// job is resolving that path.
|
|
298
|
+
const n = copyTreeRewritten(rulesSrc, dest);
|
|
299
|
+
console.log(` -> ${n} files copied to ${dest} (paths retargeted)`);
|
|
288
300
|
}
|
|
289
301
|
|
|
290
302
|
function installSkills(opts) {
|
|
@@ -379,7 +391,8 @@ function installSkills(opts) {
|
|
|
379
391
|
let prevDelivered = null;
|
|
380
392
|
try {
|
|
381
393
|
const parsed = JSON.parse(readFileSync(join(dest, EXTERNAL_SKILLS_MANIFEST), "utf-8"));
|
|
382
|
-
if (Array.isArray(parsed))
|
|
394
|
+
if (Array.isArray(parsed))
|
|
395
|
+
prevDelivered = new Set(parsed.filter((n) => typeof n === "string"));
|
|
383
396
|
} catch {
|
|
384
397
|
prevDelivered = null;
|
|
385
398
|
}
|
|
@@ -421,7 +434,9 @@ function installSkills(opts) {
|
|
|
421
434
|
}
|
|
422
435
|
}
|
|
423
436
|
writeExternalSkillsManifest(dest, keep);
|
|
424
|
-
console.log(
|
|
437
|
+
console.log(
|
|
438
|
+
` -> stack filter (${selectionSource}): ${keep.length} kept, ${skipped.length} skipped`,
|
|
439
|
+
);
|
|
425
440
|
if (keptForeign > 0) {
|
|
426
441
|
console.log(
|
|
427
442
|
` note: ${keptForeign} skipped-stack dir(s) kept - not delivered by this pipeline (no manifest entry, differs from catalog)`,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mmerterden/multi-agent-pipeline",
|
|
3
|
-
"version": "16.1.
|
|
3
|
+
"version": "16.1.3",
|
|
4
4
|
"description": "8-phase AI development pipeline with full orchestration on Claude Code, Copilot CLI and Codex CLI. Analysis, planning, TDD, CLI-aware parallel review with consensus surfacing + Fable triage, default-FAIL evidence gates, secret + intent guards, per-phase cost ledger, persistent learnings memory, wiki generation, commit automation. Token-preserving uninstall.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "index.js",
|
|
@@ -112,7 +112,7 @@ Procedure:
|
|
|
112
112
|
|
|
113
113
|
The pipeline's hands on devices and browsers are MCP tools served by a companion repo (`multi-agent-toolkit-mcp`): Phase 5 test, `manual-test`, `design-check` and `apple-archive-compliance` all call them, and several pipeline skills declare a minimum toolkit version (see `cross-cli-contract.md`). That repo therefore has to track the MCP field, not just its own README. This step researches what current practice is and audits the toolkit against it.
|
|
114
114
|
|
|
115
|
-
Full procedure - resolution (configuration first, never a hardcoded path; skip when nothing resolves or `enabled` is false), the 5 research axes, the audit command block, and the band-E output table + rules - lives in `$HOME/.claude/multi-agent-refs/refactor/
|
|
115
|
+
Full procedure - resolution (configuration first, never a hardcoded path; skip when nothing resolves or `enabled` is false), the 5 research axes, the audit command block, and the band-E output table + rules - lives in `$HOME/.claude/multi-agent-refs/refactor/toolkit-research.md`. Read it before running this step.
|
|
116
116
|
|
|
117
117
|
## Step 0d: RUN-ERRORS - what the pipeline actually failed on
|
|
118
118
|
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
`/multi-agent` is not the only way to use what the install set up. Reach for
|
|
4
4
|
these when the work calls for it - not eagerly, and not by starting an 8-phase
|
|
5
5
|
run to read one ticket. Detail, commands and the safety contract:
|
|
6
|
-
`$HOME/.claude/multi-agent-refs/outside-the-pipeline.md
|
|
6
|
+
`$HOME/.claude/multi-agent-refs/outside-the-pipeline.md` - absent on a host that
|
|
7
|
+
installs no refs tree, in which case the summary below is the contract.
|
|
7
8
|
|
|
8
9
|
**Services.** Tokens onboarded by `/multi-agent:setup` are readable now. Logical
|
|
9
10
|
name in `prefs.global.keychainMapping`, value via
|
|
@@ -277,7 +277,8 @@ function removeGeneratedCodexAgents(agentsDir) {
|
|
|
277
277
|
}
|
|
278
278
|
|
|
279
279
|
/**
|
|
280
|
-
* Hand the
|
|
280
|
+
* Hand the RETIRED MCP registration back to the host CLI that owns it. The
|
|
281
|
+
* current one (multi-agent-toolkit) is preserved - see MCP_PRESERVED below.
|
|
281
282
|
*
|
|
282
283
|
* Best-effort: a missing binary or an already-absent entry is not an uninstall
|
|
283
284
|
* failure. Never edits the host's config file directly - Codex keeps marketplace
|
|
@@ -699,7 +700,7 @@ export async function main() {
|
|
|
699
700
|
console.log(" Targets:");
|
|
700
701
|
if (forClaude)
|
|
701
702
|
console.log(
|
|
702
|
-
" - Claude Code (~/.claude/{commands/multi-agent, scripts, multi-agent-refs, schemas, lib} + pipeline skills + pipeline agent files +
|
|
703
|
+
" - Claude Code (~/.claude/{commands/multi-agent, scripts, multi-agent-refs, schemas, lib except the credential reader} + pipeline skills + pipeline agent files + the retired dev-toolkit MCP entry; the multi-agent-toolkit entry is KEPT)",
|
|
703
704
|
);
|
|
704
705
|
if (forCopilot)
|
|
705
706
|
console.log(
|
|
@@ -717,7 +718,7 @@ export async function main() {
|
|
|
717
718
|
);
|
|
718
719
|
if (forCodex)
|
|
719
720
|
console.log(
|
|
720
|
-
" - Codex CLI (~/.codex: skills/multi-agent, multi-agent-refs, agents/*.toml, prompts/multi-agent.md, scripts, lib, schemas, rules, AGENTS.md block, dev-toolkit MCP entry)",
|
|
721
|
+
" - Codex CLI (~/.codex: skills/multi-agent, multi-agent-refs, agents/*.toml, prompts/multi-agent.md, scripts, lib except the credential reader, schemas, rules, AGENTS.md block, the retired dev-toolkit MCP entry; multi-agent-toolkit is KEPT)",
|
|
721
722
|
);
|
|
722
723
|
console.log("");
|
|
723
724
|
if (allData) {
|
|
@@ -114,7 +114,7 @@ Procedure:
|
|
|
114
114
|
|
|
115
115
|
The pipeline's hands on devices and browsers are MCP tools served by a companion repo (`multi-agent-toolkit-mcp`): Phase 5 test, `manual-test`, `design-check` and `apple-archive-compliance` all call them, and several pipeline skills declare a minimum toolkit version (see `cross-cli-contract.md`). That repo therefore has to track the MCP field, not just its own README. This step researches what current practice is and audits the toolkit against it.
|
|
116
116
|
|
|
117
|
-
Full procedure - resolution (configuration first, never a hardcoded path; skip when nothing resolves or `enabled` is false), the 5 research axes, the audit command block, and the band-E output table + rules - lives in `$HOME/.claude/multi-agent-refs/refactor/
|
|
117
|
+
Full procedure - resolution (configuration first, never a hardcoded path; skip when nothing resolves or `enabled` is false), the 5 research axes, the audit command block, and the band-E output table + rules - lives in `$HOME/.claude/multi-agent-refs/refactor/toolkit-research.md`. Read it before running this step.
|
|
118
118
|
|
|
119
119
|
## Step 0d: RUN-ERRORS - what the pipeline actually failed on
|
|
120
120
|
|
|
File without changes
|