@rune-kit/rune 2.2.0 → 2.2.2

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 (199) hide show
  1. package/README.md +72 -40
  2. package/compiler/__tests__/pack-split.test.js +145 -0
  3. package/compiler/bin/rune.js +26 -9
  4. package/compiler/doctor.js +42 -0
  5. package/compiler/emitter.js +27 -4
  6. package/compiler/parser.js +41 -3
  7. package/compiler/transformer.js +10 -6
  8. package/compiler/transforms/compliance.js +40 -0
  9. package/docs/ANTIGRAVITY-GAP-ANALYSIS.md +369 -0
  10. package/docs/ARCHITECTURE.md +332 -0
  11. package/docs/COMMUNITY-PACKS.md +109 -0
  12. package/docs/CONTRIBUTING-L4.md +215 -0
  13. package/docs/CROSS-IDE-ANALYSIS.md +164 -0
  14. package/docs/EXTENSION-TEMPLATE.md +108 -0
  15. package/docs/MESH-RULES.md +34 -0
  16. package/docs/MULTI-PLATFORM.md +804 -0
  17. package/docs/SKILL-DEPTH-AUDIT.md +191 -0
  18. package/docs/SKILL-TEMPLATE.md +72 -0
  19. package/docs/TRADE-MATRIX.md +327 -0
  20. package/docs/VERSIONING.md +91 -0
  21. package/docs/VISION.md +263 -0
  22. package/docs/assets/demo-subtitles.srt +215 -0
  23. package/docs/assets/end-card.html +276 -0
  24. package/docs/assets/mesh-diagram.html +654 -0
  25. package/docs/assets/thumbnail.html +295 -0
  26. package/docs/guides/cli.md +403 -0
  27. package/docs/guides/index.html +1346 -0
  28. package/docs/index.html +674 -0
  29. package/docs/references/claudekit-analysis.md +414 -0
  30. package/docs/references/voltagent-analysis.md +189 -0
  31. package/docs/script.js +277 -0
  32. package/docs/skills/index.html +832 -0
  33. package/docs/style.css +583 -0
  34. package/docs/video-demo-plan.md +172 -0
  35. package/extensions/ai-ml/PACK.md +38 -474
  36. package/extensions/ai-ml/skills/ai-agents.md +172 -0
  37. package/extensions/ai-ml/skills/code-sandbox.md +187 -0
  38. package/extensions/ai-ml/skills/deep-research.md +146 -0
  39. package/extensions/ai-ml/skills/embedding-search.md +66 -0
  40. package/extensions/ai-ml/skills/fine-tuning-guide.md +74 -0
  41. package/extensions/ai-ml/skills/llm-architect.md +125 -0
  42. package/extensions/ai-ml/skills/llm-integration.md +64 -0
  43. package/extensions/ai-ml/skills/prompt-patterns.md +72 -0
  44. package/extensions/ai-ml/skills/rag-patterns.md +66 -0
  45. package/extensions/ai-ml/skills/web-extraction.md +114 -0
  46. package/extensions/analytics/PACK.md +19 -484
  47. package/extensions/analytics/skills/ab-testing.md +72 -0
  48. package/extensions/analytics/skills/dashboard-patterns.md +83 -0
  49. package/extensions/analytics/skills/data-validation.md +68 -0
  50. package/extensions/analytics/skills/funnel-analysis.md +81 -0
  51. package/extensions/analytics/skills/sql-patterns.md +57 -0
  52. package/extensions/analytics/skills/statistical-analysis.md +79 -0
  53. package/extensions/analytics/skills/tracking-setup.md +71 -0
  54. package/extensions/backend/PACK.md +44 -618
  55. package/extensions/backend/skills/api-patterns.md +84 -0
  56. package/extensions/backend/skills/async-pipeline.md +193 -0
  57. package/extensions/backend/skills/auth-patterns.md +97 -0
  58. package/extensions/backend/skills/background-jobs.md +133 -0
  59. package/extensions/backend/skills/caching-patterns.md +108 -0
  60. package/extensions/backend/skills/cli-generation.md +133 -0
  61. package/extensions/backend/skills/database-patterns.md +87 -0
  62. package/extensions/backend/skills/middleware-patterns.md +104 -0
  63. package/extensions/chrome-ext/PACK.md +19 -921
  64. package/extensions/chrome-ext/skills/cws-preflight.md +143 -0
  65. package/extensions/chrome-ext/skills/cws-publish.md +104 -0
  66. package/extensions/chrome-ext/skills/ext-ai-integration.md +251 -0
  67. package/extensions/chrome-ext/skills/ext-messaging.md +139 -0
  68. package/extensions/chrome-ext/skills/ext-storage.md +133 -0
  69. package/extensions/chrome-ext/skills/mv3-scaffold.md +164 -0
  70. package/extensions/content/PACK.md +43 -335
  71. package/extensions/content/skills/blog-patterns.md +88 -0
  72. package/extensions/content/skills/cms-integration.md +131 -0
  73. package/extensions/content/skills/content-scoring.md +107 -0
  74. package/extensions/content/skills/i18n.md +83 -0
  75. package/extensions/content/skills/mdx-authoring.md +137 -0
  76. package/extensions/content/skills/reference.md +1014 -0
  77. package/extensions/content/skills/seo-patterns.md +67 -0
  78. package/extensions/content/skills/video-repurpose.md +153 -0
  79. package/extensions/devops/PACK.md +38 -457
  80. package/extensions/devops/skills/chaos-testing.md +67 -0
  81. package/extensions/devops/skills/ci-cd.md +75 -0
  82. package/extensions/devops/skills/docker.md +58 -0
  83. package/extensions/devops/skills/edge-serverless.md +163 -0
  84. package/extensions/devops/skills/infra-as-code.md +158 -0
  85. package/extensions/devops/skills/kubernetes.md +110 -0
  86. package/extensions/devops/skills/monitoring.md +57 -0
  87. package/extensions/devops/skills/server-setup.md +64 -0
  88. package/extensions/devops/skills/ssl-domain.md +42 -0
  89. package/extensions/ecommerce/PACK.md +62 -226
  90. package/extensions/ecommerce/skills/cart-system.md +79 -0
  91. package/extensions/ecommerce/skills/inventory-mgmt.md +102 -0
  92. package/extensions/ecommerce/skills/order-management.md +126 -0
  93. package/extensions/ecommerce/skills/payment-integration.md +472 -0
  94. package/extensions/ecommerce/skills/shopify-dev.md +69 -0
  95. package/extensions/ecommerce/skills/subscription-billing.md +93 -0
  96. package/extensions/ecommerce/skills/tax-compliance.md +117 -0
  97. package/extensions/gamedev/PACK.md +66 -317
  98. package/extensions/gamedev/skills/asset-pipeline.md +74 -0
  99. package/extensions/gamedev/skills/audio-system.md +129 -0
  100. package/extensions/gamedev/skills/camera-system.md +87 -0
  101. package/extensions/gamedev/skills/ecs.md +98 -0
  102. package/extensions/gamedev/skills/game-loops.md +72 -0
  103. package/extensions/gamedev/skills/input-system.md +199 -0
  104. package/extensions/gamedev/skills/multiplayer.md +180 -0
  105. package/extensions/gamedev/skills/particles.md +105 -0
  106. package/extensions/gamedev/skills/physics-engine.md +89 -0
  107. package/extensions/gamedev/skills/scene-management.md +146 -0
  108. package/extensions/gamedev/skills/threejs-patterns.md +90 -0
  109. package/extensions/gamedev/skills/webgl.md +71 -0
  110. package/extensions/mobile/PACK.md +56 -223
  111. package/extensions/mobile/skills/app-store-connect.md +152 -0
  112. package/extensions/mobile/skills/app-store-prep.md +66 -0
  113. package/extensions/mobile/skills/deep-linking.md +109 -0
  114. package/extensions/mobile/skills/flutter.md +60 -0
  115. package/extensions/mobile/skills/ios-build-pipeline.md +142 -0
  116. package/extensions/mobile/skills/native-bridge.md +66 -0
  117. package/extensions/mobile/skills/ota-updates.md +97 -0
  118. package/extensions/mobile/skills/push-notifications.md +111 -0
  119. package/extensions/mobile/skills/react-native.md +82 -0
  120. package/extensions/saas/PACK.md +26 -720
  121. package/extensions/saas/skills/billing-integration.md +121 -0
  122. package/extensions/saas/skills/feature-flags.md +130 -0
  123. package/extensions/saas/skills/multi-tenant.md +103 -0
  124. package/extensions/saas/skills/onboarding-flow.md +139 -0
  125. package/extensions/saas/skills/subscription-flow.md +95 -0
  126. package/extensions/saas/skills/team-management.md +144 -0
  127. package/extensions/security/PACK.md +10 -448
  128. package/extensions/security/skills/api-security.md +140 -0
  129. package/extensions/security/skills/compliance.md +68 -0
  130. package/extensions/security/skills/owasp-audit.md +64 -0
  131. package/extensions/security/skills/pentest-patterns.md +77 -0
  132. package/extensions/security/skills/secret-mgmt.md +65 -0
  133. package/extensions/security/skills/supply-chain.md +65 -0
  134. package/extensions/trading/PACK.md +18 -535
  135. package/extensions/trading/skills/chart-components.md +55 -0
  136. package/extensions/trading/skills/experiment-loop.md +125 -0
  137. package/extensions/trading/skills/fintech-patterns.md +47 -0
  138. package/extensions/trading/skills/indicator-library.md +58 -0
  139. package/extensions/trading/skills/quant-analysis.md +111 -0
  140. package/extensions/trading/skills/realtime-data.md +58 -0
  141. package/extensions/trading/skills/trade-logic.md +104 -0
  142. package/extensions/ui/PACK.md +36 -853
  143. package/extensions/ui/skills/a11y-audit.md +91 -0
  144. package/extensions/ui/skills/animation-patterns.md +106 -0
  145. package/extensions/ui/skills/component-patterns.md +75 -0
  146. package/extensions/ui/skills/design-decision.md +108 -0
  147. package/extensions/ui/skills/design-system.md +68 -0
  148. package/extensions/ui/skills/landing-patterns.md +155 -0
  149. package/extensions/ui/skills/palette-picker.md +173 -0
  150. package/extensions/ui/skills/react-health.md +90 -0
  151. package/extensions/ui/skills/type-system.md +125 -0
  152. package/extensions/ui/skills/web-vitals.md +153 -0
  153. package/extensions/zalo/PACK.md +117 -0
  154. package/extensions/zalo/skills/zalo-oa-mcp.md +317 -0
  155. package/extensions/zalo/skills/zalo-oa-messaging.md +429 -0
  156. package/extensions/zalo/skills/zalo-oa-setup.md +236 -0
  157. package/extensions/zalo/skills/zalo-oa-webhook.md +189 -0
  158. package/extensions/zalo/skills/zalo-personal-messaging.md +194 -0
  159. package/extensions/zalo/skills/zalo-personal-setup.md +153 -0
  160. package/extensions/zalo/skills/zalo-rate-guard.md +219 -0
  161. package/hooks/.gitkeep +0 -0
  162. package/hooks/auto-format/index.cjs +48 -0
  163. package/hooks/context-watch/index.cjs +68 -0
  164. package/hooks/hooks.json +99 -0
  165. package/hooks/metrics-collector/index.cjs +42 -0
  166. package/hooks/post-session-reflect/index.cjs +153 -0
  167. package/hooks/pre-compact/index.cjs +95 -0
  168. package/hooks/pre-tool-guard/index.cjs +68 -0
  169. package/hooks/run-hook +17 -0
  170. package/hooks/run-hook.cjs +16 -0
  171. package/hooks/run-hook.cmd +1 -0
  172. package/hooks/secrets-scan/index.cjs +100 -0
  173. package/hooks/session-start/index.cjs +65 -0
  174. package/hooks/typecheck/index.cjs +65 -0
  175. package/package.json +9 -4
  176. package/references/ui-pro-max-data/LICENSE-UI-PRO-MAX +21 -0
  177. package/references/ui-pro-max-data/charts.csv +26 -0
  178. package/references/ui-pro-max-data/colors.csv +162 -0
  179. package/references/ui-pro-max-data/styles.csv +85 -0
  180. package/references/ui-pro-max-data/typography.csv +74 -0
  181. package/references/ui-pro-max-data/ui-reasoning.csv +162 -0
  182. package/references/ui-pro-max-data/ux-guidelines.csv +100 -0
  183. package/skills/ba/SKILL.md +10 -0
  184. package/skills/brainstorm/SKILL.md +63 -1
  185. package/skills/completion-gate/SKILL.md +34 -1
  186. package/skills/context-engine/SKILL.md +13 -0
  187. package/skills/cook/SKILL.md +155 -5
  188. package/skills/debug/SKILL.md +56 -1
  189. package/skills/design/SKILL.md +11 -0
  190. package/skills/fix/SKILL.md +26 -1
  191. package/skills/mcp-builder/SKILL.md +48 -1
  192. package/skills/plan/SKILL.md +23 -6
  193. package/skills/review/SKILL.md +44 -5
  194. package/skills/review-intake/SKILL.md +17 -1
  195. package/skills/skill-forge/SKILL.md +38 -3
  196. package/skills/skill-router/SKILL.md +89 -7
  197. package/skills/team/SKILL.md +24 -1
  198. package/skills/test/SKILL.md +28 -1
  199. package/skills/verification/SKILL.md +98 -1
package/README.md CHANGED
@@ -1,16 +1,22 @@
1
- # Rune
1
+ <p align="center">
2
+ <img src="assets/banner.svg" alt="Rune — Skill Mesh for AI Coding Assistants" width="100%">
3
+ </p>
2
4
 
3
- **Less skills. Deeper connections.**
5
+ <p align="center">
6
+ <strong>Less skills. Deeper connections.</strong><br>
7
+ A lean, interconnected skill ecosystem for AI coding assistants.<br>
8
+ 58 skills · 200+ mesh connections · 8 platforms · MIT
9
+ </p>
4
10
 
5
- A lean, interconnected skill ecosystem for AI coding assistants. 55 skills, 200+ mesh connections, full project lifecycle — from idea to production.
6
-
7
- Works on **Claude Code** (native plugin) · **Cursor** · **Windsurf** · **Google Antigravity** · any AI IDE
11
+ <p align="center">
12
+ <strong>Claude Code</strong> (native plugin) · <strong>Cursor</strong> · <strong>Windsurf</strong> · <strong>Google Antigravity</strong> · <strong>OpenAI Codex</strong> · <strong>OpenCode</strong> · any AI IDE
13
+ </p>
8
14
 
9
15
  ## Why Rune?
10
16
 
11
17
  Most skill ecosystems are either **too many isolated skills** (540+ that don't talk to each other) or **rigid pipelines** (A → B → C, if B fails everything stops).
12
18
 
13
- Rune is a **mesh** — 55 skills with 200+ connections across a 5-layer architecture. Skills call each other bidirectionally, forming resilient workflows that adapt when things go wrong.
19
+ Rune is a **mesh** — 58 skills with 200+ connections across a 5-layer architecture. Skills call each other bidirectionally, forming resilient workflows that adapt when things go wrong.
14
20
 
15
21
  ```
16
22
  Pipeline: A → B → C → D (B fails = stuck)
@@ -20,24 +26,25 @@ Mesh: A ↔ B ↔ C (B fails = A reaches C via D→E)
20
26
  D ↔ E ↔ F
21
27
  ```
22
28
 
23
- ## What's New (v2.1.0)
29
+ ## What's New (v2.2.2)
24
30
 
25
- - **Phase-Aware Execution** — cook v0.5.0 resumes multi-session plans automatically. Master plan + phase files = one phase per session, any model executes accurately
26
- - **Amateur-Proof Plans** — plan v0.4.0 generates self-contained phase files with data flow diagrams, code contracts, failure scenarios, and rejection criteria. Designed so even the weakest model succeeds
27
- - **Cognitive Bias Detection** — problem-solver v0.3.0 runs mandatory bias checks (12 biases) before every analysis. Reversibility Filter, Pre-Mortem, Weighted Matrix, MECE decomposition
28
- - **Second-Order Thinking** — sequential-thinking v0.3.0 classifies decision reversibility, traces cascading effects, and cross-checks for anchoring/status-quo/overconfidence biases
29
- - **6 New Skills** — ba (business analyst), scaffold (project bootstrap), docs (documentation lifecycle), git (semantic commits), mcp-builder (MCP server generator), doc-processor (PDF/DOCX/XLSX)
30
- - **Multi-Platform Compiler** — all 55 skills compile to Cursor, Windsurf, Antigravity, and generic formats with zero knowledge loss
31
+ - **UI/UX Pro Max Integration** — 161 palettes, 84 styles, 73 font pairings, 161 reasoning rules from [UI/UX Pro Max](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill) (MIT, 42.8k★) meshed into `design` skill + `@rune/ui` pack
32
+ - **11 Core Skill Enrichments** — deviation rules, repair operators, evidence quality gate, decision classification, debug knowledge base, CSO discipline, YAGNI pushback, formal pause/resume
33
+ - **Enforcement Upgrade** — Antigravity-level IDE compliance: 5-type Request Classifier, File Ownership Matrix, Self-Verification HARD-GATE, Routing Proof, Clarification Gate, Phase Transition Protocol
34
+ - **All 14 Free Packs Deep** — every L4 extension pack now exceeds 500 lines of production-ready patterns and code examples
35
+ - **8 Platform Adapters** — Claude Code, Cursor, Windsurf, Google Antigravity, OpenAI Codex, OpenCode, OpenClaw, Generic
36
+ - **58 Core Skills** — +3 since v2.1.0: adversary (red team), sentinel-env (env validation), chrome-ext pack
37
+ - **Rune Pro** — 4 premium packs (product, sales, data-science, support) in private repo. $49 lifetime
31
38
 
32
39
  ## What Rune Is (and Isn't)
33
40
 
34
- Rune started as a **Claude Code plugin** and now compiles to **every major AI IDE**. Same 55 skills, same mesh connections, same workflows — zero knowledge loss across platforms.
41
+ Rune started as a **Claude Code plugin** and now compiles to **every major AI IDE**. Same 58 skills, same mesh connections, same workflows — zero knowledge loss across platforms.
35
42
 
36
43
  | | Rune Provides | Claude Code Provides |
37
44
  |---|---|---|
38
45
  | **Workflows** | 8-phase TDD cycle (cook), parallel DAG execution (team), rescue pipelines | Basic tool calling |
39
46
  | **Quality Gates** | preflight + sentinel + review + completion-gate (parallel) | None built-in |
40
- | **Domain Knowledge** | 12 extension packs (trading, SaaS, mobile, etc.) | General-purpose |
47
+ | **Domain Knowledge** | 14 extension packs (trading, SaaS, mobile, etc.) | General-purpose |
41
48
  | **Cross-Session State** | .rune/ directory (decisions, conventions, progress) | Conversation only |
42
49
  | **Mesh Resilience** | 200+ skill connections, fail-loud-route-around | Linear execution |
43
50
  | **Cost Optimization** | Auto model selection (haiku/sonnet/opus per task) | Single model |
@@ -55,7 +62,7 @@ Rune started as a **Claude Code plugin** and now compiles to **every major AI ID
55
62
  | CI quality gates | `verification` skill: lint + typecheck + tests + build (actual commands, not LLM review) |
56
63
  | Memory / state | `session-bridge` + `journal`: cross-session decisions, conventions, ADRs, module health |
57
64
  | Multi-model strategy | Every skill has assigned model: haiku (scan), sonnet (code), opus (architecture) |
58
- | Agent specialization | 55 specialized skills with dedicated roles (architect, coder, reviewer, scanner, researcher, BA, scaffolder) — each runs as a Task agent via Claude Code |
65
+ | Agent specialization | 58 specialized skills with dedicated roles (architect, coder, reviewer, scanner, researcher, BA, scaffolder) — each runs as a Task agent via Claude Code |
59
66
  | Security scanning | `sentinel`: OWASP patterns, secret scanning, dependency audit. `sast`: static analysis |
60
67
 
61
68
  ## Install
@@ -63,11 +70,12 @@ Rune started as a **Claude Code plugin** and now compiles to **every major AI ID
63
70
  ### Claude Code (Native Plugin)
64
71
 
65
72
  ```bash
66
- # Via Claude Code plugin marketplace
67
- /plugin marketplace add rune-kit/rune
68
- /plugin install rune@rune-kit
73
+ # Install via Claude Code CLI
74
+ claude plugin add rune-kit/rune
69
75
  ```
70
76
 
77
+ Or add manually in `~/.claude/settings.json` under `installed_plugins`.
78
+
71
79
  Full mesh: subagents, hooks, adaptive routing, mesh analytics.
72
80
 
73
81
  ### Cursor / Windsurf / Antigravity / Any IDE
@@ -82,16 +90,16 @@ npx @rune-kit/rune init --platform windsurf
82
90
  npx @rune-kit/rune init --platform antigravity
83
91
  ```
84
92
 
85
- This compiles all 55 skills into your IDE's rules format. Same knowledge, same workflows.
93
+ This compiles all 58 skills into your IDE's rules format. Same knowledge, same workflows.
86
94
 
87
95
  ### Platform Comparison
88
96
 
89
97
  | Feature | Claude Code | Cursor / Windsurf / Others |
90
98
  |---------|-------------|---------------------------|
91
- | Skills available | 55/55 | 55/55 |
99
+ | Skills available | 58/58 | 58/58 |
92
100
  | Mesh connections | 200+ (programmatic) | 200+ (rule references) |
93
101
  | Workflows & HARD-GATEs | Full | Full |
94
- | Extension packs | 12 | 12 |
102
+ | Extension packs | 14 | 14 |
95
103
  | Subagent parallelism | Native | Sequential fallback |
96
104
  | Lifecycle hooks | 8 hooks (JS runtime) | Inline MUST/NEVER constraints |
97
105
  | Adaptive model routing | haiku/sonnet/opus | Single model |
@@ -153,7 +161,7 @@ This compiles all 55 skills into your IDE's rules format. Same knowledge, same w
153
161
  ║ Full lifecycle workflows ║
154
162
  ║ cook │ team │ launch │ rescue │ scaffold ║
155
163
  ╠══════════════════════════════════════════════════════╣
156
- ║ L2: WORKFLOW HUBS (26) ║
164
+ ║ L2: WORKFLOW HUBS (27) ║
157
165
  ║ Cross-hub mesh — the key differentiator ║
158
166
  ║ ║
159
167
  ║ Creation: plan │ scout │ brainstorm │ design │ ║
@@ -164,8 +172,9 @@ This compiles all 55 skills into your IDE's rules format. Same knowledge, same w
164
172
  ║ logic-guardian ║
165
173
  ║ Delivery: deploy │ marketing │ incident │ docs ║
166
174
  ║ Rescue: autopsy │ safeguard │ surgeon ║
175
+ ║ Security: adversary ║
167
176
  ╠══════════════════════════════════════════════════════╣
168
- ║ L3: UTILITIES (23) ║
177
+ ║ L3: UTILITIES (25) ║
169
178
  ║ Stateless, pure capabilities ║
170
179
  ║ ║
171
180
  ║ Knowledge: research │ docs-seeker │ trend-scout ║
@@ -182,14 +191,17 @@ This compiles all 55 skills into your IDE's rules format. Same knowledge, same w
182
191
  ║ Workspace: worktree ║
183
192
  ║ Git: git ║
184
193
  ║ Documents: doc-processor ║
194
+ ║ Security: sentinel-env ║
195
+ ║ Memory: neural-memory ║
185
196
  ╠══════════════════════════════════════════════════════╣
186
- ║ L4: EXTENSION PACKS (12) ║
197
+ ║ L4: EXTENSION PACKS (14) ║
187
198
  ║ Domain-specific, install what you need ║
188
199
  ║ ║
189
200
  ║ @rune/ui │ @rune/backend │ @rune/devops │ ║
190
201
  ║ @rune/mobile │ @rune/security │ @rune/trading │ ║
191
202
  ║ @rune/saas │ @rune/ecommerce │ @rune/ai-ml │ ║
192
- ║ @rune/gamedev │ @rune/content │ @rune/analytics
203
+ ║ @rune/gamedev │ @rune/content │ @rune/analytics
204
+ ║ @rune/chrome-ext │ @rune/zalo ║
193
205
  ╚══════════════════════════════════════════════════════╝
194
206
  ```
195
207
 
@@ -310,8 +322,22 @@ Business department packs for product, sales, and data teams. Same PACK.md forma
310
322
  | @rune-pro/product | feature-spec, roadmap, metrics, release-comms, user-research, competitive | Product Management |
311
323
  | @rune-pro/sales | account-research, call-prep, outreach, pipeline-review, competitive-intel | Sales Enablement |
312
324
  | @rune-pro/data-science | data-exploration, sql-advanced, visualization, statistical-testing, dashboards | Data Science |
325
+ | @rune-pro/support | ticket-triage, response-drafting, knowledge-base, escalation, faq, metrics | Customer Support |
326
+
327
+ **$49 lifetime** — [rune-kit/rune-pro](https://github.com/rune-kit/rune-pro)
328
+
329
+ ### Rune Business (Enterprise)
330
+
331
+ Department packs for finance, legal, HR, and cross-system search. Requires Rune Free core.
313
332
 
314
- Coming soon. See [docs/plans/RUNE-PRO-PLAN.md](docs/plans/RUNE-PRO-PLAN.md) for the full roadmap.
333
+ | Pack | Skills | For |
334
+ |------|--------|-----|
335
+ | @rune-pro/finance | budget-planning, expense-analysis, revenue-forecasting, financial-reporting, compliance, invoicing, cash-flow | Finance Ops |
336
+ | @rune-pro/legal | contract-review, compliance-check, policy-generator, nda-triage, ip-protection, incident-legal | Legal & Compliance |
337
+ | @rune-pro/hr | jd-writer, resume-screener, interview-planner, scorecard, onboarding, comp-benchmarker, policy-writer | HR & Recruiting |
338
+ | @rune-pro/enterprise-search | query-planner, source-connector, result-merger, permission-guard, knowledge-graph, search-analytics | Knowledge Retrieval |
339
+
340
+ **$149 lifetime** — [rune-kit/rune-business](https://github.com/rune-kit/rune-business)
315
341
 
316
342
  ## Multi-Platform Compiler
317
343
 
@@ -321,13 +347,14 @@ Rune includes a 3-stage compiler that transforms SKILL.md files into platform-na
321
347
  skills/*.md → PARSE → TRANSFORM → EMIT → platform rules
322
348
  ```
323
349
 
324
- **6 transforms applied per platform:**
325
- 1. Cross-references: `rune:cook` `@rune-cook.mdc` (Cursor) / prose ref (Windsurf)
326
- 2. Tool names: `Read`, `Edit`, `Bash` generic language
327
- 3. Frontmatter: strip Claude Code-specific directives
350
+ **8 transforms applied per platform:**
351
+ 1. Frontmatter: strip Claude Code-specific directives
352
+ 2. Cross-references: `rune:cook` → `@rune-cook.mdc` (Cursor) / prose ref (Windsurf)
353
+ 3. Tool names: `Read`, `Edit`, `Bash` → generic language
328
354
  4. Subagents: parallel → sequential workflow
329
- 5. Hooks: runtime hooks inline MUST/NEVER constraints
330
- 6. Branding: Rune attribution footer
355
+ 5. Compliance: inject enforcement preamble (non-Claude platforms)
356
+ 6. Hooks: runtime hooks → inline MUST/NEVER constraints
357
+ 7. Branding: Rune attribution footer
331
358
 
332
359
  ```bash
333
360
  # Build for any platform
@@ -343,15 +370,20 @@ See [docs/MULTI-PLATFORM.md](docs/MULTI-PLATFORM.md) for the full architecture.
343
370
  ## Numbers
344
371
 
345
372
  ```
346
- Core Skills: 55 (L0: 1 │ L1: 5 │ L2: 26 │ L3: 23)
347
- Extension Packs: 12 free + 3 pro (coming soon)
348
- Mesh Connections: 206 cross-references + 151 tool references
349
- Connections/Skill: 3.7 avg
350
- Platforms: 5 (Claude Code, Cursor, Windsurf, Antigravity, Generic)
351
- Compiler: ~1200 LOC (parser + transforms + adapters + CLI)
352
- Quality: 55/55 skills with Output Format, Sharp Edges, Done When, Cost Profile
373
+ Core Skills: 58 (L0: 1 │ L1: 5 │ L2: 27 │ L3: 25)
374
+ Extension Packs: 14 free + 4 pro + 4 business
375
+ Mesh Connections: 200+ cross-references
376
+ Connections/Skill: 3.4 avg
377
+ Platforms: 8 (Claude Code, Cursor, Windsurf, Antigravity, Codex, OpenCode, OpenClaw, Generic)
378
+ Compiler: ~1400 LOC (parser + 8 transforms + 8 adapters + CLI)
379
+ Quality: 58/58 skills with Output Format, Sharp Edges, Done When, Cost Profile
380
+ Pack Depth: 22 packs total (14 free + 4 pro + 4 business, all free packs rated Deep)
353
381
  ```
354
382
 
383
+ ## Acknowledgments
384
+
385
+ - **[UI/UX Pro Max](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill)** (MIT, 42.8k★) — Design intelligence databases powering Rune's `design` skill and `@rune/ui` pack: 161 color palettes, 84 UI styles, 73 font pairings, 99 UX guidelines, 161 industry reasoning rules.
386
+
355
387
  ## License
356
388
 
357
389
  MIT
@@ -0,0 +1,145 @@
1
+ import { parsePack, parseSkill } from '../parser.js';
2
+ import { test } from 'node:test';
3
+ import assert from 'node:assert';
4
+ import { readFileSync, existsSync } from 'node:fs';
5
+ import path from 'node:path';
6
+ import { fileURLToPath } from 'node:url';
7
+
8
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
9
+ const EXTENSIONS_DIR = path.resolve(__dirname, '../../extensions');
10
+
11
+ // --- Monolith format (regression) ---
12
+
13
+ test('parsePack: monolith format has isSplit=false', () => {
14
+ const content = `---
15
+ name: "@rune/trading"
16
+ description: "Trading patterns"
17
+ metadata:
18
+ version: "0.2.0"
19
+ layer: L4
20
+ price: free
21
+ target: Traders
22
+ ---
23
+
24
+ # @rune/trading
25
+
26
+ ## Purpose
27
+ Trading pack.
28
+
29
+ ## Skills Included
30
+
31
+ ### risk-management
32
+ Risk management workflow.
33
+ `;
34
+
35
+ const parsed = parsePack(content, 'extensions/trading/PACK.md');
36
+
37
+ assert.strictEqual(parsed.isSplit, false);
38
+ assert.deepStrictEqual(parsed.skillManifest, []);
39
+ assert.strictEqual(parsed.name, '@rune/trading');
40
+ assert.strictEqual(parsed.version, '0.2.0');
41
+ assert.strictEqual(parsed.layer, 'L4');
42
+ assert.ok(parsed.body.includes('risk-management'));
43
+ });
44
+
45
+ test('parsePack: monolith without metadata block defaults correctly', () => {
46
+ const content = `---
47
+ name: "@rune/test"
48
+ description: "Test pack"
49
+ ---
50
+
51
+ # @rune/test
52
+ Body here.
53
+ `;
54
+
55
+ const parsed = parsePack(content, 'test/PACK.md');
56
+
57
+ assert.strictEqual(parsed.isSplit, false);
58
+ assert.strictEqual(parsed.version, '1.0.0');
59
+ });
60
+
61
+ // --- Split format detection ---
62
+
63
+ test('parsePack: split format detected via metadata.format', () => {
64
+ const content = `---
65
+ name: "@rune/backend"
66
+ description: "Backend patterns"
67
+ metadata:
68
+ version: "0.3.0"
69
+ layer: L4
70
+ price: free
71
+ target: Backend developers
72
+ format: split
73
+ ---
74
+
75
+ # @rune/backend
76
+
77
+ ## Purpose
78
+ Backend pack index.
79
+
80
+ ## Skills Included
81
+ | Skill | Model | Description |
82
+ |-------|-------|-------------|
83
+ | api-design | sonnet | API patterns |
84
+ | auth | sonnet | Auth patterns |
85
+ `;
86
+
87
+ const parsed = parsePack(content, 'extensions/backend/PACK.md');
88
+
89
+ assert.strictEqual(parsed.isSplit, true);
90
+ assert.strictEqual(parsed.version, '0.3.0');
91
+ assert.strictEqual(parsed.name, '@rune/backend');
92
+ });
93
+
94
+ test('parsePack: skill manifest parsed from string array', () => {
95
+ // Note: our YAML parser is simple — it handles nested objects but not arrays.
96
+ // This test validates the parseSkillManifest function directly with object skills.
97
+ const content = `---
98
+ name: "@rune/test"
99
+ description: "Test"
100
+ metadata:
101
+ format: split
102
+ ---
103
+
104
+ Body.
105
+ `;
106
+
107
+ const parsed = parsePack(content, 'test/PACK.md');
108
+ assert.strictEqual(parsed.isSplit, true);
109
+ // With simple YAML parser, skills array won't parse — manifest will be empty
110
+ // Real usage will use the skills/ directory detection as fallback
111
+ assert.ok(Array.isArray(parsed.skillManifest));
112
+ });
113
+
114
+ // --- Real pack regression: existing monolith packs parse correctly ---
115
+
116
+ test('parsePack: real trading PACK.md parses as split', () => {
117
+ const tradingPath = path.join(EXTENSIONS_DIR, 'trading', 'PACK.md');
118
+ if (!existsSync(tradingPath)) {
119
+ console.log(' skip: trading PACK.md not found');
120
+ return;
121
+ }
122
+
123
+ const content = readFileSync(tradingPath, 'utf-8');
124
+ const parsed = parsePack(content, tradingPath);
125
+
126
+ assert.strictEqual(parsed.isSplit, true);
127
+ assert.strictEqual(parsed.layer, 'L4');
128
+ assert.strictEqual(parsed.group, 'extension');
129
+ assert.ok(parsed.body.length > 50);
130
+ });
131
+
132
+ test('parsePack: real backend PACK.md parses as split (post-split)', () => {
133
+ const backendPath = path.join(EXTENSIONS_DIR, 'backend', 'PACK.md');
134
+ if (!existsSync(backendPath)) {
135
+ console.log(' skip: backend PACK.md not found');
136
+ return;
137
+ }
138
+
139
+ const content = readFileSync(backendPath, 'utf-8');
140
+ const parsed = parsePack(content, backendPath);
141
+
142
+ assert.strictEqual(parsed.isSplit, true);
143
+ assert.strictEqual(parsed.layer, 'L4');
144
+ assert.ok(parsed.sections.size > 0);
145
+ });
@@ -51,11 +51,6 @@ function detectPlatform(projectRoot) {
51
51
  return null;
52
52
  }
53
53
 
54
- function discoverExtensions() {
55
- const extDir = path.join(RUNE_ROOT, 'extensions');
56
- if (!existsSync(extDir)) return [];
57
- return [];
58
- }
59
54
 
60
55
  async function prompt(question) {
61
56
  const rl = createInterface({ input: process.stdin, output: process.stdout });
@@ -107,7 +102,7 @@ async function cmdInit(projectRoot, args) {
107
102
  $schema: 'https://rune-kit.github.io/rune/config-schema.json',
108
103
  version: 1,
109
104
  platform,
110
- source: RUNE_ROOT,
105
+ source: '@rune-kit/rune',
111
106
  skills: {
112
107
  disabled: args.disable ? args.disable.split(',') : [],
113
108
  },
@@ -141,7 +136,10 @@ async function cmdInit(projectRoot, args) {
141
136
  }
142
137
 
143
138
  log('');
144
- log(' Next: Start coding. Rune skills are active in your AI assistant.');
139
+ log(' Next steps:');
140
+ log(' 1. /rune onboard Generate project context (CLAUDE.md + .rune/)');
141
+ log(' 2. /rune cook "..." Build a feature (full TDD cycle)');
142
+ log(' 3. /rune help See all 58 skills');
145
143
  log('');
146
144
  }
147
145
 
@@ -160,7 +158,9 @@ async function cmdBuild(projectRoot, args) {
160
158
  }
161
159
 
162
160
  const adapter = getAdapter(platform);
163
- const runeRoot = config?.source || RUNE_ROOT;
161
+ const runeRoot = (config?.source === '@rune-kit/rune')
162
+ ? RUNE_ROOT
163
+ : (config?.source || RUNE_ROOT);
164
164
  const outputRoot = typeof args.output === 'string' ? args.output : projectRoot;
165
165
  const disabledSkills = config?.skills?.disabled || [];
166
166
  const enabledPacks = config?.extensions?.enabled || null;
@@ -206,7 +206,9 @@ async function cmdDoctor(projectRoot, args) {
206
206
 
207
207
  const platform = args.platform || config.platform;
208
208
  const adapter = getAdapter(platform);
209
- const runeRoot = config.source || RUNE_ROOT;
209
+ const runeRoot = (config.source === '@rune-kit/rune')
210
+ ? RUNE_ROOT
211
+ : (config.source || RUNE_ROOT);
210
212
 
211
213
  const results = await runDoctor({
212
214
  outputRoot: projectRoot,
@@ -257,6 +259,13 @@ async function main() {
257
259
  const { command, args } = parseArgs(process.argv.slice(2));
258
260
  const projectRoot = process.cwd();
259
261
 
262
+ // Handle --version / -v as flag (not positional command)
263
+ if (args.version || args.v) {
264
+ const pkg = JSON.parse(await readFile(path.join(RUNE_ROOT, 'package.json'), 'utf-8'));
265
+ log(` rune v${pkg.version}`);
266
+ return;
267
+ }
268
+
260
269
  switch (command) {
261
270
  case 'init':
262
271
  await cmdInit(projectRoot, args);
@@ -267,6 +276,13 @@ async function main() {
267
276
  case 'doctor':
268
277
  await cmdDoctor(projectRoot, args);
269
278
  break;
279
+ case 'version':
280
+ case '--version':
281
+ case '-v': {
282
+ const pkg = JSON.parse(await readFile(path.join(RUNE_ROOT, 'package.json'), 'utf-8'));
283
+ log(` rune v${pkg.version}`);
284
+ break;
285
+ }
270
286
  case 'help':
271
287
  case '--help':
272
288
  case undefined:
@@ -282,6 +298,7 @@ async function main() {
282
298
  log(' --platform <name> Override platform (cursor, windsurf, antigravity, codex, openclaw, opencode, generic)');
283
299
  log(' --output <dir> Override output directory');
284
300
  log(' --disable <skills> Comma-separated skills to disable');
301
+ log(' --version, -v Show version');
285
302
  log('');
286
303
  break;
287
304
  default:
@@ -7,6 +7,7 @@
7
7
  import { readdir, readFile, stat } from 'node:fs/promises';
8
8
  import { existsSync } from 'node:fs';
9
9
  import path from 'node:path';
10
+ import { parsePack } from './parser.js';
10
11
 
11
12
  /**
12
13
  * Run doctor checks on compiled output
@@ -89,6 +90,18 @@ export async function runDoctor({ outputRoot, adapter, config, runeRoot }) {
89
90
  results.warnings.push(`${disabled.length} skills disabled: ${disabled.join(', ')}`);
90
91
  }
91
92
 
93
+ // Check 7: Split pack integrity (validate skill manifest files exist)
94
+ const extensionsDir = path.join(runeRoot, 'extensions');
95
+ if (existsSync(extensionsDir)) {
96
+ const splitPackErrors = await checkSplitPacks(extensionsDir);
97
+ if (splitPackErrors.length === 0) {
98
+ results.checks.push({ name: 'Split packs', status: 'pass' });
99
+ } else {
100
+ results.checks.push({ name: 'Split packs', status: 'fail', detail: `${splitPackErrors.length} missing skill files` });
101
+ results.errors.push(...splitPackErrors);
102
+ }
103
+ }
104
+
92
105
  if (results.errors.length > 0) results.healthy = false;
93
106
 
94
107
  return results;
@@ -119,6 +132,35 @@ async function checkCrossRefs(outputDir, files, adapter) {
119
132
  return [...new Set(errors)]; // deduplicate
120
133
  }
121
134
 
135
+ /**
136
+ * Check that all split packs have their declared skill files present
137
+ */
138
+ async function checkSplitPacks(extensionsDir) {
139
+ const errors = [];
140
+ const entries = await readdir(extensionsDir, { withFileTypes: true });
141
+
142
+ for (const entry of entries) {
143
+ if (!entry.isDirectory()) continue;
144
+ const packFile = path.join(extensionsDir, entry.name, 'PACK.md');
145
+ if (!existsSync(packFile)) continue;
146
+
147
+ const content = await readFile(packFile, 'utf-8');
148
+ const parsed = parsePack(content, packFile);
149
+
150
+ if (!parsed.isSplit) continue;
151
+
152
+ const packDir = path.dirname(packFile);
153
+ for (const skill of parsed.skillManifest) {
154
+ const skillPath = path.join(packDir, skill.file);
155
+ if (!existsSync(skillPath)) {
156
+ errors.push(`@rune/${entry.name}: skill file "${skill.file}" declared in manifest but not found`);
157
+ }
158
+ }
159
+ }
160
+
161
+ return errors;
162
+ }
163
+
122
164
  /**
123
165
  * Format doctor results for console output
124
166
  */
@@ -8,7 +8,7 @@
8
8
  import { readdir, readFile, mkdir, writeFile } from 'node:fs/promises';
9
9
  import { existsSync } from 'node:fs';
10
10
  import path from 'node:path';
11
- import { parseSkill, parsePack } from './parser.js';
11
+ import { parseSkill, parsePack, extractCrossRefs, extractToolRefs } from './parser.js';
12
12
  import { transformSkill } from './transformer.js';
13
13
 
14
14
  /**
@@ -158,6 +158,29 @@ export async function buildAll({ runeRoot, outputRoot, adapter, disabledSkills =
158
158
  const content = await readFile(packPath, 'utf-8');
159
159
  const parsed = parsePack(content, packPath);
160
160
  const packName = path.basename(path.dirname(packPath));
161
+ const packDir = path.dirname(packPath);
162
+
163
+ // For split packs, load individual skill files and concatenate into body
164
+ if (parsed.isSplit && parsed.skillManifest.length > 0) {
165
+ const skillBodies = [];
166
+ for (const skill of parsed.skillManifest) {
167
+ const skillPath = path.join(packDir, skill.file);
168
+ if (existsSync(skillPath)) {
169
+ const skillContent = await readFile(skillPath, 'utf-8');
170
+ // Strip frontmatter from skill file — we only need the body
171
+ const skillBodyMatch = skillContent.replace(/\r\n/g, '\n').match(/^---\n[\s\S]*?\n---\n?([\s\S]*)$/);
172
+ const skillBody = skillBodyMatch ? skillBodyMatch[1].trim() : skillContent.trim();
173
+ skillBodies.push(skillBody);
174
+ } else {
175
+ stats.errors.push({ file: skillPath, error: `Skill file not found (listed in ${packPath} manifest)` });
176
+ }
177
+ }
178
+ // Concatenate: index body + all skill bodies
179
+ parsed.body = parsed.body + '\n\n' + skillBodies.join('\n\n---\n\n');
180
+ // Re-extract refs from the full concatenated body
181
+ parsed.crossRefs = extractCrossRefs(parsed.body);
182
+ parsed.toolRefs = extractToolRefs(parsed.body);
183
+ }
161
184
 
162
185
  // Normalize pack name for headers (ext-trading instead of @rune/trading)
163
186
  parsed.name = `ext-${packName}`;
@@ -170,9 +193,9 @@ export async function buildAll({ runeRoot, outputRoot, adapter, disabledSkills =
170
193
 
171
194
  if (adapter.useSkillDirectories) {
172
195
  const dirName = `${adapter.skillPrefix}ext-${packName}`;
173
- const packDir = path.join(outputDir, dirName);
174
- await mkdir(packDir, { recursive: true });
175
- outputPath = path.join(packDir, adapter.skillFileName || 'SKILL.md');
196
+ const outPackDir = path.join(outputDir, dirName);
197
+ await mkdir(outPackDir, { recursive: true });
198
+ outputPath = path.join(outPackDir, adapter.skillFileName || 'SKILL.md');
176
199
  displayName = `${dirName}/${adapter.skillFileName || 'SKILL.md'}`;
177
200
  } else {
178
201
  const fileName = outputFileName(`ext-${packName}`, adapter);
@@ -65,7 +65,7 @@ function parseFrontmatter(content) {
65
65
  /**
66
66
  * Extract all rune:<name> cross-references from body
67
67
  */
68
- function extractCrossRefs(body) {
68
+ export function extractCrossRefs(body) {
69
69
  const refs = [];
70
70
  const lines = body.split('\n');
71
71
 
@@ -90,7 +90,7 @@ function extractCrossRefs(body) {
90
90
  /**
91
91
  * Extract all Claude Code tool references from body
92
92
  */
93
- function extractToolRefs(body) {
93
+ export function extractToolRefs(body) {
94
94
  const refs = [];
95
95
  const lines = body.split('\n');
96
96
 
@@ -188,16 +188,25 @@ export function parseSkill(content, filePath = '') {
188
188
 
189
189
  /**
190
190
  * Parse a PACK.md extension file (same format, slightly different metadata)
191
+ * Supports both monolith format (all skills inline) and split format (skills in separate files)
192
+ *
193
+ * Split format detection: metadata.format === "split" OR metadata.skills array present
191
194
  */
192
195
  export function parsePack(content, filePath = '') {
193
196
  const { frontmatter, body } = parseFrontmatter(content);
197
+ const metadata = frontmatter.metadata || {};
198
+
199
+ // Detect split format
200
+ const isSplit = metadata.format === 'split' || Array.isArray(metadata.skills);
194
201
 
195
202
  return {
196
203
  name: frontmatter.name || '',
197
204
  description: frontmatter.description || '',
198
- version: frontmatter.version || '1.0.0',
205
+ version: metadata.version || frontmatter.version || '1.0.0',
199
206
  layer: 'L4',
200
207
  group: 'extension',
208
+ isSplit,
209
+ skillManifest: isSplit ? parseSkillManifest(metadata.skills || []) : [],
201
210
  body,
202
211
  crossRefs: extractCrossRefs(body),
203
212
  toolRefs: extractToolRefs(body),
@@ -207,3 +216,32 @@ export function parsePack(content, filePath = '') {
207
216
  frontmatter,
208
217
  };
209
218
  }
219
+
220
+ /**
221
+ * Parse the skills manifest from split PACK.md frontmatter
222
+ *
223
+ * @param {Array} skills - array of skill entries from frontmatter metadata.skills
224
+ * @returns {Array<{name: string, file: string, model: string, description: string}>}
225
+ */
226
+ function parseSkillManifest(skills) {
227
+ if (!Array.isArray(skills)) return [];
228
+
229
+ return skills.map(skill => {
230
+ // Handle both string format ("skill-name") and object format ({name, file, model, description})
231
+ if (typeof skill === 'string') {
232
+ return {
233
+ name: skill,
234
+ file: `skills/${skill}.md`,
235
+ model: 'sonnet',
236
+ description: '',
237
+ };
238
+ }
239
+
240
+ return {
241
+ name: skill.name || '',
242
+ file: skill.file || `skills/${skill.name}.md`,
243
+ model: skill.model || 'sonnet',
244
+ description: skill.description || '',
245
+ };
246
+ });
247
+ }