stream_weaver 0.3.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 (381) hide show
  1. checksums.yaml +7 -0
  2. data/.beads/.gitignore +77 -0
  3. data/.beads/README.md +81 -0
  4. data/.beads/config.yaml +54 -0
  5. data/.beads/metadata.json +7 -0
  6. data/.rspec +3 -0
  7. data/AGENTS.md +91 -0
  8. data/CHANGELOG.md +294 -0
  9. data/CLAUDE.md +67 -0
  10. data/LICENSE.txt +21 -0
  11. data/README.md +565 -0
  12. data/Rakefile +13 -0
  13. data/assets/streamweaver-hero.jpg +0 -0
  14. data/bench/baselines/ledger.rb +58 -0
  15. data/bench/baselines/warroom.rb +51 -0
  16. data/bench/fixtures/ledger.rb +76 -0
  17. data/bench/fixtures/warroom.rb +60 -0
  18. data/bench/results/6daf8b8.md +102 -0
  19. data/bench/results/c8d749b.md +102 -0
  20. data/bench/results/eb06ab9.md +102 -0
  21. data/bench/run.rb +151 -0
  22. data/bench/support.rb +84 -0
  23. data/copy_this/dto_run_sample_run_7631.html +220 -0
  24. data/docs/SERVICE_MODE.md +302 -0
  25. data/docs/architecture/how_streamweaver_works.md +772 -0
  26. data/docs/blog/2026-01-16-streamweaver-introduction.md +515 -0
  27. data/docs/bug-2026-08-31-canvas-bridge-socket-collision.md +83 -0
  28. data/docs/canvas-ipc-session-summary.md +127 -0
  29. data/docs/canvas-panel-workflow.md +172 -0
  30. data/docs/canvas-read.md +147 -0
  31. data/docs/canvas-roadmap.md +275 -0
  32. data/docs/case-studies/2026-09-03-didx-canvas-read-shelf.md +147 -0
  33. data/docs/claude-code-companion-skill-spec.md +567 -0
  34. data/docs/components_reference.md +1223 -0
  35. data/docs/crud-patterns.md +265 -0
  36. data/docs/endpoints.md +122 -0
  37. data/docs/for_llms.md +1 -0
  38. data/docs/form-patterns.md +165 -0
  39. data/docs/frontend-only.md +169 -0
  40. data/docs/html-artifact-audit.md +238 -0
  41. data/docs/ideas/2025-01-01-as-a-service.md +203 -0
  42. data/docs/ideas/2026-01-16-charm-tui-exploration.md +542 -0
  43. data/docs/ideas/2026-08-27-static-doc-shelf-export.md +153 -0
  44. data/docs/ideas/dhh-review-future-refactors.md +142 -0
  45. data/docs/opal-jamstack.md +47 -0
  46. data/docs/opal-npm-direction.md +184 -0
  47. data/docs/opal-spike-findings.md +194 -0
  48. data/docs/plans/2025-12-16-form-blocks-design.md +124 -0
  49. data/docs/plans/2025-12-30-examples-browser-design.md +152 -0
  50. data/docs/plans/2026-01-02-charts-design.md +288 -0
  51. data/docs/plans/2026-01-10-canvas-ipc-design.md +247 -0
  52. data/docs/plans/2026-01-19-cabinet-control-components.md +176 -0
  53. data/docs/plans/2026-01-26-gem-release-and-panel.md +140 -0
  54. data/docs/plans/canvas-claude-project-design.md +238 -0
  55. data/docs/plans/canvas-doc-location-and-discovery.md +32 -0
  56. data/docs/plans/org-doc-preview-surfaces.md +293 -0
  57. data/docs/plans/shadcn-polish-plan.md +417 -0
  58. data/docs/porting-artifacts.md +252 -0
  59. data/docs/reference/agent-skills-comparison.md +369 -0
  60. data/docs/reference/travel-state-prd.artifact.html +780 -0
  61. data/docs/research/2026-08-17-hotwire-alike-landscape.md +268 -0
  62. data/docs/research/2026-08-17-hotwire-concept-map.md +404 -0
  63. data/docs/research/2026-08-22-lazy-fragments-trigger-decision.md +246 -0
  64. data/docs/research/2026-08-22-learnhotwire-syllabus-coverage.md +239 -0
  65. data/docs/research/frontend-only-matrix.md +278 -0
  66. data/docs/research/streamweaver-way-spike-findings.md +529 -0
  67. data/docs/resource-dsl.md +342 -0
  68. data/docs/routing.md +302 -0
  69. data/docs/ruby-ui-comparison.md +319 -0
  70. data/docs/shared-dsl-fragments.md +356 -0
  71. data/docs/streamweaver-for-ai-agents.md +401 -0
  72. data/docs/streamweaver-frontend-vision.md +123 -0
  73. data/docs/streamweaver_canvas/glimmer_initial_final_layer.rb +77 -0
  74. data/docs/streamweaver_canvas/save_example.rb +9 -0
  75. data/docs/templates.md +213 -0
  76. data/docs/testing.md +155 -0
  77. data/docs/theming-hooks.md +281 -0
  78. data/docs/tutorials/the-streamweaver-way.md +882 -0
  79. data/docs/university/capability-inventory.md +137 -0
  80. data/docs/university/dependency-survey.md +114 -0
  81. data/docs/university/design-spec.md +217 -0
  82. data/docs/university/mockups/code-block-doc-theme-dark.png +0 -0
  83. data/docs/university/mockups/code-block-doc-theme-light.png +0 -0
  84. data/docs/university/mockups/course-list-dark.png +0 -0
  85. data/docs/university/mockups/course-list-light.png +0 -0
  86. data/docs/university/mockups/course_canvas_mockup.rb +741 -0
  87. data/docs/university/mockups/step-screen-dark.png +0 -0
  88. data/docs/university/mockups/step-screen-light.png +0 -0
  89. data/docs/university/roadmap.md +72 -0
  90. data/docs/university/send-to-coworker.md +77 -0
  91. data/docs/university/worker-session-mining.md +109 -0
  92. data/docs/visual/browser-rendering-spike.md +173 -0
  93. data/docs/visual/builder-visual-plan-analysis.md +378 -0
  94. data/docs/visual/sw-plan-format-exploration.md +511 -0
  95. data/docs/visual/sw-plan-rendering-deep-dive.md +453 -0
  96. data/docs/visual-skills/PROGRESS.md +60 -0
  97. data/docs/visual-skills/SESSION-CONTEXT.md +207 -0
  98. data/docs/visual-skills/analysis/components.md +317 -0
  99. data/docs/visual-skills/analysis/overlap.md +360 -0
  100. data/docs/visual-skills/analysis/pi-design-deck.md +1102 -0
  101. data/docs/visual-skills/analysis/streamweaver-inventory.md +93 -0
  102. data/docs/visual-skills/analysis/unified-specs.feature +1003 -0
  103. data/docs/visual-skills/analysis/visual-explainer.md +964 -0
  104. data/docs/visual-skills/blog/blog-series-outline.md +39 -0
  105. data/docs/visual-skills/blog/token-efficiency.md +73 -0
  106. data/docs/visual-skills/design/architecture.md +1725 -0
  107. data/docs/visual-skills/design/codex-review.md +340 -0
  108. data/docs/visual-skills/design/dhh-review.md +209 -0
  109. data/docs/visual-skills/design/evolution.md +100 -0
  110. data/docs/visual-skills/design/gemini-review.md +55 -0
  111. data/docs/visual-skills/design/review-synthesis.md +149 -0
  112. data/docs/visual-skills/implementation/STATE.md +22 -0
  113. data/docs/visual-skills/implementation/plan.md +347 -0
  114. data/docs/visual-skills/implementation/spike-findings.md +237 -0
  115. data/docs/visual-skills/implementation/tasks.md +702 -0
  116. data/docs/visual-skills/lessons-learned/process.md +145 -0
  117. data/examples/README.md +96 -0
  118. data/examples/advanced/all_components.rb +177 -0
  119. data/examples/advanced/examples_browser.rb +394 -0
  120. data/examples/advanced/teachables_browser.rb +261 -0
  121. data/examples/advanced/theme_tweaker.rb +366 -0
  122. data/examples/advanced/tutorial.rb +1528 -0
  123. data/examples/agentic/agentic_form.rb +30 -0
  124. data/examples/agentic/agentic_form_autoclose.rb +30 -0
  125. data/examples/agentic/cultivation_tracker.rb +69 -0
  126. data/examples/basic/hello_world.rb +22 -0
  127. data/examples/basic/opal_tabs_table.rb +44 -0
  128. data/examples/basic/todo_list.rb +39 -0
  129. data/examples/button_loading_test.rb +36 -0
  130. data/examples/canvas/mermaid_canvas_demo.sh +151 -0
  131. data/examples/charts/bar_chart_demo.rb +57 -0
  132. data/examples/charts/line_chart_demo.rb +73 -0
  133. data/examples/charts/pie_area_demo.rb +87 -0
  134. data/examples/charts/stacked_bar_chart_demo.rb +69 -0
  135. data/examples/claude_code/README.md +85 -0
  136. data/examples/claude_code/codebreaker/.claude/commands/infiltrate.md +632 -0
  137. data/examples/claude_code/codebreaker/.claude/settings.json +11 -0
  138. data/examples/claude_code/codebreaker/.claude/settings.local.json +17 -0
  139. data/examples/claude_code/codebreaker/.claude/skills/infiltrate.md +0 -0
  140. data/examples/claude_code/codebreaker/README.md +213 -0
  141. data/examples/claude_code/tutorial/.claude/commands/learn.md +453 -0
  142. data/examples/claude_code/tutorial/README.md +102 -0
  143. data/examples/claude_code/verification_flow/.claude/commands/verify.md +171 -0
  144. data/examples/claude_code/verification_flow/README.md +126 -0
  145. data/examples/components/annotated_code_demo.rb +54 -0
  146. data/examples/components/callout_demo.rb +33 -0
  147. data/examples/components/checkbox_group_demo.rb +46 -0
  148. data/examples/components/design_review.css +468 -0
  149. data/examples/components/design_review_demo.rb +44 -0
  150. data/examples/components/design_review_dsl.rb +300 -0
  151. data/examples/components/diff_block_demo.rb +112 -0
  152. data/examples/components/events_demo.rb +184 -0
  153. data/examples/components/form_demo.rb +62 -0
  154. data/examples/components/lesson_demo.rb +53 -0
  155. data/examples/components/markdown_demo.rb +110 -0
  156. data/examples/components/mermaid_demo.rb +166 -0
  157. data/examples/components/pareto_set.rb +64 -0
  158. data/examples/components/prd_demo.rb +21 -0
  159. data/examples/components/prd_dsl.rb +385 -0
  160. data/examples/components/quiz_demo.rb +47 -0
  161. data/examples/components/run_viewer_demo.rb +100 -0
  162. data/examples/components/score_and_collapsible_demo.rb +82 -0
  163. data/examples/components/select_stale_value_smoke_test.rb +39 -0
  164. data/examples/components/table_demo.rb +247 -0
  165. data/examples/components/timer_with_state_demo.rb +58 -0
  166. data/examples/components/todo_due_dates.rb +63 -0
  167. data/examples/components/uat_gaps_demo.rb +112 -0
  168. data/examples/dashboard/feed_simulator.rb +60 -0
  169. data/examples/dashboard/live_dashboard.rb +80 -0
  170. data/examples/dashboard_components.rb +108 -0
  171. data/examples/deferred_fragments_demo.rb +62 -0
  172. data/examples/generate_more_spike/README.md +63 -0
  173. data/examples/generate_more_spike/app.rb +441 -0
  174. data/examples/git_health.sh +401 -0
  175. data/examples/layout/layout_components_demo.rb +174 -0
  176. data/examples/layout/modal_demo.rb +215 -0
  177. data/examples/layout/navigation_demo.rb +227 -0
  178. data/examples/layout/route_tabs_demo.rb +52 -0
  179. data/examples/layout/routing_demo.rb +52 -0
  180. data/examples/layout/scroll_box_demo.rb +154 -0
  181. data/examples/lazy_fragments_demo.rb +151 -0
  182. data/examples/my_todos/README.md +29 -0
  183. data/examples/my_todos/my_todos.rb +312 -0
  184. data/examples/my_todos/store.rb +86 -0
  185. data/examples/opal/reactive_demo.rb +62 -0
  186. data/examples/opal/scenarios/s1_counter.rb +15 -0
  187. data/examples/opal/scenarios/s2_search_filter.rb +17 -0
  188. data/examples/opal/scenarios/s3_sibling_tabs.rb +25 -0
  189. data/examples/opal/scenarios/s4_shopping_cart.rb +34 -0
  190. data/examples/opal/scenarios/s5_watch.rb +39 -0
  191. data/examples/opal/scenarios/s6_on_start.rb +20 -0
  192. data/examples/opal/scenarios/s7_wizard.rb +33 -0
  193. data/examples/opal/scenarios/s8_loan_calculator.rb +21 -0
  194. data/examples/opal/scenarios/s9_dashboard.rb +27 -0
  195. data/examples/operations_dashboard_demo.rb +167 -0
  196. data/examples/panel_demo.sh +447 -0
  197. data/examples/parity/assets/tyrion_slice.css +86 -0
  198. data/examples/parity/rivet_people_slice.rb +182 -0
  199. data/examples/parity/tyrion_components.css +777 -0
  200. data/examples/parity/tyrion_warroom_components.rb +414 -0
  201. data/examples/parity/tyrion_warroom_slice.rb +549 -0
  202. data/examples/puma_dev/README.md +124 -0
  203. data/examples/puma_dev/config.ru +34 -0
  204. data/examples/puma_dev/standalone_app.rb +34 -0
  205. data/examples/scaffolding/blog.rb +49 -0
  206. data/examples/scaffolding/utf_lite.rb +105 -0
  207. data/examples/styling/feedback_demo.rb +229 -0
  208. data/examples/styling/style_showcase.rb +172 -0
  209. data/examples/styling/theme_demo.rb +508 -0
  210. data/examples/timer_health_checker.rb +111 -0
  211. data/examples/timer_showcase.rb +131 -0
  212. data/examples/tutorials/render_markdown.rb +112 -0
  213. data/examples/tutorials/streamweaver_way_tutorial.rb +44 -0
  214. data/examples/tutorials/tutorial_content.rb +1082 -0
  215. data/examples/visual_skills/design_deck_demo.rb +314 -0
  216. data/examples/visual_skills/explainer_demo.rb +499 -0
  217. data/exe/streamweaver +9 -0
  218. data/gsd/ROADMAP-1.0.md +167 -0
  219. data/gsd/STATE.md +13 -0
  220. data/gsd/research/market-positioning-research.md +139 -0
  221. data/gsd/research/production-patterns-research.md +270 -0
  222. data/gsd/research/repo-audit-1.0.md +274 -0
  223. data/lib/stream_weaver/action_token.rb +58 -0
  224. data/lib/stream_weaver/adapter/alpinejs.rb +8249 -0
  225. data/lib/stream_weaver/adapter/base.rb +591 -0
  226. data/lib/stream_weaver/adapter/opal.rb +334 -0
  227. data/lib/stream_weaver/adapter/static.rb +1118 -0
  228. data/lib/stream_weaver/admin.rb +176 -0
  229. data/lib/stream_weaver/app.rb +1821 -0
  230. data/lib/stream_weaver/assets/js/sw-copy.js +50 -0
  231. data/lib/stream_weaver/assets/js/sw-heredoc-rewrite.js +68 -0
  232. data/lib/stream_weaver/assets/js/sw-keyboard.js +165 -0
  233. data/lib/stream_weaver/assets/js/sw-mermaid-zoom.js +621 -0
  234. data/lib/stream_weaver/assets/js/sw-route-tabs.js +53 -0
  235. data/lib/stream_weaver/assets/js/sw-sidebar-toc.js +116 -0
  236. data/lib/stream_weaver/assets/js/sw-slide-nav.js +103 -0
  237. data/lib/stream_weaver/canvas/bridge.rb +239 -0
  238. data/lib/stream_weaver/canvas/bridge_server.rb +646 -0
  239. data/lib/stream_weaver/canvas/client.rb +298 -0
  240. data/lib/stream_weaver/canvas/doc_roots.rb +233 -0
  241. data/lib/stream_weaver/canvas/doc_store.rb +252 -0
  242. data/lib/stream_weaver/canvas/gist_publisher.rb +264 -0
  243. data/lib/stream_weaver/canvas/gist_save_handler.rb +89 -0
  244. data/lib/stream_weaver/canvas/gist_store.rb +135 -0
  245. data/lib/stream_weaver/canvas/helpers.rb +109 -0
  246. data/lib/stream_weaver/canvas/history.rb +90 -0
  247. data/lib/stream_weaver/canvas/protocol.rb +86 -0
  248. data/lib/stream_weaver/canvas/reader.rb +853 -0
  249. data/lib/stream_weaver/canvas/save_doc_widget.rb +457 -0
  250. data/lib/stream_weaver/canvas/scroll_top_hint.rb +21 -0
  251. data/lib/stream_weaver/canvas/session.rb +132 -0
  252. data/lib/stream_weaver/cli.rb +3235 -0
  253. data/lib/stream_weaver/component_assets.rb +70 -0
  254. data/lib/stream_weaver/component_registry.rb +67 -0
  255. data/lib/stream_weaver/component_renderer.rb +48 -0
  256. data/lib/stream_weaver/components/annotated_code.rb +53 -0
  257. data/lib/stream_weaver/components/api_endpoint.rb +42 -0
  258. data/lib/stream_weaver/components/callout.rb +59 -0
  259. data/lib/stream_weaver/components/chart.rb +84 -0
  260. data/lib/stream_weaver/components/code_block.rb +77 -0
  261. data/lib/stream_weaver/components/comparison.rb +39 -0
  262. data/lib/stream_weaver/components/decision.rb +38 -0
  263. data/lib/stream_weaver/components/deck/close_overlay.rb +84 -0
  264. data/lib/stream_weaver/components/deck/confirmation_bar.rb +60 -0
  265. data/lib/stream_weaver/components/deck/deck_option.rb +61 -0
  266. data/lib/stream_weaver/components/deck/deck_slide.rb +77 -0
  267. data/lib/stream_weaver/components/deck/deck_state.rb +469 -0
  268. data/lib/stream_weaver/components/deck/deck_summary.rb +73 -0
  269. data/lib/stream_weaver/components/deck/design_deck.rb +60 -0
  270. data/lib/stream_weaver/components/deck/generate_more_controls.rb +84 -0
  271. data/lib/stream_weaver/components/deck/model_selector.rb +84 -0
  272. data/lib/stream_weaver/components/deck/skeleton_placeholder.rb +36 -0
  273. data/lib/stream_weaver/components/diff_block.rb +125 -0
  274. data/lib/stream_weaver/components/doc_header.rb +57 -0
  275. data/lib/stream_weaver/components/image_block.rb +70 -0
  276. data/lib/stream_weaver/components/implementation_map.rb +33 -0
  277. data/lib/stream_weaver/components/keyboard_shortcuts.rb +94 -0
  278. data/lib/stream_weaver/components/kpi_dashboard.rb +78 -0
  279. data/lib/stream_weaver/components/mermaid.rb +79 -0
  280. data/lib/stream_weaver/components/pipeline.rb +63 -0
  281. data/lib/stream_weaver/components/sidebar_toc.rb +46 -0
  282. data/lib/stream_weaver/components/slide_container.rb +141 -0
  283. data/lib/stream_weaver/components/timeline_event.rb +58 -0
  284. data/lib/stream_weaver/components/wireframe.rb +29 -0
  285. data/lib/stream_weaver/components/wireframe_block.rb +34 -0
  286. data/lib/stream_weaver/components.rb +2711 -0
  287. data/lib/stream_weaver/css.rb +230 -0
  288. data/lib/stream_weaver/dev_fallback_overlay.rb +61 -0
  289. data/lib/stream_weaver/display_dsl.rb +1004 -0
  290. data/lib/stream_weaver/export/html_exporter.rb +478 -0
  291. data/lib/stream_weaver/feed.rb +34 -0
  292. data/lib/stream_weaver/feed_builder.rb +31 -0
  293. data/lib/stream_weaver/fonts.rb +33 -0
  294. data/lib/stream_weaver/interaction_runner.rb +487 -0
  295. data/lib/stream_weaver/iterm.rb +460 -0
  296. data/lib/stream_weaver/layout_registry.rb +92 -0
  297. data/lib/stream_weaver/opal/bridge.rb +52 -0
  298. data/lib/stream_weaver/opal/builder.rb +193 -0
  299. data/lib/stream_weaver/opal/env.rb +29 -0
  300. data/lib/stream_weaver/opal/reactive_state.rb +75 -0
  301. data/lib/stream_weaver/opal/regexp_anchor_patch.rb +62 -0
  302. data/lib/stream_weaver/opal/renderer.rb +77 -0
  303. data/lib/stream_weaver/opal/runtime.rb +250 -0
  304. data/lib/stream_weaver/opal/shell.rb +145 -0
  305. data/lib/stream_weaver/opal/string_bridge.rb +50 -0
  306. data/lib/stream_weaver/opal/stubs/diff.min.js +1 -0
  307. data/lib/stream_weaver/opal/stubs/digest.rb +15 -0
  308. data/lib/stream_weaver/opal/stubs/marked.umd.js +79 -0
  309. data/lib/stream_weaver/opal/stubs/md5.rb +3 -0
  310. data/lib/stream_weaver/opal/stubs/morphdom.min.js +775 -0
  311. data/lib/stream_weaver/opal/stubs/prism-tomorrow.min.css +1 -0
  312. data/lib/stream_weaver/opal/stubs/prism.min.js +1967 -0
  313. data/lib/stream_weaver/opal_entry.rb +136 -0
  314. data/lib/stream_weaver/org/inline.rb +95 -0
  315. data/lib/stream_weaver/org/reader.rb +561 -0
  316. data/lib/stream_weaver/org/recording_context.rb +86 -0
  317. data/lib/stream_weaver/org/source_splitter.rb +63 -0
  318. data/lib/stream_weaver/org/writer.rb +300 -0
  319. data/lib/stream_weaver/page_shell.rb +530 -0
  320. data/lib/stream_weaver/portfile.rb +79 -0
  321. data/lib/stream_weaver/pushable.rb +42 -0
  322. data/lib/stream_weaver/resource/default_views.rb +111 -0
  323. data/lib/stream_weaver/resource/field_input.rb +25 -0
  324. data/lib/stream_weaver/resource/state_keys.rb +16 -0
  325. data/lib/stream_weaver/resource/store.rb +18 -0
  326. data/lib/stream_weaver/resource.rb +104 -0
  327. data/lib/stream_weaver/server.rb +1471 -0
  328. data/lib/stream_weaver/service.rb +1240 -0
  329. data/lib/stream_weaver/service_client.rb +104 -0
  330. data/lib/stream_weaver/session_store.rb +186 -0
  331. data/lib/stream_weaver/skills/streamweaver-canvas-safe/SKILL.md +66 -0
  332. data/lib/stream_weaver/skills/streamweaver-canvas-safe/examples/canvas-safe-showcase.rb +98 -0
  333. data/lib/stream_weaver/skills/streamweaver-canvas-safe/references/actions-and-buttons.md +47 -0
  334. data/lib/stream_weaver/skills/streamweaver-canvas-safe/references/charts-and-diagrams.md +38 -0
  335. data/lib/stream_weaver/skills/streamweaver-canvas-safe/references/deck.md +32 -0
  336. data/lib/stream_weaver/skills/streamweaver-canvas-safe/references/inputs-and-forms.md +65 -0
  337. data/lib/stream_weaver/skills/streamweaver-canvas-safe/references/tabs-and-navigation.md +53 -0
  338. data/lib/stream_weaver/skills/streamweaver-doc-builder/SKILL.md +298 -0
  339. data/lib/stream_weaver/skills/streamweaver-visual-companion/SKILL.md +130 -0
  340. data/lib/stream_weaver/skills/streamweaver-visual-companion/examples/design-review-example.css +468 -0
  341. data/lib/stream_weaver/skills/streamweaver-visual-companion/examples/design-review-example.rb +39 -0
  342. data/lib/stream_weaver/skills/streamweaver-visual-companion/examples/design-review-example_dsl.rb +300 -0
  343. data/lib/stream_weaver/skills/streamweaver-visual-companion/examples/doc-parity-example.rb +24 -0
  344. data/lib/stream_weaver/skills/streamweaver-visual-companion/examples/doc-parity-example_dsl.rb +385 -0
  345. data/lib/stream_weaver/skills/streamweaver-visual-companion/references/checkpoints-and-forms.md +28 -0
  346. data/lib/stream_weaver/skills/streamweaver-visual-companion/references/cleanup-and-panel.md +44 -0
  347. data/lib/stream_weaver/skills/streamweaver-visual-companion/references/example-gallery.md +8 -0
  348. data/lib/stream_weaver/skills/streamweaver-visual-companion/references/persistence.md +58 -0
  349. data/lib/stream_weaver/skills/streamweaver-way/SKILL.md +396 -0
  350. data/lib/stream_weaver/skills/visual-plan/SKILL.md +201 -0
  351. data/lib/stream_weaver/skills/visual-recap/SKILL.md +244 -0
  352. data/lib/stream_weaver/streamer.rb +63 -0
  353. data/lib/stream_weaver/templates/choices.rb +149 -0
  354. data/lib/stream_weaver/templates/code.rb +157 -0
  355. data/lib/stream_weaver/templates/confirm.rb +110 -0
  356. data/lib/stream_weaver/templates/diff.rb +195 -0
  357. data/lib/stream_weaver/templates/info.rb +142 -0
  358. data/lib/stream_weaver/templates/table.rb +169 -0
  359. data/lib/stream_weaver/templates/wizard.rb +271 -0
  360. data/lib/stream_weaver/theme/auto_mode.rb +116 -0
  361. data/lib/stream_weaver/theme/presets.rb +555 -0
  362. data/lib/stream_weaver/theme.rb +639 -0
  363. data/lib/stream_weaver/university/canvas.rb +924 -0
  364. data/lib/stream_weaver/university/course.rb +699 -0
  365. data/lib/stream_weaver/university/demos/counter.rb +33 -0
  366. data/lib/stream_weaver/university/demos/dashboard.rb +147 -0
  367. data/lib/stream_weaver/university/demos/decision_form.rb +143 -0
  368. data/lib/stream_weaver/university/demos.rb +50 -0
  369. data/lib/stream_weaver/university/listener.rb +467 -0
  370. data/lib/stream_weaver/university/progress.rb +201 -0
  371. data/lib/stream_weaver/university/runner.rb +138 -0
  372. data/lib/stream_weaver/university/scripts/growing_doc.rb +609 -0
  373. data/lib/stream_weaver/university/scripts/growing_doc_state.rb +91 -0
  374. data/lib/stream_weaver/utils.rb +31 -0
  375. data/lib/stream_weaver/version.rb +5 -0
  376. data/lib/stream_weaver/views/canvas/reader_layout.erb +800 -0
  377. data/lib/stream_weaver/views.rb +3940 -0
  378. data/lib/stream_weaver.rb +122 -0
  379. data/llms.txt +1269 -0
  380. data/sig/stream_weaver.rbs +4 -0
  381. metadata +598 -0
@@ -0,0 +1,369 @@
1
+ *Source: Perplexity Deep Research, 2026-07-09, commissioned to scope multi-tool skill-install support for StreamWeaver's `streamweaver setup`/`install-skill` commands.*
2
+
3
+ # Comparing Coding-Agent Skill Conventions: Codex, Gemini CLI, GitHub Copilot vs. Claude Code's SKILL.md
4
+
5
+ > **Correction (post-verification, 2026-07-09):** the table and prose below say Claude Code also scans a `.agents/skills/` alias. That's wrong — checked against Claude Code's own official docs (code.claude.com/docs, platform.claude.com/docs), which list only `.claude/skills/` (project), `~/.claude/skills/` (user), and plugin-bundled skills. No `.agents/skills/` support. The alias claim *did* check out independently for Codex CLI (learn.chatgpt.com/docs/build-skills), Gemini CLI (geminicli.com/docs/cli/skills/ — where `.agents/skills/` actually takes precedence over `.gemini/skills/`), and GitHub Copilot (docs.github.com — `.github/skills`, `.claude/skills`, or `.agents/skills` all accepted). Net effect: `.agents/skills/` reaches Codex + Gemini CLI + Copilot, not Claude Code — implemented that way in `streamweaver install-skill`/`setup`.
6
+
7
+ > **Baseline (given, not derived):** Claude Code uses `~/.claude/skills/<name>/SKILL.md` (global) or `<project>/.claude/skills/<name>/SKILL.md` (project-local). Each `SKILL.md` has YAML frontmatter with required `name` and `description` fields, an optional markdown body, and optional bundled files in the same directory. Activation is automatic: the agent matches the `description` field against the current task intent — no explicit slash command required.
8
+
9
+ ***
10
+
11
+ ## Master Comparison Table
12
+
13
+ | Tool | Concept name | File format | Metadata schema | Location convention | Discovery/trigger mechanism | Maturity | Key limitation vs. Claude Code SKILL.md |
14
+ |------|-------------|-------------|-----------------|--------------------|-----------------------------|----------|-----------------------------------------|
15
+ | **Claude Code** *(baseline)* | Agent Skill | Directory + `SKILL.md` (YAML frontmatter + Markdown body) | **Required:** `name`, `description`; **Optional:** `license`, `compatibility`, `metadata`, `allowed-tools` | `~/.claude/skills/<name>/` (global); `<project>/.claude/skills/<name>/` (project-local); `.agents/skills/` alias also scanned | Names+descriptions loaded at startup; agent auto-triggers based on description match; full `SKILL.md` loaded on activation | Stable (open standard since Dec 2025) | — (baseline) |
16
+ | **OpenAI Codex** | Agent Skill (+ legacy: AGENTS.md for project context) | Directory + `SKILL.md`; also `agents/openai.yaml` for UI metadata | Same as agentskills.io spec; optional `agents/openai.yaml` adds `interface`, `policy`, `dependencies` YAML blocks | `~/.agents/skills/` or `$HOME/.agents/skills/` (user); `$REPO_ROOT/.agents/skills/` (repo-root); `$CWD/.agents/skills/` (working dir); also `~/.codex/skills/` historically; `/etc/codex/skills/` (admin/system) | Same progressive-disclosure model; explicit `$skill-name` mention or `/skills` picker; implicit auto-match by description | Stable — skills GA, AGENTS.md separately donated to Linux Foundation AAIF Dec 2025 | `agents/openai.yaml` sidecar can disable implicit invocation (`allow_implicit_invocation: false`); more complex plugin-packaging layer on top of raw skills |
17
+ | **Google Gemini CLI** | Agent Skill (+ GEMINI.md for always-on context) | Directory + `SKILL.md`; GEMINI.md is a separate always-loaded plain Markdown file with no frontmatter | Same as agentskills.io spec for skills; GEMINI.md has zero frontmatter schema | Skills: `~/.gemini/skills/` or `~/.agents/skills/` (user); `.gemini/skills/` or `.agents/skills/` in repo (workspace); also available via extensions | Skills: auto-triggered via `activate_skill` tool call with user consent prompt; GEMINI.md always loaded verbatim into every session | Stable — skills added ~early 2026; GEMINI.md is older and stable | User consent prompt required before skill injection (friction vs. Claude Code); GEMINI.md is always-on, not skill-gated — creates a two-mechanism system |
18
+ | **GitHub Copilot** | Agent Skill (+ legacy: `copilot-instructions.md`, `*.instructions.md`, `*.prompt.md`) | Directory + `SKILL.md`; legacy formats are standalone Markdown files with their own frontmatter | Same as agentskills.io spec for skills; `*.instructions.md` uses `applyTo` and `excludeAgent` frontmatter; `*.prompt.md` uses `mode`, `tools`, `model` frontmatter | Skills: `.github/skills/`, `.claude/skills/`, `.agents/skills/` (project); `~/.copilot/skills/`, `~/.agents/skills/` (personal). Legacy `copilot-instructions.md`: `.github/copilot-instructions.md`. Legacy prompt files: `.github/prompts/` | Skills: auto-triggered by description match + explicit `/skill-name` slash command; legacy `copilot-instructions.md` always appended; `*.instructions.md` conditionally by glob (`applyTo`); `*.prompt.md` explicitly invoked | Skills: Stable (GA Dec 2025); legacy instructions: Stable; prompt files: Stable | VS Code-specific `context: fork` subagent field not in base spec; `argument-hint`, `user-invocable`, `disable-model-invocation` are Copilot extensions on top of spec |
19
+
20
+ ***
21
+
22
+ ## The Underlying Open Standard: agentskills.io
23
+
24
+ The decisive structural story is that what began as Anthropic's internal Claude Code convention became a published open standard. On December 18, 2025, Anthropic released the Agent Skills specification publicly, and OpenAI, Google, and Microsoft adopted it within weeks. The specification is governed at **agentskills.io** under Apache 2.0.[1][2][3][4]
25
+
26
+ The canonical format is:
27
+
28
+ ```
29
+ skill-name/
30
+ ├── SKILL.md # Required: YAML frontmatter + Markdown body
31
+ ├── scripts/ # Optional: executable code
32
+ ├── references/ # Optional: documentation / reference files
33
+ └── assets/ # Optional: templates, static resources
34
+ ```
35
+
36
+ **Required SKILL.md frontmatter (identical across all tools):**
37
+
38
+ | Field | Required | Constraints |
39
+ |-------|----------|-------------|
40
+ | `name` | Yes | 1–64 chars; `[a-z0-9-]` only; no leading/trailing/consecutive hyphens; must match parent directory name |
41
+ | `description` | Yes | 1–1024 chars; must describe both what the skill does and when to trigger it |
42
+
43
+ **Optional SKILL.md frontmatter (all tools):**
44
+
45
+ | Field | Notes |
46
+ |-------|-------|
47
+ | `license` | License name or reference to bundled license file |
48
+ | `compatibility` | Max 500 chars; environment requirements |
49
+ | `metadata` | Arbitrary key-value map (`author`, `version`, etc.) |
50
+ | `allowed-tools` | Space-separated string of pre-approved tools (experimental per spec) |
51
+
52
+ All four tools — Claude Code, Codex, Gemini CLI, and GitHub Copilot — accept a `SKILL.md` in this format verbatim with no per-tool translation. As of mid-2026, 27+ agent products support the spec.[5][6][7][8][9][3]
53
+
54
+ ***
55
+
56
+ ## Tool-by-Tool Deep Dive
57
+
58
+ ### 1. OpenAI Codex
59
+
60
+ **Concept name:** Agent Skill (primary); AGENTS.md (project-context, separate mechanism)
61
+
62
+ Codex adopted the open SKILL.md standard natively. Skills are loaded with three-tier progressive disclosure: at startup, only `name` and `description` are injected into context (capped at 2% of the model's context window or 8,000 characters if the context window is unknown); the full `SKILL.md` body loads only when Codex decides to use a skill; bundled `scripts/`, `references/`, and `assets/` files load only when referenced in instructions.[5]
63
+
64
+ **File format and location:**
65
+
66
+ ```
67
+ # User-wide (any repo)
68
+ ~/.agents/skills/<skill-name>/SKILL.md
69
+
70
+ # Repo-root (all subfolders)
71
+ $REPO_ROOT/.agents/skills/<skill-name>/SKILL.md
72
+
73
+ # Working directory (nearest scope)
74
+ $CWD/.agents/skills/<skill-name>/SKILL.md
75
+
76
+ # Admin / shared machine
77
+ /etc/codex/skills/<skill-name>/SKILL.md
78
+ ```
79
+
80
+ Codex also scans ancestor directories up to the repo root. The older `~/.codex/skills/` path was used before the standard was adopted.[10][11][5]
81
+
82
+ **AGENTS.md — separate mechanism:** AGENTS.md is a *context file*, not a skill. It is plain Markdown with no frontmatter, no required fields, always loaded verbatim into every session — conceptually closer to GEMINI.md than to SKILL.md. It was released by OpenAI in August 2025 and donated to the Linux Foundation's Agentic AI Foundation in December 2025 alongside Anthropic's MCP. Multiple locations are merged hierarchically: `~/.codex/AGENTS.md` → `AGENTS.override.md` → `AGENTS.md` (repo root) → nested directory overrides. Discovery requires no frontmatter; Codex reads it automatically before every task.[12][13][14][15]
83
+
84
+ **Optional sidecar — `agents/openai.yaml`:** Within a skill directory, an `agents/openai.yaml` file adds Codex-app-specific metadata:[5]
85
+
86
+ ```yaml
87
+ interface:
88
+ display_name: "Optional user-facing name"
89
+ short_description: "..."
90
+ icon_small: "./assets/small-logo.svg"
91
+ brand_color: "#3B82F6"
92
+ default_prompt: "..."
93
+ policy:
94
+ allow_implicit_invocation: false # disables auto-trigger; forces explicit $skill invocation
95
+ dependencies:
96
+ tools:
97
+ - type: "mcp"
98
+ value: "openaiDeveloperDocs"
99
+ transport: "streamable_http"
100
+ url: "https://developers.openai.com/mcp"
101
+ ```
102
+
103
+ **Discovery/trigger:** Explicit via `/skills` picker or `$skill-name` in prompt; implicit auto-match against `description`. Setting `allow_implicit_invocation: false` in `openai.yaml` disables auto-trigger. Codex previously had custom prompt commands but now marks them deprecated in favor of skills.[16][5]
104
+
105
+ **Maturity:** Skills are GA. AGENTS.md is stable and now an AAIF/Linux Foundation open standard. The `agents/openai.yaml` sidecar is a Codex-proprietary extension.
106
+
107
+ **Source:** https://developers.openai.com/codex/skills[5]
108
+
109
+ **What Codex does NOT support relative to Claude Code SKILL.md:**
110
+ - No `~/.codex/skills/` as the canonical global path (migrated to `~/.agents/skills/`)
111
+ - The `agents/openai.yaml` sidecar is Codex-only and not part of the shared spec
112
+ - Plugin packaging layer (distributable bundles of multiple skills + MCP config) is an additional concept above raw skills, with no Claude Code equivalent
113
+
114
+ ***
115
+
116
+ ### 2. Google Gemini CLI
117
+
118
+ **Concept name:** Agent Skill (primary); GEMINI.md (always-on context); custom slash commands (TOML-based, separate mechanism); Extensions (`gemini-extension.json`, separate mechanism)
119
+
120
+ **Agent Skills — SKILL.md (primary skill mechanism):**
121
+
122
+ Gemini CLI adopted the agentskills.io open standard and uses exactly the same `SKILL.md` format. Discovery tiers (lowest to highest precedence):[17][8]
123
+
124
+ ```
125
+ ~/.gemini/skills/<skill-name>/SKILL.md # User-global
126
+ ~/.agents/skills/<skill-name>/SKILL.md # User-global (alias)
127
+ <project>/.gemini/skills/<skill-name>/SKILL.md # Workspace
128
+ <project>/.agents/skills/<skill-name>/SKILL.md # Workspace (alias)
129
+ ```
130
+
131
+ Extension-bundled skills also populate the skill pool.[18][17]
132
+
133
+ **Discovery/trigger:** At session start, all skill `name` + `description` fields are injected into context. When Gemini matches a task to a skill description, it calls the `activate_skill` tool. **Distinctive behavior:** A user consent prompt appears before the skill body and directory are injected — the user must type `y`. This is friction that Claude Code does not have. Manual commands: `/skills list`, `/skills disable <name>`, `/skills reload`.[19][20][17]
134
+
135
+ **GEMINI.md — always-on context file:**
136
+
137
+ GEMINI.md is a plain Markdown file with **zero frontmatter** and no required fields, loaded verbatim before every session. It is always in context — it does not have on-demand loading. Multiple GEMINI.md files are concatenated in hierarchical order:[21][22]
138
+
139
+ ```
140
+ ~/.gemini/GEMINI.md # Global
141
+ <ancestor-dirs>/GEMINI.md # Walking up to filesystem root
142
+ <project>/GEMINI.md # Project-local
143
+ <subdirectory>/GEMINI.md # Component-specific
144
+ ```
145
+
146
+ The filename is configurable via `context.fileName` in `settings.json`. This means you can point Gemini CLI at `CLAUDE.md` files with a one-line config change: `"contextFileName": "CLAUDE.md"`. `/init` generates a starter GEMINI.md by scanning the codebase.[23][24][21]
147
+
148
+ **Custom slash commands — TOML (distinct mechanism, not skills):**
149
+
150
+ Custom slash commands are defined as `.toml` files under `~/.gemini/commands/<name>.toml` (global) or `.gemini/commands/<name>.toml` (project). These are explicitly invoked reusable prompts, not auto-triggered by task description. They carry no frontmatter schema — the TOML file itself defines the command behavior. Only activated by explicit `/command-name` invocation; never auto-triggered.[25][26]
151
+
152
+ **gemini-extension.json — Extensions (distinct mechanism):**
153
+
154
+ Extensions live at `~/.gemini/extensions/<ext-name>/gemini-extension.json`. The manifest schema:[18]
155
+
156
+ ```json
157
+ {
158
+ "name": "extension-name", // required; lowercase, hyphens
159
+ "version": "1.0.0", // required
160
+ "description": "...", // optional; shown on geminicli.com/extensions
161
+ "contextFileName": "CONTEXT.md", // optional; custom context file for extension
162
+ "mcpServers": { ... }, // optional; MCP servers to load
163
+ "excludeTools": [ ... ], // optional; tools to suppress
164
+ "settings": [ ... ] // optional; user-prompted config vars
165
+ }
166
+ ```
167
+
168
+ Extensions bundle context, MCP servers, slash commands, and hooks into a distributable package. They auto-load on startup if enabled.[27][28]
169
+
170
+ **Maturity:** SKILL.md support stable (early 2026). GEMINI.md stable and longstanding. Custom slash commands stable (released July 2025). Extensions stable.
171
+
172
+ **Source:** https://geminicli.com/docs/cli/skills/; https://cloud.google.com/blog/topics/developers-practitioners/gemini-cli-custom-slash-commands[25][17]
173
+
174
+ **What Gemini CLI does NOT support relative to Claude Code SKILL.md:**
175
+ - User consent prompt before skill activation (friction not present in Claude Code)
176
+ - GEMINI.md and skills are two separate mechanisms serving different purposes; Claude Code uses SKILL.md for on-demand and CLAUDE.md for always-on, but the SKILL.md spec is shared
177
+ - Extensions add a third mechanism with no direct Claude Code equivalent
178
+
179
+ ***
180
+
181
+ ### 3. GitHub Copilot
182
+
183
+ **Concept name:** Agent Skill (primary, open standard); plus three legacy formats with separate frontmatter schemas
184
+
185
+ GitHub Copilot has the richest customization surface — Agent Skills (the open standard), `copilot-instructions.md` (always-on), `*.instructions.md` (path-targeted, always-on), `*.prompt.md` (explicitly invoked), and `.agent.md` custom agents.[29][30]
186
+
187
+ **Agent Skills — SKILL.md (primary skill mechanism):**
188
+
189
+ Copilot natively supports the agentskills.io standard, announced December 17, 2025. VS Code, GitHub Copilot CLI, and the Copilot cloud agent all read skills from the same locations:[31][6]
190
+
191
+ ```
192
+ .github/skills/<skill-name>/SKILL.md # Project (shared via Git)
193
+ .claude/skills/<skill-name>/SKILL.md # Project (Claude compat alias)
194
+ .agents/skills/<skill-name>/SKILL.md # Project (cross-tool alias)
195
+ ~/.copilot/skills/<skill-name>/SKILL.md # Personal (user-global)
196
+ ~/.agents/skills/<skill-name>/SKILL.md # Personal (cross-tool alias)
197
+ ```
198
+
199
+ **VS Code-specific SKILL.md frontmatter extensions** (beyond the base spec):[6]
200
+
201
+ | Field | Required | Description |
202
+ |-------|----------|-------------|
203
+ | `argument-hint` | No | Hint text displayed in chat when skill is used as slash command |
204
+ | `user-invocable` | No | `true` (default): skill appears in `/` menu; `false`: hidden from menu but still auto-matched |
205
+ | `disable-model-invocation` | No | `true`: requires explicit `/skill-name` command; disables auto-trigger |
206
+ | `context` | No | `fork` (experimental): runs skill in dedicated subagent context; only final result returned |
207
+ | `allowed-tools` | No | Space-separated pre-approved tools (as per base spec, but Copilot explicitly enforces it) |
208
+
209
+ The `gh skill` GitHub CLI command provides install/update/publish lifecycle management.[32]
210
+
211
+ **Discovery/trigger:** Progressive disclosure (name+description at startup, full body on activation). Both auto-trigger (description match) and explicit `/skill-name` slash command work. VS Code shows skills in the `/` menu alongside prompt files. The `disable-model-invocation` field can make a skill explicit-only; `user-invocable: false` hides it from the menu but keeps auto-trigger.[6]
212
+
213
+ **Legacy: `copilot-instructions.md` — always-on context:**
214
+
215
+ Location: `.github/copilot-instructions.md`. Format: plain Markdown, **no frontmatter**. Always appended to the system prompt on every request, last in order (highest precedence for conflicts). No conditional loading; equivalent to GEMINI.md or AGENTS.md. Soft limit: ~1,000 lines before behavior becomes inconsistent.[33][34][30]
216
+
217
+ **Legacy: `*.instructions.md` — glob-targeted always-on:**
218
+
219
+ Location: `.github/instructions/` directory. Format: Markdown with optional YAML frontmatter:[29]
220
+
221
+ ```yaml
222
+ ---
223
+ applyTo: "**/*.py" # glob pattern; "*" = all files
224
+ excludeAgent: "code-review" # optional; exclude from specific agent
225
+ ---
226
+ ```
227
+
228
+ Applied automatically to matching file contexts. No slash command — purely automatic.[34][35]
229
+
230
+ **Legacy: `*.prompt.md` — explicit reusable prompts:**
231
+
232
+ Location: `.github/prompts/`. Format: Markdown with YAML frontmatter:[36][33]
233
+
234
+ ```yaml
235
+ ---
236
+ mode: "agent" # or "ask" or "edit"
237
+ tools: ["github", "terminal"] # tools the prompt enables
238
+ model: "gpt-4o" # optional model pin
239
+ ---
240
+ ```
241
+
242
+ Explicitly invoked by the user (attach to chat, or use `/prompt-name` in some contexts). Does NOT auto-trigger based on description. Unlike skills, prompt files carry no `description` field — they are invoked by user choice, not agent judgment.[30]
243
+
244
+ **Custom Agents — `.agent.md`:**
245
+
246
+ Location: `.github/agents/<name>.agent.md`. Defines a persona + tool set as a named `@agent` in Copilot Chat. Supports tool enable/disable and model selection in frontmatter, plus handoffs (suggestions for next steps after the agent completes). Available via agent picker in Visual Studio 2026 Insiders.[37][30]
247
+
248
+ **Maturity:** Skills GA (Dec 2025). `copilot-instructions.md` stable. `*.instructions.md` stable (preview in Visual Studio and JetBrains, stable in VS Code). `*.prompt.md` stable. Custom agents in preview (VS 2026 Insiders). `context: fork` experimental.
249
+
250
+ **Source:** https://docs.github.com/en/copilot/how-tos/copilot-on-github/customize-copilot/customize-cloud-agent/add-skills; https://code.visualstudio.com/docs/agent-customization/agent-skills[32][6]
251
+
252
+ **What GitHub Copilot does NOT support relative to Claude Code SKILL.md (base spec):**
253
+ - `context: fork`, `argument-hint`, `user-invocable`, `disable-model-invocation` are Copilot extensions not in the shared spec; writing these fields in a skill deployed to Codex or Gemini CLI will cause those fields to be silently ignored (spec-compliant behavior)
254
+ - The legacy `*.prompt.md` and `copilot-instructions.md` formats have no Claude Code equivalent and no cross-tool portability
255
+
256
+ ***
257
+
258
+ ## Cross-Tool Standard Status (Question 4)
259
+
260
+ **The answer is yes, and it happened faster than expected.** The AGENTS.md spec — a flat, frontmatter-free project context file — was released by OpenAI in August 2025, donated to the Linux Foundation's Agentic AI Foundation (AAIF) in December 2025 alongside Anthropic's MCP. AGENTS.md is now adopted by 60,000+ open-source repositories.[14][15][38][39]
261
+
262
+ More directly relevant to skills: the **agentskills.io** specification — which is Anthropic's SKILL.md format formalized into an open standard — was published in December 2025. As of mid-2026, all four tools (Claude Code, Codex, Gemini CLI, GitHub Copilot) natively read the identical `SKILL.md` file format without any translation. The `.agents/skills/` path alias is explicitly supported by Codex, Gemini CLI, and GitHub Copilot as a cross-tool neutral location.[7][2][9][3][17][32][5]
263
+
264
+ In practice, a skill placed in `.agents/skills/<name>/SKILL.md` in a project repo is discovered by all four tools with zero per-tool adaptation — assuming no Copilot-only frontmatter extensions are used.
265
+
266
+ ***
267
+
268
+ ## Frontmatter Schema Translation Table (Question 5)
269
+
270
+ This table shows the effort of translating a Claude Code `SKILL.md` to each tool's format. Since all four tools now share the same base spec, the translation is zero for required fields.
271
+
272
+ | Field in SKILL.md | Claude Code | Codex | Gemini CLI | GitHub Copilot | Notes |
273
+ |-------------------|-------------|-------|------------|----------------|-------|
274
+ | `name` (required) | ✅ | ✅ | ✅ | ✅ | Identical; must match directory name across all tools |
275
+ | `description` (required) | ✅ | ✅ | ✅ | ✅ | Identical; used for auto-trigger matching across all tools |
276
+ | `license` (optional) | ✅ | ✅ | ✅ | ✅ | In spec; silently ignored if not recognized |
277
+ | `compatibility` (optional) | ✅ | ✅ | ✅ | ✅ | In spec |
278
+ | `metadata` (optional) | ✅ | ✅ | ✅ | ✅ | In spec; arbitrary key-value map |
279
+ | `allowed-tools` (optional) | ✅ (experimental) | ✅ (experimental) | ✅ (experimental) | ✅ (enforced) | In spec but marked experimental; Copilot adds security warnings for `shell`/`bash` |
280
+ | `argument-hint` | — | — | — | ✅ VS Code only | Copilot extension; ignored by other tools |
281
+ | `user-invocable` | — | — | — | ✅ VS Code only | Copilot extension; ignored by other tools |
282
+ | `disable-model-invocation` | — | — | — | ✅ VS Code only | Copilot extension; ignored by other tools |
283
+ | `context: fork` | — | — | — | ✅ Experimental | Copilot extension; ignored by other tools |
284
+ | Bundled `scripts/`, `references/`, `assets/` dirs | ✅ | ✅ | ✅ | ✅ | All tools discover bundled files; Copilot requires Markdown link references in body |
285
+ | Directory-of-files model | ✅ | ✅ | ✅ | ✅ | All tools: one directory per skill, `SKILL.md` at root |
286
+
287
+ **Translation cost: Zero for the base `name` + `description` + markdown body pattern.** Copilot-only frontmatter extensions (`argument-hint`, `user-invocable`, `disable-model-invocation`, `context`) are additive and silently ignored by other tools — they do not break cross-tool portability.
288
+
289
+ ***
290
+
291
+ ## Prior Art: Cross-Tool Skill Installers and Utilities (Question 6)
292
+
293
+ Several open-source projects address the "write once, deploy to N agents" problem:
294
+
295
+ ### `npx skills` (vercel-labs/skills)
296
+ The most mature cross-tool installer. Released by Vercel Labs in January 2026:[40][41]
297
+ - **Repo:** https://github.com/vercel-labs/skills
298
+ - **Registry:** https://skills.sh/
299
+ - **Key commands:**
300
+ ```bash
301
+ npx skills add <owner/repo>[@skill] # install from GitHub
302
+ npx skills add <owner/repo> -g # install globally (user-level)
303
+ npx skills add <owner/repo> --agent claude-code cursor # target specific agents
304
+ npx skills list # list installed skills
305
+ npx skills find <query> # search registry
306
+ npx skills init my-skill # scaffold new SKILL.md
307
+ ```
308
+ - Supports 70+ agents including Claude Code, Codex, Gemini CLI, GitHub Copilot, Cursor, Windsurf, Goose, OpenCode, Kimi Code[42][40]
309
+ - Auto-detects installed agents and places skills in the correct directories[43]
310
+
311
+ ### `npx agent-skills-cli` (alirezarezvani/claude-skills)
312
+ Another universal installer:[44]
313
+ ```bash
314
+ npx agent-skills-cli add <owner/repo> # all agents
315
+ npx agent-skills-cli add <owner/repo> --agent claude # Claude Code only
316
+ npx agent-skills-cli add <owner/repo> --agent vscode # GitHub Copilot only
317
+ ```
318
+ Installs to: Claude Code → `~/.claude/skills/`; Cursor → `.cursor/skills/`; VS Code → `.github/skills/`; Goose → `~/.config/goose/skills/`.[44]
319
+
320
+ ### `npx add-skill` (pratikshadake/claude-product-management-skills)
321
+ Simpler single-command installer:[45]
322
+ ```bash
323
+ npx add-skill pratikshadake/claude-product-management-skills
324
+ ```
325
+ Targets Claude Code CLI, Codex, Gemini CLI, GitHub Copilot, Amp, Kimi Code CLI, OpenCode simultaneously.[45]
326
+
327
+ ### `gh skill` (GitHub CLI extension)
328
+ GitHub's own skill management command (public preview, requires GitHub CLI v2.90.0+):[32]
329
+ ```bash
330
+ gh skill search TOPIC
331
+ gh skill preview OWNER/REPOSITORY SKILL
332
+ gh skill install OWNER/REPOSITORY SKILL [--agent claude-code] [--scope user]
333
+ gh skill update --all
334
+ gh skill publish
335
+ ```
336
+ The `--agent` flag can install to non-Copilot targets including `claude-code`.[32]
337
+
338
+ ### `skills-ref` (agentskills/agentskills)
339
+ Reference library and validator from the agentskills.io spec maintainers:[2]
340
+ ```bash
341
+ skills-ref validate ./my-skill
342
+ skills-ref validate ./my-skill --fix
343
+ ```
344
+
345
+ ### Blog post: "Claude Skills, anywhere: making them first-class in Codex CLI"
346
+ Pre-standard prior art by Robert Glaser (October 2025) describing a manual shell script that walked `skills/**/SKILL.md`, parsed YAML frontmatter, and exposed skills to Codex before native support existed. URL: https://www.robert-glaser.de/claude-skills-in-codex-cli/[11]
347
+
348
+ ### YouTube: "How to Share Skills Between Claude Code, Codex, Cursor & GitHub Copilot"
349
+ Practical walkthrough showing symlink-based cross-tool skill sharing (April 2026): https://www.youtube.com/watch?v=Sl2NilOq9gw[46]
350
+
351
+ ***
352
+
353
+ ## Quick Take: Translation Work Estimate
354
+
355
+ **The situation is substantially better than the question's framing anticipated.** The convergence on agentskills.io happened in late 2025 / early 2026, meaning the answer to questions 1–3 is essentially: all three tools natively support Anthropic's SKILL.md convention with zero required changes.
356
+
357
+ | Translation scenario | Effort | Reasoning |
358
+ |----------------------|--------|-----------|
359
+ | Claude Code `SKILL.md` → Codex | **Trivial** | Identical spec; copy directory to `.agents/skills/` or `~/.agents/skills/`; works immediately |
360
+ | Claude Code `SKILL.md` → Gemini CLI | **Trivial** | Identical spec; copy to `.gemini/skills/` or `~/.gemini/skills/`; activation gains a user consent prompt (behavioral diff, not a format diff) |
361
+ | Claude Code `SKILL.md` → GitHub Copilot | **Trivial** | Identical spec; copy to `.github/skills/` or `~/.copilot/skills/`; Copilot-only frontmatter extensions are additive, not required |
362
+ | Any tool `SKILL.md` → Any other tool | **Trivial** | All four tools read the same two-field frontmatter (`name` + `description`) + markdown body |
363
+ | Copilot-specific fields (`context: fork`, `argument-hint`) → other tools | **Not translatable** | Silently ignored by Codex and Gemini CLI; no semantic equivalent; fork behavior must be re-architected per-tool if needed |
364
+ | AGENTS.md (Codex/project context) → Claude Code equivalent | **Trivial** | Claude Code reads `CLAUDE.md` for always-on context; rename or symlink; no frontmatter to translate either way |
365
+ | GEMINI.md → Claude Code CLAUDE.md | **Trivial** | Both are plain Markdown with no frontmatter; rename/symlink |
366
+ | Copilot `*.prompt.md` (explicit) → other tools | **Moderate** | No equivalent auto-discovered format in Codex or Gemini CLI; must be converted to a `SKILL.md` with `disable-model-invocation: false` semantics — possible but requires restructuring the invocation model |
367
+ | Copilot `*.instructions.md` (glob-targeted) → other tools | **Significant** | No spec equivalent for `applyTo` glob targeting across Codex or Gemini CLI; nearest equivalent is embedding the glob-specific rules into `AGENTS.md`/`GEMINI.md` with prose-level conditionals |
368
+
369
+ **Bottom line:** A canonical-source multi-tool skill installer that syncs the `SKILL.md` directory structure across all four tools requires exactly the same work as `cp -r` (or a symlink), plus handling the `.agents/skills/` vs. tool-specific path aliases — which `npx skills` and `gh skill` already do. The trigger semantics (description-match auto-activation) are identical across all four tools. The only structural divergence is Copilot's `context: fork` subagent pattern and the `*.prompt.md` explicit-only format, both of which are Copilot-only and have no cross-tool expression.