sinapse-ai 1.24.0 → 1.25.1

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 (526) hide show
  1. package/.agents/skills/react-bits-frontend/SKILL.md +66 -0
  2. package/.agents/skills/react-bits-frontend/agents/openai.yaml +4 -0
  3. package/.agents/skills/react-bits-frontend/references/corpus-map.md +29 -0
  4. package/.agents/skills/sinapse/SKILL.md +10 -0
  5. package/.agents/skills/sinapse-agent/SKILL.md +22 -0
  6. package/{.codex → .agents}/skills/sinapse-claude/SKILL.md +1 -1
  7. package/.agents/skills/sinapse-loop/SKILL.md +35 -0
  8. package/.agents/skills/sinapse-orqx/SKILL.md +44 -0
  9. package/.agents/skills/sinapse-spec-driven/SKILL.md +35 -0
  10. package/.agents/skills/snps/SKILL.md +10 -0
  11. package/.agents/skills/snps-orqx/SKILL.md +10 -0
  12. package/.claude/agents/README.md +67 -0
  13. package/.claude/agents/sinapse-ad-copywriter.md +14 -0
  14. package/.claude/agents/sinapse-agent-forger.md +14 -0
  15. package/.claude/agents/sinapse-analyst.md +14 -0
  16. package/.claude/agents/sinapse-animation-interpreter.md +14 -0
  17. package/.claude/agents/sinapse-animation-performance-engineer.md +14 -0
  18. package/.claude/agents/sinapse-animations-orqx.md +14 -0
  19. package/.claude/agents/sinapse-architect.md +14 -0
  20. package/.claude/agents/sinapse-assessment-creator.md +14 -0
  21. package/.claude/agents/sinapse-audience-intelligence.md +14 -0
  22. package/.claude/agents/sinapse-blake-snyder.md +14 -0
  23. package/.claude/agents/sinapse-brand-archetype-strategist.md +14 -0
  24. package/.claude/agents/sinapse-brand-auditor.md +14 -0
  25. package/.claude/agents/sinapse-brand-collateral-designer.md +14 -0
  26. package/.claude/agents/sinapse-brand-compiler.md +14 -0
  27. package/.claude/agents/sinapse-brand-creative-engineer.md +14 -0
  28. package/.claude/agents/sinapse-brand-culture-architect.md +14 -0
  29. package/.claude/agents/sinapse-brand-growth-strategist.md +14 -0
  30. package/.claude/agents/sinapse-brand-identity-designer.md +14 -0
  31. package/.claude/agents/sinapse-brand-motion-vfx.md +14 -0
  32. package/.claude/agents/sinapse-brand-naming-specialist.md +14 -0
  33. package/.claude/agents/sinapse-brand-orqx.md +14 -0
  34. package/.claude/agents/sinapse-brand-positioning-strategist.md +14 -0
  35. package/.claude/agents/sinapse-brand-sonic-designer.md +14 -0
  36. package/.claude/agents/sinapse-brand-strategist.md +14 -0
  37. package/.claude/agents/sinapse-brand-system-architect.md +14 -0
  38. package/.claude/agents/sinapse-brand-voice-writer.md +14 -0
  39. package/.claude/agents/sinapse-brene-brown.md +14 -0
  40. package/.claude/agents/sinapse-budget-controller.md +14 -0
  41. package/.claude/agents/sinapse-campaign-analyst.md +14 -0
  42. package/.claude/agents/sinapse-charlie-munger.md +14 -0
  43. package/.claude/agents/sinapse-claude-mastery-chief.md +14 -0
  44. package/.claude/agents/sinapse-cloning-orqx.md +14 -0
  45. package/.claude/agents/sinapse-cloud-security-engineer.md +14 -0
  46. package/.claude/agents/sinapse-cognitive-extractor.md +14 -0
  47. package/.claude/agents/sinapse-commercial-orqx.md +14 -0
  48. package/.claude/agents/sinapse-competitive-intelligence.md +14 -0
  49. package/.claude/agents/sinapse-compliance-officer.md +14 -0
  50. package/.claude/agents/sinapse-config-engineer.md +14 -0
  51. package/.claude/agents/sinapse-content-analyst.md +14 -0
  52. package/.claude/agents/sinapse-content-capturer.md +14 -0
  53. package/.claude/agents/sinapse-content-engineer.md +14 -0
  54. package/.claude/agents/sinapse-content-governor.md +14 -0
  55. package/.claude/agents/sinapse-content-orqx.md +14 -0
  56. package/.claude/agents/sinapse-content-writer.md +14 -0
  57. package/.claude/agents/sinapse-conversion-writer.md +14 -0
  58. package/.claude/agents/sinapse-copy-editor.md +14 -0
  59. package/.claude/agents/sinapse-copy-orqx.md +14 -0
  60. package/.claude/agents/sinapse-copy-strategist.md +14 -0
  61. package/.claude/agents/sinapse-cost-optimizer.md +14 -0
  62. package/.claude/agents/sinapse-council-orqx.md +14 -0
  63. package/.claude/agents/sinapse-courses-orqx.md +14 -0
  64. package/.claude/agents/sinapse-creative-strategist.md +14 -0
  65. package/.claude/agents/sinapse-cro-persuasion.md +14 -0
  66. package/.claude/agents/sinapse-cro-specialist.md +14 -0
  67. package/.claude/agents/sinapse-cs-business-auditor.md +14 -0
  68. package/.claude/agents/sinapse-cs-client-success.md +14 -0
  69. package/.claude/agents/sinapse-cs-crm-specialist.md +14 -0
  70. package/.claude/agents/sinapse-cs-funnel-architect.md +14 -0
  71. package/.claude/agents/sinapse-cs-lead-generation-strategist.md +14 -0
  72. package/.claude/agents/sinapse-cs-offer-designer.md +14 -0
  73. package/.claude/agents/sinapse-cs-revops-analyst.md +14 -0
  74. package/.claude/agents/sinapse-cs-sales-closer.md +14 -0
  75. package/.claude/agents/sinapse-cs-sales-enablement.md +14 -0
  76. package/.claude/agents/sinapse-css-motion-artist.md +14 -0
  77. package/.claude/agents/sinapse-curriculum-designer.md +14 -0
  78. package/.claude/agents/sinapse-cyber-orqx.md +14 -0
  79. package/.claude/agents/sinapse-dan-harmon.md +14 -0
  80. package/.claude/agents/sinapse-data-engineer.md +14 -0
  81. package/.claude/agents/sinapse-data-synthesizer.md +14 -0
  82. package/.claude/agents/sinapse-deep-researcher.md +14 -0
  83. package/.claude/agents/sinapse-derek-sivers.md +14 -0
  84. package/.claude/agents/sinapse-design-orqx.md +14 -0
  85. package/.claude/agents/sinapse-design-system.md +14 -0
  86. package/.claude/agents/sinapse-developer.md +14 -0
  87. package/.claude/agents/sinapse-devops.md +14 -0
  88. package/.claude/agents/sinapse-direct-response-writer.md +14 -0
  89. package/.claude/agents/sinapse-dx-accessibility-specialist.md +14 -0
  90. package/.claude/agents/sinapse-dx-design-system-architect.md +14 -0
  91. package/.claude/agents/sinapse-dx-frontend-engineer.md +14 -0
  92. package/.claude/agents/sinapse-dx-interaction-designer.md +14 -0
  93. package/.claude/agents/sinapse-dx-performance-engineer.md +14 -0
  94. package/.claude/agents/sinapse-dx-ui-designer.md +14 -0
  95. package/.claude/agents/sinapse-dx-ux-strategist.md +14 -0
  96. package/.claude/agents/sinapse-editorial-strategist.md +14 -0
  97. package/.claude/agents/sinapse-email-sequence-strategist.md +14 -0
  98. package/.claude/agents/sinapse-finance-orqx.md +14 -0
  99. package/.claude/agents/sinapse-fiscal-compliance-br.md +14 -0
  100. package/.claude/agents/sinapse-forecast-strategist.md +14 -0
  101. package/.claude/agents/sinapse-funnel-copywriter.md +14 -0
  102. package/.claude/agents/sinapse-ga-analytics-engineer.md +14 -0
  103. package/.claude/agents/sinapse-ga-campaign-analyst.md +14 -0
  104. package/.claude/agents/sinapse-ga-cro-specialist.md +14 -0
  105. package/.claude/agents/sinapse-ga-data-analyst.md +14 -0
  106. package/.claude/agents/sinapse-ga-growth-hacker.md +14 -0
  107. package/.claude/agents/sinapse-ga-seo-strategist.md +14 -0
  108. package/.claude/agents/sinapse-generative-particle-engineer.md +14 -0
  109. package/.claude/agents/sinapse-google-ads-specialist.md +14 -0
  110. package/.claude/agents/sinapse-growth-orqx.md +14 -0
  111. package/.claude/agents/sinapse-headline-specialist.md +14 -0
  112. package/.claude/agents/sinapse-hooks-architect.md +14 -0
  113. package/.claude/agents/sinapse-incident-responder.md +14 -0
  114. package/.claude/agents/sinapse-joseph-campbell.md +14 -0
  115. package/.claude/agents/sinapse-kb-architect.md +14 -0
  116. package/.claude/agents/sinapse-keith-johnstone.md +14 -0
  117. package/.claude/agents/sinapse-kindra-hall.md +14 -0
  118. package/.claude/agents/sinapse-launch-strategist.md +14 -0
  119. package/.claude/agents/sinapse-lesson-architect.md +14 -0
  120. package/.claude/agents/sinapse-long-form-writer.md +14 -0
  121. package/.claude/agents/sinapse-market-analyst.md +14 -0
  122. package/.claude/agents/sinapse-marshall-ganz.md +14 -0
  123. package/.claude/agents/sinapse-mcp-integrator.md +14 -0
  124. package/.claude/agents/sinapse-meta-ads-specialist.md +14 -0
  125. package/.claude/agents/sinapse-mind-synthesizer.md +14 -0
  126. package/.claude/agents/sinapse-motion-choreographer.md +14 -0
  127. package/.claude/agents/sinapse-nancy-duarte.md +14 -0
  128. package/.claude/agents/sinapse-naval-ravikant.md +14 -0
  129. package/.claude/agents/sinapse-network-security-engineer.md +14 -0
  130. package/.claude/agents/sinapse-oren-klaff.md +14 -0
  131. package/.claude/agents/sinapse-paidmedia-orqx.md +14 -0
  132. package/.claude/agents/sinapse-park-howell.md +14 -0
  133. package/.claude/agents/sinapse-patrick-lencioni.md +14 -0
  134. package/.claude/agents/sinapse-penetration-tester.md +14 -0
  135. package/.claude/agents/sinapse-performance-engineer.md +14 -0
  136. package/.claude/agents/sinapse-persuasion-psychologist.md +14 -0
  137. package/.claude/agents/sinapse-peter-thiel.md +14 -0
  138. package/.claude/agents/sinapse-platform-aesthetic-director.md +14 -0
  139. package/.claude/agents/sinapse-platform-specialist.md +14 -0
  140. package/.claude/agents/sinapse-pm-creative-performance-analyst.md +14 -0
  141. package/.claude/agents/sinapse-pm-youtube-ads-specialist.md +14 -0
  142. package/.claude/agents/sinapse-premium-packaging-strategist.md +14 -0
  143. package/.claude/agents/sinapse-pricing-strategist.md +14 -0
  144. package/.claude/agents/sinapse-product-lead.md +14 -0
  145. package/.claude/agents/sinapse-product-orqx.md +14 -0
  146. package/.claude/agents/sinapse-product-surface-director.md +14 -0
  147. package/.claude/agents/sinapse-production-director.md +14 -0
  148. package/.claude/agents/sinapse-profitability-analyst.md +14 -0
  149. package/.claude/agents/sinapse-project-integrator.md +14 -0
  150. package/.claude/agents/sinapse-project-lead.md +14 -0
  151. package/.claude/agents/sinapse-proof-architect.md +14 -0
  152. package/.claude/agents/sinapse-ps-client-product-manager.md +14 -0
  153. package/.claude/agents/sinapse-ps-delivery-manager.md +14 -0
  154. package/.claude/agents/sinapse-ps-discovery-lead.md +14 -0
  155. package/.claude/agents/sinapse-ps-product-analyst.md +14 -0
  156. package/.claude/agents/sinapse-ps-product-ops-specialist.md +14 -0
  157. package/.claude/agents/sinapse-ps-product-strategist.md +14 -0
  158. package/.claude/agents/sinapse-quality-gate.md +14 -0
  159. package/.claude/agents/sinapse-ray-dalio.md +14 -0
  160. package/.claude/agents/sinapse-reid-hoffman.md +14 -0
  161. package/.claude/agents/sinapse-research-orqx.md +14 -0
  162. package/.claude/agents/sinapse-revenue-analyst.md +14 -0
  163. package/.claude/agents/sinapse-roadmap-sentinel.md +14 -0
  164. package/.claude/agents/sinapse-scroll-narrative-engineer.md +14 -0
  165. package/.claude/agents/sinapse-shader-artist.md +14 -0
  166. package/.claude/agents/sinapse-signal-intelligence.md +14 -0
  167. package/.claude/agents/sinapse-simon-sinek.md +14 -0
  168. package/.claude/agents/sinapse-skill-craftsman.md +14 -0
  169. package/.claude/agents/sinapse-slide-designer.md +14 -0
  170. package/.claude/agents/sinapse-snps-orqx.md +14 -0
  171. package/.claude/agents/sinapse-soc-analyst.md +14 -0
  172. package/.claude/agents/sinapse-sop-extractor.md +14 -0
  173. package/.claude/agents/sinapse-source-hunter.md +14 -0
  174. package/.claude/agents/sinapse-sprint-lead.md +14 -0
  175. package/.claude/agents/sinapse-squad-assembler.md +14 -0
  176. package/.claude/agents/sinapse-squad-creator.md +14 -0
  177. package/.claude/agents/sinapse-storytelling-orqx.md +14 -0
  178. package/.claude/agents/sinapse-swarm-orqx.md +14 -0
  179. package/.claude/agents/sinapse-threat-analyst.md +14 -0
  180. package/.claude/agents/sinapse-threejs-architect.md +14 -0
  181. package/.claude/agents/sinapse-trend-forecaster.md +14 -0
  182. package/.claude/agents/sinapse-ux-design-expert.md +14 -0
  183. package/.claude/agents/sinapse-ux-designer.md +14 -0
  184. package/.claude/agents/sinapse-yvon-chouinard.md +14 -0
  185. package/.claude/rules/software-engineering-applicability.md +13 -0
  186. package/.claude/settings.json +170 -0
  187. package/.claude/skill-manifest.json +41 -0
  188. package/.claude/skills/api-review.md +50 -0
  189. package/.claude/skills/component-check.md +47 -0
  190. package/.claude/skills/db-review.md +41 -0
  191. package/.claude/skills/sinapse/SKILL.md +11 -0
  192. package/.claude/skills/sinapse-agent/SKILL.md +11 -0
  193. package/.claude/skills/sinapse-analyst/SKILL.md +11 -0
  194. package/.claude/skills/sinapse-animations/SKILL.md +11 -0
  195. package/.claude/skills/sinapse-architect/SKILL.md +11 -0
  196. package/.claude/skills/sinapse-brand/SKILL.md +11 -0
  197. package/.claude/skills/sinapse-claude/SKILL.md +11 -0
  198. package/.claude/skills/sinapse-cloning/SKILL.md +11 -0
  199. package/.claude/skills/sinapse-commercial/SKILL.md +11 -0
  200. package/.claude/skills/sinapse-content/SKILL.md +11 -0
  201. package/.claude/skills/sinapse-copy/SKILL.md +11 -0
  202. package/.claude/skills/sinapse-council/SKILL.md +11 -0
  203. package/.claude/skills/sinapse-courses/SKILL.md +11 -0
  204. package/.claude/skills/sinapse-cyber/SKILL.md +11 -0
  205. package/.claude/skills/sinapse-data-engineer/SKILL.md +11 -0
  206. package/.claude/skills/sinapse-design/SKILL.md +11 -0
  207. package/.claude/skills/sinapse-dev/SKILL.md +11 -0
  208. package/.claude/skills/sinapse-devops/SKILL.md +11 -0
  209. package/.claude/skills/sinapse-finance/SKILL.md +11 -0
  210. package/.claude/skills/sinapse-growth/SKILL.md +11 -0
  211. package/.claude/skills/sinapse-loop/SKILL.md +11 -0
  212. package/.claude/skills/sinapse-orqx/SKILL.md +11 -0
  213. package/.claude/skills/sinapse-paidmedia/SKILL.md +11 -0
  214. package/.claude/skills/sinapse-pm/SKILL.md +11 -0
  215. package/.claude/skills/sinapse-po/SKILL.md +11 -0
  216. package/.claude/skills/sinapse-product/SKILL.md +11 -0
  217. package/.claude/skills/sinapse-qa/SKILL.md +11 -0
  218. package/.claude/skills/sinapse-research/SKILL.md +11 -0
  219. package/.claude/skills/sinapse-sm/SKILL.md +11 -0
  220. package/.claude/skills/sinapse-spec-driven/SKILL.md +11 -0
  221. package/.claude/skills/sinapse-squad-creator/SKILL.md +11 -0
  222. package/.claude/skills/sinapse-storytelling/SKILL.md +11 -0
  223. package/.claude/skills/sinapse-swarm/SKILL.md +11 -0
  224. package/.claude/skills/sinapse-ux-design-expert/SKILL.md +11 -0
  225. package/.claude/skills/snps/SKILL.md +11 -0
  226. package/.claude/skills/snps-orqx/SKILL.md +11 -0
  227. package/.claude/skills/story-update.md +52 -0
  228. package/.claude/skills/test-guard.md +41 -0
  229. package/.codex/agents/ad-copywriter.toml +3 -0
  230. package/.codex/agents/agent-forger.toml +3 -0
  231. package/.codex/agents/analyst.toml +3 -0
  232. package/.codex/agents/animation-interpreter.toml +3 -0
  233. package/.codex/agents/animation-performance-engineer.toml +3 -0
  234. package/.codex/agents/animations-orqx.toml +3 -0
  235. package/.codex/agents/architect.toml +3 -0
  236. package/.codex/agents/assessment-creator.toml +3 -0
  237. package/.codex/agents/audience-intelligence.toml +3 -0
  238. package/.codex/agents/blake-snyder.toml +3 -0
  239. package/.codex/agents/brand-archetype-strategist.toml +3 -0
  240. package/.codex/agents/brand-auditor.toml +3 -0
  241. package/.codex/agents/brand-collateral-designer.toml +3 -0
  242. package/.codex/agents/brand-compiler.toml +3 -0
  243. package/.codex/agents/brand-creative-engineer.toml +3 -0
  244. package/.codex/agents/brand-culture-architect.toml +3 -0
  245. package/.codex/agents/brand-growth-strategist.toml +3 -0
  246. package/.codex/agents/brand-identity-designer.toml +3 -0
  247. package/.codex/agents/brand-motion-vfx.toml +3 -0
  248. package/.codex/agents/brand-naming-specialist.toml +3 -0
  249. package/.codex/agents/brand-orqx.toml +3 -0
  250. package/.codex/agents/brand-positioning-strategist.toml +3 -0
  251. package/.codex/agents/brand-sonic-designer.toml +3 -0
  252. package/.codex/agents/brand-strategist.toml +3 -0
  253. package/.codex/agents/brand-system-architect.toml +3 -0
  254. package/.codex/agents/brand-voice-writer.toml +3 -0
  255. package/.codex/agents/brene-brown.toml +3 -0
  256. package/.codex/agents/budget-controller.toml +3 -0
  257. package/.codex/agents/campaign-analyst.toml +3 -0
  258. package/.codex/agents/charlie-munger.toml +3 -0
  259. package/.codex/agents/claude-mastery-chief.toml +3 -0
  260. package/.codex/agents/cloning-orqx.toml +3 -0
  261. package/.codex/agents/cloud-security-engineer.toml +3 -0
  262. package/.codex/agents/cognitive-extractor.toml +3 -0
  263. package/.codex/agents/commercial-orqx.toml +3 -0
  264. package/.codex/agents/competitive-intelligence.toml +3 -0
  265. package/.codex/agents/compliance-officer.toml +3 -0
  266. package/.codex/agents/config-engineer.toml +3 -0
  267. package/.codex/agents/content-analyst.toml +3 -0
  268. package/.codex/agents/content-capturer.toml +3 -0
  269. package/.codex/agents/content-engineer.toml +3 -0
  270. package/.codex/agents/content-governor.toml +3 -0
  271. package/.codex/agents/content-orqx.toml +3 -0
  272. package/.codex/agents/content-writer.toml +3 -0
  273. package/.codex/agents/conversion-writer.toml +3 -0
  274. package/.codex/agents/copy-editor.toml +3 -0
  275. package/.codex/agents/copy-orqx.toml +3 -0
  276. package/.codex/agents/copy-strategist.toml +3 -0
  277. package/.codex/agents/cost-optimizer.toml +3 -0
  278. package/.codex/agents/council-orqx.toml +3 -0
  279. package/.codex/agents/courses-orqx.toml +3 -0
  280. package/.codex/agents/creative-strategist.toml +3 -0
  281. package/.codex/agents/cro-persuasion.toml +3 -0
  282. package/.codex/agents/cro-specialist.toml +3 -0
  283. package/.codex/agents/cs-business-auditor.toml +3 -0
  284. package/.codex/agents/cs-client-success.toml +3 -0
  285. package/.codex/agents/cs-crm-specialist.toml +3 -0
  286. package/.codex/agents/cs-funnel-architect.toml +3 -0
  287. package/.codex/agents/cs-lead-generation-strategist.toml +3 -0
  288. package/.codex/agents/cs-offer-designer.toml +3 -0
  289. package/.codex/agents/cs-revops-analyst.toml +3 -0
  290. package/.codex/agents/cs-sales-closer.toml +3 -0
  291. package/.codex/agents/cs-sales-enablement.toml +3 -0
  292. package/.codex/agents/css-motion-artist.toml +3 -0
  293. package/.codex/agents/curriculum-designer.toml +3 -0
  294. package/.codex/agents/cyber-orqx.toml +3 -0
  295. package/.codex/agents/dan-harmon.toml +3 -0
  296. package/.codex/agents/data-engineer.toml +3 -0
  297. package/.codex/agents/data-synthesizer.toml +3 -0
  298. package/.codex/agents/deep-researcher.toml +3 -0
  299. package/.codex/agents/derek-sivers.toml +3 -0
  300. package/.codex/agents/design-orqx.toml +3 -0
  301. package/.codex/agents/design-system.toml +3 -0
  302. package/.codex/agents/developer.toml +3 -0
  303. package/.codex/agents/devops.toml +3 -0
  304. package/.codex/agents/direct-response-writer.toml +3 -0
  305. package/.codex/agents/dx-accessibility-specialist.toml +3 -0
  306. package/.codex/agents/dx-design-system-architect.toml +3 -0
  307. package/.codex/agents/dx-frontend-engineer.toml +3 -0
  308. package/.codex/agents/dx-interaction-designer.toml +3 -0
  309. package/.codex/agents/dx-performance-engineer.toml +3 -0
  310. package/.codex/agents/dx-ui-designer.toml +3 -0
  311. package/.codex/agents/dx-ux-strategist.toml +3 -0
  312. package/.codex/agents/editorial-strategist.toml +3 -0
  313. package/.codex/agents/email-sequence-strategist.toml +3 -0
  314. package/.codex/agents/finance-orqx.toml +3 -0
  315. package/.codex/agents/fiscal-compliance-br.toml +3 -0
  316. package/.codex/agents/forecast-strategist.toml +3 -0
  317. package/.codex/agents/funnel-copywriter.toml +3 -0
  318. package/.codex/agents/ga-analytics-engineer.toml +3 -0
  319. package/.codex/agents/ga-campaign-analyst.toml +3 -0
  320. package/.codex/agents/ga-cro-specialist.toml +3 -0
  321. package/.codex/agents/ga-data-analyst.toml +3 -0
  322. package/.codex/agents/ga-growth-hacker.toml +3 -0
  323. package/.codex/agents/ga-seo-strategist.toml +3 -0
  324. package/.codex/agents/generative-particle-engineer.toml +3 -0
  325. package/.codex/agents/google-ads-specialist.toml +3 -0
  326. package/.codex/agents/growth-orqx.toml +3 -0
  327. package/.codex/agents/headline-specialist.toml +3 -0
  328. package/.codex/agents/hooks-architect.toml +3 -0
  329. package/.codex/agents/incident-responder.toml +3 -0
  330. package/.codex/agents/joseph-campbell.toml +3 -0
  331. package/.codex/agents/kb-architect.toml +3 -0
  332. package/.codex/agents/keith-johnstone.toml +3 -0
  333. package/.codex/agents/kindra-hall.toml +3 -0
  334. package/.codex/agents/launch-strategist.toml +3 -0
  335. package/.codex/agents/lesson-architect.toml +3 -0
  336. package/.codex/agents/long-form-writer.toml +3 -0
  337. package/.codex/agents/market-analyst.toml +3 -0
  338. package/.codex/agents/marshall-ganz.toml +3 -0
  339. package/.codex/agents/mcp-integrator.toml +3 -0
  340. package/.codex/agents/meta-ads-specialist.toml +3 -0
  341. package/.codex/agents/mind-synthesizer.toml +3 -0
  342. package/.codex/agents/motion-choreographer.toml +3 -0
  343. package/.codex/agents/nancy-duarte.toml +3 -0
  344. package/.codex/agents/naval-ravikant.toml +3 -0
  345. package/.codex/agents/network-security-engineer.toml +3 -0
  346. package/.codex/agents/oren-klaff.toml +3 -0
  347. package/.codex/agents/paidmedia-orqx.toml +3 -0
  348. package/.codex/agents/park-howell.toml +3 -0
  349. package/.codex/agents/patrick-lencioni.toml +3 -0
  350. package/.codex/agents/penetration-tester.toml +3 -0
  351. package/.codex/agents/performance-engineer.toml +3 -0
  352. package/.codex/agents/persuasion-psychologist.toml +3 -0
  353. package/.codex/agents/peter-thiel.toml +3 -0
  354. package/.codex/agents/platform-aesthetic-director.toml +3 -0
  355. package/.codex/agents/platform-specialist.toml +3 -0
  356. package/.codex/agents/pm-creative-performance-analyst.toml +3 -0
  357. package/.codex/agents/pm-youtube-ads-specialist.toml +3 -0
  358. package/.codex/agents/premium-packaging-strategist.toml +3 -0
  359. package/.codex/agents/pricing-strategist.toml +3 -0
  360. package/.codex/agents/product-lead.toml +3 -0
  361. package/.codex/agents/product-orqx.toml +3 -0
  362. package/.codex/agents/product-surface-director.toml +3 -0
  363. package/.codex/agents/production-director.toml +3 -0
  364. package/.codex/agents/profitability-analyst.toml +3 -0
  365. package/.codex/agents/project-integrator.toml +3 -0
  366. package/.codex/agents/project-lead.toml +3 -0
  367. package/.codex/agents/proof-architect.toml +3 -0
  368. package/.codex/agents/ps-client-product-manager.toml +3 -0
  369. package/.codex/agents/ps-delivery-manager.toml +3 -0
  370. package/.codex/agents/ps-discovery-lead.toml +3 -0
  371. package/.codex/agents/ps-product-analyst.toml +3 -0
  372. package/.codex/agents/ps-product-ops-specialist.toml +3 -0
  373. package/.codex/agents/ps-product-strategist.toml +3 -0
  374. package/.codex/agents/quality-gate.toml +3 -0
  375. package/.codex/agents/ray-dalio.toml +3 -0
  376. package/.codex/agents/reid-hoffman.toml +3 -0
  377. package/.codex/agents/research-orqx.toml +3 -0
  378. package/.codex/agents/revenue-analyst.toml +3 -0
  379. package/.codex/agents/roadmap-sentinel.toml +3 -0
  380. package/.codex/agents/scroll-narrative-engineer.toml +3 -0
  381. package/.codex/agents/shader-artist.toml +3 -0
  382. package/.codex/agents/signal-intelligence.toml +3 -0
  383. package/.codex/agents/simon-sinek.toml +3 -0
  384. package/.codex/agents/skill-craftsman.toml +3 -0
  385. package/.codex/agents/slide-designer.toml +3 -0
  386. package/.codex/agents/snps-orqx.toml +3 -0
  387. package/.codex/agents/soc-analyst.toml +3 -0
  388. package/.codex/agents/sop-extractor.toml +3 -0
  389. package/.codex/agents/source-hunter.toml +3 -0
  390. package/.codex/agents/sprint-lead.toml +3 -0
  391. package/.codex/agents/squad-assembler.toml +3 -0
  392. package/.codex/agents/squad-creator.toml +3 -0
  393. package/.codex/agents/storytelling-orqx.toml +3 -0
  394. package/.codex/agents/swarm-orqx.toml +3 -0
  395. package/.codex/agents/threat-analyst.toml +3 -0
  396. package/.codex/agents/threejs-architect.toml +3 -0
  397. package/.codex/agents/trend-forecaster.toml +3 -0
  398. package/.codex/agents/ux-design-expert.toml +3 -0
  399. package/.codex/agents/ux-designer.toml +3 -0
  400. package/.codex/agents/yvon-chouinard.toml +3 -0
  401. package/.codex/catalog.json +20 -5
  402. package/.codex/command-registry.json +94 -0
  403. package/.codex/config.toml +8 -0
  404. package/.codex/delegation-matrix.json +39 -25
  405. package/.codex/delegation-parity.json +46 -41
  406. package/.codex/hooks/claude-compat.cjs +547 -0
  407. package/.codex/hooks.json +123 -0
  408. package/.codex/scripts/resolve-codex-agent.js +30 -1
  409. package/.codex/scripts/resolve-codex-workflow.js +283 -0
  410. package/.codex/scripts/sinapse-codex.js +304 -0
  411. package/.codex/scripts/sync-codex-native.js +581 -0
  412. package/.codex/scripts/validate-codex-native.js +277 -0
  413. package/.codex/tasks/onboard-sinapse-codex.md +1 -1
  414. package/.sinapse-ai/data/entity-registry.yaml +91 -39
  415. package/.sinapse-ai/install-manifest.yaml +5 -5
  416. package/.sinapse-ai/product/templates/statusline/agent-badges.json +37 -37
  417. package/AGENTS.md +5 -4
  418. package/CHANGELOG.md +23 -7
  419. package/README.en.md +1 -1
  420. package/README.md +25 -10
  421. package/bin/cli.js +8 -1
  422. package/bin/commands/help.js +3 -2
  423. package/bin/commands/install.js +79 -53
  424. package/bin/commands/status.js +4 -3
  425. package/bin/commands/uninstall.js +247 -29
  426. package/bin/commands/update.js +38 -23
  427. package/bin/lib/command-generator.js +25 -3
  428. package/bin/lib/global-provider-adapters.js +199 -0
  429. package/bin/lib/provider-parity.js +22 -0
  430. package/bin/postinstall.js +11 -11
  431. package/bin/utils/validate-publish.js +43 -10
  432. package/docs/framework/codex-parity/codex-integration-process.md +6 -7
  433. package/docs/framework/codex-parity/codex-native-runtime-v2.md +230 -0
  434. package/docs/framework/codex-parity/codex-parity-program.md +4 -4
  435. package/docs/framework/codex-parity/codex-total-parity-orchestration-plan.md +1 -1
  436. package/docs/framework/codex-parity/codex-workflow-task-parity.md +21 -7
  437. package/docs/framework/react-bits/animations.md +49 -0
  438. package/docs/framework/react-bits/audit-findings.md +103 -0
  439. package/docs/framework/react-bits/backgrounds.md +63 -0
  440. package/docs/framework/react-bits/catalog-summary.json +61 -0
  441. package/docs/framework/react-bits/components.md +58 -0
  442. package/docs/framework/react-bits/implementation-playbook.md +161 -0
  443. package/docs/framework/react-bits/index.md +130 -0
  444. package/docs/framework/react-bits/inventory.json +9333 -0
  445. package/docs/framework/react-bits/text-animations.md +41 -0
  446. package/docs/framework/software-engineering-applicability.md +31 -0
  447. package/docs/getting-started.md +6 -2
  448. package/docs/guides/codex-config.md +2 -2
  449. package/docs/guides/development-setup.md +1 -2
  450. package/docs/guides/ide-integration.md +6 -6
  451. package/docs/guides/quality-gates.md +2 -2
  452. package/docs/ide-integration.md +2 -2
  453. package/docs/installation/README.md +2 -2
  454. package/docs/installation/faq.md +1 -1
  455. package/docs/installation/troubleshooting.md +2 -2
  456. package/docs/installation/v4-quick-start.md +1 -1
  457. package/docs/pt/contributing.md +1 -1
  458. package/docs/pt/guides/development-setup.md +1 -2
  459. package/docs/pt/guides/quality-gates.md +2 -2
  460. package/docs/pt/ide-integration.md +6 -6
  461. package/docs/pt/installation/faq.md +1 -1
  462. package/docs/pt/installation/troubleshooting.md +2 -3
  463. package/docs/pt/installation/v4-quick-start.md +1 -2
  464. package/docs/pt/platforms/claude-code.md +4 -4
  465. package/docs/sinapse-agent-flows/analyst-system.md +1 -1
  466. package/docs/sinapse-agent-flows/architect-system.md +1 -1
  467. package/docs/sinapse-agent-flows/data-engineer-system.md +1 -1
  468. package/docs/sinapse-agent-flows/dev-system.md +1 -1
  469. package/docs/sinapse-agent-flows/pm-system.md +1 -1
  470. package/docs/sinapse-agent-flows/qa-system.md +1 -1
  471. package/docs/sinapse-agent-flows/sm-system.md +1 -1
  472. package/docs/sinapse-agent-flows/snps-orqx-system.md +1 -1
  473. package/docs/sinapse-agent-flows/squad-creator-system.md +2 -2
  474. package/docs/sinapse-agent-flows/ux-design-expert-system.md +1 -1
  475. package/package.json +37 -19
  476. package/packages/engineering-applicability/fixtures.json +52 -0
  477. package/packages/engineering-applicability/index.js +150 -0
  478. package/packages/installer/src/config/ide-configs.js +1 -1
  479. package/packages/installer/src/installer/sinapse-ai-installer.js +359 -2
  480. package/packages/installer/src/migrations/legacy-claude-agent-command-hashes.json +36 -0
  481. package/packages/installer/src/migrations/legacy-codex-native-skill-hashes.json +42 -0
  482. package/packages/installer/src/updater/index.js +51 -13
  483. package/packages/installer/src/wizard/feedback.js +1 -1
  484. package/packages/installer/src/wizard/ide-config-generator.js +22 -0
  485. package/packages/installer/src/wizard/index.js +106 -75
  486. package/scripts/gen-agent-badges.js +17 -1
  487. package/scripts/release-readiness.js +9 -3
  488. package/scripts/research/generate-react-bits-catalog.mjs +206 -0
  489. package/scripts/sync-provider-adapters.js +203 -0
  490. package/scripts/validate-codex-command-registry.js +101 -0
  491. package/scripts/validate-provider-adapters.js +243 -0
  492. package/squads/claude-code-mastery/agents/skill-craftsman.md +2 -2
  493. package/squads/claude-code-mastery/knowledge-base/skill-creation-patterns.md +1 -1
  494. package/squads/squad-animations/knowledge-base/react-bits-operational-guide.md +43 -0
  495. package/squads/squad-animations/squad.yaml +10 -5
  496. package/squads/squad-animations/tasks/orchestrate-react-bits-frontend.md +60 -0
  497. package/squads/squad-design/agents/ux-designer.md +1 -1
  498. package/.codex/skills/sinapse-orqx/SKILL.md +0 -25
  499. /package/{.codex → .agents}/skills/sinapse-analyst/SKILL.md +0 -0
  500. /package/{.codex → .agents}/skills/sinapse-animations/SKILL.md +0 -0
  501. /package/{.codex → .agents}/skills/sinapse-architect/SKILL.md +0 -0
  502. /package/{.codex → .agents}/skills/sinapse-brand/SKILL.md +0 -0
  503. /package/{.codex → .agents}/skills/sinapse-cloning/SKILL.md +0 -0
  504. /package/{.codex → .agents}/skills/sinapse-commercial/SKILL.md +0 -0
  505. /package/{.codex → .agents}/skills/sinapse-content/SKILL.md +0 -0
  506. /package/{.codex → .agents}/skills/sinapse-copy/SKILL.md +0 -0
  507. /package/{.codex → .agents}/skills/sinapse-council/SKILL.md +0 -0
  508. /package/{.codex → .agents}/skills/sinapse-courses/SKILL.md +0 -0
  509. /package/{.codex → .agents}/skills/sinapse-cyber/SKILL.md +0 -0
  510. /package/{.codex → .agents}/skills/sinapse-data-engineer/SKILL.md +0 -0
  511. /package/{.codex → .agents}/skills/sinapse-design/SKILL.md +0 -0
  512. /package/{.codex → .agents}/skills/sinapse-dev/SKILL.md +0 -0
  513. /package/{.codex → .agents}/skills/sinapse-devops/SKILL.md +0 -0
  514. /package/{.codex → .agents}/skills/sinapse-finance/SKILL.md +0 -0
  515. /package/{.codex → .agents}/skills/sinapse-growth/SKILL.md +0 -0
  516. /package/{.codex → .agents}/skills/sinapse-paidmedia/SKILL.md +0 -0
  517. /package/{.codex → .agents}/skills/sinapse-pm/SKILL.md +0 -0
  518. /package/{.codex → .agents}/skills/sinapse-po/SKILL.md +0 -0
  519. /package/{.codex → .agents}/skills/sinapse-product/SKILL.md +0 -0
  520. /package/{.codex → .agents}/skills/sinapse-qa/SKILL.md +0 -0
  521. /package/{.codex → .agents}/skills/sinapse-research/SKILL.md +0 -0
  522. /package/{.codex → .agents}/skills/sinapse-sm/SKILL.md +0 -0
  523. /package/{.codex → .agents}/skills/sinapse-squad-creator/SKILL.md +0 -0
  524. /package/{.codex → .agents}/skills/sinapse-storytelling/SKILL.md +0 -0
  525. /package/{.codex → .agents}/skills/sinapse-swarm/SKILL.md +0 -0
  526. /package/{.codex → .agents}/skills/sinapse-ux-design-expert/SKILL.md +0 -0
@@ -36,7 +36,11 @@ const {
36
36
  warnNonInteractive,
37
37
  } = require('../lib/detection');
38
38
  const { promptLlmChoice } = require('../lib/prompts');
39
- const { recordInstalledAgents } = require('./uninstall');
39
+ const {
40
+ recordInstalledAgents,
41
+ reconcileInstalledAgents,
42
+ removeManagedGlobalSkills,
43
+ } = require('./uninstall');
40
44
  const { verifyInstall } = require('./status');
41
45
  // generateCommandMd is re-exported below for backward-compat (update.js imports it
42
46
  // from ./install). regenerateAgentCommands is the shared Phase 2 helper.
@@ -44,6 +48,8 @@ const {
44
48
  generateCommandMd,
45
49
  regenerateAgentCommands,
46
50
  } = require('../lib/command-generator');
51
+ const { deliverGlobalProviderAdapters, getGlobalCommandStagingDir } = require('../lib/global-provider-adapters');
52
+ const { assertProviderAdapterParity } = require('../lib/provider-parity');
47
53
  // Follow-up #13 — wire the transactional backup/rollback engine into the
48
54
  // installer so an in-place UPGRADE (upsert) that fails mid-flight is restored
49
55
  // to its previous state instead of leaving ~/.sinapse half-updated.
@@ -59,6 +65,11 @@ async function cmdInstallGlobal(opts = {}) {
59
65
  // Story 10.20 — Upsert detection
60
66
  const force = Boolean(opts.force);
61
67
  const reconfigure = Boolean(opts.reconfigure);
68
+ const globalOnly = Boolean(opts.globalOnly);
69
+ const requestedLlm = opts.llm || null;
70
+ if (requestedLlm && !['claude-code', 'codex', 'both'].includes(requestedLlm)) {
71
+ throw new Error(`Invalid --llm value: ${requestedLlm}. Use claude-code, codex, or both.`);
72
+ }
62
73
  const existing = force ? { upsert: false } : detectExistingInstall();
63
74
  const isUpsert = existing.upsert;
64
75
 
@@ -121,7 +132,9 @@ async function cmdInstallGlobal(opts = {}) {
121
132
  // Story 10.35: --reconfigure forces prompt even in upsert mode
122
133
  let llmChoice;
123
134
  let llmWasReused = false;
124
- if (isUpsert && !reconfigure && existing.llm) {
135
+ if (requestedLlm) {
136
+ llmChoice = requestedLlm;
137
+ } else if (isUpsert && !reconfigure && existing.llm) {
125
138
  llmChoice = existing.llm;
126
139
  llmWasReused = true;
127
140
  const ideLabel = Array.isArray(llmChoice) ? llmChoice.join(', ') : String(llmChoice);
@@ -217,7 +230,7 @@ async function cmdInstallGlobal(opts = {}) {
217
230
  // project-wizard WARN must NOT revert an otherwise-good global install.
218
231
  const tx = createInstallTransaction();
219
232
  const txPaths = buildTransactionPaths(llmChoice);
220
- const { writtenAgents, totalAgents, totalDelta, squadsRefreshed, squadsAdded, meta } =
233
+ const { activeAgentCount, totalDelta, squadsRefreshed, squadsAdded, meta } =
221
234
  await runFatalPhasesTransactional({
222
235
  tx,
223
236
  isUpsert,
@@ -264,7 +277,10 @@ async function cmdInstallGlobal(opts = {}) {
264
277
 
265
278
  // Phase 8: Install project-local files (.sinapse-ai/, .claude/, .env)
266
279
  logger.always(`\n${CYAN}Phase 8:${NC} Installing project files in current directory`);
267
- try {
280
+ const skipProjectInstall = globalOnly || path.resolve(process.cwd()) === path.resolve(ROOT);
281
+ if (skipProjectInstall) {
282
+ logger.always(` ${YELLOW}SKIP${NC} Project files (${globalOnly ? '--global-only' : 'source checkout detected'})`);
283
+ } else try {
268
284
  const wizardPath = path.join(ROOT, 'packages', 'installer', 'src', 'wizard', 'index.js');
269
285
  if (fs.existsSync(wizardPath)) {
270
286
  const { runWizard: executeWizard } = require(wizardPath);
@@ -300,19 +316,10 @@ async function cmdInstallGlobal(opts = {}) {
300
316
  // greeting on @sinapse/@snps/-orqx). Re-copy the generated command files LAST so the
301
317
  // rich, frontmatter'd stubs are always the final word. Idempotent.
302
318
  try {
303
- const reTargets = [];
304
- if (llmChoice === 'claude-code' || llmChoice === 'both') reTargets.push(path.join(HOME, '.claude', 'agents'));
305
- if (llmChoice === 'codex' || llmChoice === 'both') reTargets.push(path.join(HOME, '.codex', 'agents'));
306
- if (reTargets.length && fs.existsSync(CLAUDE_COMMANDS_DIR)) {
307
- const cmdFiles = fs.readdirSync(CLAUDE_COMMANDS_DIR).filter(f => f.endsWith('.md'));
308
- for (const dir of reTargets) {
309
- fs.mkdirSync(dir, { recursive: true });
310
- for (const f of cmdFiles) {
311
- fs.copyFileSync(path.join(CLAUDE_COMMANDS_DIR, f), path.join(dir, f));
312
- }
313
- }
314
- logger.always(` ${GREEN}OK${NC} Global agents reconciled (${cmdFiles.length} files — rich stubs authoritative)`);
315
- }
319
+ const commandsDir = getGlobalCommandStagingDir({ llmChoice, sinapseHome: SINAPSE_HOME, claudeCommandsDir: CLAUDE_COMMANDS_DIR });
320
+ const reconciled = deliverGlobalProviderAdapters({ llmChoice, home: HOME, commandsDir });
321
+ const total = reconciled.claude.length + reconciled.codex.length + reconciled.skills.length;
322
+ if (total) logger.always(` ${GREEN}OK${NC} Global provider adapters reconciled (${total} artifacts)`);
316
323
  } catch (e) {
317
324
  logger.always(` ${YELLOW}WARN${NC} Global agent reconciliation: ${e.message}`);
318
325
  }
@@ -324,9 +331,14 @@ async function cmdInstallGlobal(opts = {}) {
324
331
  // printed above: if any check failed (✗), show a warning banner instead of an
325
332
  // unconditional success banner. The exit code is intentionally left unchanged —
326
333
  // this only changes the message, not the process result.
334
+ const verificationCommandsDir = getGlobalCommandStagingDir({
335
+ llmChoice,
336
+ sinapseHome: SINAPSE_HOME,
337
+ claudeCommandsDir: CLAUDE_COMMANDS_DIR,
338
+ });
327
339
  const installVerified =
328
340
  fs.existsSync(SINAPSE_HOME) &&
329
- fs.existsSync(CLAUDE_COMMANDS_DIR) &&
341
+ fs.existsSync(verificationCommandsDir) &&
330
342
  fs.existsSync(path.join(BIN_DIR, 'sinapse')) &&
331
343
  fs.existsSync(path.join(SINAPSE_HOME, '.claude', 'rules', 'squad-awareness.md'));
332
344
 
@@ -347,12 +359,17 @@ async function cmdInstallGlobal(opts = {}) {
347
359
  logger.always(`${YELLOW}══════════════════════════════════════════════════════════════${NC}`);
348
360
  }
349
361
  logger.always('');
350
- logger.always(` ${BOLD}${squads.length} squads${NC} | ${BOLD}${totalAgents} agents${NC} | ${BOLD}${writtenAgents.size} command files${NC}`);
362
+ logger.always(` ${BOLD}${squads.length} squads${NC} | ${BOLD}${activeAgentCount} agents${NC} | ${BOLD}${activeAgentCount} native adapters${NC}`);
351
363
  logger.always(` ${startCmd}`);
352
364
  logger.always('');
353
365
  logger.always(` ${BOLD}Try an agent:${NC}`);
354
- logger.always(` ${CYAN}/SINAPSE:agents:sinapse-orqx${NC}`);
355
- logger.always(` ${CYAN}/SINAPSE:agents:brand-orqx${NC}`);
366
+ if (llmChoice === 'codex') {
367
+ logger.always(` ${CYAN}$snps${NC}`);
368
+ logger.always(` ${CYAN}$sinapse-agent brand-orqx${NC}`);
369
+ } else {
370
+ logger.always(` ${CYAN}@sinapse-orqx${NC}`);
371
+ logger.always(` ${CYAN}@brand-orqx${NC}`);
372
+ }
356
373
  logger.always('');
357
374
  }
358
375
 
@@ -396,7 +413,13 @@ function buildTransactionPaths(llmChoice) {
396
413
  CLAUDE_COMMANDS_DIR, // Phase 2 — generated /SINAPSE:agents:* command files
397
414
  ];
398
415
  if (llmChoice === 'claude-code' || llmChoice === 'both') dirs.push(path.join(HOME, '.claude', 'agents'));
399
- if (llmChoice === 'codex' || llmChoice === 'both') dirs.push(path.join(HOME, '.codex', 'agents'));
416
+ // A Claude-only provider switch removes stale Codex aliases during the fatal
417
+ // phases, so that cleanup must be covered by the same upgrade rollback.
418
+ if (llmChoice === 'claude-code') dirs.push(path.join(HOME, '.agents', 'skills'));
419
+ if (llmChoice === 'codex' || llmChoice === 'both') {
420
+ dirs.push(path.join(HOME, '.codex', 'agents'));
421
+ dirs.push(path.join(HOME, '.agents', 'skills'));
422
+ }
400
423
  dirs.push(BIN_DIR); // Phase 4 — launcher(s)
401
424
 
402
425
  const files = [path.join(HOME, '.claude', 'settings.json')]; // language save
@@ -469,7 +492,7 @@ async function runFatalPhasesTransactional({ tx, isUpsert, paths, runPhases, onR
469
492
  * @param {string} ctx.llmChoice
470
493
  * @param {Object} ctx.existing - detectExistingInstall() result
471
494
  * @param {Object} ctx.logger
472
- * @returns {{ writtenAgents: Set, totalAgents: number, totalDelta: Object, squadsRefreshed: number, squadsAdded: number, meta: Object }}
495
+ * @returns {{ writtenAgents: Set, activeAgentCount: number, totalDelta: Object, squadsRefreshed: number, squadsAdded: number, meta: Object }}
473
496
  */
474
497
  function installFatalPhases({ squads, squadsDir, isUpsert, llmChoice, existing, logger }) {
475
498
  // Phase 1: Copy squads to ~/.sinapse/
@@ -477,7 +500,6 @@ function installFatalPhases({ squads, squadsDir, isUpsert, llmChoice, existing,
477
500
  fs.mkdirSync(SINAPSE_HOME, { recursive: true });
478
501
 
479
502
  const squadsSrcBase = fs.existsSync(squadsDir) ? squadsDir : ROOT;
480
- let totalAgents = 0;
481
503
  const totalDelta = { added: 0, updated: 0, unchanged: 0, removed: 0 };
482
504
  let squadsRefreshed = 0;
483
505
  let squadsAdded = 0;
@@ -498,7 +520,6 @@ function installFatalPhases({ squads, squadsDir, isUpsert, llmChoice, existing,
498
520
  copyDirSync(src, dest);
499
521
  logger.always(` ${GREEN}OK${NC} ${squad.name} (${squad.agents} agents)`);
500
522
  }
501
- totalAgents += squad.agents;
502
523
  }
503
524
 
504
525
  // Copy sinapse/ orqx squad
@@ -516,47 +537,52 @@ function installFatalPhases({ squads, squadsDir, isUpsert, llmChoice, existing,
516
537
  copyDirSync(sinapseMasterSrc, sinapseMasterDest);
517
538
  }
518
539
  const masterAgents = getAgentFiles(sinapseMasterDest).length;
519
- totalAgents += masterAgents;
520
540
  logger.always(` ${GREEN}OK${NC} sinapse (master, ${masterAgents} agents)`);
521
541
  }
522
542
 
543
+ const coreDevelopmentSrc = path.join(ROOT, '.sinapse-ai', 'development');
544
+ const coreDevelopmentDest = path.join(SINAPSE_HOME, 'core');
545
+ if (fs.existsSync(coreDevelopmentSrc)) {
546
+ if (isUpsert) {
547
+ const delta = syncDirSync(coreDevelopmentSrc, coreDevelopmentDest);
548
+ totalDelta.added += delta.added;
549
+ totalDelta.updated += delta.updated;
550
+ totalDelta.unchanged += delta.unchanged;
551
+ totalDelta.removed += delta.removed;
552
+ } else {
553
+ rmDirSync(coreDevelopmentDest);
554
+ copyDirSync(coreDevelopmentSrc, coreDevelopmentDest);
555
+ }
556
+ const coreAgents = getAgentFiles(coreDevelopmentDest).length;
557
+ logger.always(` ${GREEN}OK${NC} core development (${coreAgents} agents)`);
558
+ }
559
+
523
560
  // Phase 2: Generate agent commands (shared with `update` via command-generator).
524
561
  logger.always(`\n${CYAN}Phase 2:${NC} Generating agent commands`);
525
- const { writtenAgents } = regenerateAgentCommands({
562
+ const commandStagingDir = getGlobalCommandStagingDir({ llmChoice, sinapseHome: SINAPSE_HOME, claudeCommandsDir: CLAUDE_COMMANDS_DIR });
563
+ const { writtenAgents, totalAgents } = regenerateAgentCommands({
526
564
  sinapseHome: SINAPSE_HOME,
527
- commandsDir: CLAUDE_COMMANDS_DIR,
565
+ commandsDir: commandStagingDir,
528
566
  squads,
529
567
  sinapseMasterDest,
568
+ coreDevelopmentDest,
530
569
  });
531
570
  logger.always(` ${GREEN}OK${NC} ${writtenAgents.size} total command files`);
532
571
 
533
572
  // Phase 2b: Install global agents based on LLM choice
534
- const installedAgentFilenames = new Set();
573
+ const globalAdapters = deliverGlobalProviderAdapters({ llmChoice, home: HOME, commandsDir: commandStagingDir });
574
+ const activeAgentCount = assertProviderAdapterParity(llmChoice, globalAdapters, totalAgents);
575
+ const installedAgentFilenames = new Set([...globalAdapters.claude, ...globalAdapters.codex]);
535
576
  const installedIdes = [];
536
- if (llmChoice === 'claude-code' || llmChoice === 'both') {
537
- const globalAgentsDir = path.join(HOME, '.claude', 'agents');
538
- fs.mkdirSync(globalAgentsDir, { recursive: true });
539
- for (const f of fs.readdirSync(CLAUDE_COMMANDS_DIR).filter(f => f.endsWith('.md'))) {
540
- fs.copyFileSync(path.join(CLAUDE_COMMANDS_DIR, f), path.join(globalAgentsDir, f));
541
- installedAgentFilenames.add(f);
542
- }
543
- installedIdes.push('claude-code');
544
- logger.always(` ${GREEN}OK${NC} Claude Code global agents (${writtenAgents.size})`);
545
- }
546
-
547
- if (llmChoice === 'codex' || llmChoice === 'both') {
548
- const codexAgentsDir = path.join(HOME, '.codex', 'agents');
549
- fs.mkdirSync(codexAgentsDir, { recursive: true });
550
- for (const f of fs.readdirSync(CLAUDE_COMMANDS_DIR).filter(f => f.endsWith('.md'))) {
551
- fs.copyFileSync(path.join(CLAUDE_COMMANDS_DIR, f), path.join(codexAgentsDir, f));
552
- installedAgentFilenames.add(f);
553
- }
554
- installedIdes.push('codex');
555
- logger.always(` ${GREEN}OK${NC} Codex global agents (${writtenAgents.size})`);
556
- }
577
+ if (globalAdapters.claude.length) installedIdes.push('claude-code');
578
+ if (globalAdapters.codex.length) installedIdes.push('codex');
579
+ if (globalAdapters.claude.length) logger.always(` ${GREEN}OK${NC} Claude Code global agents (${globalAdapters.claude.length})`);
580
+ if (globalAdapters.codex.length) logger.always(` ${GREEN}OK${NC} Codex global agents (${globalAdapters.codex.length} TOML, ${globalAdapters.skills.length} skills)`);
557
581
 
558
582
  // Audit 1 P0 (UN-1) — record manifest so uninstall can remove every file
559
583
  // we wrote (not just `*-orqx.md`). Idempotent: re-install overwrites.
584
+ reconcileInstalledAgents(HOME, installedAgentFilenames);
585
+ if (llmChoice === 'claude-code') removeManagedGlobalSkills(HOME, { providers: ['codex'] });
560
586
  recordInstalledAgents(installedAgentFilenames, installedIdes);
561
587
 
562
588
  // Phase 3: Generate squad-awareness.md
@@ -580,8 +606,8 @@ function installFatalPhases({ squads, squadsDir, isUpsert, llmChoice, existing,
580
606
  ? existing.prevMeta.installedAt
581
607
  : nowIso,
582
608
  squads: squads.length,
583
- agents: totalAgents,
584
- commands: writtenAgents.size,
609
+ agents: activeAgentCount,
610
+ commands: activeAgentCount,
585
611
  llm: llmChoice,
586
612
  platform: process.platform,
587
613
  };
@@ -590,7 +616,7 @@ function installFatalPhases({ squads, squadsDir, isUpsert, llmChoice, existing,
590
616
  }
591
617
  atomicWriteFileSync(path.join(SINAPSE_HOME, 'metadata.json'), JSON.stringify(meta, null, 2));
592
618
 
593
- return { writtenAgents, totalAgents, totalDelta, squadsRefreshed, squadsAdded, meta };
619
+ return { writtenAgents, activeAgentCount, totalDelta, squadsRefreshed, squadsAdded, meta };
594
620
  }
595
621
 
596
622
  function generateSquadAwareness(sinapseDir, squads) {
@@ -5,9 +5,9 @@ const fs = require('fs');
5
5
  const path = require('path');
6
6
  const { getLogger } = require('../../.sinapse-ai/core/logger');
7
7
  const {
8
+ HOME,
8
9
  ROOT,
9
10
  SINAPSE_HOME,
10
- CLAUDE_COMMANDS_DIR,
11
11
  BIN_DIR,
12
12
  CYAN,
13
13
  GREEN,
@@ -18,12 +18,13 @@ const {
18
18
  } = require('../lib/constants');
19
19
  const { header } = require('../lib/header');
20
20
  const { getSquads } = require('../lib/squads');
21
+ const { hasManagedInstalledAgents } = require('./uninstall');
21
22
 
22
23
  function verifyInstall() {
23
24
  const logger = getLogger();
24
25
  const checks = [
25
26
  [fs.existsSync(SINAPSE_HOME), `${getSquads(SINAPSE_HOME).length} squads in ~/.sinapse/`],
26
- [fs.existsSync(CLAUDE_COMMANDS_DIR), 'Commands in ~/.claude/commands/SINAPSE/agents/'],
27
+ [hasManagedInstalledAgents(HOME), 'Native provider agents installed'],
27
28
  [fs.existsSync(path.join(BIN_DIR, 'sinapse')), 'Launcher at ~/bin/sinapse'],
28
29
  [fs.existsSync(path.join(SINAPSE_HOME, '.claude', 'rules', 'squad-awareness.md')), 'squad-awareness.md'],
29
30
  ];
@@ -52,7 +53,7 @@ function cmdList() {
52
53
 
53
54
  logger.always('');
54
55
  logger.always(` ${BOLD}Total: ${GREEN}${totalAgents} agents${NC} | ${YELLOW}${totalTasks} tasks${NC}`);
55
- logger.always(` ${BOLD}Invoke: ${CYAN}/SINAPSE:agents:{agent-id}${NC}`);
56
+ logger.always(` ${BOLD}Invoke: ${CYAN}$sinapse-agent <agent-id>${NC}`);
56
57
  logger.always('');
57
58
  }
58
59
 
@@ -3,6 +3,8 @@
3
3
 
4
4
  const fs = require('fs');
5
5
  const path = require('path');
6
+ const crypto = require('crypto');
7
+ const legacyClaudeCommandHashes = require('../../packages/installer/src/migrations/legacy-claude-agent-command-hashes.json');
6
8
  const { getLogger } = require('../../.sinapse-ai/core/logger');
7
9
  const {
8
10
  HOME,
@@ -58,22 +60,61 @@ async function removeGitHooksConfig(projectDir = process.cwd()) {
58
60
  // and removes only those files (preserving anything the user added by hand).
59
61
  const INSTALLED_AGENTS_MANIFEST = path.join(SINAPSE_HOME, 'installed-agents.json');
60
62
 
61
- function recordInstalledAgents(filenames, ides) {
63
+ function installedAgentsManifestPath(home = HOME) {
64
+ return home === HOME
65
+ ? INSTALLED_AGENTS_MANIFEST
66
+ : path.join(home, '.sinapse', 'installed-agents.json');
67
+ }
68
+
69
+ function digestFile(filePath) {
62
70
  try {
63
- fs.mkdirSync(SINAPSE_HOME, { recursive: true });
64
- fs.writeFileSync(INSTALLED_AGENTS_MANIFEST, JSON.stringify({
65
- version: 1,
71
+ return crypto.createHash('sha256').update(fs.readFileSync(filePath)).digest('hex');
72
+ } catch {
73
+ return null;
74
+ }
75
+ }
76
+
77
+ function providerAgentPath(home, provider, filename) {
78
+ const providerDir = provider === 'codex'
79
+ ? path.join(home, '.codex', 'agents')
80
+ : path.join(home, '.claude', 'agents');
81
+ return path.join(providerDir, filename);
82
+ }
83
+
84
+ function inferProviderFromAgentDir(dir) {
85
+ const normalized = path.resolve(dir).replace(/\\/g, '/').toLowerCase();
86
+ if (normalized.includes('/.codex/agents')) return 'codex';
87
+ if (normalized.includes('/.claude/agents')) return 'claude-code';
88
+ return null;
89
+ }
90
+
91
+ function recordInstalledAgents(filenames, ides, home = HOME) {
92
+ try {
93
+ const manifestPath = installedAgentsManifestPath(home);
94
+ fs.mkdirSync(path.dirname(manifestPath), { recursive: true });
95
+ const artifacts = [...filenames].map((filename) => {
96
+ const provider = filename.endsWith('.toml') ? 'codex' : 'claude-code';
97
+ return {
98
+ provider,
99
+ filename,
100
+ sha256: digestFile(providerAgentPath(home, provider, filename)),
101
+ };
102
+ });
103
+ fs.writeFileSync(manifestPath, JSON.stringify({
104
+ version: 2,
66
105
  timestamp: new Date().toISOString(),
67
106
  ides,
68
107
  filenames: [...filenames].sort(),
108
+ artifacts: artifacts.sort((a, b) => `${a.provider}/${a.filename}`.localeCompare(`${b.provider}/${b.filename}`)),
69
109
  }, null, 2));
70
110
  } catch { /* non-critical */ }
71
111
  }
72
112
 
73
- function readInstalledAgentsManifest() {
113
+ function readInstalledAgentsManifest(home = HOME) {
74
114
  try {
75
- if (!fs.existsSync(INSTALLED_AGENTS_MANIFEST)) return null;
76
- const raw = fs.readFileSync(INSTALLED_AGENTS_MANIFEST, 'utf8');
115
+ const manifestPath = installedAgentsManifestPath(home);
116
+ if (!fs.existsSync(manifestPath)) return null;
117
+ const raw = fs.readFileSync(manifestPath, 'utf8');
77
118
  const parsed = JSON.parse(raw);
78
119
  if (!parsed || !Array.isArray(parsed.filenames)) return null;
79
120
  return parsed;
@@ -82,35 +123,39 @@ function readInstalledAgentsManifest() {
82
123
  }
83
124
  }
84
125
 
85
- function removeInstalledAgentsFrom(dir) {
126
+ function removeInstalledAgentsFrom(dir, manifestOverride = null) {
86
127
  if (!fs.existsSync(dir)) return { removed: 0, existed: false };
87
128
  let removed = 0;
129
+ const manifest = manifestOverride || readInstalledAgentsManifest();
130
+ const provider = inferProviderFromAgentDir(dir);
88
131
  let candidates;
89
132
 
90
- const manifest = readInstalledAgentsManifest();
91
- if (manifest && Array.isArray(manifest.filenames)) {
92
- // Manifest path surgical removal of exactly what install wrote.
93
- candidates = manifest.filenames;
133
+ if (manifest?.version >= 2 && Array.isArray(manifest.artifacts)) {
134
+ candidates = manifest.artifacts.filter((artifact) => {
135
+ if (!artifact || typeof artifact.filename !== 'string') return false;
136
+ return provider ? artifact.provider === provider : true;
137
+ });
94
138
  } else {
95
- // Backward-compat fallback for installs predating the manifest
96
- // (rc.10 and earlier). Heuristic: SINAPSE-authored files end in
97
- // `-orqx.md`, OR start with `name: sinapse-` in their frontmatter.
98
- try {
99
- candidates = fs.readdirSync(dir).filter((f) => {
100
- if (!f.endsWith('.md')) return false;
101
- if (/-orqx\.md$/.test(f)) return true;
102
- try {
103
- const head = fs.readFileSync(path.join(dir, f), 'utf8').slice(0, 600);
104
- return /^\s*name:\s*sinapse-/im.test(head);
105
- } catch { return false; }
106
- });
107
- } catch { return { removed: 0, existed: true }; }
139
+ // Legacy manifests did not record provider or digests. Ownership must be
140
+ // proven by the marker in the actual provider directory before deletion.
141
+ const filenames = Array.isArray(manifest?.filenames)
142
+ ? manifest.filenames
143
+ : fs.readdirSync(dir);
144
+ candidates = filenames.map((filename) => ({ filename, sha256: null, legacy: true }));
108
145
  }
109
146
 
110
- for (const f of candidates) {
111
- const filepath = path.join(dir, f);
147
+ for (const { filename, sha256, legacy } of candidates) {
148
+ const filepath = path.join(dir, filename);
112
149
  if (!fs.existsSync(filepath)) continue;
113
150
  try {
151
+ if (sha256) {
152
+ if (digestFile(filepath) !== sha256) continue;
153
+ } else {
154
+ // A v2 entry without a digest does not prove the installer wrote it.
155
+ if (!legacy) continue;
156
+ const content = fs.readFileSync(filepath, 'utf8');
157
+ if (!content.includes('SINAPSE-MANAGED:global-agent')) continue;
158
+ }
114
159
  fs.unlinkSync(filepath);
115
160
  removed++;
116
161
  } catch { /* best-effort */ }
@@ -125,6 +170,168 @@ function removeOrqxAgentsFrom(dir) {
125
170
  return removeInstalledAgentsFrom(dir);
126
171
  }
127
172
 
173
+ const MANAGED_GLOBAL_SKILL_IDS = ['snps', 'sinapse', 'snps-orqx', 'sinapse-orqx', 'sinapse-agent'];
174
+ const MANAGED_GLOBAL_SKILL_MARKER = 'SINAPSE-MANAGED:global-skill';
175
+
176
+ function removeManagedGlobalSkills(home = HOME, options = {}) {
177
+ let removed = 0;
178
+ const providers = options.providers || ['codex', 'claude-code'];
179
+ const skillRoots = [];
180
+ if (providers.includes('codex')) skillRoots.push(path.join(home, '.agents', 'skills'));
181
+ if (providers.includes('claude-code')) skillRoots.push(path.join(home, '.claude', 'skills'));
182
+ for (const skillsRoot of skillRoots) {
183
+ for (const skillId of MANAGED_GLOBAL_SKILL_IDS) {
184
+ const skillDir = path.join(skillsRoot, skillId);
185
+ const skillPath = path.join(skillDir, 'SKILL.md');
186
+ if (!fs.existsSync(skillPath)) continue;
187
+ try {
188
+ const content = fs.readFileSync(skillPath, 'utf8');
189
+ if (!content.includes(MANAGED_GLOBAL_SKILL_MARKER)) continue;
190
+ fs.unlinkSync(skillPath);
191
+ if (fs.readdirSync(skillDir).length === 0) fs.rmdirSync(skillDir);
192
+ removed++;
193
+ } catch { /* best-effort */ }
194
+ }
195
+ }
196
+ return { removed };
197
+ }
198
+
199
+ function reconcileInstalledAgents(home, desiredFilenames) {
200
+ const manifest = readInstalledAgentsManifest(home);
201
+ const desired = new Set(desiredFilenames);
202
+ const desiredByProvider = {
203
+ 'claude-code': new Set([...desired].filter((name) => name.endsWith('.md'))),
204
+ codex: new Set([...desired].filter((name) => name.endsWith('.toml'))),
205
+ };
206
+ let removed = 0;
207
+ const legacyArtifacts = (manifest?.filenames || []).map((filename) => ({
208
+ provider: filename.endsWith('.toml') ? 'codex' : 'claude-code',
209
+ filename,
210
+ sha256: null,
211
+ }));
212
+ const manifestArtifacts = Array.isArray(manifest?.artifacts) ? manifest.artifacts : legacyArtifacts;
213
+ const manifestOwned = new Set(manifestArtifacts.map(({ provider, filename }) => `${provider}/${filename}`));
214
+ const versionedOwned = new Set(Array.isArray(manifest?.artifacts)
215
+ ? manifestArtifacts.map(({ provider, filename }) => `${provider}/${filename}`)
216
+ : []);
217
+ const managedMarker = 'SINAPSE-MANAGED:global-agent';
218
+ for (const { provider, filename, sha256 } of manifestArtifacts) {
219
+ if (!desiredByProvider[provider] || desiredByProvider[provider].has(filename)) continue;
220
+ const filepath = providerAgentPath(home, provider, filename);
221
+ if (!fs.existsSync(filepath)) continue;
222
+ try {
223
+ const content = fs.readFileSync(filepath, 'utf8');
224
+ const digestMatches = Boolean(sha256) && digestFile(filepath) === sha256;
225
+ const legacyMarkerMatches = !Array.isArray(manifest?.artifacts) && content.includes(managedMarker);
226
+ if (sha256 ? !digestMatches : !legacyMarkerMatches) continue;
227
+ fs.unlinkSync(filepath);
228
+ removed++;
229
+ } catch { /* best-effort */ }
230
+ }
231
+
232
+ for (const [provider, providerDir, extension] of [
233
+ ['claude-code', path.join(home, '.claude', 'agents'), '.md'],
234
+ ['codex', path.join(home, '.codex', 'agents'), '.toml'],
235
+ ['codex', path.join(home, '.codex', 'agents'), '.md'],
236
+ ]) {
237
+ if (!fs.existsSync(providerDir)) continue;
238
+ for (const filename of fs.readdirSync(providerDir).filter((name) => name.endsWith(extension))) {
239
+ if (desiredByProvider[provider].has(filename)) continue;
240
+ const filepath = path.join(providerDir, filename);
241
+ try {
242
+ const content = fs.readFileSync(filepath, 'utf8');
243
+ if (versionedOwned.has(`${provider}/${filename}`)) continue;
244
+ if (!manifestOwned.has(`${provider}/${filename}`) && !content.includes(managedMarker)) continue;
245
+ // A manifest entry alone is not proof of current ownership: users can
246
+ // replace a formerly managed file. Only marked artifacts reach this
247
+ // sweep; exact recorded content was handled by the digest path above.
248
+ if (!content.includes(managedMarker)) continue;
249
+ fs.unlinkSync(filepath);
250
+ removed++;
251
+ } catch { /* best-effort */ }
252
+ }
253
+ }
254
+
255
+ const legacyCommands = path.join(home, '.claude', 'commands', 'SINAPSE', 'agents');
256
+ let legacyCommandDirectoryRemoved = false;
257
+ let legacyCommandsRemoved = 0;
258
+ let legacyCommandsPreserved = 0;
259
+ if (fs.existsSync(legacyCommands)) {
260
+ for (const entry of fs.readdirSync(legacyCommands, { withFileTypes: true })) {
261
+ const filePath = path.join(legacyCommands, entry.name);
262
+ if (!entry.isFile()) {
263
+ legacyCommandsPreserved++;
264
+ continue;
265
+ }
266
+ try {
267
+ const content = fs.readFileSync(filePath);
268
+ const digest = crypto.createHash('sha256').update(content).digest('hex');
269
+ const knownHashes = legacyClaudeCommandHashes.files[entry.name] || [];
270
+ if (!knownHashes.includes(digest)) {
271
+ legacyCommandsPreserved++;
272
+ continue;
273
+ }
274
+ fs.unlinkSync(filePath);
275
+ legacyCommandsRemoved++;
276
+ } catch {
277
+ legacyCommandsPreserved++;
278
+ }
279
+ }
280
+ try {
281
+ if (fs.readdirSync(legacyCommands).length === 0) {
282
+ fs.rmdirSync(legacyCommands);
283
+ legacyCommandDirectoryRemoved = true;
284
+ }
285
+ } catch { /* best-effort */ }
286
+ }
287
+ return {
288
+ removed,
289
+ legacyCommandDirectoryRemoved,
290
+ legacyCommandsRemoved,
291
+ legacyCommandsPreserved,
292
+ };
293
+ }
294
+
295
+ function hasManagedInstalledAgents(home = HOME) {
296
+ const manifest = readInstalledAgentsManifest(home);
297
+ if (!manifest) {
298
+ for (const [providerDir, extensions] of [
299
+ [path.join(home, '.claude', 'agents'), new Set(['.md'])],
300
+ [path.join(home, '.codex', 'agents'), new Set(['.toml', '.md'])],
301
+ ]) {
302
+ try {
303
+ for (const filename of fs.readdirSync(providerDir)) {
304
+ if (!extensions.has(path.extname(filename))) continue;
305
+ try {
306
+ const content = fs.readFileSync(path.join(providerDir, filename), 'utf8');
307
+ if (content.includes('SINAPSE-MANAGED:global-agent')) return true;
308
+ } catch { /* unreadable or non-regular entries are not evidence */ }
309
+ }
310
+ } catch { /* missing or unreadable provider dir */ }
311
+ }
312
+ return false;
313
+ }
314
+ const versioned = Array.isArray(manifest?.artifacts);
315
+ const artifacts = versioned
316
+ ? manifest.artifacts
317
+ : (manifest?.filenames || []).map((filename) => ({
318
+ provider: filename.endsWith('.toml') ? 'codex' : 'claude-code',
319
+ filename,
320
+ sha256: null,
321
+ }));
322
+ return artifacts.some(({ provider, filename, sha256 }) => {
323
+ const filePath = providerAgentPath(home, provider, filename);
324
+ try {
325
+ const content = fs.readFileSync(filePath, 'utf8');
326
+ return sha256
327
+ ? digestFile(filePath) === sha256
328
+ : !versioned && content.includes('SINAPSE-MANAGED:global-agent');
329
+ } catch {
330
+ return false;
331
+ }
332
+ });
333
+ }
334
+
128
335
  // Story 10.40 — Strip SINAPSE-owned keys from ~/.claude/settings.json without
129
336
  // touching anything else the user put there. Safe if the file is missing or
130
337
  // already clean.
@@ -176,6 +383,7 @@ async function cmdUninstall(opts = {}) {
176
383
  }
177
384
 
178
385
  logger.always(`${BOLD}Uninstalling Sinapse...${NC}\n`);
386
+ const installedAgentsManifest = readInstalledAgentsManifest();
179
387
 
180
388
  // Paths that are fully SINAPSE-owned (directory or launcher file)
181
389
  const ownedItems = [
@@ -210,7 +418,7 @@ async function cmdUninstall(opts = {}) {
210
418
  const claudeAgentsDir = path.join(HOME, '.claude', 'agents');
211
419
  const codexAgentsDir = path.join(HOME, '.codex', 'agents');
212
420
 
213
- const claudeRemoved = removeInstalledAgentsFrom(claudeAgentsDir);
421
+ const claudeRemoved = removeInstalledAgentsFrom(claudeAgentsDir, installedAgentsManifest);
214
422
  if (!claudeRemoved.existed) {
215
423
  logger.always(` ${YELLOW}-${NC} ~/.claude/agents/ SINAPSE files (dir not found)`);
216
424
  } else if (claudeRemoved.removed === 0) {
@@ -219,7 +427,7 @@ async function cmdUninstall(opts = {}) {
219
427
  logger.always(` ${GREEN}✓${NC} Removed ~/.claude/agents/ SINAPSE files (${claudeRemoved.removed} files)`);
220
428
  }
221
429
 
222
- const codexRemoved = removeInstalledAgentsFrom(codexAgentsDir);
430
+ const codexRemoved = removeInstalledAgentsFrom(codexAgentsDir, installedAgentsManifest);
223
431
  if (!codexRemoved.existed) {
224
432
  logger.always(` ${YELLOW}-${NC} ~/.codex/agents/ SINAPSE files (dir not found)`);
225
433
  } else if (codexRemoved.removed === 0) {
@@ -229,6 +437,13 @@ async function cmdUninstall(opts = {}) {
229
437
  }
230
438
 
231
439
  // Story 10.40 — clean SINAPSE-owned keys from ~/.claude/settings.json
440
+ const skillsRemoved = removeManagedGlobalSkills(HOME);
441
+ if (skillsRemoved.removed > 0) {
442
+ logger.always(` ${GREEN}OK${NC} Removed global SINAPSE skills (${skillsRemoved.removed})`);
443
+ } else {
444
+ logger.always(` ${YELLOW}-${NC} Global SINAPSE skills (none present)`);
445
+ }
446
+
232
447
  const settingsPath = path.join(HOME, '.claude', 'settings.json');
233
448
  const settingsClean = cleanClaudeSettingsJson(settingsPath);
234
449
  if (settingsClean.touched) {
@@ -259,6 +474,9 @@ module.exports = {
259
474
  readInstalledAgentsManifest,
260
475
  removeInstalledAgentsFrom,
261
476
  removeOrqxAgentsFrom,
477
+ removeManagedGlobalSkills,
478
+ reconcileInstalledAgents,
479
+ hasManagedInstalledAgents,
262
480
  cleanClaudeSettingsJson,
263
481
  removeGitHooksConfig,
264
482
  INSTALLED_AGENTS_MANIFEST,