@mmerterden/multi-agent-pipeline 20.35.0 → 20.36.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/manifest.json CHANGED
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "@mmerterden/multi-agent-pipeline",
3
- "version": "20.35.0",
4
- "commit": "ec7ec976a81d4de4a367a84cf1399c7ecc216498",
5
- "generatedAt": "2026-10-27T14:22:28.106Z",
3
+ "version": "20.36.0",
4
+ "commit": "709349b70735b243f1e210d178029749f650a080",
5
+ "generatedAt": "2026-10-31T08:40:50.392Z",
6
6
  "algorithm": "sha256",
7
- "fileCount": 1632,
7
+ "fileCount": 1634,
8
8
  "files": {
9
- "CHANGELOG.md": "2b71610d8ace890a926fd72c5a084611244f7c6af7844e27cf0f9ca9455e37ae",
9
+ "CHANGELOG.md": "5cb708653af090fa81082aec8f7e6f0e65ec073d0f1ab661eeb246bc3084c5b6",
10
10
  "LICENSE": "8d8c51aaf1e1538b180c69965fa038db71be86798cc3e26a143bebfefe16a43e",
11
- "README.md": "a44f7d10d4d25f3dbe0a7e3a313d756efca699ac32c47922d3b30ec4e68b4235",
12
- "README.tr.md": "c168a7ea8c6fc97636cdebf97e5defafab81f6edac22cc503b5fd3afe3381489",
11
+ "README.md": "1fcdb02a967cf565148fe15996db7111c2ae3cf47bedd156fa7c7b18480c7318",
12
+ "README.tr.md": "078d20b24d887be0e027579323d342f8ec561597cae2b37b8e23c90e60a41b3b",
13
13
  "SECURITY.md": "0eb89553ddcfc56bfe9712315b55a6630ee2f579631aaeccd6ad24f8ac769a0b",
14
14
  "docs/FIGMA_PIPELINE.md": "ea01f3ea5fef1a9cb316040a2d416fcf87dd4f2a14b5497aa00994a0b5dc7e6a",
15
15
  "docs/adr/0001-three-model-triage.md": "79a6f1025469f607a5859add21854052d7433bc213f4aceee2e159b613eeb6a1",
@@ -31,11 +31,11 @@
31
31
  "docs/adr/0017-change-impact-from-the-graph.md": "b8fab10ea308f833a8bca7fa566910a24ff4d2af6975b0f6296b217b0783baa6",
32
32
  "docs/adr/0018-cross-repo-links-not-a-global-graph.md": "de90b938cc7a6a65c58b9be7bad7119e45882990dc573141787c9564d6753807",
33
33
  "docs/adr/README.md": "429f36204220eb003c77d9ffa03f77f0709123c0bc4b931fc9057d5bb5627845",
34
- "docs/architecture.md": "7366d1b673a45112c023d9f13c350e3787f76a93ade6ad776a582eb3659296d3",
34
+ "docs/architecture.md": "94fd5b00373e18e31cc5c79f0c69c3230ee90a81dfe4986d9087a25e106a9f2a",
35
35
  "docs/best-practices.md": "f8b75b0d38b5896a6a852bb30a1edddeb24dab8b5b7b1d9313290e1241c72024",
36
- "docs/ecosystem.md": "7d10d7f48b48b16383c22fbd3aac369abd47e329431dac67d4c2ed8d11af8e36",
36
+ "docs/ecosystem.md": "c5fb0962faf8cc06d4b99e8e7c13e6da6475983bcb53336770c2b4b725926d78",
37
37
  "docs/engineering.md": "550528cd47c7d2c921729c68d0782a00ac8e77a4bdfec479f6749f9c3235d188",
38
- "docs/facts.json": "a09f89323476d0bf00e30fdfba88405a6f87a58a2664d4a358eed2c34826c7ea",
38
+ "docs/facts.json": "a65b678121e4dc2ca32630f217d5371396bcdaa24f6a296b9dc8dbbb4830ed34",
39
39
  "docs/features.md": "7b10b0c960bf7316fa4a4845df5246576f017766b176488212069e7b9fa83664",
40
40
  "docs/performance.md": "bbf2f3922c25dcba0c1a9e69ef420e3871a729af5b35009a49b48a5d3c5cd151",
41
41
  "docs/recovery-guide.md": "59a8f1b66b34cb9ff5507b3d54dac3b9915e184aa044d9c758d18cac818d510e",
@@ -54,7 +54,7 @@
54
54
  "install/_unattended-profile.mjs": "80125806da173f3b596e049f1a358e37fedf79d682e0277ae1faec2fee9ef499",
55
55
  "install/_usage-lifecycle.mjs": "4b010c4e75d6f8e13b58d80a93cc9407f42ccde781c9ed12dcb8e7faf05e526c",
56
56
  "install/_xcode-skills.mjs": "1a7e20f1e6743324b941c5d3ecac9f94c65fff1534ffd9c63b39cbea4f8d101a",
57
- "install/catalog-history.json": "6265739cd4b9618cee9d251fd1cca0c015a7170fa5528d5f0f6260515e0ccd82",
57
+ "install/catalog-history.json": "4f0947e1d6c464bd8af02dc8e172911c2da8a211dce0f8eabb06e4a9de4c2bc5",
58
58
  "install/claude.mjs": "c85300268d02cf7c27a88d53188e6a3646b4f09bdb476556eada5b68eeac2b5e",
59
59
  "install/codex.mjs": "06f13970c28d446945be1a2a20ef6afcea8d5e43740c4a00a1d044d8a4285114",
60
60
  "install/copilot.mjs": "335ad19e9e216dbcad3024b8931ed6e0b84baba3c5b3a4b37e15c7dd19a1edb5",
@@ -66,7 +66,7 @@
66
66
  "install/templates/multi-agent-autopilot-awake.plist.template": "ddd25c76c56fcbb38a89de8e35637372d70ace993d6bc487a88ca9cfb702fe1f",
67
67
  "install/templates/multi-agent-autopilot.plist.template": "122c8a61cd927edd99375d6e3da40f1d42bcceed5b6641785c8b28bb930bc77e",
68
68
  "install/unattended-profile-legacy.json": "f52e86b998956f09ad306b1735a6c10b58580d7082d8a55665a4c6bb15c3aa1f",
69
- "package.json": "66f4e039d6508c51a3dcd1d232b082e32ad5a83089297a4684f897bc27256996",
69
+ "package.json": "68e7f6676a29d597d0b29673ddfbe6926e6f6ec57d5fe9569a58c671e04b72bc",
70
70
  "pipeline/agents/android-architect.md": "11fb74543cb0ebcf9525ca6654fe95d53da7229e0bf4a1149b31fd9005abc453",
71
71
  "pipeline/agents/backend-architect.md": "b02a606c301e4714131aed70ae6d16eeb77fbc819a001e2752cff2488d4246de",
72
72
  "pipeline/agents/bulk-reader.md": "5619d5fb3dee26da7b4c5b1f55d22584c9404e350c221d13bc25a70d88f75f8c",
@@ -114,7 +114,8 @@
114
114
  "pipeline/commands/multi-agent/model/SKILL.md": "98cf3a439f79566504086ef2a1b95d5d6a6368b56edeb8c7868a56b06a6ce441",
115
115
  "pipeline/commands/multi-agent/office-off/SKILL.md": "0a23c1db500c84b75e93813ff51e67a22bc61e367d6970cd5e5e47a69ff6450c",
116
116
  "pipeline/commands/multi-agent/office-on/SKILL.md": "066b5859492ddd52b1fb8de3abcb3a7f745786fd8245b1a5930c2c8f10ed67b2",
117
- "pipeline/commands/multi-agent/office-status/SKILL.md": "4f3ed5d320cdb923f7db33c1cf5c3b289a604cb67babaa82c791fa74e80e7634",
117
+ "pipeline/commands/multi-agent/office-pair/SKILL.md": "cbd68de7ba552069868865cf8d816f1aeb2c7ffcf4b4c430b2e3f315f7c6cd05",
118
+ "pipeline/commands/multi-agent/office-status/SKILL.md": "c6b2ebc0d9253aae85ec0e2f87abeec4482078d233f641cede9eeb897e81ccf8",
118
119
  "pipeline/commands/multi-agent/postmortem/SKILL.md": "6fb125f69961a8168fc42707aa57810c60c10555d3947aaa1bc4748a72b76271",
119
120
  "pipeline/commands/multi-agent/prune-logs/SKILL.md": "1b72032a794d886973e67600b82cc8e36510ec2bd8911e5f755f75f813da4b84",
120
121
  "pipeline/commands/multi-agent/prune-prompts/SKILL.md": "d46b68420d546b1ba285de4970f97165eadb12b26f88d8fe614064f15ce2c490",
@@ -142,7 +143,7 @@
142
143
  "pipeline/commands/multi-agent/status/SKILL.md": "b08338841a5282f8ae2494751001aa31cbf4829146a58ed2c395b1c062b48443",
143
144
  "pipeline/commands/multi-agent/steer/SKILL.md": "a1325e548bb0296ad3994cbfb48c2955a13f27b010f7c0afaf5c703c85553f50",
144
145
  "pipeline/commands/multi-agent/store-ready/SKILL.md": "927181a7ea4890ea2ce3e8523c2f0563829e8827aa6ed92884b76a84521a378f",
145
- "pipeline/commands/multi-agent/sync/SKILL.md": "679f56a986fcc12004333df13d193ddba818b355d026cdd44816f58d879725e7",
146
+ "pipeline/commands/multi-agent/sync/SKILL.md": "6cc0021f8cb5fdb05c6f92361b1ec5ec5e5c7b31d272a759728072280b713cde",
146
147
  "pipeline/commands/multi-agent/test-accessibility/SKILL.md": "d62992541303a0776ca088d5f3d5475108fd3fba5e25af04efb3ea4bbbd1fe21",
147
148
  "pipeline/commands/multi-agent/test-dark-mode/SKILL.md": "6bfe158c94f76fc6f4d06454978d0c5cad6ec00645ab48c1d1cee15ad93ae095",
148
149
  "pipeline/commands/multi-agent/test-dynamic-type/SKILL.md": "c093fe1a78a4266ad4cf1e48b3cc233d9abd7e1c524d0b8e5db0c81d8b4d58fd",
@@ -232,7 +233,7 @@
232
233
  "pipeline/lib/post-pr-review.sh": "8f508753b4b820eb85d490a6458c13279a5f6a69c7175c9f6edc5fdadc5ffb42",
233
234
  "pipeline/lib/pr-request-location.mjs": "622ca4705ec8ee00e0a4609657d8ee684fcdc077f3099ab312cf41b5b0c41efd",
234
235
  "pipeline/lib/prefs-value.mjs": "7e7ca201049f2facff57bda5a5e7ee8fa057d0e1e082a212069533159b5f798d",
235
- "pipeline/lib/qr-code.mjs": "d2d29f9821f499d6d8d6f33973d116c1821ffa6d5ba6905860cb73b04f7ef7fb",
236
+ "pipeline/lib/qr-code.mjs": "518f0aa803b4455ec56135109845527240291bdb87c1586da7c0e5766e2582b1",
236
237
  "pipeline/lib/redact.mjs": "443034132ec8163e3b923ca2b8d5304d575c02bd7396523ee677f36444adc7f7",
237
238
  "pipeline/lib/regular-file.mjs": "084dd2c98a664a1e4a937757cc5e5e5d7e162b6aa422f8c7cfdb27f7834c6cbc",
238
239
  "pipeline/lib/repo-cache.sh": "82bbdd3d61746042ad5341554a1077098d4b56f15caf6c5cc092377a273c8f45",
@@ -298,7 +299,7 @@
298
299
  "pipeline/multi-agent-refs/component-dispatch.md": "2ab9094aa716397e4840cd48f736c3f4fc3e7c4f9ccc5c7c7c52f9e8b0a28fb5",
299
300
  "pipeline/multi-agent-refs/component-generation.md": "04fdb3fd0f1c129e1df8243184a3225cebd9c4f63511d6015eb356a92eda8891",
300
301
  "pipeline/multi-agent-refs/conventions-defaults.md": "c7ef37d269a49aaa05b096085edb318ce67870aa9a75b7afe219df1af3aa81b6",
301
- "pipeline/multi-agent-refs/cross-cli-contract.md": "b95dfc70e4a2a4e1226956e8f787e30add464ea561c42fd15236762042745dd9",
302
+ "pipeline/multi-agent-refs/cross-cli-contract.md": "7601a7fd4b4faa0b48ed1e7aea0efb524ffcc7c87429ab4b182e1cb152a8bb45",
302
303
  "pipeline/multi-agent-refs/design-check/build-launch.md": "0ac64d07ef7389e22f7443f79c70a0a4f8bb87dcff6dbc94c63e034febe194ea",
303
304
  "pipeline/multi-agent-refs/design-check/compare.md": "2a0a89542a8bfefcfeaf1068dd91edb6947392f911f23e8b4857e4ace8fd15d7",
304
305
  "pipeline/multi-agent-refs/design-check/drive-capture.md": "dee4cd6230a401bc9e9dc82fc08109803dd2630c872c5b77a43cf17db062b05f",
@@ -366,8 +367,8 @@
366
367
  "pipeline/multi-agent-refs/features/visual-evidence.md": "b7154dfe41f5069ad74883c73d04a4f7e5431c7e654151ab041b2981cd4ab134",
367
368
  "pipeline/multi-agent-refs/features/worktree-finalize.md": "628f627b94927a9c4a5b0b261fed1f0ffa42d4155390d57b5e56566a26ed8193",
368
369
  "pipeline/multi-agent-refs/generate-issue.md": "3e5182b9d6848e852ee3c7f397687f45c05e0861360cb77185c0a27d503a685c",
369
- "pipeline/multi-agent-refs/help/en.md": "d117cd0e70fadb953295bee28fe2ebb779307d15a33fc3379f48294d0b625120",
370
- "pipeline/multi-agent-refs/help/tr.md": "22a5de11d1e2174fe158ba58ed0ecb738612c29d3c0b431da2fb028fc5ecc913",
370
+ "pipeline/multi-agent-refs/help/en.md": "1cf543d53ff3ba3284d27e397ace3613f0c9a347716bb1ca6e7045e23c3044b2",
371
+ "pipeline/multi-agent-refs/help/tr.md": "acd7aee2a451be5e1fab3025f0355f7936b74ee9e5c37ca3d061e252841abd5b",
371
372
  "pipeline/multi-agent-refs/issue-jira-triad.md": "a12f4e3b75badf8a466e0c3531a5f0e12e44a1dd7799522fb03ff11068ce391d",
372
373
  "pipeline/multi-agent-refs/keychain.md": "04053ef9857b6a788ce87243de443b7418bb7c7fd2a931a349eb91a525b94d25",
373
374
  "pipeline/multi-agent-refs/knowledge.md": "828031cb3a7c88bbffc492d9dd60ef67c22d1b4b8787bdb9a0ddf68e13543fb6",
@@ -828,7 +829,7 @@
828
829
  "pipeline/scripts/office-credentials.mjs": "4db4a3d9fc0ffb670ab2df8ad55f13cdb6cf4f34dc123f6bf87785381a9ff38b",
829
830
  "pipeline/scripts/office-ledger.mjs": "e14d20d43765d7e218c8c06166b4654cd1d214cd1cc97adee6418f46c422bc42",
830
831
  "pipeline/scripts/office-memory.mjs": "d690ee1879d12bad5aea0eb66d5f829c81705c024d4417ae8dd99ad440c9499f",
831
- "pipeline/scripts/office-pair.mjs": "b71609ccb077cb877927264bea7bbbc67120d0f187dcae1633917cb519b7a23a",
832
+ "pipeline/scripts/office-pair.mjs": "89811e88d78910069326f0ee3f325fce6b78734f133535880a7c68b9caa72d04",
832
833
  "pipeline/scripts/office-prune.mjs": "f779009bd0daf16359eb03d075aa1fa70202b45473e51f0ead52b21d8bb16fb1",
833
834
  "pipeline/scripts/office-remote-client.mjs": "67532b6a8ca5e1393633d600e7974b77b2d10b18a292136d5d9aaf38a8d65704",
834
835
  "pipeline/scripts/office-settings.mjs": "a85c747ce58697009ca4d1c03adc803778d73e34d254ac22a0ec866dc8069d50",
@@ -956,12 +957,12 @@
956
957
  "pipeline/scripts/worktrees.mjs": "90dfd09b70fffe9b56c331a4ae2692cc248f4898f4ee6aee4239ef0b20888a90",
957
958
  "pipeline/scripts/write-state.mjs": "7ae6d89c232a2d0c7ef0d28ead962693db59e34522825c0fc22fcfc61e00b793",
958
959
  "pipeline/scripts/write-store-config.mjs": "b994a061f6febb2ca3d396074d8b51d2c1c1f991d3072d321703380da3639a56",
959
- "pipeline/skills/.skill-manifest.json": "1a19cb0cb1034ffed7a7939932ec5694bbead4186dba6b55918db936543b86e7",
960
- "pipeline/skills/.skills-index.json": "030d9f5611f19c40c26930913d6f02992866f482b0b02f9cfda956279acdb024",
961
- "pipeline/skills/shared/README.md": "f2b3d621014db1c7750688352c43a4c79a6f4d4bf3a4e36db931f29dfcdff3dc",
962
- "pipeline/skills/shared/core/apple-archive-compliance/SKILL.md": "08d5277e4a6c246c613bd3bea27646f580f1bdc1937cb4acbbd93a156e15b24e",
960
+ "pipeline/skills/.skill-manifest.json": "af096df8b00fc224db441af465de1943bf045e5ee798ec8ef86fd1d2a02d6b90",
961
+ "pipeline/skills/.skills-index.json": "f3f87cbb1751f4e57b3da7b2e5ffe4ad8924e0e9e1795b05ed376b6bf4bef00c",
962
+ "pipeline/skills/shared/README.md": "cdf53045db5c82c93c508b084dc3582615343e1a0408889cb3cfe26f5458ac78",
963
+ "pipeline/skills/shared/core/apple-archive-compliance/SKILL.md": "2bffd220fd3e3b59160f5b6834633c3ad144c89b192556f01b9405da706b221b",
963
964
  "pipeline/skills/shared/core/apple-archive-compliance/references/rules.yml": "7b286304d49145ea3be9a42edd3fa0e8b626eca25082b21cd66cc412371745dd",
964
- "pipeline/skills/shared/core/google-play-compliance/SKILL.md": "34e87f1e6fde51dd19c9ccff00e21cd7cee74f487b5dec54deec2268ff831b3b",
965
+ "pipeline/skills/shared/core/google-play-compliance/SKILL.md": "5da8befd481459823fd5945d11215e70d751bad14b71b6050417a550282a4f03",
965
966
  "pipeline/skills/shared/core/google-play-compliance/references/rules.yml": "c28999c7800027d0f484ea6de2a98674a6c79cd22b15a3230333007356c8652c",
966
967
  "pipeline/skills/shared/core/multi-agent-analysis-jira/SKILL.md": "485a44b117a5502ea54ff0830584cb69d7622a77f13e326e4684eb9e693de8a0",
967
968
  "pipeline/skills/shared/core/multi-agent-analysis-resolve/SKILL.md": "9e405b0f7403c72b00a7ddf1e4b8518cfe37feb31d91d8e5ba70f0341efa5d0c",
@@ -994,7 +995,8 @@
994
995
  "pipeline/skills/shared/core/multi-agent-model/SKILL.md": "57ba710657d74176b0f19d4a97d3183df1f7b0c056eb1eef2792308914be836c",
995
996
  "pipeline/skills/shared/core/multi-agent-office-off/SKILL.md": "316c7f1cd910e76096301330cac7e02f1a2b28e66cda88e9f8bb966a14553e9e",
996
997
  "pipeline/skills/shared/core/multi-agent-office-on/SKILL.md": "b46a2f79beeee65ae7ad6cbfc58b4631c5146a7761e91a99b8a056d6f49c690d",
997
- "pipeline/skills/shared/core/multi-agent-office-status/SKILL.md": "fbe2f99e789facebe89f10655389ea1988dd5a6db03b054487a9c4a8e6d43f2f",
998
+ "pipeline/skills/shared/core/multi-agent-office-pair/SKILL.md": "6693c2453922bf87e22d5acd203f201c56b3389c831e297145b99186bb466ae5",
999
+ "pipeline/skills/shared/core/multi-agent-office-status/SKILL.md": "a34e42dc79bfe9bc8ca87456558baf1601b49168e94c7b28fb6cd3e853bf3d2e",
998
1000
  "pipeline/skills/shared/core/multi-agent-postmortem/SKILL.md": "41edd907cbaae1523eab1cd716390c9e9cd889574141cb88c33966e221b0987d",
999
1001
  "pipeline/skills/shared/core/multi-agent-prune-logs/SKILL.md": "649622e6f18887f986e0acd8b743df0a345a3adf89ccab58d6c4b191b770c1ac",
1000
1002
  "pipeline/skills/shared/core/multi-agent-prune-prompts/SKILL.md": "2750dad7d6cab8566798f6249094e071bd37fc519b8b350de3158cc9167c7a47",
@@ -1022,7 +1024,7 @@
1022
1024
  "pipeline/skills/shared/core/multi-agent-status/SKILL.md": "444c3773b52e6786e40bc67c8833ea6aecadbcd4459b01127b4aff152157040a",
1023
1025
  "pipeline/skills/shared/core/multi-agent-steer/SKILL.md": "9ac0c48c3cbafd98022a04b24ef4f16723dda6a852202002231f43bbb7dd453b",
1024
1026
  "pipeline/skills/shared/core/multi-agent-store-ready/SKILL.md": "6f57903e67022f875dc251cdde0c3eeb8fe9d1f56d915fae0bebb35103cae528",
1025
- "pipeline/skills/shared/core/multi-agent-sync/SKILL.md": "17f734fa2b84d9a4c757f9745be8ff40d3097f5de89caf55124b48439a737093",
1027
+ "pipeline/skills/shared/core/multi-agent-sync/SKILL.md": "e4d247d7b4708cb0984d81b6584851bea0a2cdee97ebcfad8498adcd194b7675",
1026
1028
  "pipeline/skills/shared/core/multi-agent-test-accessibility/SKILL.md": "78305bd6c591836badb903c18a6ac2e619fcec51a7a08589f8a1281c4fdd90ee",
1027
1029
  "pipeline/skills/shared/core/multi-agent-test-dark-mode/SKILL.md": "f24c6c5ee9c8f7221527a9a809ca24ee86a2225a0bac48323449660af215c99f",
1028
1030
  "pipeline/skills/shared/core/multi-agent-test-dynamic-type/SKILL.md": "e1cadd5eb8d680b0edfc40a4912733dc6a432493c868f4997b2dec0db6638dd4",
@@ -1637,6 +1639,6 @@
1637
1639
  "pipeline/skills/shared/external/xcode-project-analyzer/references/build-settings-best-practices.md": "c8d4baa90b5bcab6d24c73f740f09c4df387dc1d021c23f5e6e04401315748c2",
1638
1640
  "pipeline/skills/shared/external/xcode-project-analyzer/references/project-audit-checks.md": "72c70d8d484469b282e55d20ac54976935164fdf127d6763d537ba0be77523c2",
1639
1641
  "pipeline/skills/shared/external/xcode-project-analyzer/references/recommendation-format.md": "ad8eb87228be739d2dd53d0b927558fc9e68b2135e1b1eec475a981c4cd1feb2",
1640
- "pipeline/skills/skills-index.md": "7c463f8baa765b1183f6a9386216ef3c7a312f92018d3b9f2677bd789c833c74"
1642
+ "pipeline/skills/skills-index.md": "49bcf1f11fbbc9289580a4f95246d560e9c234f7cdf8d32cecae3379dc633a4a"
1641
1643
  }
1642
1644
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mmerterden/multi-agent-pipeline",
3
- "version": "20.35.0",
3
+ "version": "20.36.0",
4
4
  "description": "6-phase AI development pipeline with full orchestration on Claude Code, Copilot CLI and Codex CLI. Analysis, planning, TDD, CLI-aware parallel review with consensus surfacing + Fable triage, default-FAIL evidence gates, secret + intent guards, per-phase cost ledger, persistent learnings memory, wiki generation, commit automation. Token-preserving uninstall.",
5
5
  "type": "module",
6
6
  "main": "index.js",
@@ -128,5 +128,9 @@
128
128
  "eslint-plugin-n": "^18.4.1",
129
129
  "prettier": "^3.9.10",
130
130
  "publint": "0.3.25"
131
+ },
132
+ "overrides": {
133
+ "glob": "^14.0.3",
134
+ "minimatch": "^11.0.3"
131
135
  }
132
136
  }
@@ -0,0 +1,66 @@
1
+ ---
2
+ description: "Pair a phone with the office: QR, wait, compare the code with the user, enrol. Use when the office should be reachable from a phone."
3
+ description-tr: "Telefonu ofise eşler: QR'ı gösterir, telefonu bekler, karşılaştırma kodunu kullanıcıyla doğrular ve cihazı kaydeder. Ofise telefondan erişmek için kullan."
4
+ argument-hint: "[--relay <url>]"
5
+ parameters: [{"name":"--relay","kind":"text"}]
6
+ gui: button
7
+ destructive: false
8
+ confirm: none
9
+ allowed-tools: Bash, AskUserQuestion
10
+ ---
11
+
12
+ # multi-agent office-pair - pair a phone
13
+
14
+ One flow over `office-pair.mjs` (`start`, `wait`, `confirm`, `cancel`). The
15
+ device is enrolled with `read,answer` only after the user has compared the code
16
+ on both screens. An unattended run is refused by the script itself.
17
+
18
+ ## Steps
19
+
20
+ 1. **Show the QR.**
21
+
22
+ ```bash
23
+ node "$HOME/.claude/scripts/office-pair.mjs" start # add --relay <url> when one was given
24
+ ```
25
+
26
+ The QR opens as a local page in the browser (`opened`). It is never drawn in
27
+ this conversation: it carries the pairing's one-time secret, and tool output
28
+ is kept in the transcript. When `no relay is set` comes back, stop and tell
29
+ the user to set `global.office.remote.relayUrl` in the preferences, or to
30
+ run the command again with `--relay <url>`.
31
+
32
+ To see the QR in a terminal instead, the user runs
33
+ `node ~/.claude/scripts/office-pair.mjs start --terminal` in a terminal
34
+ window of their own. It draws only when its output is a terminal; captured
35
+ output gets the page instead.
36
+
37
+ 2. **Tell the user** (in `outputLanguage`): scan the code with the phone, signed
38
+ in to the site; finish the passkey step there; the code expires at
39
+ `expiresAt` (10 minutes).
40
+
41
+ 3. **Wait for the phone** (it blocks until the phone answers or the pairing
42
+ expires; give the call a 600000 ms timeout):
43
+
44
+ ```bash
45
+ node "$HOME/.claude/scripts/office-pair.mjs" wait
46
+ ```
47
+
48
+ 4. **Compare the code with the user.** Ask with AskUserQuestion, following
49
+ `$HOME/.claude/multi-agent-refs/picker-contract.md`: the question (in
50
+ `outputLanguage`) names `deviceName` and `code` and asks whether the phone
51
+ shows the same code. Options (English labels): `Same code` / `Different
52
+ code`; branch on the option chosen. Never answer it yourself.
53
+
54
+ 5. **Finish.**
55
+ - Same code: `node "$HOME/.claude/scripts/office-pair.mjs" confirm <code>`,
56
+ then report the enrolled device (`id`, `name`, `scopes`).
57
+ - Different code, or no answer: `node "$HOME/.claude/scripts/office-pair.mjs" cancel`,
58
+ and report that nothing was enrolled. A different code means the pairing
59
+ message did not come from the user's phone.
60
+
61
+ ## Errors
62
+
63
+ Report the script's message as given, with its fix: `expired` -> run the
64
+ command again; `did not open` or `origin` -> the message was not sealed for
65
+ this pairing, nothing was kept; `the relay answered` -> check the relay site.
66
+ Revoking a paired phone later is `phone-devices.mjs revoke`.
@@ -18,7 +18,7 @@ node "$HOME/.claude/scripts/office-control.mjs" status --json
18
18
  Report in `outputLanguage`:
19
19
 
20
20
  - `running`, and when it is, `url` and `idleMinutes` (0 means it runs until `office-off`);
21
- - `remote`: "off" until a phone is paired with `office-pair.mjs`, "configured"
21
+ - `remote`: "off" until a phone is paired with `/multi-agent:office-pair`, "configured"
22
22
  when only the prefs block is set, "paired" once a device is; report the line
23
23
  as given;
24
24
  - `pairedDevices`: the devices the phone registry lists; revoking one is
@@ -73,7 +73,7 @@ Run every step automatically:
73
73
  ```
74
74
  Step 0: DOCTOR doctor.mjs - exit 2 or 4 stops the sync
75
75
  Step 1.5: DETECT Compare timestamps, find stale targets
76
- Step 2: COPILOT Claude Code -> Copilot CLI (instructions + 69 sub-command skills)
76
+ Step 2: COPILOT Claude Code -> Copilot CLI (instructions + 70 sub-command skills)
77
77
  Step 2b: CODEX Claude Code -> Codex CLI (1 router skill + sub-command specs as refs + agent TOML)
78
78
  Step 3: REPO Claude Code -> pipeline repo (genericized, personal data scrub, bash -n on all sh)
79
79
  Step 3c: PLUGINS pipeline shared/external -> multi-agent-plugins marketplace (rebuild knowledge/,
@@ -253,14 +253,14 @@ same specs as reference files rather than as peer skills, via Step 2b - see
253
253
  |-------------|-------------|
254
254
  | `~/.claude/commands/multi-agent/{cmd}/SKILL.md` | `~/.copilot/skills/multi-agent-{cmd}/SKILL.md` |
255
255
 
256
- **69 commands are synced** (canonical inventory - must match `cross-cli-contract.md` section 1; drift = contract violation):
256
+ **70 commands are synced** (canonical inventory - must match `cross-cli-contract.md` section 1; drift = contract violation):
257
257
 
258
258
  ```
259
259
  analysis, analysis-jira, analysis-resolve, autopilot, autopilot-off, autopilot-on,
260
260
  autopilot-status, bug-bash, build-optimize, channels, complaint-analysis, create-jira,
261
261
  design-check, diff-explain, doctor, estimate, feedback, forget, garbage-collect, graph, help,
262
262
  ios-coding-standard, issue, jira, kill, language, log,
263
- manual-test, model, office-off, office-on, office-status, postmortem, prune-logs, prune-prompts, purge, refactor, research, resume, review, review-analysis, review-issue, review-jira, route-off, route-on, route-status,
263
+ manual-test, model, office-off, office-on, office-pair, office-status, postmortem, prune-logs, prune-prompts, purge, refactor, research, resume, review, review-analysis, review-issue, review-jira, route-off, route-on, route-status,
264
264
  routines, save, scaffold, scan, scenario-audit, search, security-review, serve, setup, stack, status, steer, store-ready, sync, test,
265
265
  test-accessibility, test-dark-mode, test-dynamic-type, test-gen, test-screenshots,
266
266
  testflight-validation, uninstall, update
@@ -358,3 +358,29 @@ export function qrSvg(qr, { scale = 6 } = {}) {
358
358
  `fill="#fff"/><path d="${d}" fill="#000"/></svg>`
359
359
  );
360
360
  }
361
+
362
+ /**
363
+ * The code as terminal text, two module rows per line in half blocks. Light
364
+ * modules are drawn (a dark terminal shows them white), with a two-module quiet
365
+ * zone.
366
+ */
367
+ export function qrText(qr) {
368
+ const q = 2;
369
+ const n = qr.size + q * 2;
370
+ const light = (x, y) => {
371
+ const mx = x - q;
372
+ const my = y - q;
373
+ return !(mx >= 0 && my >= 0 && mx < qr.size && my < qr.size && qr.modules[my][mx]);
374
+ };
375
+ const lines = [];
376
+ for (let y = 0; y < n; y += 2) {
377
+ let line = "";
378
+ for (let x = 0; x < n; x++) {
379
+ const top = light(x, y);
380
+ const bottom = y + 1 < n ? light(x, y + 1) : false;
381
+ line += top && bottom ? "█" : top ? "▀" : bottom ? "▄" : " ";
382
+ }
383
+ lines.push(line);
384
+ }
385
+ return lines.join("\n");
386
+ }
@@ -1,7 +1,7 @@
1
1
  # Cross-CLI Contract (Claude Code · Copilot CLI · Codex CLI)
2
2
 
3
3
  <!-- toc -->
4
- - [1. Command Inventory (69 commands)](#1-command-inventory-69-commands)
4
+ - [1. Command Inventory (70 commands)](#1-command-inventory-70-commands)
5
5
  - [2. Canonical Placeholder Vocabulary](#2-canonical-placeholder-vocabulary)
6
6
  - [2.6 Intentional structural divergence - thin dispatcher vs inlined orchestrator](#26-intentional-structural-divergence---thin-dispatcher-vs-inlined-orchestrator)
7
7
  - [2.7 One command, three different meanings: `/multi-agent:model`](#27-one-command-three-different-meanings-multi-agentmodel)
@@ -20,14 +20,14 @@
20
20
 
21
21
  ---
22
22
 
23
- ## 1. Command Inventory (69 commands)
23
+ ## 1. Command Inventory (70 commands)
24
24
 
25
25
  ```
26
26
  analysis, analysis-jira, analysis-resolve, autopilot, autopilot-off,
27
27
  autopilot-on, autopilot-status, bug-bash, build-optimize, channels, complaint-analysis,
28
28
  create-jira, design-check, diff-explain, doctor, estimate, feedback, forget,
29
29
  garbage-collect, graph, help, ios-coding-standard, issue, jira, kill,
30
- language, log, manual-test, model, office-off, office-on, office-status,
30
+ language, log, manual-test, model, office-off, office-on, office-pair, office-status,
31
31
  postmortem, prune-logs,
32
32
  prune-prompts, purge, refactor, research, resume, review,
33
33
  review-analysis, review-issue, review-jira, route-off, route-on,
@@ -43,7 +43,7 @@ Categories:
43
43
  - **Issue generator** (one-shot, no worktree, asks type Task/Bug/Story, hard approval gate before create): `create-jira`
44
44
  - **Pipeline entries**: `autopilot` (plus the bare `/multi-agent` in the dispatcher). The phase set is a property of the command, and every mode runs its whole set.
45
45
  - **Tail path** (the pipeline tail over work already on a branch, no run behind it): `resume`
46
- - **Ops commands** (one-shot, no worktree): `status`, `log`, `kill`, `steer`, `purge`, `uninstall`, `resume`, `review`, `review-jira`, `review-issue`, `analysis`, `analysis-resolve`, `research`, `scaffold`, `complaint-analysis`, `bug-bash`, `test-gen`, `build-optimize`, `channels`, `scan`, `search`, `diff-explain`, `garbage-collect`, `graph`, `postmortem`, `prune-logs`, `prune-prompts`, `serve`, `office-on`, `office-off`, `office-status`
46
+ - **Ops commands** (one-shot, no worktree): `status`, `log`, `kill`, `steer`, `purge`, `uninstall`, `resume`, `review`, `review-jira`, `review-issue`, `analysis`, `analysis-resolve`, `research`, `scaffold`, `complaint-analysis`, `bug-bash`, `test-gen`, `build-optimize`, `channels`, `scan`, `search`, `diff-explain`, `garbage-collect`, `graph`, `postmortem`, `prune-logs`, `prune-prompts`, `serve`, `office-on`, `office-off`, `office-pair`, `office-status`
47
47
  - **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.
48
48
  - **Meta-ops**: `setup`, `sync`, `update`, `help`, `refactor`, `test`, `stack`, `manual-test`, `language`
49
49
  - **Routines** (user-defined routine registry; the routines they create are local-only and never synced): `save`, `routines`, `forget`
@@ -88,6 +88,7 @@ Status & Resume:
88
88
  /multi-agent:serve Contract server for a client: 127.0.0.1, token, stops when idle
89
89
  /multi-agent:office-on Open the office in your browser: live runs and agents, PRs, keys, memory, system, jobs; its orientation room explains the rest
90
90
  /multi-agent:office-status Is the panel running, its URL (never the token), its last actions
91
+ /multi-agent:office-pair Pair a phone: show the QR, wait, compare the code with you, enrol it
91
92
  /multi-agent:office-off Stop the panel's server (it runs until you do)
92
93
 
93
94
  Post-Hoc & Side-Channel:
@@ -87,6 +87,7 @@ Status & Resume:
87
87
  /multi-agent:serve İstemci için sözleşme sunucusu: 127.0.0.1, token, boşta durur
88
88
  /multi-agent:office-on Ofisi tarayıcıda aç: canlı koşular ve ajanlar, PR'lar, anahtarlar, hafıza, sistem, işler; gerisini oryantasyon odası anlatır
89
89
  /multi-agent:office-status Panel çalışıyor mu, adresi (token asla), son işlemleri
90
+ /multi-agent:office-pair Telefonu eşle: QR'ı göster, bekle, kodu seninle karşılaştır, kaydet
90
91
  /multi-agent:office-off Panelin sunucusunu durdur (sen durdurana kadar çalışır)
91
92
 
92
93
  Post-Hoc & Side-Channel:
@@ -3,7 +3,8 @@
3
3
  * @file office-pair.mjs - pair a phone with this machine for the office
4
4
  * remote layer (features/office-remote-protocol.md, Pairing).
5
5
  *
6
- * start [--relay <url>] register a pairing with the relay and show its QR
6
+ * start [--relay <url>] [--terminal] register a pairing with the relay and
7
+ * show its QR (on this terminal when it is one)
7
8
  * code on this machine's screen
8
9
  * wait wait for the phone's pairing message, open it and
9
10
  * print the comparison code
@@ -42,7 +43,7 @@ import {
42
43
  sealFrame,
43
44
  } from "../lib/office-remote.mjs";
44
45
  import { invokedDirectly } from "../lib/invoked-directly.mjs";
45
- import { encodeQr, qrSvg } from "../lib/qr-code.mjs";
46
+ import { encodeQr, qrSvg, qrText } from "../lib/qr-code.mjs";
46
47
  import { isUnattended } from "../lib/unattended.mjs";
47
48
  import { phoneDir } from "./_phone-auth.mjs";
48
49
  import { readConfig, writeConfig } from "./office-remote-client.mjs";
@@ -143,10 +144,27 @@ async function relayCall(fetchImpl, url, init) {
143
144
  /**
144
145
  * Register a pairing with the relay and show its QR code.
145
146
  *
146
- * @returns {Promise<{pairingId: string, expiresAt: string, page: string, opened: boolean}>}
147
+ * With `terminal`, the QR is also drawn on that stream, but only when it is a
148
+ * TTY: captured output (an agent's tool call, a pipe, a log) would keep the
149
+ * one-time secret the code carries.
150
+ *
151
+ * @returns {Promise<{pairingId: string, expiresAt: string, page: string, opened: boolean,
152
+ * terminal?: boolean, terminalRefused?: string}>}
147
153
  */
148
- export async function start({ relay, env = process.env, fetchImpl = fetch, now = Date.now() }) {
149
- const relayUrl = relayOrigin(relay ?? relayFromPrefs(env) ?? "");
154
+ export async function start({
155
+ relay,
156
+ env = process.env,
157
+ fetchImpl = fetch,
158
+ now = Date.now(),
159
+ terminal = null,
160
+ }) {
161
+ const configured = relay ?? relayFromPrefs(env);
162
+ if (!configured) {
163
+ throw new Refusal(
164
+ "no relay is set; add prefs global.office.remote.relayUrl or pass --relay <url>",
165
+ );
166
+ }
167
+ const relayUrl = relayOrigin(configured);
150
168
  const existing = readConfig(env);
151
169
  const machine =
152
170
  existing?.machinePrivatePem && existing?.machinePublic
@@ -187,8 +205,18 @@ export async function start({ relay, env = process.env, fetchImpl = fetch, now =
187
205
  JSON.stringify({ relayUrl, pairingId, secret, expiresAt, relayToken }) + "\n",
188
206
  );
189
207
  const link = pairingLink({ relayUrl, pairingId, secret, machinePublic: machine.publicKey });
190
- writePrivate(pagePath(env), pageHtml(qrSvg(encodeQr(link, { ecc: "M" }))));
191
- return { pairingId, expiresAt, page: pagePath(env), opened: openPage(pagePath(env), env) };
208
+ const qr = encodeQr(link, { ecc: "M" });
209
+ writePrivate(pagePath(env), pageHtml(qrSvg(qr)));
210
+ const out = { pairingId, expiresAt, page: pagePath(env) };
211
+ if (terminal) {
212
+ if (terminal.isTTY) {
213
+ terminal.write(`${qrText(qr)}\n\nScan with the phone; the code expires in 10 minutes.\n`);
214
+ return { ...out, opened: false, terminal: true };
215
+ }
216
+ out.terminal = false;
217
+ out.terminalRefused = "stdout is not a terminal, so the QR stays in the page";
218
+ }
219
+ return { ...out, opened: openPage(pagePath(env), env) };
192
220
  }
193
221
 
194
222
  function pending(env, now) {
@@ -376,7 +404,7 @@ async function main(argv) {
376
404
  const [cmd, ...rest] = argv;
377
405
  if (!["start", "wait", "confirm", "cancel"].includes(cmd)) {
378
406
  process.stderr.write(
379
- "usage: office-pair.mjs start [--relay <url>] | wait | confirm <code> | cancel\n",
407
+ "usage: office-pair.mjs start [--relay <url>] [--terminal] | wait | confirm <code> | cancel\n",
380
408
  );
381
409
  return 2;
382
410
  }
@@ -388,7 +416,10 @@ async function main(argv) {
388
416
  let out;
389
417
  if (cmd === "start") {
390
418
  const i = rest.indexOf("--relay");
391
- out = await start({ relay: i === -1 ? undefined : rest[i + 1] });
419
+ out = await start({
420
+ relay: i === -1 ? undefined : rest[i + 1],
421
+ terminal: rest.includes("--terminal") ? process.stdout : null,
422
+ });
392
423
  } else if (cmd === "wait") out = await wait({});
393
424
  else if (cmd === "confirm") out = await confirm({ code: rest[0] });
394
425
  else out = cancel();
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
- "generatedAt": "2026-10-27T13:35:46Z",
4
- "skillCount": 237,
3
+ "generatedAt": "2026-10-31T07:29:16Z",
4
+ "skillCount": 238,
5
5
  "entries": [
6
6
  {
7
7
  "path": "shared/core/apple-archive-compliance/SKILL.md",
8
- "sha256": "08d5277e4a6c246c613bd3bea27646f580f1bdc1937cb4acbbd93a156e15b24e"
8
+ "sha256": "2bffd220fd3e3b59160f5b6834633c3ad144c89b192556f01b9405da706b221b"
9
9
  },
10
10
  {
11
11
  "path": "shared/core/google-play-compliance/SKILL.md",
12
- "sha256": "34e87f1e6fde51dd19c9ccff00e21cd7cee74f487b5dec54deec2268ff831b3b"
12
+ "sha256": "5da8befd481459823fd5945d11215e70d751bad14b71b6050417a550282a4f03"
13
13
  },
14
14
  {
15
15
  "path": "shared/core/multi-agent-analysis-jira/SKILL.md",
@@ -135,9 +135,13 @@
135
135
  "path": "shared/core/multi-agent-office-on/SKILL.md",
136
136
  "sha256": "b46a2f79beeee65ae7ad6cbfc58b4631c5146a7761e91a99b8a056d6f49c690d"
137
137
  },
138
+ {
139
+ "path": "shared/core/multi-agent-office-pair/SKILL.md",
140
+ "sha256": "6693c2453922bf87e22d5acd203f201c56b3389c831e297145b99186bb466ae5"
141
+ },
138
142
  {
139
143
  "path": "shared/core/multi-agent-office-status/SKILL.md",
140
- "sha256": "fbe2f99e789facebe89f10655389ea1988dd5a6db03b054487a9c4a8e6d43f2f"
144
+ "sha256": "a34e42dc79bfe9bc8ca87456558baf1601b49168e94c7b28fb6cd3e853bf3d2e"
141
145
  },
142
146
  {
143
147
  "path": "shared/core/multi-agent-postmortem/SKILL.md",
@@ -249,7 +253,7 @@
249
253
  },
250
254
  {
251
255
  "path": "shared/core/multi-agent-sync/SKILL.md",
252
- "sha256": "17f734fa2b84d9a4c757f9745be8ff40d3097f5de89caf55124b48439a737093"
256
+ "sha256": "e4d247d7b4708cb0984d81b6584851bea0a2cdee97ebcfad8498adcd194b7675"
253
257
  },
254
258
  {
255
259
  "path": "shared/core/multi-agent-test-accessibility/SKILL.md",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
- "skillCount": 237,
3
+ "skillCount": 238,
4
4
  "entries": [
5
5
  {
6
6
  "name": "accessibility-compliance-accessibility-audit",
@@ -202,7 +202,7 @@
202
202
  },
203
203
  {
204
204
  "name": "apple-archive-compliance",
205
- "description": "Apple App Store Review compliance - wraps the multi-agent-toolkit-mcp `ios_app_store_audit` tool (18-rule deep scan) with ITMS error code mapping + EN/TR humanizer templates. Consumed by: /multi-agent:test 'store-ready' (primary dispatch), Phase 3 Security Auditor (catalog cross-ref on Info.plist ",
205
+ "description": "Apple App Store Review compliance - wraps the multi-agent-toolkit-mcp `ios_app_store_audit` tool (18-rule deep scan) with ITMS error code mapping + EN/TR humanizer templates. Used by /multi-agent:test store-ready, the Phase 3 security auditor, /multi-agent:review and /multi-agent:channels. Use whe",
206
206
  "platform": null,
207
207
  "group": "core",
208
208
  "plugin": null,
@@ -620,7 +620,7 @@
620
620
  },
621
621
  {
622
622
  "name": "google-play-compliance",
623
- "description": "Google Play Store publication compliance - bundletool + aapt2 + apksigner orchestration + 21-rule policy catalog with Play Console error codes + humanizer templates. Consumed by: /multi-agent:test 'store-ready' (primary dispatch), Phase 3 Security Auditor (catalog cross-ref on AndroidManifest / bu",
623
+ "description": "Google Play Store publication compliance - bundletool + aapt2 + apksigner orchestration + 21-rule policy catalog with Play Console error codes + humanizer templates. Used by /multi-agent:test store-ready, the Phase 3 security auditor, /multi-agent:review and /multi-agent:channels. Use when an .aab",
624
624
  "platform": null,
625
625
  "group": "core",
626
626
  "plugin": null,
@@ -1137,7 +1137,7 @@
1137
1137
  },
1138
1138
  {
1139
1139
  "name": "multi-agent-channels",
1140
- "description": "Multi-channel reporter - Jira/Confluence/Wiki/PR description. Multi-select channels + content, humanizer pass, reviewer-preserving Bitbucket PR PUT. Phase 5 delegates to this skill; users can invoke post-hoc by Jira ID / PR URL / branch.",
1140
+ "description": "Multi-channel reporter - Jira/Confluence/Wiki/PR description. Multi-select channels + content, humanizer pass, reviewer-preserving Bitbucket PR PUT. Use to post or redo a run's report; Phase 5 delegates here, or invoke by Jira ID / PR URL / branch.",
1141
1141
  "platform": null,
1142
1142
  "group": "core",
1143
1143
  "plugin": null,
@@ -1377,6 +1377,17 @@
1377
1377
  "triggerPaths": [],
1378
1378
  "relativePath": "shared/core/multi-agent-office-on/SKILL.md"
1379
1379
  },
1380
+ {
1381
+ "name": "multi-agent-office-pair",
1382
+ "description": "Pair a phone with the office: QR, wait, compare the code with the user, enrol. Use when the office should be reachable from a phone.",
1383
+ "platform": null,
1384
+ "group": "core",
1385
+ "plugin": null,
1386
+ "invokeAs": "multi-agent-office-pair",
1387
+ "triggerKeywords": [],
1388
+ "triggerPaths": [],
1389
+ "relativePath": "shared/core/multi-agent-office-pair/SKILL.md"
1390
+ },
1380
1391
  {
1381
1392
  "name": "multi-agent-office-status",
1382
1393
  "description": "Whether the office panel is running, its URL (never the token) and its last actions. Use when unsure if the panel is open.",
@@ -2,11 +2,11 @@
2
2
 
3
3
  Single source of truth for skills delivered to both Claude Code (`~/.claude/skills/`) and Copilot CLI (`~/.copilot/skills/`) by the installer.
4
4
 
5
- **Total:** 237 skills (72 core + 165 external). Auto-generated by `scripts/gen-skills-index.mjs` - do not edit by hand.
5
+ **Total:** 238 skills (73 core + 165 external). Auto-generated by `scripts/gen-skills-index.mjs` - do not edit by hand.
6
6
 
7
7
  ## Directory layout
8
8
 
9
- - **`core/`** - 72 `multi-agent*` orchestration skills that are pipeline-critical. Edits here are core-code changes.
9
+ - **`core/`** - 73 `multi-agent*` orchestration skills that are pipeline-critical. Edits here are core-code changes.
10
10
  - **`external/`** - 165 iOS / Android / generic skills that ship into the stack plugins. Each names its origin in `metadata.source`: `multi-agent-pipeline` when written here, or the upstream and license a `NOTICE-*.md` in this directory covers.
11
11
  - Install destinations (ADR-0009): Claude Code gets NO local copy of `external/` - it loads those skills from the `multi-agent-plugins` marketplace, namespaced (`ai-<stack>-toolkit:<name>`); only the two compliance catalogs from `core/` land in `~/.claude/skills/`. Copilot CLI and Codex CLI receive a flat copy filtered to the enabled stacks. `external/` remains the single authoring source that `build-stack-plugins.mjs` publishes from.
12
12
 
@@ -14,7 +14,7 @@ Source layout is logical grouping only - skill discovery at runtime is unchang
14
14
 
15
15
  ## Categories
16
16
 
17
- - [Pipeline Orchestration](#pipeline-orchestration) - 72
17
+ - [Pipeline Orchestration](#pipeline-orchestration) - 73
18
18
  - [iOS / Apple Ecosystem](#ios-apple-ecosystem) - 94
19
19
  - [Android / Kotlin](#android-kotlin) - 16
20
20
  - [Web](#web) - 10
@@ -59,6 +59,7 @@ Source layout is logical grouping only - skill discovery at runtime is unchang
59
59
  | [`multi-agent-model`](./core/multi-agent-model/) | `core` | Turn the top model rung on or off and keep the cost ledger's pricing in step with it. Use when asked to enable or disable Fable, or which mo |
60
60
  | [`multi-agent-office-off`](./core/multi-agent-office-off/) | `core` | Close the office panel and stop its local server. Use when done with the panel. |
61
61
  | [`multi-agent-office-on`](./core/multi-agent-office-on/) | `core` | Open the office: a local browser page that shows runs and agents live and drives the ecosystem (new runs, jobs, PRs, keys, memory, system, c |
62
+ | [`multi-agent-office-pair`](./core/multi-agent-office-pair/) | `core` | Pair a phone with the office: QR, wait, compare the code with the user, enrol. Use when the office should be reachable from a phone. |
62
63
  | [`multi-agent-office-status`](./core/multi-agent-office-status/) | `core` | Whether the office panel is running, its URL (never the token) and its last actions. Use when unsure if the panel is open. |
63
64
  | [`multi-agent-postmortem`](./core/multi-agent-postmortem/) | `core` | Post-mortem of a run from its session transcripts: loops, stalls, root-cause hypotheses on file:line, fixes. Read-only, redacted. Use when a |
64
65
  | [`multi-agent-prune-logs`](./core/multi-agent-prune-logs/) | `core` | Delete per-task project logs under ~/.claude/logs/multi-agent (filter by age/project/task). Audit trail + metrics are preserved. Dry-run fir |
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: apple-archive-compliance
3
- description: "Apple App Store Review compliance - wraps the multi-agent-toolkit-mcp `ios_app_store_audit` tool (18-rule deep scan) with ITMS error code mapping + EN/TR humanizer templates. Consumed by: /multi-agent:test 'store-ready' (primary dispatch), Phase 3 Security Auditor (catalog cross-ref on Info.plist / PrivacyInfo / entitlements diffs), /multi-agent:review (PR citation), /multi-agent:channels (PR body auto-augmentation). Wiring enforced by smoke-compliance-skills.sh. Use when an .xcarchive needs an App Store review check before submission, or a rejection has to be diagnosed."
3
+ description: "Apple App Store Review compliance - wraps the multi-agent-toolkit-mcp `ios_app_store_audit` tool (18-rule deep scan) with ITMS error code mapping + EN/TR humanizer templates. Used by /multi-agent:test store-ready, the Phase 3 security auditor, /multi-agent:review and /multi-agent:channels. Use when an .xcarchive needs an App Store review check before submission, or a rejection has to be diagnosed."
4
4
  user-invocable: true
5
5
  argument-hint: '[archive-path] [--threshold=error|warning|info] [--format=markdown|json] [--lang=en|tr] - no-arg: picks most recent .xcarchive from ~/Library/Developer/Xcode/Archives/'
6
6
  metadata:
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: google-play-compliance
3
- description: "Google Play Store publication compliance - bundletool + aapt2 + apksigner orchestration + 21-rule policy catalog with Play Console error codes + humanizer templates. Consumed by: /multi-agent:test 'store-ready' (primary dispatch), Phase 3 Security Auditor (catalog cross-ref on AndroidManifest / build.gradle / proguard / signing diffs), /multi-agent:review (PR citation), /multi-agent:channels (PR body auto-augmentation). Wiring enforced by smoke-compliance-skills.sh. Use when an .aab or .apk needs a Play policy check before upload, or a Play rejection has to be diagnosed."
3
+ description: "Google Play Store publication compliance - bundletool + aapt2 + apksigner orchestration + 21-rule policy catalog with Play Console error codes + humanizer templates. Used by /multi-agent:test store-ready, the Phase 3 security auditor, /multi-agent:review and /multi-agent:channels. Use when an .aab or .apk needs a Play policy check before upload, or a Play rejection has to be diagnosed."
4
4
  user-invocable: true
5
5
  argument-hint: '[bundle-path] [--threshold=error|warning|info] [--format=markdown|json] [--lang=en|tr] - no-arg: picks most recent .aab from app/build/outputs/bundle/release/'
6
6
  metadata: