@mmerterden/multi-agent-pipeline 14.2.2 → 15.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 (132) hide show
  1. package/CHANGELOG.md +186 -6
  2. package/README.md +19 -12
  3. package/README.tr.md +19 -12
  4. package/SECURITY.md +43 -0
  5. package/docs/FIGMA_PIPELINE.md +3 -3
  6. package/docs/adr/0006-skills-core-external-split.md +1 -1
  7. package/docs/adr/0007-multi-tool-adapter-framework.md +1 -1
  8. package/docs/adr/0009-claude-stack-skills-plugin-only.md +31 -0
  9. package/docs/adr/README.md +1 -0
  10. package/docs/architecture.md +13 -13
  11. package/docs/ecosystem.md +31 -31
  12. package/docs/features.md +5 -5
  13. package/index.js +6 -1
  14. package/install/_codex-agents.mjs +11 -2
  15. package/install/_common.mjs +109 -3
  16. package/install/_dev-only-files.mjs +0 -1
  17. package/install/_platform-filter.mjs +54 -113
  18. package/install/_plugin-skills.mjs +36 -36
  19. package/install/claude.mjs +251 -61
  20. package/install/codex.mjs +28 -6
  21. package/install/copilot.mjs +69 -9
  22. package/install/index.mjs +9 -3
  23. package/install/templates/codex-instructions.md +1 -1
  24. package/install/templates/copilot-instructions.md +3 -3
  25. package/package.json +2 -3
  26. package/pipeline/commands/multi-agent/SKILL.md +2 -0
  27. package/pipeline/commands/multi-agent/analysis/SKILL.md +3 -3
  28. package/pipeline/commands/multi-agent/analysis-resolve/SKILL.md +2 -2
  29. package/pipeline/commands/multi-agent/build-optimize/SKILL.md +9 -9
  30. package/pipeline/commands/multi-agent/channels/SKILL.md +1 -1
  31. package/pipeline/commands/multi-agent/complaint-analysis/SKILL.md +186 -0
  32. package/pipeline/commands/multi-agent/dev/SKILL.md +1 -1
  33. package/pipeline/commands/multi-agent/dev-autopilot/SKILL.md +1 -1
  34. package/pipeline/commands/multi-agent/dev-local/SKILL.md +1 -1
  35. package/pipeline/commands/multi-agent/dev-local-autopilot/SKILL.md +1 -1
  36. package/pipeline/commands/multi-agent/garbage-collect/SKILL.md +1 -1
  37. package/pipeline/commands/multi-agent/help/SKILL.md +19 -4
  38. package/pipeline/commands/multi-agent/ios-coding-standard/SKILL.md +2 -2
  39. package/pipeline/commands/multi-agent/jira/SKILL.md +1 -1
  40. package/pipeline/commands/multi-agent/prune-prompts/SKILL.md +81 -0
  41. package/pipeline/commands/multi-agent/refactor/SKILL.md +36 -1
  42. package/pipeline/commands/multi-agent/resume/SKILL.md +1 -1
  43. package/pipeline/commands/multi-agent/{ship → resume-local}/SKILL.md +8 -8
  44. package/pipeline/commands/multi-agent/scan/SKILL.md +1 -1
  45. package/pipeline/commands/multi-agent/setup/SKILL.md +5 -5
  46. package/pipeline/commands/multi-agent/stack/SKILL.md +62 -40
  47. package/pipeline/commands/multi-agent/store-ready/SKILL.md +3 -3
  48. package/pipeline/commands/multi-agent/sync/SKILL.md +18 -11
  49. package/pipeline/commands/multi-agent/testflight-validation/SKILL.md +1 -1
  50. package/pipeline/commands/multi-agent/uninstall/SKILL.md +2 -0
  51. package/pipeline/commands/multi-agent/update/SKILL.md +4 -4
  52. package/pipeline/lib/issue-fetcher.sh +1 -1
  53. package/pipeline/lib/parse-complaints.sh +316 -0
  54. package/pipeline/multi-agent-refs/channels/wiki.md +3 -3
  55. package/pipeline/multi-agent-refs/complaint-analysis-template.md +99 -0
  56. package/pipeline/multi-agent-refs/component-dispatch.md +6 -6
  57. package/pipeline/multi-agent-refs/cross-cli-contract.md +16 -16
  58. package/pipeline/multi-agent-refs/features/external-context-injection.md +1 -1
  59. package/pipeline/multi-agent-refs/features/stack-skill-routing.md +5 -5
  60. package/pipeline/multi-agent-refs/generate-issue.md +1 -1
  61. package/pipeline/multi-agent-refs/phases/modes.md +1 -1
  62. package/pipeline/multi-agent-refs/phases/operations.md +7 -1
  63. package/pipeline/multi-agent-refs/phases/phase-0-init.md +1 -1
  64. package/pipeline/multi-agent-refs/phases/phase-1-analysis.md +7 -7
  65. package/pipeline/multi-agent-refs/phases/phase-2-planning.md +5 -5
  66. package/pipeline/multi-agent-refs/phases/phase-3-dev.md +3 -3
  67. package/pipeline/multi-agent-refs/phases/phase-4-review.md +12 -12
  68. package/pipeline/multi-agent-refs/phases/phase-5-test.md +1 -1
  69. package/pipeline/multi-agent-refs/phases/phase-7-report.md +6 -0
  70. package/pipeline/multi-agent-refs/tracker-contract.md +3 -2
  71. package/pipeline/multi-agent-refs/wiki-capture.md +2 -2
  72. package/pipeline/preferences-template.json +18 -5
  73. package/pipeline/rules/figma-pipeline.md +2 -2
  74. package/pipeline/schemas/agent-state.schema.json +1 -1
  75. package/pipeline/schemas/complaint-analysis-spec.schema.json +216 -0
  76. package/pipeline/schemas/migrations/prefs-2.5.0-to-2.6.0.mjs +46 -0
  77. package/pipeline/schemas/prefs.schema.json +296 -66
  78. package/pipeline/schemas/token-budget.json +2 -2
  79. package/pipeline/scripts/README.md +4 -3
  80. package/pipeline/scripts/_stack-routing.mjs +79 -0
  81. package/pipeline/scripts/audit-log-rotate.sh +4 -1
  82. package/pipeline/scripts/build-skills-index.mjs +11 -0
  83. package/pipeline/scripts/build-stack-plugins.mjs +28 -60
  84. package/pipeline/scripts/check-derived-drift.mjs +55 -28
  85. package/pipeline/scripts/gc-worktrees.sh +4 -1
  86. package/pipeline/scripts/gen-skills-index.mjs +1 -1
  87. package/pipeline/scripts/match-skills.mjs +12 -2
  88. package/pipeline/scripts/migrate-prefs.mjs +33 -21
  89. package/pipeline/scripts/phase-tracker.sh +32 -5
  90. package/pipeline/scripts/phase0-exit-gate.mjs +3 -2
  91. package/pipeline/scripts/run-aggregator.mjs +7 -2
  92. package/pipeline/scripts/scan-agent-config.sh +1 -1
  93. package/pipeline/scripts/skill-conformance.mjs +165 -30
  94. package/pipeline/scripts/smoke-cross-cli-behavior.sh +1 -1
  95. package/pipeline/scripts/test-gap-rules/android.json +25 -0
  96. package/pipeline/scripts/test-gap-rules/ios.json +34 -0
  97. package/pipeline/scripts/test-gap-rules/node.json +29 -0
  98. package/pipeline/scripts/test-gap-rules/python.json +25 -0
  99. package/pipeline/scripts/uninstall.mjs +160 -11
  100. package/pipeline/scripts/usage-report.mjs +426 -0
  101. package/pipeline/scripts/validate-complaint-doc.mjs +250 -0
  102. package/pipeline/scripts/validate-reviewer.mjs +9 -3
  103. package/pipeline/skills/.skill-manifest.json +156 -108
  104. package/pipeline/skills/.skills-index.json +449 -12
  105. package/pipeline/skills/shared/README.md +14 -10
  106. package/pipeline/skills/shared/core/multi-agent-analysis-resolve/SKILL.md +1 -1
  107. package/pipeline/skills/shared/core/multi-agent-build-optimize/SKILL.md +1 -1
  108. package/pipeline/skills/shared/core/multi-agent-complaint-analysis/SKILL.md +49 -0
  109. package/pipeline/skills/shared/core/multi-agent-dev/SKILL.md +1 -1
  110. package/pipeline/skills/shared/core/multi-agent-dev-autopilot/SKILL.md +1 -1
  111. package/pipeline/skills/shared/core/multi-agent-dev-local/SKILL.md +1 -1
  112. package/pipeline/skills/shared/core/multi-agent-dev-local-autopilot/SKILL.md +1 -1
  113. package/pipeline/skills/shared/core/multi-agent-ios-coding-standard/SKILL.md +2 -2
  114. package/pipeline/skills/shared/core/multi-agent-prune-prompts/SKILL.md +83 -0
  115. package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +153 -90
  116. package/pipeline/skills/shared/core/{multi-agent-ship → multi-agent-resume-local}/SKILL.md +6 -6
  117. package/pipeline/skills/shared/core/multi-agent-stack/SKILL.md +89 -22
  118. package/pipeline/skills/shared/core/multi-agent-store-ready/SKILL.md +1 -1
  119. package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +8 -8
  120. package/pipeline/skills/shared/core/multi-agent-testflight-validation/SKILL.md +1 -1
  121. package/pipeline/skills/shared/core/multi-agent-update/SKILL.md +1 -1
  122. package/pipeline/skills/shared/external/ios-coding-standard/modules/_TEMPLATE.yml +2 -2
  123. package/pipeline/skills/shared/external/ios-coding-standard/references/rules.yml +368 -33
  124. package/pipeline/skills/shared/external/ios-coding-standard/references/swiftlint.draft.yml +1 -2
  125. package/pipeline/skills/shared/external/ios-coding-standard/scripts/check_structure.py +765 -0
  126. package/pipeline/skills/shared/external/ios-module-structure/SKILL.md +75 -0
  127. package/pipeline/skills/shared/external/ios-module-structure/modules/_TEMPLATE.yml +131 -0
  128. package/pipeline/skills/shared/external/ios-module-structure/references/rules.yml +559 -0
  129. package/pipeline/skills/shared/external/ios-module-structure/scripts/check_structure.py +765 -0
  130. package/pipeline/skills/shared/external/localization-reuse-map/example-mapping.json +53 -10
  131. package/pipeline/skills/shared/external/localization-reuse-map/reference/sources-and-recipes.md +4 -3
  132. package/pipeline/skills/skills-index.md +7 -4
@@ -6,14 +6,14 @@
6
6
 
7
7
  ---
8
8
 
9
- ## 1. Command Inventory (49 commands)
9
+ ## 1. Command Inventory (51 commands)
10
10
 
11
11
  ```
12
- analysis, analysis-resolve, autopilot, build-optimize, channels, create-jira, design-check, dev,
12
+ analysis, analysis-resolve, autopilot, build-optimize, channels, complaint-analysis, create-jira, design-check, dev,
13
13
  dev-autopilot, dev-local, dev-local-autopilot, diff-explain, forget, garbage-collect,
14
14
  help, ios-coding-standard, issue, jira, kill, language, local,
15
- local-autopilot, log, manual-test, prune-logs, purge, refactor, resume, review, review-issue, review-jira,
16
- routines, save, scan, search, setup, ship, stack, status, store-ready, sync, test, test-accessibility,
15
+ local-autopilot, log, manual-test, prune-logs, prune-prompts, purge, refactor, resume, review, review-issue, review-jira,
16
+ routines, save, scan, search, setup, resume-local, stack, status, store-ready, sync, test, test-accessibility,
17
17
  test-dark-mode, test-dynamic-type, test-screenshots, testflight-validation, uninstall, update
18
18
  ```
19
19
 
@@ -23,8 +23,8 @@ Categories:
23
23
  - **Issue generator** (one-shot, no worktree, asks type Task/Bug/Story, hard approval gate before create): `create-jira`
24
24
  - **Full 8-phase modes**: `autopilot`, `local`, `local-autopilot`
25
25
  - **Fast modes** (Init -> Dev(Opus) -> Review -> Commit -> Report): `dev`, `dev-autopilot`, `dev-local`, `dev-local-autopilot`
26
- - **Tail modes** (run the pipeline tail over already-done local work): `ship`
27
- - **Ops commands** (one-shot, no worktree): `status`, `log`, `kill`, `purge`, `uninstall`, `resume`, `review`, `review-jira`, `review-issue`, `analysis`, `analysis-resolve`, `build-optimize`, `channels`, `scan`, `search`, `diff-explain`, `garbage-collect`, `prune-logs`
26
+ - **Tail modes** (run the pipeline tail over already-done local work): `resume-local`
27
+ - **Ops commands** (one-shot, no worktree): `status`, `log`, `kill`, `purge`, `uninstall`, `resume`, `review`, `review-jira`, `review-issue`, `analysis`, `analysis-resolve`, `complaint-analysis`, `build-optimize`, `channels`, `scan`, `search`, `diff-explain`, `garbage-collect`, `prune-logs`, `prune-prompts`
28
28
  - **Local audits** (worktree only to build; no commit, push, PR or channels): `design-check`, `testflight-validation`, `ios-coding-standard`. `testflight-validation` additionally never invokes `altool --upload-app` - a validation run must not be able to ship a build by accident.
29
29
  - **Meta-ops**: `setup`, `sync`, `update`, `help`, `refactor`, `test`, `stack`, `manual-test`, `language`
30
30
  - **Routines** (user-defined routine registry; the routines they create are local-only and never synced): `save`, `routines`, `forget`
@@ -33,7 +33,7 @@ Categories:
33
33
 
34
34
  ### 1.1 Figma / component work (plugin-based on Claude Code; NOT parity-enforced)
35
35
 
36
- Component work is **no longer a bundled pipeline skill set**. Claude Code dispatches `taskType === "component"` to the enabled `ai-<platform>-engineering-toolkit` **marketplace plugin** (`create-component`, fallback `create-ui-component`) via the Skill tool - full contract in `$HOME/.claude/multi-agent-refs/component-dispatch.md`. The pipeline no longer ships `pipeline/skills/figma-ios|figma-android|figma-common`; the pipeline-unique component skills (iterate loops, performance harness, validate/review, commit, adapters, wiki) were absorbed into the `ai-ios-engineering-toolkit` plugin so component skills live in one place.
36
+ Component work is **no longer a bundled pipeline skill set**. Claude Code dispatches `taskType === "component"` to the enabled `ai-<platform>-toolkit` **marketplace plugin** (`create-component`, fallback `create-ui-component`) via the Skill tool - full contract in `$HOME/.claude/multi-agent-refs/component-dispatch.md`. The pipeline no longer ships `pipeline/skills/figma-ios|figma-android|figma-common`; the pipeline-unique component skills (iterate loops, performance harness, validate/review, commit, adapters, wiki) were absorbed into the `ai-ios-toolkit` plugin so component skills live in one place.
37
37
 
38
38
  **How each host receives the plugin's skills.** Only Claude Code loads the marketplace
39
39
  plugin natively. The other two are served by the installer, so all three end up with the
@@ -79,11 +79,11 @@ Two parallel shared/core skills under `pipeline/skills/shared/core/` wrap extern
79
79
  | `apple-archive-compliance` | `pipeline/skills/shared/core/apple-archive-compliance/` | `ios_app_store_audit` MCP tool (in `@mmerterden/dev-toolkit-mcp` ≥ v2.9.0) | 18 (Apple ITMS + App Store Review Guidelines) |
80
80
  | `google-play-compliance` | `pipeline/skills/shared/core/google-play-compliance/` | bundletool + aapt2 + apksigner | 21 (4 categories: Technical / Security / Privacy / Hygiene) |
81
81
 
82
- Both skills are wired to 4 consumers: `/multi-agent:test "store-ready"` (primary), Phase 4 Security Auditor (`pipeline/agents/security-auditor.md`), `/multi-agent:review` + SKILL.md counterpart, `/multi-agent:channels` PR-body auto-augmentation. Contract enforced by `smoke-compliance-skills.sh` (46 assertions).
82
+ Both skills are wired to 4 consumers: `/multi-agent:test "store-ready"` (primary), Phase 4 Security Auditor (`pipeline/agents/security-auditor.md`), `/multi-agent:review` + SKILL.md counterpart, `/multi-agent:channels` PR-body auto-augmentation. Contract enforced by `smoke-compliance-skills.sh`.
83
83
 
84
84
  ### 1.3 Figma-skill routing from multi-agent (superseded)
85
85
 
86
- Superseded by section 1.1: Claude Code resolves component dispatch to the marketplace plugin (dual-name `create-component`/`create-ui-component`; full contract in `$HOME/.claude/multi-agent-refs/component-dispatch.md`); Copilot CLI uses its local `~/.copilot/skills/figma-*` copies. No shared filesystem-path routing table or figma-skill frontmatter/inventory parity remains under enforcement.
86
+ Superseded by section 1.1: Claude Code resolves component dispatch to the marketplace plugin (dual-name `create-component`/`create-ui-component`; full contract in `$HOME/.claude/multi-agent-refs/component-dispatch.md`); Copilot CLI receives the enabled plugin's authored skills through `install/copilot.mjs` (section 1.1), not a standalone `figma-*` tree - the installer prunes those. No shared filesystem-path routing table or figma-skill frontmatter/inventory parity remains under enforcement.
87
87
 
88
88
  ---
89
89
 
@@ -164,10 +164,10 @@ skills took the block from 11 skills / 4,710 bytes to 83 skills / 22,111 bytes
164
164
  only **75 of the 142** surfaced, **and an unrelated user-scope skill was evicted**.
165
165
  Removing the plugin brought it back.
166
166
 
167
- So shipping the 49 sub-commands as peer skills on Codex would silently lose
167
+ So shipping every sub-command as a peer skill on Codex would silently lose
168
168
  pipeline commands next to any stack toolkit, with no error anywhere. The pipeline
169
- therefore contributes **exactly one** skill on Codex (`multi-agent`) and keeps the
170
- 49 sub-command specs as reference files that cost nothing until read.
169
+ therefore contributes **exactly one** skill on Codex (`multi-agent`) and keeps every
170
+ sub-command spec as a reference file that costs nothing until read.
171
171
 
172
172
  **Do not "fix" this by adding per-command skills on Codex.** The layout is
173
173
  capability-derived, and `smoke-install-layout.sh` fails if the Codex skills tree
@@ -176,7 +176,7 @@ gains a second pipeline entry.
176
176
  ### Parity axis differs per host
177
177
 
178
178
  Claude Code and Copilot CLI are compared on their **skill directory sets**. Codex is
179
- compared on its **ref set**: the 49 command specs must all exist under
179
+ compared on its **ref set**: every command spec must exist under
180
180
  `~/.codex/multi-agent-refs/commands/<cmd>/SKILL.md`, and
181
181
  `smoke-codex-install.sh` asserts the count against the source tree. Comparing Codex
182
182
  on skill directories would demand exactly the layout that breaks it.
@@ -312,9 +312,9 @@ For clipboard ops, callers still gate with `if command -v pbpaste >/dev/null; th
312
312
 
313
313
  This contract is validated by:
314
314
 
315
- - `smoke-cross-cli-behavior.sh` - asserts all 38 commands behave identically, pulls from Section 2 (placeholder vocab), Section 5 (argument parsing), Section 6 (output formats); also regression-locks the 6-persona agent deployment
316
- - `smoke-commands-skills-parity.sh` (50 assertions) - enforces colon-form command ↔ dash-form skill directory parity
317
- - `smoke-compliance-skills.sh` (45 assertions) - enforces store-compliance skill catalog + 4 consumer wiring
315
+ - `smoke-cross-cli-behavior.sh` - asserts every command behaves identically, pulls from Section 2 (placeholder vocab), Section 5 (argument parsing), Section 6 (output formats); also regression-locks the 8-persona agent deployment
316
+ - `smoke-commands-skills-parity.sh` (two assertions per command) - enforces colon-form command ↔ dash-form skill directory parity
317
+ - `smoke-compliance-skills.sh` - enforces store-compliance skill catalog + 4 consumer wiring
318
318
  - `smoke-personal-data.sh` - extended in 0.5.5 to treat deprecated placeholders (`{github-username}`, `{your-website}`, `{website-repo}`) as leaks; adds `mmerterden` to public-handle blocklist for generic docs
319
319
  - `pre-push-check.sh` - runs the cross-CLI + personal-data smoke tests before any push that touches `pipeline/skills/shared/core/` commands
320
320
  - `sync.md` (Section 2 REPO step) - genericization lookup table MUST match Section 2 of this contract
@@ -22,7 +22,7 @@ One fetcher per type. Each fetcher emits a normalized JSON view that the analysi
22
22
  |---|---|---|
23
23
  | `crashlytics` | `~/.claude/lib/fetch-crashlytics.sh <url>` (already invoked in Phase 0 Step 1b.1 for the legacy `state.crashContext` field; Phase 1 reads that field directly) | `state.crashContext` |
24
24
  | `fortify` | `~/.claude/lib/fetch-fortify.sh <url>` (already invoked in Phase 0 Step 1b.2 for the legacy `state.fortifyFinding` field; Phase 1 reads that field, Phase 4 reads the full payload for the security gate) | `state.fortifyFinding` |
25
- | `graylog` | `~/.claude/lib/fetch-graylog.sh --trx <id>` / `--conv <id>` (already invoked in Phase 0 Step 1b.3 for the `state.graylogContext` field; Phase 1 reads that field directly). Diagnostic logs, **advisory only** - no Phase 4 gate, no generated task | `state.graylogContext` |
25
+ | `graylog` | `~/.claude/lib/fetch-graylog.sh --trx <id>` / `--conv <id>` (already invoked in Phase 0 Step 1b.3 for the `state.graylogContext` field; Phase 1 reads that field directly). Diagnostic logs, **advisory only** - no Phase 4 gate, no generated task. Exception: `/multi-agent:complaint-analysis` consumes Graylog as its **primary evidence** by design (its Locked 1); the advisory-only rule scopes to the dev pipeline | `state.graylogContext` |
26
26
  | `swagger` | `~/.claude/lib/fetch-swagger.sh <url>` → endpoints[], request/response examples | `state.fetchedContext.swagger[]` |
27
27
  | `confluence` | `~/.claude/lib/fetch-confluence.sh <url>` → page body, code blocks, extracted API contracts | `state.fetchedContext.confluence[]` |
28
28
  | `figma` | no standalone fetcher - resolve via the Figma 3-tier chain (Tier 1 MCP tools, Tier 2 `~/.claude/lib/figma-screenshot.sh` + REST) when the task is a component; otherwise advisory only | `state.fetchedContext.figma[]` |
@@ -8,7 +8,7 @@ Phase 3 dispatched to the toolkit plugin for exactly one case, `taskType === "co
8
8
 
9
9
  That is the dev-side half of the gap `features/skill-conformance.md` closes on the review side. Review now asks "was this built to the rules it was supposed to follow"; without this step, the answer for a non-component task was "there were no declared rules, because nobody chose any".
10
10
 
11
- The fix is not a routing table in the pipeline. Each `ai-<platform>-engineering-toolkit` already ships one: an `index` skill whose description says *"Load this first when unsure which skill applies"*, holding a 30-plus row intent-to-skill map maintained alongside the skills it points at. A second copy in this repo would drift the moment the plugin shipped a new skill, and the pipeline's copy would be the stale one.
11
+ The fix is not a routing table in the pipeline. Each `ai-<platform>-toolkit` already ships one: an `index` skill whose description says *"Load this first when unsure which skill applies"*, holding a 30-plus row intent-to-skill map maintained alongside the skills it points at. A second copy in this repo would drift the moment the plugin shipped a new skill, and the pipeline's copy would be the stale one.
12
12
 
13
13
  So the pipeline's job is to **ask**, not to know.
14
14
 
@@ -22,8 +22,8 @@ Platform comes from the same mapping component dispatch uses, so the two cannot
22
22
 
23
23
  | `state.platform` / detected stack | Toolkit |
24
24
  |---|---|
25
- | ios, swift | `ai-ios-engineering-toolkit` |
26
- | android, kotlin | `ai-android-engineering-toolkit` |
25
+ | ios, swift | `ai-ios-toolkit` |
26
+ | android, kotlin | `ai-android-toolkit` |
27
27
  | anything else | no toolkit - step is a recorded no-op |
28
28
 
29
29
  The toolkit is enabled per repo (`.claude/settings.local.json` / `~/.claude/settings.json` `enabledPlugins`). **Not enabled is not an error here**, unlike component dispatch: a backend or web repo legitimately has no toolkit, and halting would make the pipeline unusable outside mobile. Record the no-op and continue.
@@ -45,9 +45,9 @@ Emit one progress line per loaded skill per `progress-contract.md`, so the user
45
45
  Append one `state.telemetry.skillCalls[]` entry per skill actually loaded:
46
46
 
47
47
  ```json
48
- {"skill": "ai-ios-engineering-toolkit:reference/architecture", "phase": 3,
48
+ {"skill": "ai-ios-toolkit:reference/architecture", "phase": 3,
49
49
  "targetFiles": ["Domains/Checkin/Sources/CheckinScene.swift"],
50
- "routedBy": "ai-ios-engineering-toolkit:index@0.13.0", "timestamp": "<ISO-8601>"}
50
+ "routedBy": "ai-ios-toolkit:index@0.13.0", "timestamp": "<ISO-8601>"}
51
51
  ```
52
52
 
53
53
  `routedBy` names the index and version that chose it. That is the difference between "the model happened to read a skill" and "the toolkit said this skill governs this task".
@@ -167,7 +167,7 @@ Write summary + description in `outputLanguage` from the type's **standard templ
167
167
  - **Always-present** sections are filled from `FREE_TEXT` (+ mining for Test Scenarios style). If an always-present section has no user content and cannot be derived, it stays an explicit open question for step 8 - it is not fabricated.
168
168
  - **Conditional** sections render only when their trigger fired (see the Standard templates table): Design Reference when `FIGMA_URL` set (`[Figma|{FIGMA_URL}]` + frame name + node id); API Contract when 6b produced a body; Screenshots when images were staged; Notes/Dependencies only with real content. Otherwise the heading is omitted entirely.
169
169
  - Bug: logs / stack traces / device+OS mentions from `FREE_TEXT` map into Environment and Screenshots / Logs; anything underivable becomes a step-8 question.
170
- - Run the humanizer skill on the description body.
170
+ - Run the `ai-common-toolkit:humanizer` skill on the description body.
171
171
  - Write the final body to `/tmp/generate-issue-$$.txt` (UTF-8, real newlines) for the `--rawfile` POST.
172
172
 
173
173
  ### [8/12] Clarifying questions (only genuinely unknown fields)
@@ -123,7 +123,7 @@ into a task breakdown. For analysis-driven screen work, /multi-agent or
123
123
 
124
124
  Autopilot picks 1 and logs the warning rather than asking.
125
125
 
126
- **The branch already carries the work.** When the change was developed outside the pipeline, or by hand, the `--dev` family is the wrong entry point: it will try to develop again. `/multi-agent:ship` puts the existing diff through the same review, adds a build+test success gate, opens the PR, and posts the Jira technical-analysis + test-scenario comment - without re-developing. Offer it when the working tree or branch is already ahead of the base with the task's changes.
126
+ **The branch already carries the work.** When the change was developed outside the pipeline, or by hand, the `--dev` family is the wrong entry point: it will try to develop again. `/multi-agent:resume-local` puts the existing diff through the same review, adds a build+test success gate, opens the PR, and posts the Jira technical-analysis + test-scenario comment - without re-developing. Offer it when the working tree or branch is already ahead of the base with the task's changes.
127
127
 
128
128
  ---
129
129
 
@@ -95,7 +95,13 @@ halt per the halt-visibility rule), `3` I/O error.
95
95
  Reads need no wrapper; the rename makes any read see either the old or the new
96
96
  document, never a truncated one.
97
97
 
98
- **Halt visibility (required, autopilot included).** A halt is never silent. Whenever a phase halts on a hard error (validator failed twice, no subagent returned, dispatch error past fallback, lock irrecoverable), in addition to the `agent-log.md` line: (a) write `state.status = "paused"` and `state.haltReason = "<phase>:<cause>"`; (b) record the cause on the tracker via `phase-tracker.sh meta <phase> halt "<cause>"` and `phase-tracker.sh update <phase> failed`; (c) emit one `>&2` alert line `HALT phase <N>: <cause> - resume with /multi-agent:resume #<id>`. Autopilot suppresses *confirmations*, not *halts* - the user must always be able to see why an unattended run stopped without reading the log.
98
+ **Halt visibility (required, autopilot included).** A halt is never silent. Whenever a phase halts on a hard error (validator failed twice, no subagent returned, dispatch error past fallback, lock irrecoverable), in addition to the `agent-log.md` line: (a) write `state.status = "paused"` and `state.haltReason = "<phase>:<cause>"`; (b) record the cause on the tracker via `phase-tracker.sh meta <phase> halt "<cause>"` and `phase-tracker.sh update <phase> failed`; (c) emit one `>&2` alert line `HALT phase <N>: <cause> - resume with /multi-agent:resume #<id>`; (d) if `prefs.global.usageLog.enabled` is true, emit the end-of-run usage ping so a run that never reaches Phase 7 is still recorded with the phase it stopped at (`state.currentPhase` + `haltReason`) - the emitter no-ops when logging is off or unconfigured:
99
+
100
+ ```bash
101
+ node $HOME/.claude/scripts/usage-report.mjs --state "$STATE_FILE" >/dev/null 2>&1 || true
102
+ ```
103
+
104
+ Autopilot suppresses *confirmations*, not *halts* - the user must always be able to see why an unattended run stopped without reading the log. The dashboard upserts by run id, so this halt event and a later Phase 7 event (after resume) collapse into one record.
99
105
 
100
106
  ### Pipeline Best Practices
101
107
 
@@ -519,7 +519,7 @@ Persist: `"taskType": "component" | "bugfix" | "feature" | "refactor" | "chore"`
519
519
 
520
520
  | Phase | Behavior change |
521
521
  | ------- | -------------------------------------------------------------------------------------------------------- |
522
- | Phase 3 | `component` → dispatch to the enabled `ai-<platform>-engineering-toolkit` plugin's `create-component` skill (fallback `create-ui-component`); else standard TDD |
522
+ | Phase 3 | `component` → dispatch to the enabled `ai-<platform>-toolkit` plugin's `create-component` skill (fallback `create-ui-component`); else standard TDD |
523
523
  | Phase 4 | `bugfix` → test coverage; `component` → accessibility+tokens; `refactor` → behavior preservation |
524
524
  | Phase 6 | `bugfix`/`hotfix` → `fix(...)` prefix; `feature`/`component` → `feat(...)`; `refactor` → `refactor(...)` |
525
525
  | Phase 7 | `component` → includes SubPhase breakdown |
@@ -114,13 +114,13 @@ Detect the project's tech stack to load appropriate skills and tooling throughou
114
114
 
115
115
  | Stack | Marker Files | Skills |
116
116
  | -------------- | ----------------------------------------------- | ------------------------------------------------------------ |
117
- | iOS/Swift | `.xcodeproj`, `Package.swift` | iOS skills, `swift-testing` |
118
- | Android/Kotlin | `build.gradle`, `build.gradle.kts` | `android-jetpack-compose-expert`, `kotlin-coroutines-expert` |
119
- | Python | `requirements.txt`, `pyproject.toml`, `Pipfile` | `fastapi-pro`, `api-patterns` |
120
- | Node.js | `package.json` | `nodejs-backend-patterns`, `api-patterns` |
121
- | Go | `go.mod` | `api-patterns`, `clean-code` |
122
- | Docker | `Dockerfile`, `docker-compose.yml` | `docker-expert` |
123
- | Monorepo | Multiple of above | `monorepo-architect` |
117
+ | iOS/Swift | `.xcodeproj`, `Package.swift` | `ai-ios-toolkit:*` skills, `ai-ios-toolkit:swift-testing` |
118
+ | Android/Kotlin | `build.gradle`, `build.gradle.kts` | `ai-android-toolkit:android-jetpack-compose-expert`, `ai-android-toolkit:kotlin-coroutines-expert` |
119
+ | Python | `requirements.txt`, `pyproject.toml`, `Pipfile` | `ai-backend-toolkit:fastapi-pro`, `ai-backend-toolkit:api-patterns` |
120
+ | Node.js | `package.json` | `ai-backend-toolkit:nodejs-backend-patterns`, `ai-backend-toolkit:api-patterns` |
121
+ | Go | `go.mod` | `ai-backend-toolkit:api-patterns`, `ai-backend-toolkit:clean-code` |
122
+ | Docker | `Dockerfile`, `docker-compose.yml` | `ai-backend-toolkit:docker-expert` |
123
+ | Monorepo | Multiple of above | `ai-backend-toolkit:monorepo-architect` |
124
124
 
125
125
  Store in `agent-state.json` → `"detectedStack": ["ios", "python", "docker"]`
126
126
 
@@ -97,11 +97,11 @@ Store approach in task metadata for Phase 3 agent.
97
97
 
98
98
  Based on Phase 1 `detectedStack`, assign relevant skills:
99
99
 
100
- - iOS tasks -> SwiftUI skills, iOS patterns
101
- - Python tasks -> `fastapi-pro`, `api-patterns`
102
- - Node tasks -> `nodejs-backend-patterns`
103
- - Security-sensitive -> `api-security-best-practices`
104
- - Multi-submodule -> `monorepo-architect`
100
+ - iOS tasks -> `ai-ios-toolkit:*` SwiftUI skills, iOS patterns
101
+ - Python tasks -> `ai-backend-toolkit:fastapi-pro`, `ai-backend-toolkit:api-patterns`
102
+ - Node tasks -> `ai-backend-toolkit:nodejs-backend-patterns`
103
+ - Security-sensitive -> `ai-backend-toolkit:api-security-best-practices`
104
+ - Multi-submodule -> `ai-backend-toolkit:monorepo-architect`
105
105
 
106
106
  #### Output contract
107
107
 
@@ -1,6 +1,6 @@
1
1
  ### Phase 3: Dev (Sonnet)
2
2
 
3
- > **TLDR** - Sonnet executes the plan task-by-task with TDD (red→green→refactor). Required: issue-tracker status moved to "In Progress" before any code, with a post-mutation verify step (re-reads the field, retries once on silent VALIDATION failures). Build verification after each task (up to 3 retries). Build-queue lock serializes concurrent xcodebuild. `--dev` mode uses Opus self-contained (no Phase 2 plan required). `taskType === component` **short-circuits the TDD path** and delegates the whole phase to the enabled `ai-<platform>-engineering-toolkit` marketplace plugin's component skill (`create-component`, fallback `create-ui-component`) - see next subsection.
3
+ > **TLDR** - Sonnet executes the plan task-by-task with TDD (red→green→refactor). Required: issue-tracker status moved to "In Progress" before any code, with a post-mutation verify step (re-reads the field, retries once on silent VALIDATION failures). Build verification after each task (up to 3 retries). Build-queue lock serializes concurrent xcodebuild. `--dev` mode uses Opus self-contained (no Phase 2 plan required). `taskType === component` **short-circuits the TDD path** and delegates the whole phase to the enabled `ai-<platform>-toolkit` marketplace plugin's component skill (`create-component`, fallback `create-ui-component`) - see next subsection.
4
4
 
5
5
  ## Phase 3 Pre-flight (BLOCKING, v9.0.0)
6
6
 
@@ -38,7 +38,7 @@ Pre-flight steps (run in order, abort on failure).
38
38
 
39
39
  `targetFiles` is required - without it a skill applied to the wrong files still reads as "applied". Append at the moment of consultation, not at the end of the phase. Phase 4 Step 1.78 treats this as self-report only and resolves criteria independently; it is the one signal separating "applied to the wrong files" from "never opened".
40
40
 
41
- 9. **Stack skill routing (every `taskType`, when a stack toolkit plugin is enabled)**: ask the enabled `ai-<platform>-engineering-toolkit`'s own `index` skill which skills govern this task, load them BEFORE writing code, and record each into `state.telemetry.skillCalls[]` with `routedBy: "<toolkit>:index@<version>"`. The routing table stays in the plugin - a copy here would be the stale one. No toolkit, or none enabled, is a recorded no-op, not a halt. Contract: [`features/stack-skill-routing.md`]($HOME/.claude/multi-agent-refs/features/stack-skill-routing.md).
41
+ 9. **Stack skill routing (every `taskType`, when a stack toolkit plugin is enabled)**: ask the enabled `ai-<platform>-toolkit`'s own `index` skill which skills govern this task, load them BEFORE writing code, and record each into `state.telemetry.skillCalls[]` with `routedBy: "<toolkit>:index@<version>"`. The routing table stays in the plugin - a copy here would be the stale one. No toolkit, or none enabled, is a recorded no-op, not a halt. Contract: [`features/stack-skill-routing.md`]($HOME/.claude/multi-agent-refs/features/stack-skill-routing.md).
42
42
 
43
43
  The analysis document is the SOLE design source in Phase 3. Variant choices, padding values, color tokens, copy strings, accessibility identifiers, and test method names all come from the rendered Pass B cells. If something is missing in the analysis doc, the fix is to re-run `/multi-agent:analysis`, not to fetch from Figma.
44
44
 
@@ -56,7 +56,7 @@ Phase 3 consumes the Phase 2 output object conforming to `$HOME/.claude/schemas/
56
56
 
57
57
  #### Component tasks - delegated dispatch (taskType === "component")
58
58
 
59
- When Phase 0 Step 7 classified the task as `component`, Phase 3 delegates the entire phase to the enabled `ai-<platform>-engineering-toolkit` marketplace plugin's component skill (`create-component`, fallback `create-ui-component`) via the Skill tool and does NOT run the TDD loop below. The dispatch layer passes the plugin skill the analysis Section 6 (Bileşen Envanteri) entry + Section 13.1 conventions for the named component as context. Because plugin skills do not write pipeline state, the **dispatch layer** (not the skill) owns `state.phases["3"].subphases[]`, recording a coarse component-build row - multi-agent's `phase-tracker` reads that array with no special case. Plugin resolution (dual-name), dispatch call, failure/resume, multi-repo, `--dev` elisions, and the intentional cross-CLI divergence live in `$HOME/.claude/multi-agent-refs/component-dispatch.md` - read it before editing component-task behaviour here. Phase 3 still owns: progress line `-> dispatching create-component <name>`, `retryCount` cap at 3, and fallthrough to the TDD path when dispatch prerequisites are missing (`taskType` absent OR the plugin is not enabled in this repo -> log anomaly, halt or run TDD per component-dispatch.md).
59
+ When Phase 0 Step 7 classified the task as `component`, Phase 3 delegates the entire phase to the enabled `ai-<platform>-toolkit` marketplace plugin's component skill (`create-component`, fallback `create-ui-component`) via the Skill tool and does NOT run the TDD loop below. The dispatch layer passes the plugin skill the analysis Section 6 (Bileşen Envanteri) entry + Section 13.1 conventions for the named component as context. Because plugin skills do not write pipeline state, the **dispatch layer** (not the skill) owns `state.phases["3"].subphases[]`, recording a coarse component-build row - multi-agent's `phase-tracker` reads that array with no special case. Plugin resolution (dual-name), dispatch call, failure/resume, multi-repo, `--dev` elisions, and the intentional cross-CLI divergence live in `$HOME/.claude/multi-agent-refs/component-dispatch.md` - read it before editing component-task behaviour here. Phase 3 still owns: progress line `-> dispatching create-component <name>`, `retryCount` cap at 3, and fallthrough to the TDD path when dispatch prerequisites are missing (`taskType` absent OR the plugin is not enabled in this repo -> log anomaly, halt or run TDD per component-dispatch.md).
60
60
 
61
61
  For non-component taskTypes (`bugfix`, `feature`, `refactor`, `chore`), continue with the standard TDD section below.
62
62
 
@@ -75,7 +75,7 @@ If changes include UI files (iOS: `*View.swift`, `*Screen.swift`, `*Cell.swift`;
75
75
  - Missing `.accessibilityIdentifier` / `testTag` → **important**
76
76
  - Dynamic Type / font scaling not supported → **important**
77
77
 
78
- **iOS - Apple HIG compliance** (skills: `hig-patterns`, `hig-components-layout`, `hig-foundations`):
78
+ **iOS - Apple HIG compliance** (skills: `ai-ios-toolkit:hig-patterns`, `ai-ios-toolkit:hig-components-layout`, `ai-ios-toolkit:hig-foundations`):
79
79
  - Navigation pattern mismatch (e.g. custom back button instead of system) → **important**
80
80
  - Non-standard gesture without discoverability hint → **suggestion**
81
81
  - Missing safe area / keyboard avoidance → **important**
@@ -83,12 +83,12 @@ If changes include UI files (iOS: `*View.swift`, `*Screen.swift`, `*Cell.swift`;
83
83
 
84
84
  **iOS - SwiftUI interaction & accessibility conventions.** Gated to changed SwiftUI files. These are rule-registry territory as of v14.0.0, not a list transcribed here: Step 1.78 resolves them from whichever registry declares SwiftUI scope, so the criteria and their severities live in one place instead of drifting between this doc and the skill. Reviewers receive the resolved rule IDs. Native-SwiftUI-first unless the project's `figma-config` `ui.*` declares a custom system, in which case check against that system. Reference skills, when no registry covers the change: `figma-navigation`, `figma-overlays`, `figma-bottom-sheets`, `figma-to-swiftui`.
85
85
 
86
- **Android - Material Design compliance** (skills: `compose-components`, `android-architecture`):
86
+ **Android - Material Design compliance** (skills: `ai-android-toolkit:compose-components`, `ai-android-toolkit:android-architecture`):
87
87
  - Non-Material3 component when M3 equivalent exists → **suggestion**
88
88
  - Missing `contentDescription` on icons/images → **blocking**
89
89
  - Hardcoded dp values instead of Material spacing tokens → **suggestion**
90
90
 
91
- **App Store / Play Store readiness** (skills: `app-store-review`, `play-store-review`):
91
+ **App Store / Play Store readiness** (skills: `ai-ios-toolkit:app-store-review`, `ai-android-toolkit:play-store-review`):
92
92
  - Privacy: API usage without purpose string / permission rationale → **blocking**
93
93
  - Deprecated API usage flagged by latest SDK → **important**
94
94
 
@@ -249,7 +249,7 @@ Launch Agent instances **in parallel** using the shared `code-reviewer` subagent
249
249
  | ---------- | --------------- | --- | --- | --- | --- | --- |
250
250
  | Reviewer 1 | `code-reviewer` | `claude-fable-5` | `claude-opus-5` | `gpt-5.6` @ `xhigh` | Deep security + architecture | `api-security-best-practices`, `architecture` |
251
251
  | Reviewer 2 | `code-reviewer` | (not dispatched) | `gpt-5.4` | `gpt-5.4` @ `high` | Edge cases, different perspective | cross-model diversity |
252
- | Reviewer 3 | `code-reviewer` | `claude-sonnet-5` | `claude-sonnet-5` | `gpt-5.6` @ `medium` | Quality + correctness + naming | `clean-code`, stack-specific skill |
252
+ | Reviewer 3 | `code-reviewer` | `claude-sonnet-5` | `claude-sonnet-5` | `gpt-5.6` @ `medium` | Quality + correctness + naming | `ai-backend-toolkit:clean-code`, stack-specific skill |
253
253
  | Triage | triage persona | `claude-fable-5` | `claude-opus-5` | `gpt-5.6` @ `max` | Filter false positives + out-of-scope | - |
254
254
 
255
255
  Reviewer count per host: **Claude Code 2, Copilot CLI 3, Codex CLI 3**.
@@ -285,12 +285,12 @@ Each reviewer inherits the `code-reviewer` agent's focus areas (Security, Archit
285
285
 
286
286
  | Stack | Reviewer 1 (Fable / Opus on Copilot) | Reviewer 2 (GPT-5.4 - Copilot CLI only) | Reviewer 3 (Sonnet) |
287
287
  |-------|-------------------|-----------------------------------------|---------------------|
288
- | iOS/Swift | `ios-security`, `swiftui-performance`, `hig-patterns` | `swift-concurrency`, `ios-accessibility` | `swiftui-pro`, `swift-testing` |
289
- | Android/Kotlin | `android-security`, `android-performance` | `compose-testing`, `android-architecture` | `compose-components`, `kotlin-coroutines-expert` |
290
- | Python | `api-security-best-practices` | `fastapi-pro` | `python-patterns` |
291
- | Node.js | `api-security-best-practices` | `nodejs-backend-patterns` | `typescript-patterns` |
292
- | Docker | `docker-expert` | `docker-expert` | `ci-cd-pipelines` |
293
- | Generic | `security-review` | `clean-code` | `clean-code` |
288
+ | iOS/Swift | `ai-ios-toolkit:ios-security`, `ai-ios-toolkit:swiftui-performance`, `ai-ios-toolkit:hig-patterns` | `ai-ios-toolkit:swift-concurrency`, `ai-ios-toolkit:ios-accessibility` | `ai-ios-toolkit:swiftui-pro`, `ai-ios-toolkit:swift-testing` |
289
+ | Android/Kotlin | `ai-android-toolkit:android-security`, `ai-android-toolkit:android-performance` | `ai-android-toolkit:compose-testing`, `ai-android-toolkit:android-architecture` | `ai-android-toolkit:compose-components`, `ai-android-toolkit:kotlin-coroutines-expert` |
290
+ | Python | `ai-backend-toolkit:api-security-best-practices` | `ai-backend-toolkit:fastapi-pro` | `ai-backend-toolkit:python-patterns` |
291
+ | Node.js | `ai-backend-toolkit:api-security-best-practices` | `ai-backend-toolkit:nodejs-backend-patterns` | `ai-frontend-toolkit:typescript-patterns` |
292
+ | Docker | `ai-backend-toolkit:docker-expert` | `ai-backend-toolkit:docker-expert` | `ai-backend-toolkit:ci-cd-pipelines` |
293
+ | Generic | `security-review` | `ai-backend-toolkit:clean-code` | `ai-backend-toolkit:clean-code` |
294
294
 
295
295
  Skills are injected into reviewer prompt context - the reviewer uses them as reference, not as commands.
296
296
 
@@ -299,7 +299,7 @@ Skills are injected into reviewer prompt context - the reviewer uses them as r
299
299
  Runs when `state.taskType == "component"` **or** the diff touches SwiftUI UI files
300
300
  AND the task carried a Figma reference. Two checks, in order:
301
301
 
302
- 1. **`ai-ios-engineering-toolkit:figma-review`** over the implemented frames - the
302
+ 1. **`ai-ios-toolkit:figma-review`** over the implemented frames - the
303
303
  plugin's own component review, including the 14-item checklist that covers design
304
304
  tokens, accessibility identifiers, previews and Code Connect.
305
305
  2. **`/multi-agent:design-check`** for pixel + spacing + typography + colour
@@ -320,7 +320,7 @@ reading a diff cannot see spacing; something has to compare against the design.
320
320
  Skip only when the diff has no UI change. Record the outcome in
321
321
  `consensus.visualConformance` so Phase 7 reports whether it ran.
322
322
 
323
- **iOS/Swift - interaction & convention checks (conditional).** Step 1.78 resolves these. Where no registry covers the change, reviewers fall back to the analysis doc (Section 14 Code Connect mapping) and, when `ai-ios-engineering-toolkit` is enabled, that plugin's navigation / overlay / bottom-sheet + accessibility conventions.
323
+ **iOS/Swift - interaction & convention checks (conditional).** Step 1.78 resolves these. Where no registry covers the change, reviewers fall back to the analysis doc (Section 14 Code Connect mapping) and, when `ai-ios-toolkit` is enabled, that plugin's navigation / overlay / bottom-sheet + accessibility conventions.
324
324
 
325
325
  **Module review guides (conditional, all stacks).** Step 1.78 resolves them into `criteria-manifest.json` → `moduleGuides`. Inject with the directive: read each guide, apply its rules to the changed files under its directory - a guide governs only its own subtree, and its violations are findings triaged like any other. Same contract as `/multi-agent:review` Step 2b.
326
326
 
@@ -100,7 +100,7 @@ Tier 1 / Tier 2 records print `screenshotUrl` from the captured evidence (Tier 2
100
100
  bash $HOME/.claude/scripts/phase-tracker.sh now 5 "awaiting local test (user)"
101
101
  bash $HOME/.claude/scripts/phase-tracker.sh render
102
102
  ```
103
- The waiting state persists in `tracker-state.json` across the handoff; `/multi-agent:ship` and `/multi-agent:manual-test` CONTINUE this state file and never re-init it (`$HOME/.claude/multi-agent-refs/tracker-contract.md` "Continuation runs").
103
+ The waiting state persists in `tracker-state.json` across the handoff; `/multi-agent:resume-local` and `/multi-agent:manual-test` CONTINUE this state file and never re-init it (`$HOME/.claude/multi-agent-refs/tracker-contract.md` "Continuation runs").
104
104
  6. If fix needed:
105
105
  - Branch already has WIP commit (from step 2) - changes are safe
106
106
  - **Heal stale admin state first** (same contract as Phase 0 - step 3's
@@ -196,6 +196,12 @@ $HOME/.claude/scripts/log-metric.sh "$TASK_ID" 7 task.completed \
196
196
  duration_ms=$TOTAL_DURATION
197
197
  ```
198
198
 
199
+ **Usage ping (optional, private dashboard).** When `prefs.global.usageLog.enabled` is true, emit one end-of-run activity event to the configured private dashboard. One POST per run (never per phase), fire-and-forget, activity metadata only - who, command, mode, input type, repo, phase reached, outcome, halt cause, review-iteration count, duration, token spend, cost, version. No prompts, code, diffs, or absolute paths. The script no-ops when `usageLog.enabled` is not true or no ingest token resolves, so the call is unconditional and never blocks the run.
200
+
201
+ ```bash
202
+ node $HOME/.claude/scripts/usage-report.mjs --state "$STATE_FILE" >/dev/null 2>&1 || true
203
+ ```
204
+
199
205
  **Aggregate before reporting**: run `aggregate-metrics.mjs --since=$(date -u -v-30d +%Y-%m-%d)` and embed output in agent-log.md. Use `--json` for Jira. Aggregator handles missing files gracefully.
200
206
 
201
207
  **Per-run outcome metrics (evidence corpus):** also emit `run-metrics.mjs --state <agent-state.json>` and append/persist its JSON. It records the numbers that actually answer "did this run go well" - review iterations (rework loops), first-pass-clean, reviewer signal-to-noise (accepted / raw findings), consensus verdict, build outcome. Accumulating these across real runs is the real-world validation that golden tasks + benchmarks only approximate; keep the corpus so the pipeline's quality can be measured, not asserted.
@@ -135,7 +135,8 @@ Mode-specific phase sets:
135
135
 
136
136
  | Mode | TaskCreate set (in order) |
137
137
  |---|---|
138
- | Full pipeline (`/multi-agent`, `:autopilot`, `:local`, `:local-autopilot`) | 0 → 1 → 2 → 3 → 4 → 5 → 6 → 7 (all 8) |
138
+ | Full interactive (`/multi-agent`) | 0 → 1 → 2 → 3 → 4 → 5 → 6 → 7 (all 8) |
139
+ | `:autopilot`, `:local`, `:local-autopilot` | 0 → 1 → 2 → 3 → 4 → 6 → 7 (7 phases - the interactive Phase 5 test gate is dropped in every autopilot/local variant) |
139
140
  | `:dev` | 0 → 3 → 4 → 5 → 6 → 7 (6 phases - 1/2 omitted entirely) |
140
141
  | `:dev-autopilot`, `:dev-local`, `:dev-local-autopilot` | 0 → 3 → 4 → 6 → 7 (5 phases - 1/2/5 omitted entirely; the autopilot/local variants drop the interactive Phase 5 test gate) |
141
142
 
@@ -310,7 +311,7 @@ The `tasklist_id` meta from the previous session is replaced with the new IDs du
310
311
 
311
312
  ## Continuation runs (finish / manual-test)
312
313
 
313
- A pre-existing `tracker-state.json` for the task is never re-initialized. Rules for any command that continues an earlier run (`/multi-agent:ship`, `/multi-agent:manual-test`, resume):
314
+ A pre-existing `tracker-state.json` for the task is never re-initialized. Rules for any command that continues an earlier run (`/multi-agent:resume-local`, `/multi-agent:manual-test`, resume):
314
315
 
315
316
  1. `init` runs ONLY when no state file exists for the task. Otherwise the existing file is kept - phase history (elapsed, tokens, model, meta) survives.
316
317
  2. The continuing command re-declares its phase set with `add` - `add` is idempotent, so existing phases keep their name, status, and token history; only genuinely new phases are appended. The card renders phases sorted by numeric id, so mixed sets stay in order.
@@ -77,9 +77,9 @@ Save the answer to `prefs.global.wikiDefault` for next run. Migration script (`m
77
77
 
78
78
  ## Dispatch
79
79
 
80
- 1. Resolve wiki mode from `figmaConfig.wiki.mode` - one of `submodule`, `in-repo`, `github-wiki`, `separate-repo`. Each has a dedicated adapter inside the `figma-component-wiki` skill; see the `ai-ios-engineering-toolkit:figma-component-wiki` plugin skill for per-mode path layout and push semantics.
80
+ 1. Resolve wiki mode from `figmaConfig.wiki.mode` - one of `submodule`, `in-repo`, `github-wiki`, `separate-repo`. Each has a dedicated adapter inside the `figma-component-wiki` skill; see the `ai-ios-toolkit:figma-component-wiki` plugin skill for per-mode path layout and push semantics.
81
81
  2. Emit progress line: `→ writing wiki {componentName} (mode: {mode})`.
82
- 3. Dispatch to the plugin skill `ai-ios-engineering-toolkit:figma-component-wiki` (iOS) or `ai-android-engineering-toolkit:figma-component-wiki` (Android), passing `{componentName, componentPath, figmaConfig}`.
82
+ 3. Dispatch to the plugin skill `ai-ios-toolkit:figma-component-wiki` (iOS) or `ai-android-toolkit:figma-component-wiki` (Android), passing `{componentName, componentPath, figmaConfig}`.
83
83
  4. Skill returns `{ writtenPaths[], committedSha?, pushedRemote? }`. Write `writtenPaths` to Phase 7 summary's "Files written" section and push metadata (if any) to "External publishes".
84
84
  5. On adapter failure - log the adapter + mode + error, continue Phase 7. Wiki is a non-blocking augmentation; the Jira comment in Step 3 already carries the component summary, so the developer is never left in the dark if wiki misfires.
85
85
 
@@ -1,5 +1,5 @@
1
1
  {
2
- "schemaVersion": "2.5.0",
2
+ "schemaVersion": "2.6.0",
3
3
  "global": {
4
4
  "identities": [],
5
5
  "keychainMapping": {
@@ -46,7 +46,12 @@
46
46
  "autoDiff": false,
47
47
  "manualNote": false
48
48
  },
49
- "wikiScope": ["main", "ios", "screenshots", "index"],
49
+ "wikiScope": [
50
+ "main",
51
+ "ios",
52
+ "screenshots",
53
+ "index"
54
+ ],
50
55
  "autopilotReportTimeoutSeconds": 1800,
51
56
  "promptLanguage": "en",
52
57
  "outputLanguage": "en",
@@ -69,6 +74,11 @@
69
74
  "onExceed": "warn",
70
75
  "pricingModel": "opus"
71
76
  },
77
+ "usageLog": {
78
+ "enabled": false,
79
+ "endpoint": "https://mmerterden.vercel.app/api/usage/ingest",
80
+ "token": ""
81
+ },
72
82
  "derivedSkillSources": [],
73
83
  "devToolkit": {
74
84
  "enabled": true,
@@ -78,7 +88,7 @@
78
88
  "skillConformance": {
79
89
  "blockOnCoverageGap": false
80
90
  },
81
- "ship": {
91
+ "resumeLocal": {
82
92
  "autoFix": false
83
93
  }
84
94
  },
@@ -164,13 +174,16 @@
164
174
  }
165
175
  },
166
176
  "_derivedSkillSourcesTemplate": {
167
- "_comment": "Optional. Populate global.derivedSkillSources[] to let /multi-agent:refactor check whether skills you derived from an upstream marketplace plugin have been updated. Kept in your LOCAL prefs only (never synced), so it may reference private sources. Copy an entry like the one below. Set upstreamLocalClone when you have a working copy: the installed plugin cache is only as fresh as your last marketplace update, and a stale cache makes the drift check answer 'up to date' when it is four releases behind.",
177
+ "_comment": "Optional. Populate global.derivedSkillSources[] to let /multi-agent:refactor check whether skills you derived from an upstream marketplace plugin have been updated. Kept in your LOCAL prefs only (never synced), so it may reference private sources. Copy an entry like the one below. Set upstreamLocalClone when you have a working copy: the installed plugin cache is only as fresh as your last marketplace update, and a stale cache makes the drift check answer 'up to date' when it is four releases behind. Set driftAcknowledged to the current upstream version to accept a known drift without failing the gate; the gate re-fails when upstream moves past it.",
168
178
  "_example": {
169
179
  "label": "Component toolkit skills",
170
180
  "localPath": "plugins/<my-plugin>/skills/workflow",
171
181
  "upstreamMarketplace": "<installed-marketplace-name>",
172
182
  "upstreamPlugin": "<upstream-plugin-name>",
173
- "upstreamSkills": ["<skill-a>", "<skill-b>"],
183
+ "upstreamSkills": [
184
+ "<skill-a>",
185
+ "<skill-b>"
186
+ ],
174
187
  "derivedFromVersion": "0.0.0",
175
188
  "upstreamVersionSource": "marketplace.json",
176
189
  "upstreamLocalClone": "$HOME/<upstream-repo-working-copy>",
@@ -1,6 +1,6 @@
1
1
  ## Figma -> Component Generation
2
2
 
3
- Skill set lives in the marketplace plugins - `ai-ios-engineering-toolkit` (iOS/SwiftUI) and `ai-android-engineering-toolkit` (Android/Compose). Activated when the task contains a Figma URL and target files are `.swift` (iOS) or `.kt` (Android).
3
+ Skill set lives in the marketplace plugins - `ai-ios-toolkit` (iOS/SwiftUI) and `ai-android-toolkit` (Android/Compose). Activated when the task contains a Figma URL and target files are `.swift` (iOS) or `.kt` (Android).
4
4
 
5
5
  ### MUST: Figma access - 3-tier fallback chain (BLOCKING, pipeline-wide)
6
6
 
@@ -190,7 +190,7 @@ Phase 3.3: figma-iteration-commit → Batch iteration commit (if iterating)
190
190
  | Wiki | enabled/disabled | `wiki.enabled` |
191
191
  | Figma API | MCP / REST fallback | `figma.mcpEnabled` |
192
192
 
193
- Provider interfaces are defined inline in the plugin skill sets - see the `ai-ios-engineering-toolkit` and `ai-android-engineering-toolkit` marketplace plugins.
193
+ Provider interfaces are defined inline in the plugin skill sets - see the `ai-ios-toolkit` and `ai-android-toolkit` marketplace plugins.
194
194
 
195
195
  ### Optional Features (graceful skip when disabled)
196
196
 
@@ -144,7 +144,7 @@
144
144
  "skill": {
145
145
  "type": "string",
146
146
  "minLength": 1,
147
- "description": "Skill name as invoked, e.g. ios-coding-standard, ai-ios-engineering-toolkit:create-component, or a guide path for a stack guide."
147
+ "description": "Skill name as invoked, e.g. ios-coding-standard, ai-ios-toolkit:create-component, or a guide path for a stack guide."
148
148
  },
149
149
  "phase": {
150
150
  "type": "integer",