@mmerterden/multi-agent-pipeline 11.5.0 → 12.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/CHANGELOG.md +75 -0
  2. package/docs/adr/0007-multi-tool-adapter-framework.md +2 -2
  3. package/docs/adr/0008-installer-modularization-and-secret-leak-defense.md +2 -0
  4. package/docs/adr/README.md +1 -0
  5. package/docs/features.md +2 -2
  6. package/install/claude.mjs +51 -1
  7. package/install/index.mjs +34 -1
  8. package/package.json +2 -2
  9. package/pipeline/commands/multi-agent/SKILL.md +1 -0
  10. package/pipeline/commands/multi-agent/analysis/SKILL.md +1 -0
  11. package/pipeline/commands/multi-agent/analysis-resolve/SKILL.md +1 -0
  12. package/pipeline/commands/multi-agent/autopilot/SKILL.md +1 -0
  13. package/pipeline/commands/multi-agent/build-optimize/SKILL.md +1 -0
  14. package/pipeline/commands/multi-agent/channels/SKILL.md +1 -0
  15. package/pipeline/commands/multi-agent/create-jira/SKILL.md +1 -0
  16. package/pipeline/commands/multi-agent/dev/SKILL.md +1 -0
  17. package/pipeline/commands/multi-agent/dev-autopilot/SKILL.md +1 -0
  18. package/pipeline/commands/multi-agent/dev-local/SKILL.md +1 -0
  19. package/pipeline/commands/multi-agent/dev-local-autopilot/SKILL.md +1 -0
  20. package/pipeline/commands/multi-agent/diff-explain/SKILL.md +1 -0
  21. package/pipeline/commands/multi-agent/finish/SKILL.md +1 -0
  22. package/pipeline/commands/multi-agent/garbage-collect/SKILL.md +29 -3
  23. package/pipeline/commands/multi-agent/help/SKILL.md +3 -2
  24. package/pipeline/commands/multi-agent/issue/SKILL.md +1 -0
  25. package/pipeline/commands/multi-agent/jira/SKILL.md +1 -0
  26. package/pipeline/commands/multi-agent/kill/SKILL.md +1 -0
  27. package/pipeline/commands/multi-agent/language/SKILL.md +20 -1
  28. package/pipeline/commands/multi-agent/local/SKILL.md +1 -0
  29. package/pipeline/commands/multi-agent/local-autopilot/SKILL.md +1 -0
  30. package/pipeline/commands/multi-agent/log/SKILL.md +1 -0
  31. package/pipeline/commands/multi-agent/manual-test/SKILL.md +1 -0
  32. package/pipeline/commands/multi-agent/prune-logs/SKILL.md +1 -0
  33. package/pipeline/commands/multi-agent/purge/SKILL.md +27 -24
  34. package/pipeline/commands/multi-agent/refactor/SKILL.md +1 -0
  35. package/pipeline/commands/multi-agent/resume/SKILL.md +1 -0
  36. package/pipeline/commands/multi-agent/review/SKILL.md +1 -0
  37. package/pipeline/commands/multi-agent/review-issue/SKILL.md +1 -0
  38. package/pipeline/commands/multi-agent/review-jira/SKILL.md +1 -0
  39. package/pipeline/commands/multi-agent/scan/SKILL.md +1 -0
  40. package/pipeline/commands/multi-agent/search/SKILL.md +1 -0
  41. package/pipeline/commands/multi-agent/setup/SKILL.md +1 -0
  42. package/pipeline/commands/multi-agent/stack/SKILL.md +1 -0
  43. package/pipeline/commands/multi-agent/status/SKILL.md +1 -0
  44. package/pipeline/commands/multi-agent/sync/SKILL.md +20 -2
  45. package/pipeline/commands/multi-agent/test/SKILL.md +1 -0
  46. package/pipeline/commands/multi-agent/uninstall/SKILL.md +87 -0
  47. package/pipeline/commands/multi-agent/update/SKILL.md +1 -0
  48. package/pipeline/lib/multi-repo-pipeline.sh +6 -1
  49. package/pipeline/multi-agent-refs/cross-cli-contract.md +5 -5
  50. package/pipeline/multi-agent-refs/phases/phase-0-init.md +12 -1
  51. package/pipeline/scripts/_cost.mjs +35 -0
  52. package/pipeline/scripts/agent-guard.py +8 -3
  53. package/pipeline/scripts/cost-budget-check.mjs +2 -1
  54. package/pipeline/scripts/cost-lib.sh +43 -0
  55. package/pipeline/scripts/fixtures/install-layout.tsv +4 -2
  56. package/pipeline/scripts/gc-tmp.sh +67 -8
  57. package/pipeline/scripts/gc-worktrees.sh +140 -0
  58. package/pipeline/scripts/localize-commands.mjs +130 -0
  59. package/pipeline/scripts/phase-tracker.sh +10 -19
  60. package/pipeline/scripts/prune-logs.sh +100 -15
  61. package/pipeline/scripts/purge.sh +235 -0
  62. package/pipeline/scripts/render-agent-log-cost.sh +7 -13
  63. package/pipeline/scripts/render-cost-summary.sh +4 -7
  64. package/pipeline/scripts/run-aggregator.mjs +2 -3
  65. package/pipeline/scripts/smoke-description-tr.sh +82 -0
  66. package/pipeline/scripts/smoke-gc-tmp.sh +50 -4
  67. package/pipeline/scripts/smoke-gc-worktrees.sh +125 -0
  68. package/pipeline/scripts/smoke-prune-logs.sh +57 -7
  69. package/pipeline/scripts/smoke-purge.sh +138 -0
  70. package/pipeline/scripts/smoke-source-parity.sh +85 -0
  71. package/pipeline/scripts/smoke-update-check.sh +13 -0
  72. package/pipeline/scripts/uninstall.mjs +41 -6
  73. package/pipeline/scripts/update-check.sh +9 -0
  74. package/pipeline/skills/.skill-manifest.json +7 -7
  75. package/pipeline/skills/.skills-index.json +9 -9
  76. package/pipeline/skills/shared/README.md +19 -10
  77. package/pipeline/skills/shared/core/multi-agent/SKILL.md +1 -0
  78. package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +2 -2
  79. package/pipeline/skills/shared/core/multi-agent-uninstall/SKILL.md +74 -0
  80. package/pipeline/skills/skills-index.md +1 -1
  81. package/pipeline/commands/multi-agent/delete/SKILL.md +0 -67
  82. package/pipeline/skills/shared/core/multi-agent-delete/SKILL.md +0 -66
package/CHANGELOG.md CHANGED
@@ -14,6 +14,81 @@ Internal file-layout changes that don't affect the slash-command surface are sti
14
14
 
15
15
  ---
16
16
 
17
+ ## [12.1.0] - 2026-07-21
18
+
19
+ ### Security
20
+ - **`agent-guard.sh` is now wired by the default installer** (was opt-in via the setup template). A plain `install` now OS-enforces the two load-bearing git gates on every `Bash` tool call: no AI/assistant attribution in commit messages, and no force-push to a protected branch (`main`/`master`/`develop`).
21
+ - **Force-push protection now fails CLOSED.** A detected force-push that can't be tokenized, or a bare force-push while the current branch can't be confirmed non-protected, is blocked rather than allowed. (The general guard stays fail-open; only the data-loss path is fail-closed.)
22
+ - **Multi-repo clone hardening.** `cmd_prepare` disables git's `ext::`/`fd::` remote helpers (`protocol.ext.allow=never`, `protocol.fd.allow=never`) and ends options with `--`, closing an arbitrary-command-execution / option-injection vector on repo URLs sourced from `.gitmodules` suggestions. Local/file/https/ssh clones are unaffected.
23
+
24
+ ### Changed
25
+ - **Node floor raised to 20** (`.nvmrc`, `engines.node` → `>=20.0.0`). Node 18 was EOL and untested by CI; the matrix already covers 20/22.
26
+
27
+ ### Refactored
28
+ - **Token-cost pricing is now a single source.** The per-Mtok cost formula, previously copy-pasted across ~6 bash/mjs scripts, lives in `cost-lib.sh` (bash) + `_cost.mjs` (Node), both reading the shared `cost-table.json`. Zero runtime dependencies preserved.
29
+
30
+ ### Added
31
+ - **`smoke-source-parity.sh`** — guards feature-set drift between the two source trees (`commands/multi-agent/<name>` vs `skills/shared/core/multi-agent-<name>`); fails if a feature exists in one tree but not the other.
32
+
33
+ ### Docs
34
+ - Refreshed post-v12 doc drift: `SECURITY.md` + `ROADMAP.md` support/version markers → 12.x; `docs/features.md` smoke-suite count `10` → `100+`; ADR index now lists 0008 and 0008 carries a v10.7.0 amendment (the `_adapters.mjs` module was removed); `CONTRIBUTING.md` coverage claim clarified (local-only) and the stale phase-docs path corrected to `pipeline/multi-agent-refs/phases/`.
35
+
36
+ ---
37
+
38
+ ## [12.0.0] - 2026-07-20
39
+
40
+ Command rename (breaking), a full-cleanup uninstall mode, outputLanguage-aware
41
+ picker descriptions, worktree residue cleanup, and cleanup-command hardening.
42
+
43
+ ### Breaking
44
+
45
+ - **`/multi-agent:delete` renamed to `/multi-agent:uninstall`.** The old name is
46
+ gone (no alias). The Copilot twin is now `multi-agent-uninstall`. Command
47
+ count stays 38; the canonical inventory, sync list, help, and cross-cli
48
+ contract were updated. Per the versioning policy a renamed command forces a
49
+ major bump.
50
+
51
+ ### Added
52
+
53
+ - **`uninstall --all-data` full-cleanup mode.** Standard uninstall still keeps
54
+ settings + logs; `--all-data` additionally removes
55
+ `multi-agent-preferences.json` and the entire `~/.claude/logs/multi-agent/`
56
+ tree (task logs, state, metrics, audit). Tokens, `CLAUDE.md`, and the
57
+ user-owned `rules/` are preserved in both modes. The slash command asks a
58
+ scope picker (Standard vs Full cleanup) before the double confirmation.
59
+ - **outputLanguage-aware slash-command descriptions.** Every command ships an
60
+ English `description` plus a `description-tr`; when `outputLanguage=tr`, the
61
+ installer and the `/multi-agent:language` toggle swap the installed
62
+ `~/.claude` descriptions to Turkish (reversible via a `description-en`
63
+ sidecar). Repo and npm files stay English; `/multi-agent:sync` normalizes and
64
+ gates the round trip so localized text can never leak back into the repo.
65
+ New `localize-commands.mjs` + `smoke-description-tr.sh`.
66
+ - **`/multi-agent:garbage-collect` worktree phase.** New `gc-worktrees.sh`
67
+ (dry-run by default) prunes stale worktree admin entries, removes orphan
68
+ `.worktrees/*` dirs no longer registered as worktrees, unstages gitlink
69
+ ("Subproject commit") residue from a pre-guard `git add -A`, and ensures the
70
+ `.worktrees/` `info/exclude` guard. Registered worktrees are never touched.
71
+ - **Worktree residue guard on creation.** Phase 0 (single- and multi-repo) and
72
+ the Copilot core skill now append `.worktrees/` to the clone-local
73
+ `.git/info/exclude` before every `worktree add`, so a blanket `git add -A`
74
+ can no longer record `.worktrees/{id}` gitlinks into shared branches.
75
+ - **update-check reaches npx-only installs.** The installer stamps
76
+ `~/.claude/.pipeline-version` (and the Copilot equivalent); `update-check.sh`
77
+ falls back to it when no repo clone is present, so users who never cloned the
78
+ repo still see the "update available" prompt. Uninstall removes the marker.
79
+
80
+ ### Changed / hardened
81
+
82
+ - **`/multi-agent:purge` now runs a real backend** (`purge.sh`): dry-run by
83
+ default, every `rm` target resolved strictly inside `<repo>/.worktrees/`,
84
+ refuses `/`, `$HOME`, and the project root; main worktree and
85
+ main/master/develop always preserved. `--delete-remote` gates remote-branch
86
+ deletion behind `--yes`.
87
+ - **`prune-logs.sh` / `gc-tmp.sh` hardened**: safe id/path validation, the
88
+ audit trail + metrics corpus never removed, containment guards on deletion
89
+ roots. New/expanded smokes: `smoke-purge.sh`, plus prune-logs and gc-tmp
90
+ coverage.
91
+
17
92
  ## [11.5.0] - 2026-07-16
18
93
 
19
94
  Full-project refactor round: 20 verified defect fixes (install lifecycle, shell
@@ -64,7 +64,7 @@ Each adapter exports a `{ name, install, uninstall }` contract. New adapters are
64
64
 
65
65
  ### Token-preserving uninstall
66
66
 
67
- Every install path has a documented opposite via `npx @mmerterden/multi-agent-pipeline uninstall` (or `delete` alias). Slash command: `/multi-agent:delete` with a Copilot CLI peer `multi-agent-delete`.
67
+ Every install path has a documented opposite via `npx @mmerterden/multi-agent-pipeline uninstall`. Slash command: `/multi-agent:uninstall` (renamed from `:delete` in v12.0.0) with a Copilot CLI peer `multi-agent-uninstall`. A `--all-data` flag extends it to also clear pipeline settings and the log root; tokens are never touched.
68
68
 
69
69
  The uninstaller is **contractually forbidden** from touching:
70
70
 
@@ -94,7 +94,7 @@ Positive:
94
94
  Negative / costs:
95
95
 
96
96
  - 6 adapters means 6 places where the format mapping can drift from upstream tool changes. Mitigation: round-trip smoke tests for each adapter exercise install + uninstall on every PR.
97
- - `--all-tools` writes ~900 files (174 cursor + ~50 windsurf concat + 173 cline + 161 copilot-chat + 161 continue + 1 zed) into the user's repo. Acceptable `.gitignore` patterns already cover most of these (`.cursor/`, `.continue/`, `.clinerules/`), and `:delete` cleans them all in one step.
97
+ - `--all-tools` writes ~900 files (174 cursor + ~50 windsurf concat + 173 cline + 161 copilot-chat + 161 continue + 1 zed) into the user's repo. Acceptable: `.gitignore` patterns already cover most of these (`.cursor/`, `.continue/`, `.clinerules/`), and `:uninstall` cleans them all in one step.
98
98
  - Per-tool format drift across tool versions (e.g. Cursor's `.mdc` format changes in 2027) requires per-adapter maintenance. Insulated from the orchestrator: bumping a Tier 2/3 tool format never touches Phase 1-7 logic.
99
99
 
100
100
  ## Alternatives Considered
@@ -2,6 +2,8 @@
2
2
 
3
3
  **Status:** Accepted · 2026-04-27 (v8.0.0)
4
4
 
5
+ > **Amended v10.7.0:** the `_adapters.mjs` module and its third-party adapter dispatch were removed when the pipeline narrowed to Claude Code + Copilot CLI (see ADR 0007). `install/` now ships **8** modules, not 9; the module list below records the v8.0.0 decision as it shipped at the time.
6
+
5
7
  ## Context
6
8
 
7
9
  Two pressures collided during the v7.x line:
@@ -17,6 +17,7 @@ Format: lightly adapted from [Michael Nygard's ADR template](https://cognitect.c
17
17
  | [0005](./0005-lazy-phase-docs.md) | Lazy-loaded phase docs with per-phase token budget | Accepted |
18
18
  | [0006](./0006-skills-core-external-split.md) | `shared/core/` vs `shared/external/` source org | Accepted |
19
19
  | [0007](./0007-multi-tool-adapter-framework.md) | Multi-tool adapter framework + token-preserving uninstall | Superseded by v10.7.0 (adapters removed; Claude Code + Copilot CLI only) |
20
+ | [0008](./0008-installer-modularization-and-secret-leak-defense.md) | Installer modularization + secret-leak defense | Accepted (amended v10.7.0: adapter module removed) |
20
21
 
21
22
  ## Writing a New ADR
22
23
 
package/docs/features.md CHANGED
@@ -201,11 +201,11 @@ All critical state files are schema-validated at read and write time:
201
201
 
202
202
  ### Smoke Test Suites
203
203
 
204
- 10 suites: add-detail (14 body-preservation assertions), review-triage (validator exit codes), prefs (schema round-trip), state (agent-state lifecycle), metrics (telemetry emission), sync (instruction parity), secret-scan (hook patterns), phase-banner (terminal UI), token-budget (per-phase limits), phase-tracker (progress tracking).
204
+ 100+ suites, auto-discovered from `smoke-*.sh` (no hardcoded list). Representative: add-detail (body-preservation assertions), review-triage (validator exit codes), prefs (schema round-trip), state (agent-state lifecycle), metrics (telemetry emission), sync (instruction parity), secret-scan (hook patterns), phase-banner (terminal UI), token-budget (per-phase limits), phase-tracker (progress tracking).
205
205
 
206
206
  ### Adversarial Eval Fixtures
207
207
 
208
- 10 fixtures that test triage resilience against adversarial reviewer output: over-rejection, hallucinated findings, contradictions, invalid JSON, schema violations, duplicate findings, scope creep, empty results, timeout simulation, and combined edge cases.
208
+ Adversarial fixtures that test triage resilience against adversarial reviewer output: over-rejection, hallucinated findings, contradictions, invalid JSON, schema violations, duplicate findings, scope creep, empty results, timeout simulation, and combined edge cases.
209
209
 
210
210
  ### Sync Parity Check
211
211
 
@@ -15,9 +15,11 @@
15
15
  */
16
16
 
17
17
  import { existsSync, readFileSync, readdirSync, rmSync, statSync, writeFileSync } from "fs";
18
- import { join } from "path";
18
+ import { join, dirname } from "path";
19
19
  import { execSync } from "child_process";
20
20
 
21
+ import { localizeCommands } from "../pipeline/scripts/localize-commands.mjs";
22
+
21
23
  import {
22
24
  copyDir,
23
25
  copyFile,
@@ -117,6 +119,28 @@ function installCommands(pipelineSrc, dest, useSymlinks) {
117
119
  if (restored > 0) {
118
120
  console.log(` -> preserved ${restored} local-only alias wrapper(s)`);
119
121
  }
122
+ localizeCommandDescriptions(pipelineSrc, ownedCmdDir);
123
+ }
124
+
125
+ // Picker descriptions follow prefs.global.outputLanguage: files shipping a
126
+ // description-tr frontmatter line get their description swapped in the
127
+ // INSTALLED tree only (repo and npm package stay English; /multi-agent:sync
128
+ // restores English before mirroring back). Failure is non-fatal.
129
+ function localizeCommandDescriptions(pipelineSrc, ownedCmdDir) {
130
+ if (isDryRun()) return;
131
+ try {
132
+ const home = dirname(dirname(ownedCmdDir));
133
+ const prefsPath = join(home, "multi-agent-preferences.json");
134
+ if (!existsSync(prefsPath)) return;
135
+ const prefs = JSON.parse(readFileSync(prefsPath, "utf-8"));
136
+ if (prefs?.global?.outputLanguage !== "tr") return;
137
+ const changed = localizeCommands(ownedCmdDir, "apply");
138
+ if (changed > 0) {
139
+ console.log(` -> localized ${changed} command description(s) to outputLanguage=tr`);
140
+ }
141
+ } catch {
142
+ // advisory only - installed tree simply stays English
143
+ }
120
144
  }
121
145
 
122
146
  // Snapshot single-level command dirs whose SKILL.md declares `local-only: true`
@@ -450,6 +474,32 @@ export function configureSettings(home) {
450
474
  settingsChanged = true;
451
475
  }
452
476
 
477
+ // agent-guard.sh: the second load-bearing gate - blocks AI/assistant
478
+ // attribution in commit messages and force-push to a protected branch.
479
+ // Like pre-commit-check.sh it self-filters on the Bash command via stdin
480
+ // JSON, so the matcher is the tool name "Bash". Wired by default (was
481
+ // previously opt-in via the setup template, leaving force-push and
482
+ // attribution unguarded on a plain install).
483
+ const isAgentGuardEntry = (h) =>
484
+ Array.isArray(h.hooks) &&
485
+ h.hooks.some(
486
+ (sub) => typeof sub.command === "string" && sub.command.includes("agent-guard.sh"),
487
+ );
488
+ if (!settings.hooks.PreToolUse.some(isAgentGuardEntry)) {
489
+ settings.hooks.PreToolUse.push({
490
+ matcher: "Bash",
491
+ hooks: [
492
+ {
493
+ type: "command",
494
+ command: "bash $HOME/.claude/scripts/agent-guard.sh",
495
+ timeout: 10,
496
+ statusMessage: "Checking commit/push safety (attribution + force-push)...",
497
+ },
498
+ ],
499
+ });
500
+ settingsChanged = true;
501
+ }
502
+
453
503
  if (settingsChanged && isDryRun()) {
454
504
  console.log(` [dry-run] would update ${SETTINGS_PATH} (hooks + env)`);
455
505
  } else if (settingsChanged) {
package/install/index.mjs CHANGED
@@ -11,9 +11,12 @@
11
11
  import { dirname } from "path";
12
12
  import { fileURLToPath } from "url";
13
13
 
14
+ import { readFileSync } from "fs";
15
+ import { join } from "path";
16
+
14
17
  import { installClaude } from "./claude.mjs";
15
18
  import { installCopilot } from "./copilot.mjs";
16
- import { setDryRun } from "./_common.mjs";
19
+ import { setDryRun, writeFile } from "./_common.mjs";
17
20
  import { sendInstallTelemetry } from "./_telemetry.mjs";
18
21
 
19
22
  const __dirname = dirname(fileURLToPath(import.meta.url));
@@ -95,6 +98,10 @@ export async function runInstall(argv) {
95
98
  if (forClaude) installClaude(installerCtx);
96
99
  if (forCopilot) installCopilot(installerCtx);
97
100
 
101
+ // Version marker: update-check.sh falls back to this for npx-only installs
102
+ // that have no pipeline repo clone to read a version from.
103
+ writeVersionMarkers({ home: HOME, forClaude, forCopilot });
104
+
98
105
  if (dryRun) {
99
106
  console.log("");
100
107
  console.log(" Dry-run complete — nothing was written. Re-run without --dry-run to install.");
@@ -108,6 +115,32 @@ export async function runInstall(argv) {
108
115
  sendInstallTelemetry({ packageRoot: PIPELINE_ROOT, flags });
109
116
  }
110
117
 
118
+ /**
119
+ * Stamp the installed package version into each target so the advisory
120
+ * update check works without a repo clone. Failure is non-fatal.
121
+ *
122
+ * @param {{home: string, forClaude: boolean, forCopilot: boolean}} opts
123
+ */
124
+ export function writeVersionMarkers({ home, forClaude, forCopilot }) {
125
+ let version;
126
+ try {
127
+ version = JSON.parse(readFileSync(join(PIPELINE_ROOT, "package.json"), "utf-8")).version;
128
+ } catch {
129
+ return;
130
+ }
131
+ if (!version) return;
132
+ const targets = [];
133
+ if (forClaude) targets.push(join(home, ".claude", ".pipeline-version"));
134
+ if (forCopilot) targets.push(join(home, ".copilot", ".pipeline-version"));
135
+ for (const target of targets) {
136
+ try {
137
+ writeFile(target, `${version}\n`);
138
+ } catch {
139
+ // advisory only - never fail the install over the marker
140
+ }
141
+ }
142
+ }
143
+
111
144
  /**
112
145
  * @param {string[]} flags
113
146
  * @returns {"ios"|"android"|"all"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mmerterden/multi-agent-pipeline",
3
- "version": "11.5.0",
3
+ "version": "12.1.0",
4
4
  "description": "8-phase AI development pipeline with full orchestration on Claude Code and Copilot 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",
@@ -58,7 +58,7 @@
58
58
  "url": "https://github.com/mmerterden/multi-agent-pipeline/issues"
59
59
  },
60
60
  "engines": {
61
- "node": ">=18.0.0"
61
+ "node": ">=20.0.0"
62
62
  },
63
63
  "files": [
64
64
  "index.js",
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  description: "Task orchestrator - full pipeline via Jira ID + branch or GitHub Issue URL: analysis, plan, TDD development, parallel review + Fable triage (CLI-aware: 2-model on Claude Code, 3-model on Copilot CLI), commit, log"
3
+ description-tr: "Görev orkestratörü - Jira ID + branch veya GitHub Issue URL ile tam pipeline: analiz, plan, TDD geliştirme, paralel review + Fable triyajı (CLI'ya göre: Claude Code'da 2, Copilot CLI'da 3 model), commit, log"
3
4
  allowed-tools: Agent, Bash, Read, Write, Edit, Glob, Grep, TaskCreate, TaskUpdate, TaskList, TaskGet, AskUserQuestion, WebFetch, WebSearch, NotebookEdit, Skill
4
5
  ---
5
6
 
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  description: "Standalone feature-spec analysis. Platform-agnostic concept layer with repo-driven convention extraction (Phase 1c) and per-platform Pass B render. 23 main sections + 3 footer in Full mode; 7 sections in Lite mode (auto for small features). Collects Figma / Swagger / Confluence / Jira / Standards (Confluence + Wiki + local file) / Firebase / repo inputs. Stops after emit - does not chain into /multi-agent:dev."
3
+ description-tr: "Bağımsız özellik-spesifikasyonu analizi. Repo'dan konvansiyon çıkarımıyla (Faz 1c) platform-bağımsız kavram katmanı ve platform başına Pass B render. Full modda 23 ana + 3 dipnot bölümü; Lite modda 7 bölüm (küçük işlerde otomatik). Figma / Swagger / Confluence / Jira / Standartlar (Confluence + Wiki + yerel dosya) / Firebase / repo girdilerini toplar. Çıktıyı üretince durur - /multi-agent:dev'e zincirlenmez."
3
4
  argument-hint: "[\"<analysis-name>\"] [--lite | --full] [--no-cache] [--preview-conventions]"
4
5
  ---
5
6
 
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  description: "Resolve the Section 20 Risks and Open Questions of an analysis v3 document one row at a time. Proposes up to 3 source-labeled answer candidates per row (from evidence / from repo / AI reasoned), merges the chosen answer into the target body section, and updates the doc in place with a Section 23 changelog bump. Companion to /multi-agent:analysis - same Locked decisions apply (citation discipline, humanizer punctuation, no MCP, no auto-commit). Optional sibling propagation for per-platform file sets."
3
+ description-tr: "Analiz v3 dokümanının Bölüm 20 Riskler ve Açık Sorular satırlarını tek tek çözer. Satır başına en fazla 3 kaynak-etiketli cevap adayı önerir (kanıttan / repodan / AI çıkarımı), seçilen cevabı ilgili gövde bölümüne işler ve dokümanı Bölüm 23 changelog artışıyla yerinde günceller. /multi-agent:analysis'in eşlikçisi - aynı Kilitli kararlar geçerli (alıntı disiplini, humanizer noktalama, MCP yok, otomatik commit yok). Platform bazlı dosya setleri için isteğe bağlı kardeş yayılımı."
3
4
  argument-hint: "[path/to/analysis/<feature>-<platform>.md] [--autonomous]"
4
5
  ---
5
6
 
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  description: "Launch any task in autopilot mode: skips every confirmation, runs end-to-end autonomously."
3
+ description-tr: "Herhangi bir görevi autopilot modunda başlatır: tüm onayları atlar, uçtan uca otonom çalışır."
3
4
  argument-hint: '"task" - issue URL, Jira ID, free-text, or #id (for resume)'
4
5
  ---
5
6
 
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  description: "Thin wrapper that dispatches to xcode-build-orchestrator on iOS projects. Benchmarks current Xcode build, runs compilation / project / SPM analyzers, produces a recommend-first optimization plan, and re-benchmarks after the developer approves changes."
3
+ description-tr: "iOS projelerinde xcode-build-orchestrator'a delege eden ince sarmalayıcı. Mevcut Xcode build'ini ölçer, derleme / proje / SPM analizlerini koşar, önce-öneri yaklaşımlı bir optimizasyon planı üretir ve geliştirici onayından sonra yeniden ölçer."
3
4
  argument-hint: "(none - operates on current repo)"
4
5
  ---
5
6
 
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  description: "Multi-channel reporter - Jira/Confluence/Wiki/PR description/Board status. Multi-select channels + content, humanizer pass, reviewer-preserving Bitbucket PR PUT, GitHub Projects v2 board status move. Phase 7 delegates to this skill; users can invoke post-hoc by Jira ID / PR URL / branch."
3
+ description-tr: "Çok kanallı raporlayıcı - Jira/Confluence/Wiki/PR açıklaması/Board durumu. Çoklu kanal + içerik seçimi, humanizer geçişi, reviewer'ı koruyan Bitbucket PR PUT, GitHub Projects v2 board durum taşıma. Faz 7 bu skill'e delege eder; Jira ID / PR URL / branch ile sonradan da çağrılabilir."
3
4
  argument-hint: '<Jira-id | PR-url | #N | Jira-url> [--channels pr,jira,confluence,wiki,board] [--content normal,technical,test,auto-diff,note] [--message "..."] [--message-file path] [--board-status <key>] [--dry-run] [--append] [--ready]'
4
5
  allowed-tools: Read, Write, Edit, Bash, Grep, WebFetch, AskUserQuestion
5
6
  ---
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  description: "Create a standards-compliant Jira issue (Task / Bug / Story): asks the type, mines project conventions, drafts from a standard template with auto-sizing sections, full preview + explicit approval before create."
3
+ description-tr: "Standartlara uygun Jira issue oluşturur (Task / Bug / Story): türü sorar, proje konvansiyonlarını çıkarır, otomatik boyutlanan bölümlerle standart şablondan taslak hazırlar, oluşturmadan önce tam önizleme + açık onay alır."
3
4
  argument-hint: "[\"<free-text description>\"] [figma-url] [swagger-url] - all optional, asked interactively when missing"
4
5
  ---
5
6
 
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  description: "Fast development mode: Init → Dev (Opus) → Test → Commit → Report. Analysis, planning, and review phases are skipped."
3
+ description-tr: "Hızlı geliştirme modu: Init → Dev (Opus) → Test → Commit → Report. Analiz, planlama ve review fazları atlanır."
3
4
  ---
4
5
 
5
6
  # multi-agent dev - Fast Development Mode (--dev)
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  description: "Fastest mode: Dev (Opus) plus Autopilot. Init → Dev → Commit → Report with zero confirmations."
3
+ description-tr: "En hızlı mod: Dev (Opus) + Autopilot. Init → Dev → Commit → Report, sıfır onay."
3
4
  ---
4
5
 
5
6
  # multi-agent dev autopilot - Fastest Path
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  description: "Fast mode + local - Init → Dev(Opus) → Commit → Report, no worktree."
3
+ description-tr: "Hızlı mod + lokal - Init → Dev(Opus) → Commit → Report, worktree yok."
3
4
  allowed-tools: Agent, Bash, Read, Write, Edit, Glob, Grep, TaskCreate, TaskUpdate, TaskList, TaskGet, AskUserQuestion, WebFetch, Skill
4
5
  ---
5
6
 
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  description: "Fastest + local - Dev(Opus) + autopilot, no worktree, zero interaction."
3
+ description-tr: "En hızlı + lokal - Dev(Opus) + autopilot, worktree yok, sıfır etkileşim."
3
4
  allowed-tools: Agent, Bash, Read, Write, Edit, Glob, Grep, TaskCreate, TaskUpdate, TaskList, TaskGet, WebFetch, Skill
4
5
  ---
5
6
 
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  description: "Map Phase 4 triage findings to branch diff lines. Read-only post-hoc command, used after review to answer 'which finding lines up with which code change'."
3
+ description-tr: "Faz 4 triyaj bulgularını branch diff satırlarına eşler. Review sonrası kullanılan salt-okunur komut: hangi bulgu hangi kod değişikliğine denk geliyor sorusunu cevaplar."
3
4
  argument-hint: "[#task-id | --triage <path> | --state <path>] [--branch <name>] [--base <name>]"
4
5
  ---
5
6
 
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  description: "Continue already-done LOCAL work through the pipeline tail: Review → Build+Test → Commit/PR → Report (technical analysis + Jira test-scenario comment). No dev phase."
3
+ description-tr: "Halihazırda bitmiş LOKAL işi pipeline kuyruğundan geçirir: Review → Build+Test → Commit/PR → Report (teknik analiz + Jira test-senaryosu yorumu). Dev fazı yok."
3
4
  allowed-tools: Agent, Bash, Read, Write, Edit, Glob, Grep, TaskCreate, TaskUpdate, TaskList, TaskGet, AskUserQuestion, WebFetch, WebSearch, Skill
4
5
  ---
5
6
 
@@ -1,5 +1,6 @@
1
1
  ---
2
- description: "Sweep leftover /tmp scratch (picker state, review diffs, channel payloads, analysis drafts) from past runs. Dry-run first; confirms before deleting."
2
+ description: "Sweep leftover /tmp scratch (picker state, review diffs, channel payloads, analysis drafts) and worktree residue (orphan .worktrees dirs, gitlink index entries) from past runs. Dry-run first; confirms before deleting."
3
+ description-tr: "Geçmiş çalışmalardan kalan /tmp scratch'ini (picker durumu, review diff'leri, kanal payload'ları, analiz taslakları) ve worktree kalıntılarını (sahipsiz .worktrees klasörleri, gitlink index kayıtları) süpürür. Önce dry-run; silmeden önce onay alır."
3
4
  argument-hint: "[--older-than=<minutes>] [--yes] - dry-run unless confirmed"
4
5
  ---
5
6
 
@@ -48,11 +49,36 @@ deletes nothing until you confirm.
48
49
  5. **Report** - echo the `══ garbage-collect: removed N item(s), freed ~X ══`
49
50
  summary line.
50
51
 
52
+ 6. **Worktree residue sweep (second phase)** - when the current directory is
53
+ a git repo, also preview worktree leftovers:
54
+
55
+ ```bash
56
+ bash $HOME/.claude/scripts/gc-worktrees.sh ${ARGUMENTS}
57
+ ```
58
+
59
+ This covers: stale worktree admin entries (`git worktree prune`, applied
60
+ immediately - it only drops bookkeeping for dirs that are already gone),
61
+ orphan `.worktrees/*` dirs no longer registered as worktrees, gitlink
62
+ residue in the index (`.worktrees/{id}` recorded as a "Subproject commit"
63
+ entry by a pre-guard `git add -A`), and a missing `.worktrees/` line in
64
+ `.git/info/exclude`. Registered, healthy worktrees are NEVER touched -
65
+ those belong to `/multi-agent:finish` / `/multi-agent:kill`.
66
+
67
+ - Output says `nothing to do` -> skip silently, no question.
68
+ - Otherwise surface a second `AskUserQuestion` (in `outputLanguage`):
69
+ `question`: "Apply the listed worktree cleanups?" (include the dry-run
70
+ lines), `header`: "Worktrees", options `{ label: "Apply cleanups" }` /
71
+ `{ label: "Cancel", description: "Keep everything, change nothing" }`.
72
+ - On confirm, re-run with `--yes` and echo its summary line. If a gitlink
73
+ was unstaged, remind the user the removal still needs a commit.
74
+
51
75
  ## Notes
52
76
 
53
77
  - An in-flight analysis keeps its drafts in `/tmp/analysis-<slug>-<timestamp>/`
54
78
  and `/multi-agent:resume` re-uses them. If a run is paused at
55
79
  `awaiting_output_decision`, pass `--older-than=<minutes>` so fresh drafts are
56
80
  spared, or finish the run first.
57
- - This only touches `/tmp` scratch. Persistent per-task logs live under
58
- `~/.claude/logs/multi-agent/` and are cleaned by `/multi-agent:prune-logs`.
81
+ - The /tmp phase only touches `/tmp` scratch; the worktree phase only touches
82
+ the current repo's `.worktrees/` residue and index. Persistent per-task logs
83
+ live under `~/.claude/logs/multi-agent/` and are cleaned by
84
+ `/multi-agent:prune-logs`.
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  description: "Multi-agent pipeline usage guide - renders in EN or TR per prefs.global.outputLanguage (falls back to promptLanguage for backward compatibility)."
3
+ description-tr: "Multi-agent pipeline kullanım kılavuzu - prefs.global.outputLanguage'e göre EN veya TR render edilir (geriye uyumluluk için promptLanguage'e düşer)."
3
4
  ---
4
5
 
5
6
  # multi-agent help
@@ -126,7 +127,7 @@ Setup & Maintenance:
126
127
  /multi-agent:stack <id> Select stack by enabling the matching marketplace plugin(s) (ios / android / mobile / backend / frontend / fullstack / all)
127
128
  /multi-agent:sync Sync ecosystem (Claude Code + Copilot CLI + pipeline + website)
128
129
  /multi-agent:update Pull latest pipeline + reinstall + run migrations
129
- /multi-agent:delete Uninstall pipeline from every CLI (Keychain tokens left intact, double confirm)
130
+ /multi-agent:uninstall Uninstall pipeline from every CLI (--all-data also clears settings + logs; Keychain tokens always intact, double confirm)
130
131
 
131
132
  ------------------------------------------------------------
132
133
 
@@ -340,7 +341,7 @@ Setup & Maintenance:
340
341
  /multi-agent:stack <id> Stack'i eşleşen marketplace plugin'i etkinleştirerek seç (ios / android / mobile / backend / frontend / fullstack / all)
341
342
  /multi-agent:sync Ekosistemi senkronize et (Claude Code + Copilot CLI + pipeline + website)
342
343
  /multi-agent:update En son pipeline'ı çek + reinstall + migration çalıştır
343
- /multi-agent:delete Pipeline'ı tüm CLI'lerden kaldır (Keychain token dokunulmaz, çift onay)
344
+ /multi-agent:uninstall Pipeline'ı tüm CLI'lerden kaldır (--all-data ayar + logları da siler; Keychain token her zaman dokunulmaz, çift onay)
344
345
 
345
346
  ------------------------------------------------------------
346
347
 
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  description: "List unassigned GitHub issues, pick one, auto-assign, and launch the multi-agent pipeline."
3
+ description-tr: "Atanmamış GitHub issue'larını listeler, birini seçtirir, otomatik atar ve multi-agent pipeline'ı başlatır."
3
4
  argument-hint: "[autopilot] - optional: run the pipeline without confirmations"
4
5
  ---
5
6
 
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  description: "List open Jira issues, pick one, and launch the multi-agent pipeline."
3
+ description-tr: "Açık Jira issue'larını listeler, birini seçtirir ve multi-agent pipeline'ı başlatır."
3
4
  argument-hint: "[autopilot] - optional: run the pipeline without confirmations"
4
5
  ---
5
6
 
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  description: "Stop the given task, then remove its worktree and branch. Asks for confirmation."
3
+ description-tr: "Verilen görevi durdurur, ardından worktree'sini ve branch'ini kaldırır. Onay ister."
3
4
  argument-hint: "#id - task ID to delete (e.g. #2)"
4
5
  ---
5
6
 
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  description: "Toggle outputLanguage (assistant explanations). promptLanguage is fixed to English. External payloads stay English."
3
+ description-tr: "outputLanguage'i değiştirir (asistan açıklamaları). promptLanguage İngilizce sabittir. Dış payload'lar İngilizce kalır."
3
4
  argument-hint: "[en|tr] - sets outputLanguage; omit for interactive picker; use 'output en|tr' for explicit form"
4
5
  ---
5
6
 
@@ -16,7 +17,9 @@ Two-axis language preference for the pipeline:
16
17
 
17
18
  **Why promptLanguage is fixed:** Pipeline picker UI, confirmation prompts, and error messages are authored in English to keep tooling consistent across CLIs. Mixing Turkish prompts into otherwise-English skill output looks inconsistent. Only the assistant's free-form replies follow `outputLanguage`.
18
19
 
19
- **Always English regardless of either field**: commit messages, PR titles/bodies, Jira comments, wiki pages, reviewer/triage system prompts, agent-log.md payloads, skill-picker / confirmation / error UI exposed by the CLI host.
20
+ **Always English regardless of either field**: commit messages, PR titles/bodies, Jira comments, wiki pages, reviewer/triage system prompts, agent-log.md payloads, confirmation / error UI exposed by the CLI host.
21
+
22
+ **Follows outputLanguage (localized at install/toggle time)**: the slash-command picker `description` shown by the CLI host autocomplete. Repo and npm files always keep the English `description:`; files shipping a `description-tr:` line get swapped in the INSTALLED `~/.claude/commands/multi-agent/` tree by `localize-commands.mjs` (reversible via a `description-en:` sidecar). `/multi-agent:sync` restores English before mirroring back to the repo.
20
23
 
21
24
  ## Invocations
22
25
 
@@ -73,6 +76,22 @@ jq --arg ol "$NEW_OUTPUT" '
73
76
  ' "$PREFS" > "$TMP" && mv "$TMP" "$PREFS"
74
77
  ```
75
78
 
79
+ ### Localize picker descriptions
80
+
81
+ After a successful write, swap the installed command descriptions to match the
82
+ new outputLanguage (repo files are never touched; the swap is reversible):
83
+
84
+ ```bash
85
+ if [ "$NEW_OUTPUT" = "tr" ]; then
86
+ node "$HOME/.claude/scripts/localize-commands.mjs" apply
87
+ else
88
+ node "$HOME/.claude/scripts/localize-commands.mjs" restore
89
+ fi
90
+ ```
91
+
92
+ Note: the CLI host caches the picker list per session; descriptions refresh on
93
+ the next session start.
94
+
76
95
  ### Confirmation echo
77
96
 
78
97
  Render in the **new** outputLanguage:
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  description: "Full pipeline in local mode - no worktree, runs directly on the current branch."
3
+ description-tr: "Tam pipeline lokal modda - worktree yok, doğrudan mevcut branch üzerinde çalışır."
3
4
  allowed-tools: Agent, Bash, Read, Write, Edit, Glob, Grep, TaskCreate, TaskUpdate, TaskList, TaskGet, AskUserQuestion, WebFetch, WebSearch, Skill
4
5
  ---
5
6
 
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  description: "Full pipeline + local + autopilot - no worktree, no confirmations; runs 7 phases (User Test skipped) end-to-end on the current branch."
3
+ description-tr: "Tam pipeline + lokal + autopilot - worktree yok, onay yok; 7 fazı (Kullanıcı Testi atlanır) mevcut branch üzerinde uçtan uca koşar."
3
4
  argument-hint: '"task" - issue URL, Jira ID, free-text, or #id (for resume)'
4
5
  allowed-tools: Agent, Bash, Read, Write, Edit, Glob, Grep, TaskCreate, TaskUpdate, TaskList, TaskGet, AskUserQuestion, WebFetch, WebSearch, Skill
5
6
  ---
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  description: "Show the agent-log.md for the given task. With no ID, shows the most recent task."
3
+ description-tr: "Verilen görevin agent-log.md dosyasını gösterir. ID verilmezse en son görevi gösterir."
3
4
  argument-hint: "[#id] - optional: task ID (e.g. #3). If omitted, the most recent task is used."
4
5
  ---
5
6
 
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  description: "Switch to the active task's branch and prepare it for manual testing in Xcode. Phase 5 standalone (the UI Bug Hunter lives at /multi-agent:test)."
3
+ description-tr: "Aktif görevin branch'ine geçer ve Xcode'da manuel test için hazırlar. Faz 5'in bağımsız hali (UI Bug Hunter /multi-agent:test'te)."
3
4
  ---
4
5
 
5
6
  # multi-agent manual-test - Phase 5 Manual Test Mode
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  description: "Delete per-task project logs under ~/.claude/logs/multi-agent (filter by age/project/task). Audit trail + metrics are preserved. Dry-run first; confirms before deleting."
3
+ description-tr: "~/.claude/logs/multi-agent altındaki görev bazlı proje loglarını siler (yaş/proje/görev filtresi). Denetim izi + metrikler korunur. Önce dry-run; silmeden önce onay alır."
3
4
  argument-hint: "[--older-than=<days>] [--project=<name>] [--task=<id>] [--yes]"
4
5
  ---
5
6