@mmerterden/multi-agent-pipeline 20.17.1 → 20.18.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 (83) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/docs/facts.json +6 -6
  3. package/install/_mcp-register.mjs +1 -1
  4. package/install/_xcode-skills.mjs +263 -0
  5. package/install/catalog-history.json +1 -1
  6. package/install/claude.mjs +23 -0
  7. package/install/codex.mjs +11 -0
  8. package/install/copilot.mjs +9 -0
  9. package/manifest.json +85 -45
  10. package/package.json +1 -1
  11. package/pipeline/commands/multi-agent/stack/SKILL.md +2 -0
  12. package/pipeline/lib/xcode-plugin.mjs +131 -0
  13. package/pipeline/multi-agent-refs/features/doctor.md +10 -0
  14. package/pipeline/scripts/doctor.mjs +38 -0
  15. package/pipeline/scripts/uninstall.mjs +57 -1
  16. package/pipeline/skills/.skill-manifest.json +33 -13
  17. package/pipeline/skills/.skills-index.json +66 -11
  18. package/pipeline/skills/shared/README.md +18 -13
  19. package/pipeline/skills/shared/external/NOTICE-avdlee-swiftui-agent-skill.md +3 -1
  20. package/pipeline/skills/shared/external/NOTICE-dimillian-skills.md +2 -1
  21. package/pipeline/skills/shared/external/hig-app-icons/SKILL.md +159 -0
  22. package/pipeline/skills/shared/external/hig-app-icons/evals/evals.json +48 -0
  23. package/pipeline/skills/shared/external/hig-app-icons/evals/trigger-eval.json +22 -0
  24. package/pipeline/skills/shared/external/hig-app-icons/references/icon-workflow.md +115 -0
  25. package/pipeline/skills/shared/external/hig-components-layout/SKILL.md +32 -4
  26. package/pipeline/skills/shared/external/hig-components-layout/evals/evals.json +47 -0
  27. package/pipeline/skills/shared/external/hig-components-layout/evals/trigger-eval.json +22 -0
  28. package/pipeline/skills/shared/external/hig-components-layout/references/bars-and-tabs.md +231 -0
  29. package/pipeline/skills/shared/external/hig-components-layout/references/containers.md +5 -30
  30. package/pipeline/skills/shared/external/hig-components-status/SKILL.md +1 -1
  31. package/pipeline/skills/shared/external/hig-foundations/SKILL.md +23 -4
  32. package/pipeline/skills/shared/external/hig-foundations/evals/evals.json +47 -0
  33. package/pipeline/skills/shared/external/hig-foundations/evals/trigger-eval.json +21 -0
  34. package/pipeline/skills/shared/external/hig-foundations/references/foundations-detail.md +34 -26
  35. package/pipeline/skills/shared/external/hig-foundations/references/type-color-spacing.md +219 -0
  36. package/pipeline/skills/shared/external/hig-inputs/SKILL.md +5 -4
  37. package/pipeline/skills/shared/external/hig-patterns/SKILL.md +19 -3
  38. package/pipeline/skills/shared/external/hig-patterns/references/onboarding-and-states.md +188 -0
  39. package/pipeline/skills/shared/external/hig-patterns/references/patterns.md +5 -11
  40. package/pipeline/skills/shared/external/hig-platforms/SKILL.md +17 -5
  41. package/pipeline/skills/shared/external/hig-platforms/references/ipad-layout.md +218 -0
  42. package/pipeline/skills/shared/external/ios-accessibility/SKILL.md +4 -1
  43. package/pipeline/skills/shared/external/ios-accessibility/references/large-content-and-appearance.md +135 -0
  44. package/pipeline/skills/shared/external/ios-design-review/SKILL.md +146 -0
  45. package/pipeline/skills/shared/external/ios-design-review/evals/evals.json +48 -0
  46. package/pipeline/skills/shared/external/ios-design-review/evals/trigger-eval.json +22 -0
  47. package/pipeline/skills/shared/external/ios-design-review/references/appearance-matrix.md +135 -0
  48. package/pipeline/skills/shared/external/ios-design-review/references/checklist.md +193 -0
  49. package/pipeline/skills/shared/external/ios-haptics/SKILL.md +191 -0
  50. package/pipeline/skills/shared/external/ios-haptics/evals/evals.json +49 -0
  51. package/pipeline/skills/shared/external/ios-haptics/evals/trigger-eval.json +22 -0
  52. package/pipeline/skills/shared/external/ios-haptics/references/core-haptics.md +215 -0
  53. package/pipeline/skills/shared/external/ios-iphone-duo/NOTICE.md +53 -0
  54. package/pipeline/skills/shared/external/ios-iphone-duo/SKILL.md +179 -0
  55. package/pipeline/skills/shared/external/ios-iphone-duo/evals/evals.json +65 -0
  56. package/pipeline/skills/shared/external/ios-iphone-duo/evals/trigger-eval.json +22 -0
  57. package/pipeline/skills/shared/external/ios-iphone-duo/references/api-map.md +212 -0
  58. package/pipeline/skills/shared/external/ios-iphone-duo/references/fixed-assumptions.md +202 -0
  59. package/pipeline/skills/shared/external/ios-iphone-duo/references/poses-and-panes.md +122 -0
  60. package/pipeline/skills/shared/external/ios-sf-symbols/SKILL.md +177 -0
  61. package/pipeline/skills/shared/external/ios-sf-symbols/evals/evals.json +49 -0
  62. package/pipeline/skills/shared/external/ios-sf-symbols/evals/trigger-eval.json +22 -0
  63. package/pipeline/skills/shared/external/ios-sf-symbols/references/effects-and-custom-symbols.md +135 -0
  64. package/pipeline/skills/shared/external/swiftui-animation/SKILL.md +38 -50
  65. package/pipeline/skills/shared/external/swiftui-animation/evals/evals.json +47 -0
  66. package/pipeline/skills/shared/external/swiftui-animation/evals/trigger-eval.json +22 -0
  67. package/pipeline/skills/shared/external/swiftui-animation/references/animation-advanced.md +7 -73
  68. package/pipeline/skills/shared/external/swiftui-animation/references/scroll-effects.md +185 -0
  69. package/pipeline/skills/shared/external/swiftui-expert-skill/SKILL.md +6 -6
  70. package/pipeline/skills/shared/external/swiftui-expert-skill/references/animation-advanced.md +3 -253
  71. package/pipeline/skills/shared/external/swiftui-expert-skill/references/animation-basics.md +4 -47
  72. package/pipeline/skills/shared/external/swiftui-expert-skill/references/animation-transitions.md +3 -111
  73. package/pipeline/skills/shared/external/swiftui-expert-skill/references/liquid-glass.md +11 -381
  74. package/pipeline/skills/shared/external/swiftui-liquid-glass/SKILL.md +184 -224
  75. package/pipeline/skills/shared/external/swiftui-liquid-glass/evals/evals.json +47 -0
  76. package/pipeline/skills/shared/external/swiftui-liquid-glass/evals/trigger-eval.json +22 -0
  77. package/pipeline/skills/shared/external/swiftui-liquid-glass/references/liquid-glass.md +246 -33
  78. package/pipeline/skills/shared/external/swiftui-liquid-glass/references/uikit-glass.md +227 -0
  79. package/pipeline/skills/shared/external/swiftui-patterns/SKILL.md +15 -18
  80. package/pipeline/skills/shared/external/swiftui-ui-patterns/references/components-index.md +1 -1
  81. package/pipeline/skills/shared/external/swiftui-ui-patterns/references/haptics.md +6 -68
  82. package/pipeline/skills/skills-index.md +16 -11
  83. package/pipeline/skills/shared/external/swiftui-patterns/references/design-polish.md +0 -786
@@ -53,6 +53,12 @@ import { createHash } from "crypto";
53
53
  import { join, dirname } from "path";
54
54
  import { homedir } from "os";
55
55
  import { pathToFileURL } from "url";
56
+ import {
57
+ CLAUDE_MARKETPLACE_DIR,
58
+ XCODE_MARKETPLACE,
59
+ XCODE_PLUGIN_ID,
60
+ XCODE_SKILLS_MANIFEST,
61
+ } from "../lib/xcode-plugin.mjs";
56
62
  import { createInterface } from "readline";
57
63
 
58
64
  const HOME = process.env.HOME;
@@ -425,6 +431,48 @@ function deregisterClaudeMcpServer() {
425
431
  deregisterMcpServer("claude", existsSync(localBin) ? localBin : undefined, ["--scope", "user"]);
426
432
  }
427
433
 
434
+ /**
435
+ * Apple's Xcode plugin is linked into Claude Code from a local directory
436
+ * marketplace the installer keeps at the installed Xcode build. Without the
437
+ * pipeline nothing refreshes that copy, so it goes with the pipeline; Xcode
438
+ * itself still offers the same skills.
439
+ */
440
+ function unlinkClaudeXcodePlugin(home) {
441
+ const mpDir = join(home, CLAUDE_MARKETPLACE_DIR);
442
+ if (!existsSync(mpDir)) return;
443
+ const localBin = join(homedir(), ".local", "bin", "claude");
444
+ const cli = existsSync(localBin) ? localBin : "claude";
445
+ const steps = [
446
+ ["plugin", "uninstall", XCODE_PLUGIN_ID, "--scope", "user"],
447
+ ["plugin", "marketplace", "remove", XCODE_MARKETPLACE],
448
+ ];
449
+ if (dryRun) {
450
+ for (const args of steps) report("would run", `claude ${args.join(" ")}`);
451
+ report("would remove", mpDir);
452
+ return;
453
+ }
454
+ const failed = [];
455
+ for (const args of steps) {
456
+ try {
457
+ execFileSync(cli, args, { stdio: "pipe", timeout: 20_000 });
458
+ } catch (e) {
459
+ const out = `${e?.stderr ?? ""}${e?.stdout ?? ""}`;
460
+ if (!/not (found|installed)|no such|does not exist|unknown/i.test(out)) failed.push(args);
461
+ }
462
+ }
463
+ // Claude Code's settings still point at the directory until the CLI drops
464
+ // them; deleting it first would leave a marketplace that fails to load at
465
+ // every start.
466
+ if (failed.length) {
467
+ console.log(" kept: Apple's Xcode skills link - claude could not remove it; run:");
468
+ for (const args of failed) console.log(` claude ${args.join(" ")}`);
469
+ console.log(` then delete ${mpDir}`);
470
+ return;
471
+ }
472
+ rmIfExists(mpDir);
473
+ console.log(" removed: Apple's Xcode skills link (xcode-apple marketplace)");
474
+ }
475
+
428
476
  /**
429
477
  * Copilot registers the same server, so leaving it behind would keep a stale entry
430
478
  * pointing at a package the user just removed.
@@ -589,7 +637,14 @@ function rmMatchingFiles(parent, predicate) {
589
637
  const PLUGIN_SKILLS_MANIFEST = ".plugin-skills-manifest.json";
590
638
 
591
639
  function rmPluginDeliveredSkills(skillsDir) {
592
- const manifestPath = join(skillsDir, PLUGIN_SKILLS_MANIFEST);
640
+ return (
641
+ rmManifestListedSkills(skillsDir, PLUGIN_SKILLS_MANIFEST) +
642
+ rmManifestListedSkills(skillsDir, XCODE_SKILLS_MANIFEST)
643
+ );
644
+ }
645
+
646
+ function rmManifestListedSkills(skillsDir, manifestName) {
647
+ const manifestPath = join(skillsDir, manifestName);
593
648
  if (!existsSync(manifestPath)) return 0;
594
649
  let names;
595
650
  try {
@@ -855,6 +910,7 @@ export async function main() {
855
910
  console.log(" [Claude Code] Removing...");
856
911
  deregisterClaudeMcpServer();
857
912
  const CLAUDE = join(HOME, ".claude");
913
+ unlinkClaudeXcodePlugin(HOME);
858
914
  rmCommandsPreservingLocalOnly(join(CLAUDE, "commands", "multi-agent"));
859
915
  rmIfExists(join(CLAUDE, "scripts"));
860
916
  // Pipeline-managed trees the installer lays down alongside scripts/.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
- "generatedAt": "2026-10-07T19:19:02Z",
4
- "skillCount": 223,
3
+ "generatedAt": "2026-10-09T05:08:19Z",
4
+ "skillCount": 228,
5
5
  "entries": [
6
6
  {
7
7
  "path": "shared/core/apple-archive-compliance/SKILL.md",
@@ -495,17 +495,21 @@
495
495
  "path": "shared/external/healthkit/SKILL.md",
496
496
  "sha256": "fece1986bc35925e34fed8d8cb13aa59a3577b8cedefdc02c736c0d4a5d38aff"
497
497
  },
498
+ {
499
+ "path": "shared/external/hig-app-icons/SKILL.md",
500
+ "sha256": "70168a30347b1c51ff72ed30b54443add2e1ad63a6aae0aa79bb32bd87d00c4d"
501
+ },
498
502
  {
499
503
  "path": "shared/external/hig-components-content/SKILL.md",
500
504
  "sha256": "910e4e24c47a3e103b3d398a1c49684f0990966423e2ea2d871111d6251d8a6c"
501
505
  },
502
506
  {
503
507
  "path": "shared/external/hig-components-layout/SKILL.md",
504
- "sha256": "6b2fbc80d37a12f869278b9b281d28f42f5b1dfaa38bdf271fa1d5823320a179"
508
+ "sha256": "dde0a923736255aa2e5de791700fc51945d3c63f41fc7ec15e252953bd7cf168"
505
509
  },
506
510
  {
507
511
  "path": "shared/external/hig-components-status/SKILL.md",
508
- "sha256": "52d4fb97f8709b64ec9bfbd165eaaa6fdf37a1413a8d518031eac1931d10255a"
512
+ "sha256": "8458f7de5e4f3407e162ffe5c4831ce7fb3e93ee4922bfb4d45444cfa31f59fb"
509
513
  },
510
514
  {
511
515
  "path": "shared/external/hig-components-system/SKILL.md",
@@ -513,19 +517,19 @@
513
517
  },
514
518
  {
515
519
  "path": "shared/external/hig-foundations/SKILL.md",
516
- "sha256": "1ef63dd95e6ac65297b5f7b05f687bbf46464f6bde9dd59b545e10f256885b89"
520
+ "sha256": "e0a345ef1e25b9741dc848d9aac9c5bb045a69034b22348036d769adb8441f06"
517
521
  },
518
522
  {
519
523
  "path": "shared/external/hig-inputs/SKILL.md",
520
- "sha256": "8d12e3ea11963f038cfc7a3f77a4469e5511cb22c2564caa68ca3ce1d11d9ba0"
524
+ "sha256": "ec8ec26f5a4469baa72aaa59def64a44891b1655d1ef6a1936bd4d29d926b290"
521
525
  },
522
526
  {
523
527
  "path": "shared/external/hig-patterns/SKILL.md",
524
- "sha256": "9028a1f659f5f96f5fc8f16ae9715e8058b5b049bda8a4eafc096c30c68b66f3"
528
+ "sha256": "771a08a0ba8d6268ea4139fc2cde4a99750cb2c31a78b755a41fae78efd742c9"
525
529
  },
526
530
  {
527
531
  "path": "shared/external/hig-platforms/SKILL.md",
528
- "sha256": "14a4c122dce4ce56f70e9f6c5da8bed30585a22f54ec2c586185c85e9cbfb1a5"
532
+ "sha256": "647da7ec54103b5b93198506e254d7468150fc24b880128a1bab7856390eaf25"
529
533
  },
530
534
  {
531
535
  "path": "shared/external/hig-technologies/SKILL.md",
@@ -545,7 +549,7 @@
545
549
  },
546
550
  {
547
551
  "path": "shared/external/ios-accessibility/SKILL.md",
548
- "sha256": "5331d7031d6e8ba54008e5239a7d1209a2046538717c1f86ea270d5d40057368"
552
+ "sha256": "8dc07ddb1e18d0d0572967ee77b39ffe36342ffc781ffb9a3910c4a2d8ee41fe"
549
553
  },
550
554
  {
551
555
  "path": "shared/external/ios-coding-standard/SKILL.md",
@@ -555,6 +559,18 @@
555
559
  "path": "shared/external/ios-debugger-agent/SKILL.md",
556
560
  "sha256": "2126e7211042209922a848d5e24589b893c4d3f5da658d81c166e5c1347f4b3f"
557
561
  },
562
+ {
563
+ "path": "shared/external/ios-design-review/SKILL.md",
564
+ "sha256": "cdef9893d29fded21c87d39cc30075d7b21c79d07b6cca5386e6e1fca35deb2a"
565
+ },
566
+ {
567
+ "path": "shared/external/ios-haptics/SKILL.md",
568
+ "sha256": "5edfc54f3d7733b6c48d1c9d30a3bbd30a0d5437be1dd6427e817b6e81f18150"
569
+ },
570
+ {
571
+ "path": "shared/external/ios-iphone-duo/SKILL.md",
572
+ "sha256": "934df39d42cac41473d4c7605891c4b15aca2d185099c21b36a3c1abbbea8359"
573
+ },
558
574
  {
559
575
  "path": "shared/external/ios-localization/SKILL.md",
560
576
  "sha256": "3ee1a34bbf6c0b77e1e9f16cb7d8bc3d10f2ba7bf6d0b48e64126afcf9dbe2b6"
@@ -571,6 +587,10 @@
571
587
  "path": "shared/external/ios-security/SKILL.md",
572
588
  "sha256": "48924d4faea93fdf435851cbc77ba26cb33f3f8256954787af539f410f64d5c0"
573
589
  },
590
+ {
591
+ "path": "shared/external/ios-sf-symbols/SKILL.md",
592
+ "sha256": "5fa9333a5d9699efba6389a9529aca88a38e2d8de873a129d4fead809143f1ed"
593
+ },
574
594
  {
575
595
  "path": "shared/external/ios-simulator/SKILL.md",
576
596
  "sha256": "f7cb08384d448e3e73b0373e19f3ee1eca90b43eb7a3e3ac5d59a74035c0fc14"
@@ -773,11 +793,11 @@
773
793
  },
774
794
  {
775
795
  "path": "shared/external/swiftui-animation/SKILL.md",
776
- "sha256": "49f49c590f4304ef0905a890b2215d520ff187f8e1b9e68535cdd6099f51892b"
796
+ "sha256": "d67e447c1b2cc002f007b46f68a15a1181a13d5ed16078b79333ebf48d31b329"
777
797
  },
778
798
  {
779
799
  "path": "shared/external/swiftui-expert-skill/SKILL.md",
780
- "sha256": "1fc036e37dd3708fbe333a231e26b5075017b50860403f095399b3b5a7ee4d11"
800
+ "sha256": "c6d5ee097036edf12c6c1b5aed64b01bdafb2eb240169c82de2e951b33997cf6"
781
801
  },
782
802
  {
783
803
  "path": "shared/external/swiftui-gestures/SKILL.md",
@@ -789,7 +809,7 @@
789
809
  },
790
810
  {
791
811
  "path": "shared/external/swiftui-liquid-glass/SKILL.md",
792
- "sha256": "bbcaeda80b6c052a521a63880f0f2f6ddabc589d4c65455b4286a26b4cce4808"
812
+ "sha256": "555aa9c8178f4f14484ff8adee57ea80621be48b6b0628fe9852277e37349048"
793
813
  },
794
814
  {
795
815
  "path": "shared/external/swiftui-navigation/SKILL.md",
@@ -797,7 +817,7 @@
797
817
  },
798
818
  {
799
819
  "path": "shared/external/swiftui-patterns/SKILL.md",
800
- "sha256": "35c710faa4ff459f6349fcbc422bc53d4cad4c485b2b592e4fb96414778777f6"
820
+ "sha256": "0cea41552443a7ee86928b7666ca99c76447a56d1e8f54cca1292e063d966730"
801
821
  },
802
822
  {
803
823
  "path": "shared/external/swiftui-performance-audit/SKILL.md",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
- "skillCount": 223,
3
+ "skillCount": 228,
4
4
  "entries": [
5
5
  {
6
6
  "name": "accessibility-compliance-accessibility-audit",
@@ -640,6 +640,17 @@
640
640
  "triggerPaths": [],
641
641
  "relativePath": "shared/external/healthkit/SKILL.md"
642
642
  },
643
+ {
644
+ "name": "hig-app-icons",
645
+ "description": "iOS app icons: Icon Composer layered icons, default, dark, clear and tinted appearances, asset catalogs, alternate icons and the archive checks icons fail. Use when designing, exporting, wiring up or reviewing an app icon, or diagnosing an icon upload error or rejection.",
646
+ "platform": null,
647
+ "group": "external",
648
+ "plugin": "ai-ios-toolkit",
649
+ "invokeAs": "ai-ios-toolkit:hig-app-icons",
650
+ "triggerKeywords": [],
651
+ "triggerPaths": [],
652
+ "relativePath": "shared/external/hig-app-icons/SKILL.md"
653
+ },
643
654
  {
644
655
  "name": "hig-components-content",
645
656
  "description": "Apple HIG for content views mapped to SwiftUI: lists, tables, grids, charts, images, text, web views, empty states. Use when choosing or reviewing how an Apple-platform app presents content.",
@@ -653,7 +664,7 @@
653
664
  },
654
665
  {
655
666
  "name": "hig-components-layout",
656
- "description": "Apple HIG for app structure mapped to SwiftUI: tab bars, split views, navigation stacks, toolbars, sheets, popovers, alerts, windows, iOS 26 Liquid Glass bars. Use when designing layout and navigation on an Apple platform.",
667
+ "description": "Apple HIG app structure mapped to SwiftUI: tab bars, sidebars, split views, toolbars, sheets and popovers, including the iOS 26 and 27 tab and toolbar APIs. Use when choosing navigation structure or laying out tab bars and toolbars.",
657
668
  "platform": null,
658
669
  "group": "external",
659
670
  "plugin": "ai-ios-toolkit",
@@ -686,7 +697,7 @@
686
697
  },
687
698
  {
688
699
  "name": "hig-foundations",
689
- "description": "Apple HIG foundations mapped to SwiftUI: Dynamic Type, semantic color, contrast, safe areas, SF Symbols, materials and Liquid Glass, motion, icons, writing. Use when a design decision turns on Apple's foundations.",
700
+ "description": "Apple HIG foundations mapped to SwiftUI: typography and Dynamic Type, semantic color, contrast, spacing, safe areas, touch targets, motion and UX writing. Use when a design decision turns on type, color, contrast or spacing.",
690
701
  "platform": null,
691
702
  "group": "external",
692
703
  "plugin": "ai-ios-toolkit",
@@ -697,7 +708,7 @@
697
708
  },
698
709
  {
699
710
  "name": "hig-inputs",
700
- "description": "Apple HIG for input mapped to SwiftUI: touch gestures, keyboards, pointer, Apple Pencil, focus and game controllers, Digital Crown, eyes and hands, haptics. Use when designing or reviewing input on an Apple platform.",
711
+ "description": "Apple HIG for input mapped to SwiftUI: gestures, keyboards, pointer, Apple Pencil, focus, game controllers and Digital Crown. Use when designing or reviewing input on an Apple platform.",
701
712
  "platform": null,
702
713
  "group": "external",
703
714
  "plugin": "ai-ios-toolkit",
@@ -708,7 +719,7 @@
708
719
  },
709
720
  {
710
721
  "name": "hig-patterns",
711
- "description": "Apple HIG interaction patterns mapped to SwiftUI: modality, loading, empty and error states, feedback, undo, search, data entry, settings, sharing, accounts. Use when designing a UX flow on an Apple platform.",
722
+ "description": "Apple HIG interaction patterns mapped to SwiftUI: onboarding, permission requests, loading, empty and error states, modality, search, settings. Use when designing a UX flow on an Apple platform.",
712
723
  "platform": null,
713
724
  "group": "external",
714
725
  "plugin": "ai-ios-toolkit",
@@ -719,7 +730,7 @@
719
730
  },
720
731
  {
721
732
  "name": "hig-platforms",
722
- "description": "Apple HIG per platform: iPhone, iPad, Mac, Watch, TV and Vision Pro conventions, and adapting one SwiftUI codebase across them. Use when a design has to fit a specific Apple platform.",
733
+ "description": "Apple HIG per platform: iPhone, iPad, Mac, Watch, TV and Vision Pro, iPad size classes and windowing. Use when a design has to fit a specific Apple platform or adapt across them.",
723
734
  "platform": null,
724
735
  "group": "external",
725
736
  "plugin": "ai-ios-toolkit",
@@ -774,7 +785,7 @@
774
785
  },
775
786
  {
776
787
  "name": "ios-accessibility",
777
- "description": "VoiceOver, Voice Control, Switch Control and Full Keyboard Access in SwiftUI, UIKit and AppKit on iOS, iPadOS and macOS: labels, hints, values, traits, accessibilityInputLabels, NSAccessibility, grouping and reading order, @AccessibilityFocusState focus restore, Dynamic Type and @ScaledMetric, rotor",
788
+ "description": "VoiceOver, Voice Control, Switch Control and Full Keyboard Access in SwiftUI, UIKit and AppKit: labels, traits, grouping, focus restore, Dynamic Type, Large Content Viewer, rotors, custom actions, accessibility checks and Nutrition Labels. Use when implementing, reviewing or auditing accessibility (",
778
789
  "platform": null,
779
790
  "group": "external",
780
791
  "plugin": "ai-ios-toolkit",
@@ -805,6 +816,39 @@
805
816
  "triggerPaths": [],
806
817
  "relativePath": "shared/external/ios-debugger-agent/SKILL.md"
807
818
  },
819
+ {
820
+ "name": "ios-design-review",
821
+ "description": "Design critique and screenshot-based visual QA of iOS screens against the HIG, checked across light and dark, Dynamic Type, RTL, contrast and transparency settings with simulator tools. Use when asking whether a screen looks right, wanting a design pass on screenshots or a build, or visual QA before",
822
+ "platform": null,
823
+ "group": "external",
824
+ "plugin": "ai-ios-toolkit",
825
+ "invokeAs": "ai-ios-toolkit:ios-design-review",
826
+ "triggerKeywords": [],
827
+ "triggerPaths": [],
828
+ "relativePath": "shared/external/ios-design-review/SKILL.md"
829
+ },
830
+ {
831
+ "name": "ios-haptics",
832
+ "description": "Haptic feedback on iPhone: when a haptic adds meaning, sensoryFeedback, the UIFeedbackGenerator family, Core Haptics and AHAP, settings and on-device testing. Use when adding, choosing, reviewing or debugging haptics.",
833
+ "platform": null,
834
+ "group": "external",
835
+ "plugin": "ai-ios-toolkit",
836
+ "invokeAs": "ai-ios-toolkit:ios-haptics",
837
+ "triggerKeywords": [],
838
+ "triggerPaths": [],
839
+ "relativePath": "shared/external/ios-haptics/SKILL.md"
840
+ },
841
+ {
842
+ "name": "ios-iphone-duo",
843
+ "description": "Readiness for iPhone Duo, the foldable two-display iPhone on iOS 27.1: fixed-assumption hunting, asymmetric safe areas, reserved regions, ArrangementView, hinge changes, vertical bars and dual-pane patterns. Use when preparing, auditing or designing an app for iPhone Duo, the fold or vertical toolba",
844
+ "platform": null,
845
+ "group": "external",
846
+ "plugin": "ai-ios-toolkit",
847
+ "invokeAs": "ai-ios-toolkit:ios-iphone-duo",
848
+ "triggerKeywords": [],
849
+ "triggerPaths": [],
850
+ "relativePath": "shared/external/ios-iphone-duo/SKILL.md"
851
+ },
808
852
  {
809
853
  "name": "ios-localization",
810
854
  "description": "i18n and l10n for iOS and macOS: String Catalogs (.xcstrings), generated localizable symbols with compile-time-checked keys, stable key naming, LocalizedStringKey, LocalizedStringResource, String(localized:), plurals, device variations, locale-aware FormatStyle for numbers, dates, currency and measu",
@@ -849,6 +893,17 @@
849
893
  "triggerPaths": [],
850
894
  "relativePath": "shared/external/ios-security/SKILL.md"
851
895
  },
896
+ {
897
+ "name": "ios-sf-symbols",
898
+ "description": "SF Symbols in SwiftUI and UIKit: rendering modes, variable values, symbol effects including Draw On and Off, matching weight and scale to text, custom symbols and accessibility labels. Use when picking, styling, animating or reviewing symbols, or building a custom symbol.",
899
+ "platform": null,
900
+ "group": "external",
901
+ "plugin": "ai-ios-toolkit",
902
+ "invokeAs": "ai-ios-toolkit:ios-sf-symbols",
903
+ "triggerKeywords": [],
904
+ "triggerPaths": [],
905
+ "relativePath": "shared/external/ios-sf-symbols/SKILL.md"
906
+ },
852
907
  {
853
908
  "name": "ios-simulator",
854
909
  "description": "xcrun simctl from the command line: create, boot, erase and delete devices, install and launch apps, simulated pushes without APNs, GPS locations and routes, granting or resetting privacy permissions, openurl deep links, status bar overrides, screenshots and video, os_log streaming, app containers, ",
@@ -2116,7 +2171,7 @@
2116
2171
  },
2117
2172
  {
2118
2173
  "name": "swiftui-animation",
2119
- "description": "SwiftUI motion: withAnimation, scoped implicit .animation(_:body:) and .animation(_:value:), timing curves and springs (.smooth, .snappy, .bouncy, Spring), PhaseAnimator, KeyframeAnimator, @Animatable, matchedGeometryEffect and matchedTransitionSource zoom transitions, insertion and content transiti",
2174
+ "description": "SwiftUI motion: withAnimation, springs, PhaseAnimator, KeyframeAnimator, matched geometry and zoom transitions, scrollTransition and visualEffect, custom transitions, Reduce Motion. Use when implementing, reviewing or improving SwiftUI animations, transitions or scroll-linked effects.",
2120
2175
  "platform": null,
2121
2176
  "group": "external",
2122
2177
  "plugin": "ai-ios-toolkit",
@@ -2127,7 +2182,7 @@
2127
2182
  },
2128
2183
  {
2129
2184
  "name": "swiftui-expert-skill",
2130
- "description": "Write, review, or improve SwiftUI code following best practices for state management, view composition, performance, macOS-specific APIs, and iOS 26+ Liquid Glass adoption. Use when building new SwiftUI features, refactoring existing views, reviewing code quality, or adopting modern SwiftUI patterns",
2185
+ "description": "Write, review, or improve SwiftUI code following best practices for state, view composition, performance, macOS APIs, and iOS 26+ Liquid Glass adoption. Use when building SwiftUI features, refactoring views, reviewing code, or adopting modern patterns; for a findings-only review use swiftui-pro; for",
2131
2186
  "platform": null,
2132
2187
  "group": "external",
2133
2188
  "plugin": "ai-ios-toolkit",
@@ -2160,7 +2215,7 @@
2160
2215
  },
2161
2216
  {
2162
2217
  "name": "swiftui-liquid-glass",
2163
- "description": "Liquid Glass in SwiftUI (iOS 26+): glassEffect, Glass tint/interactive variants, GlassEffectContainer, glassEffectID morphing, glassEffectUnion, GlassEffectTransition, glass and glassProminent button styles, glass toolbars and tab bars, ToolbarSpacer, scrollEdgeEffectStyle, backgroundExtensionEffect",
2218
+ "description": "Liquid Glass in SwiftUI and UIKit: navigation-layer use, regular versus clear, glassEffect, GlassEffectContainer, morphing, glass buttons, ConcentricRectangle, the compatibility opt-out and material fallbacks. Use when implementing, reviewing or adopting Liquid Glass, or choosing glass versus a mate",
2164
2219
  "platform": null,
2165
2220
  "group": "external",
2166
2221
  "plugin": "ai-ios-toolkit",
@@ -2182,7 +2237,7 @@
2182
2237
  },
2183
2238
  {
2184
2239
  "name": "swiftui-patterns",
2185
- "description": "SwiftUI Model-View structure: @Observable ownership, @State, @Bindable, @Environment, view decomposition, custom ViewModifiers, .task loading, iOS 26 APIs, Writing Tools. Use when structuring a SwiftUI app, managing state, composing or splitting views, or adopting iOS 26 APIs. Not for file-by-file r",
2240
+ "description": "SwiftUI architecture, state: @Observable, @State, @Bindable, @Environment, view splitting, ViewModifiers, .task, API migration, Writing Tools, Transferable, sharing. Use when structuring an app or owning state. Not for review (swiftui-pro) or visual design (hig-foundations).",
2186
2241
  "platform": null,
2187
2242
  "group": "external",
2188
2243
  "plugin": "ai-ios-toolkit",
@@ -2,12 +2,12 @@
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:** 223 skills (67 core + 156 external). Auto-generated by `scripts/gen-skills-index.mjs` - do not edit by hand.
5
+ **Total:** 228 skills (67 core + 161 external). Auto-generated by `scripts/gen-skills-index.mjs` - do not edit by hand.
6
6
 
7
7
  ## Directory layout
8
8
 
9
9
  - **`core/`** - 67 `multi-agent*` orchestration skills that are pipeline-critical. Edits here are core-code changes.
10
- - **`external/`** - 156 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.
10
+ - **`external/`** - 161 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
 
13
13
  Source layout is logical grouping only - skill discovery at runtime is unchanged.
@@ -15,7 +15,7 @@ Source layout is logical grouping only - skill discovery at runtime is unchang
15
15
  ## Categories
16
16
 
17
17
  - [Pipeline Orchestration](#pipeline-orchestration) - 67
18
- - [iOS / Apple Ecosystem](#ios-apple-ecosystem) - 89
18
+ - [iOS / Apple Ecosystem](#ios-apple-ecosystem) - 94
19
19
  - [Android / Kotlin](#android-kotlin) - 16
20
20
  - [Web](#web) - 10
21
21
  - [Backend / API](#backend-api) - 11
@@ -119,23 +119,28 @@ Source layout is logical grouping only - skill discovery at runtime is unchang
119
119
  | [`eventkit-calendar`](./external/eventkit-calendar/) | `external` | EventKit and EventKitUI: adding events to the user's calendar, creating reminders, recurrence rules, calendar or reminders access, event edi |
120
120
  | [`firebase`](./external/firebase/) | `external` | You're a developer who has shipped dozens of Firebase projects. You've seen the easy path lead to security breaches, runaway costs, and impo |
121
121
  | [`healthkit`](./external/healthkit/) | `external` | HealthKit on iOS, iPadOS, watchOS and visionOS: HKHealthStore authorization, sample, statistics and chart-ready collection queries, saving H |
122
+ | [`hig-app-icons`](./external/hig-app-icons/) | `external` | iOS app icons: Icon Composer layered icons, default, dark, clear and tinted appearances, asset catalogs, alternate icons and the archive che |
122
123
  | [`hig-components-content`](./external/hig-components-content/) | `external` | Apple HIG for content views mapped to SwiftUI: lists, tables, grids, charts, images, text, web views, empty states. Use when choosing or rev |
123
- | [`hig-components-layout`](./external/hig-components-layout/) | `external` | Apple HIG for app structure mapped to SwiftUI: tab bars, split views, navigation stacks, toolbars, sheets, popovers, alerts, windows, iOS 26 |
124
+ | [`hig-components-layout`](./external/hig-components-layout/) | `external` | Apple HIG app structure mapped to SwiftUI: tab bars, sidebars, split views, toolbars, sheets and popovers, including the iOS 26 and 27 tab a |
124
125
  | [`hig-components-status`](./external/hig-components-status/) | `external` | Apple HIG for status UI mapped to SwiftUI: progress views, gauges, placeholders, status bar, activity rings, success and failure feedback. U |
125
126
  | [`hig-components-system`](./external/hig-components-system/) | `external` | Apple HIG for system surfaces: widgets, controls, Live Activities, Dynamic Island, notifications, complications, quick actions, App Shortcut |
126
- | [`hig-foundations`](./external/hig-foundations/) | `external` | Apple HIG foundations mapped to SwiftUI: Dynamic Type, semantic color, contrast, safe areas, SF Symbols, materials and Liquid Glass, motion, |
127
- | [`hig-inputs`](./external/hig-inputs/) | `external` | Apple HIG for input mapped to SwiftUI: touch gestures, keyboards, pointer, Apple Pencil, focus and game controllers, Digital Crown, eyes and |
128
- | [`hig-patterns`](./external/hig-patterns/) | `external` | Apple HIG interaction patterns mapped to SwiftUI: modality, loading, empty and error states, feedback, undo, search, data entry, settings, s |
129
- | [`hig-platforms`](./external/hig-platforms/) | `external` | Apple HIG per platform: iPhone, iPad, Mac, Watch, TV and Vision Pro conventions, and adapting one SwiftUI codebase across them. Use when a d |
127
+ | [`hig-foundations`](./external/hig-foundations/) | `external` | Apple HIG foundations mapped to SwiftUI: typography and Dynamic Type, semantic color, contrast, spacing, safe areas, touch targets, motion a |
128
+ | [`hig-inputs`](./external/hig-inputs/) | `external` | Apple HIG for input mapped to SwiftUI: gestures, keyboards, pointer, Apple Pencil, focus, game controllers and Digital Crown. Use when desig |
129
+ | [`hig-patterns`](./external/hig-patterns/) | `external` | Apple HIG interaction patterns mapped to SwiftUI: onboarding, permission requests, loading, empty and error states, modality, search, settin |
130
+ | [`hig-platforms`](./external/hig-platforms/) | `external` | Apple HIG per platform: iPhone, iPad, Mac, Watch, TV and Vision Pro, iPad size classes and windowing. Use when a design has to fit a specifi |
130
131
  | [`hig-technologies`](./external/hig-technologies/) | `external` | Apple HIG for system technologies: Sign in with Apple, passkeys, Apple Pay, Wallet, Siri and App Intents, HealthKit, HomeKit, iCloud, Maps, |
131
132
  | [`homekit-matter`](./external/homekit-matter/) | `external` | HomeKit and MatterSupport: managing homes, rooms, zones and accessories, reading characteristics, action sets and triggers, Matter commissio |
132
- | [`ios-accessibility`](./external/ios-accessibility/) | `external` | VoiceOver, Voice Control, Switch Control and Full Keyboard Access in SwiftUI, UIKit and AppKit on iOS, iPadOS and macOS: labels, hints, valu |
133
+ | [`ios-accessibility`](./external/ios-accessibility/) | `external` | VoiceOver, Voice Control, Switch Control and Full Keyboard Access in SwiftUI, UIKit and AppKit: labels, traits, grouping, focus restore, Dyn |
133
134
  | [`ios-coding-standard`](./external/ios-coding-standard/) | `external` | The iOS coding-standard rule registry: 99 stable-ID rules across readability, security, service layer, business rules, concurrency, testing, |
134
135
  | [`ios-debugger-agent`](./external/ios-debugger-agent/) | `external` | Debug the current iOS project on a booted simulator with XcodeBuildMCP. Use when an iOS bug has to be reproduced and diagnosed on a booted s |
136
+ | [`ios-design-review`](./external/ios-design-review/) | `external` | Design critique and screenshot-based visual QA of iOS screens against the HIG, checked across light and dark, Dynamic Type, RTL, contrast an |
137
+ | [`ios-haptics`](./external/ios-haptics/) | `external` | Haptic feedback on iPhone: when a haptic adds meaning, sensoryFeedback, the UIFeedbackGenerator family, Core Haptics and AHAP, settings and |
138
+ | [`ios-iphone-duo`](./external/ios-iphone-duo/) | `external` | Readiness for iPhone Duo, the foldable two-display iPhone on iOS 27.1: fixed-assumption hunting, asymmetric safe areas, reserved regions, Ar |
135
139
  | [`ios-localization`](./external/ios-localization/) | `external` | i18n and l10n for iOS and macOS: String Catalogs (.xcstrings), generated localizable symbols with compile-time-checked keys, stable key nami |
136
140
  | [`ios-module-structure`](./external/ios-module-structure/) | `external` | The ios-module-structure rule registry: stable-ID rules over where a declaration lives, what its file is called and what its folder must con |
137
141
  | [`ios-networking`](./external/ios-networking/) | `external` | URLSession with async/await and structured concurrency on iOS and macOS: HTTP requests, REST API clients, response validation, error handlin |
138
142
  | [`ios-security`](./external/ios-security/) | `external` | Secure iOS apps with Keychain Services, CryptoKit encryption, biometric authentication (Face ID, Touch ID), Secure Enclave key storage, LACo |
143
+ | [`ios-sf-symbols`](./external/ios-sf-symbols/) | `external` | SF Symbols in SwiftUI and UIKit: rendering modes, variable values, symbol effects including Draw On and Off, matching weight and scale to te |
139
144
  | [`ios-simulator`](./external/ios-simulator/) | `external` | xcrun simctl from the command line: create, boot, erase and delete devices, install and launch apps, simulated pushes without APNs, GPS loca |
140
145
  | [`live-activities`](./external/live-activities/) | `external` | ActivityKit Live Activities on the Lock Screen and Dynamic Island: ActivityAttributes and ContentState, request/update/end lifecycle, compac |
141
146
  | [`macos-menubar-tuist-app`](./external/macos-menubar-tuist-app/) | `external` | Build, refactor, or review SwiftUI macOS menubar apps that use Tuist. Use when building, refactoring or reviewing a SwiftUI macOS menubar ap |
@@ -168,13 +173,13 @@ Source layout is logical grouping only - skill discovery at runtime is unchang
168
173
  | [`swiftdata`](./external/swiftdata/) | `external` | SwiftData persistence for Apple apps: @Model classes with @Attribute, @Relationship, @Transient, #Unique and #Index; @Query, #Predicate, Fet |
169
174
  | [`swiftdata-pro`](./external/swiftdata-pro/) | `external` | Writes, reviews, and improves SwiftData code using modern APIs and best practices. Use when reading, writing, or reviewing projects that use |
170
175
  | [`swiftlint`](./external/swiftlint/) | `external` | SwiftLint setup and enforcement: build tool and command plugins, Xcode run scripts, CI, .swiftlint.yml rule sets (default, opt-in, analyzer) |
171
- | [`swiftui-animation`](./external/swiftui-animation/) | `external` | SwiftUI motion: withAnimation, scoped implicit .animation(_:body:) and .animation(_:value:), timing curves and springs (.smooth, .snappy, .b |
172
- | [`swiftui-expert-skill`](./external/swiftui-expert-skill/) | `external` | Write, review, or improve SwiftUI code following best practices for state management, view composition, performance, macOS-specific APIs, an |
176
+ | [`swiftui-animation`](./external/swiftui-animation/) | `external` | SwiftUI motion: withAnimation, springs, PhaseAnimator, KeyframeAnimator, matched geometry and zoom transitions, scrollTransition and visualE |
177
+ | [`swiftui-expert-skill`](./external/swiftui-expert-skill/) | `external` | Write, review, or improve SwiftUI code following best practices for state, view composition, performance, macOS APIs, and iOS 26+ Liquid Gla |
173
178
  | [`swiftui-gestures`](./external/swiftui-gestures/) | `external` | SwiftUI gestures: tap, spatial tap, long press, drag, magnify, rotate, composition (simultaneously, sequenced, exclusively), @GestureState, |
174
179
  | [`swiftui-layout-components`](./external/swiftui-layout-components/) | `external` | SwiftUI layouts: stacks, lazy stacks, LazyVGrid/LazyHGrid, List sections, swipe actions, ScrollView with ScrollPosition, validated Form, Tog |
175
- | [`swiftui-liquid-glass`](./external/swiftui-liquid-glass/) | `external` | Liquid Glass in SwiftUI (iOS 26+): glassEffect, Glass tint/interactive variants, GlassEffectContainer, glassEffectID morphing, glassEffectUn |
180
+ | [`swiftui-liquid-glass`](./external/swiftui-liquid-glass/) | `external` | Liquid Glass in SwiftUI and UIKit: navigation-layer use, regular versus clear, glassEffect, GlassEffectContainer, morphing, glass buttons, C |
176
181
  | [`swiftui-navigation`](./external/swiftui-navigation/) | `external` | SwiftUI navigation: NavigationStack typed paths, routers, NavigationSplitView, sheets, TabView and Tab API, universal links, URL schemes, Ha |
177
- | [`swiftui-patterns`](./external/swiftui-patterns/) | `external` | SwiftUI Model-View structure: @Observable ownership, @State, @Bindable, @Environment, view decomposition, custom ViewModifiers, .task loadin |
182
+ | [`swiftui-patterns`](./external/swiftui-patterns/) | `external` | SwiftUI architecture, state: @Observable, @State, @Bindable, @Environment, view splitting, ViewModifiers, .task, API migration, Writing Tool |
178
183
  | [`swiftui-performance`](./external/swiftui-performance/) | `external` | SwiftUI performance: slow rendering, janky scrolling, high CPU/memory, excess updates, layout thrash, costly body, identity churn, lazy load |
179
184
  | [`swiftui-performance-audit`](./external/swiftui-performance-audit/) | `external` | Audit SwiftUI performance issues from code review and profiling evidence. Use when a SwiftUI view is slow and the cause has to be found from |
180
185
  | [`swiftui-pro`](./external/swiftui-pro/) | `external` | Comprehensively reviews SwiftUI code for best practices on modern APIs, maintainability, and performance. Use when reading, writing, or revi |
@@ -17,7 +17,9 @@
17
17
 
18
18
  - Punctuation normalized to ASCII per pipeline humanizer policy (em-dash, en-dash, ellipsis, curly quotes).
19
19
  - Frontmatter `metadata.source` is added.
20
- - Frontmatter `description`: the upstream text is kept and a boundary clause is appended naming the skill to use for a findings-only review (swiftui-pro). The body is unchanged.
20
+ - Frontmatter `description`: the upstream text is condensed and a boundary clause is appended naming the skills to use for a findings-only review (swiftui-pro) and for Liquid Glass APIs (swiftui-liquid-glass).
21
+ - `references/liquid-glass.md` and the animation references are trimmed to the parts the pipeline's own `swiftui-liquid-glass` and `swiftui-animation` skills do not cover, each with a pointer to that skill and a "Local trim" note at the top.
22
+ - `SKILL.md`: the Liquid Glass rule, the topic-table row and the reference-list entries for the trimmed files name `swiftui-liquid-glass` / `swiftui-animation`.
21
23
 
22
24
  ## License (MIT, redistributed)
23
25
 
@@ -30,9 +30,10 @@ Upstream `agents/` directories (Claude Code subagent definitions) are not vendor
30
30
 
31
31
  - Punctuation normalized to ASCII per pipeline humanizer policy (em-dash, en-dash, ellipsis, curly quotes).
32
32
  - Each SKILL.md carries a locally added `## When to Use` section and pipeline frontmatter under `metadata:` (`risk`, `source`, `date_added`).
33
- - `swiftui-ui-patterns/references/components-index.md`: four upstream lines pointing at files that do not exist upstream either (`webview.md`, `composer.md`, `text-input.md`, `design-system.md`) were removed.
33
+ - `swiftui-ui-patterns/references/components-index.md`: four upstream lines pointing at files that do not exist upstream either (`webview.md`, `composer.md`, `text-input.md`, `design-system.md`) were removed, and the haptics line points to the pipeline's `ios-haptics` skill.
34
34
  - `macos-spm-app-packaging/SKILL.md`: a trailing fetch transcript that is not part of the upstream file is removed.
35
35
  - `swift-concurrency-expert`, `swiftui-performance-audit`, `swiftui-ui-patterns`: the frontmatter `description` keeps the upstream text and appends a boundary clause naming the neighbouring skill to use instead, so a host choosing among overlapping skills can tell them apart. Bodies are unchanged by this.
36
+ - `swiftui-ui-patterns/references/haptics.md` is reduced to a pointer to the pipeline's `ios-haptics` skill, which owns haptics guidance; the file is kept so existing links resolve.
36
37
  - `macos-spm-app-packaging/SKILL.md`: one line added that says when to read `references/scaffold.md`, which the upstream SKILL.md does not link.
37
38
 
38
39
  ## License (MIT, redistributed)