@rune-kit/rune 2.3.3 → 2.4.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 (53) hide show
  1. package/README.md +51 -1
  2. package/compiler/__tests__/scripts-bundling.test.js +284 -0
  3. package/compiler/__tests__/tier-override.test.js +41 -0
  4. package/compiler/adapters/antigravity.js +4 -0
  5. package/compiler/adapters/codex.js +4 -0
  6. package/compiler/adapters/cursor.js +4 -0
  7. package/compiler/adapters/generic.js +4 -0
  8. package/compiler/adapters/openclaw.js +4 -0
  9. package/compiler/adapters/opencode.js +4 -0
  10. package/compiler/adapters/windsurf.js +4 -0
  11. package/compiler/emitter.js +85 -5
  12. package/compiler/transforms/scripts-path.js +18 -0
  13. package/extensions/zalo/PACK.md +20 -1
  14. package/extensions/zalo/references/conversation-management.md +214 -0
  15. package/extensions/zalo/references/eval-scenarios.md +157 -0
  16. package/extensions/zalo/references/listen-mode.md +237 -0
  17. package/extensions/zalo/references/mcp-production.md +274 -0
  18. package/extensions/zalo/references/multi-account-proxy.md +224 -0
  19. package/extensions/zalo/references/vietqr-banking.md +160 -0
  20. package/package.json +2 -3
  21. package/skills/marketing/SKILL.md +3 -0
  22. package/skills/sentinel/SKILL.md +4 -1
  23. package/skills/sentinel/references/auth-crypto-reference.md +192 -0
  24. package/skills/sentinel/references/desktop-security.md +201 -0
  25. package/skills/sentinel/references/supply-chain.md +160 -0
  26. package/skills/slides/SKILL.md +142 -0
  27. package/skills/slides/scripts/build-deck.js +158 -0
  28. package/docs/ANTIGRAVITY-GAP-ANALYSIS.md +0 -369
  29. package/docs/ARCHITECTURE.md +0 -332
  30. package/docs/COMMUNITY-PACKS.md +0 -109
  31. package/docs/CONTRIBUTING-L4.md +0 -215
  32. package/docs/CROSS-IDE-ANALYSIS.md +0 -164
  33. package/docs/EXTENSION-TEMPLATE.md +0 -126
  34. package/docs/MESH-RULES.md +0 -34
  35. package/docs/MULTI-PLATFORM.md +0 -804
  36. package/docs/SKILL-DEPTH-AUDIT.md +0 -191
  37. package/docs/SKILL-TEMPLATE.md +0 -118
  38. package/docs/TRADE-MATRIX.md +0 -327
  39. package/docs/VERSIONING.md +0 -91
  40. package/docs/VISION.md +0 -263
  41. package/docs/assets/demo-subtitles.srt +0 -215
  42. package/docs/assets/end-card.html +0 -276
  43. package/docs/assets/mesh-diagram.html +0 -654
  44. package/docs/assets/thumbnail.html +0 -295
  45. package/docs/guides/cli.md +0 -403
  46. package/docs/guides/index.html +0 -1450
  47. package/docs/index.html +0 -1005
  48. package/docs/references/claudekit-analysis.md +0 -414
  49. package/docs/references/voltagent-analysis.md +0 -189
  50. package/docs/script.js +0 -495
  51. package/docs/skills/index.html +0 -832
  52. package/docs/style.css +0 -958
  53. package/docs/video-demo-plan.md +0 -172
@@ -1,1450 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>Rune Guides — From Install to Production</title>
7
- <meta name="description" content="Complete guide to using Rune — the 59-skill mesh for AI coding assistants. Install, configure, and master every workflow.">
8
- <meta property="og:title" content="Rune Guides — From Install to Production">
9
- <meta property="og:description" content="Learn how to use Rune's 59-skill mesh to supercharge your AI coding assistant.">
10
- <meta property="og:type" content="website">
11
- <meta property="og:url" content="https://rune-kit.github.io/rune/guides/">
12
- <link rel="preconnect" href="https://fonts.googleapis.com">
13
- <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
14
- <link href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;600;700&family=Inter:wght@400;500;600&family=JetBrains+Mono:wght@400;500;700&display=swap" rel="stylesheet">
15
- <style>
16
- /* ─── DESIGN TOKENS (shared with landing page) ─── */
17
- *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
18
-
19
- :root {
20
- --bg-base: #0a0f1a;
21
- --bg-card: #111827;
22
- --bg-elevated: #1a2332;
23
- --bg-sidebar: #080c14;
24
- --bg-code: #0d1117;
25
- --text-primary: #f0f4f8;
26
- --text-secondary: #8896a8;
27
- --text-muted: #5a6a7a;
28
- --border: #1e2d3d;
29
- --border-active: #2a4a5a;
30
- --accent: #10b981;
31
- --accent-dim: rgba(16, 185, 129, 0.15);
32
- --accent-glow: rgba(16, 185, 129, 0.3);
33
- --nav-bg: rgba(10, 15, 26, 0.92);
34
- --purple: #8b5cf6;
35
- --blue: #3b82f6;
36
- --amber: #f59e0b;
37
- --cyan: #06b6d4;
38
- --red: #ef4444;
39
- --font-display: 'Space Grotesk', system-ui, sans-serif;
40
- --font-body: 'Inter', system-ui, sans-serif;
41
- --font-mono: 'JetBrains Mono', 'Fira Code', monospace;
42
- --radius-sm: 6px;
43
- --radius-md: 10px;
44
- --radius-lg: 16px;
45
- --shadow-card: 0 4px 24px rgba(0,0,0,0.3);
46
- --transition: 250ms ease;
47
- --sidebar-w: 280px;
48
- --nav-h: 56px;
49
- }
50
-
51
- /* ─── LIGHT MODE ─── */
52
- [data-theme="light"] {
53
- --bg-base: #f8fafb;
54
- --bg-card: #ffffff;
55
- --bg-elevated: #f1f5f9;
56
- --bg-sidebar: #f1f5f9;
57
- --bg-code: #f1f5f9;
58
- --text-primary: #0f172a;
59
- --text-secondary: #475569;
60
- --text-muted: #94a3b8;
61
- --border: #e2e8f0;
62
- --border-active: #cbd5e1;
63
- --accent: #059669;
64
- --accent-dim: rgba(5, 150, 105, 0.1);
65
- --accent-glow: rgba(5, 150, 105, 0.2);
66
- --nav-bg: rgba(248, 250, 251, 0.92);
67
- --shadow-card: 0 4px 24px rgba(0,0,0,0.08);
68
- }
69
- [data-theme="light"] .code-block { background: var(--bg-code); border-color: var(--border); }
70
- [data-theme="light"] .ba-card.before h4 { color: #dc2626; }
71
- [data-theme="light"] .callout-tip { background: rgba(5, 150, 105, 0.06); }
72
- [data-theme="light"] .callout-warn { background: rgba(217, 119, 6, 0.06); }
73
- [data-theme="light"] .callout-info { background: rgba(37, 99, 235, 0.06); }
74
-
75
- html { scroll-behavior: smooth; scroll-padding-top: 80px; }
76
-
77
- body {
78
- font-family: var(--font-body);
79
- background: var(--bg-base);
80
- color: var(--text-primary);
81
- line-height: 1.7;
82
- -webkit-font-smoothing: antialiased;
83
- }
84
-
85
- a { color: var(--accent); text-decoration: none; transition: opacity var(--transition); }
86
- a:hover { opacity: 0.85; }
87
-
88
- /* ─── TOP NAV ─── */
89
- .nav {
90
- position: fixed; top: 0; left: 0; right: 0; z-index: 100;
91
- background: var(--nav-bg);
92
- backdrop-filter: blur(12px);
93
- border-bottom: 1px solid var(--border);
94
- height: var(--nav-h);
95
- }
96
- .nav-inner {
97
- max-width: 100%; margin: 0 auto;
98
- display: flex; align-items: center; justify-content: space-between;
99
- padding: 0 24px; height: 100%;
100
- }
101
- .nav-logo {
102
- font-family: var(--font-display); font-weight: 700; font-size: 20px;
103
- color: var(--text-primary); display: flex; align-items: center; gap: 8px;
104
- }
105
- .logo-rune { color: var(--accent); font-size: 18px; }
106
- .nav-links { display: flex; align-items: center; gap: 24px; }
107
- .nav-links a { color: var(--text-secondary); font-size: 14px; font-weight: 500; }
108
- .nav-links a:hover { color: var(--text-primary); opacity: 1; }
109
- .nav-links a.active { color: var(--accent); }
110
- .btn {
111
- display: inline-flex; align-items: center; justify-content: center;
112
- padding: 7px 16px; border-radius: var(--radius-sm);
113
- font-family: var(--font-body); font-weight: 600; font-size: 13px;
114
- cursor: pointer; transition: all var(--transition); border: none;
115
- }
116
- .btn-sm { padding: 6px 14px; font-size: 13px; }
117
- .btn-primary { background: var(--accent); color: #fff; }
118
- .btn-primary:hover { background: #0ea572; opacity: 1; }
119
- .btn-ghost { background: transparent; color: var(--text-secondary); border: 1px solid var(--border); }
120
- .btn-ghost:hover { border-color: var(--accent); color: var(--text-primary); opacity: 1; }
121
-
122
- /* ─── MOBILE TOGGLE ─── */
123
- .sidebar-toggle {
124
- display: none; background: none; border: none; color: var(--text-primary);
125
- font-size: 24px; cursor: pointer; padding: 4px;
126
- }
127
-
128
- /* ─── LAYOUT ─── */
129
- .layout {
130
- display: flex; min-height: 100vh;
131
- padding-top: var(--nav-h);
132
- }
133
-
134
- /* ─── SIDEBAR ─── */
135
- .sidebar {
136
- position: fixed; top: var(--nav-h); left: 0; bottom: 0;
137
- width: var(--sidebar-w); background: var(--bg-sidebar);
138
- border-right: 1px solid var(--border);
139
- overflow-y: auto; padding: 24px 0;
140
- z-index: 50;
141
- }
142
- .sidebar::-webkit-scrollbar { width: 4px; }
143
- .sidebar::-webkit-scrollbar-thumb { background: var(--border); border-radius: 2px; }
144
-
145
- .sidebar-search {
146
- padding: 0 16px; margin-bottom: 20px;
147
- }
148
- .sidebar-search input {
149
- width: 100%; padding: 8px 12px;
150
- background: var(--bg-card); border: 1px solid var(--border);
151
- border-radius: var(--radius-sm); color: var(--text-primary);
152
- font-family: var(--font-body); font-size: 13px;
153
- outline: none; transition: border-color var(--transition);
154
- }
155
- .sidebar-search input::placeholder { color: var(--text-muted); }
156
- .sidebar-search input:focus { border-color: var(--accent); }
157
-
158
- .sidebar-group { margin-bottom: 24px; }
159
- .sidebar-group-title {
160
- font-family: var(--font-display); font-size: 11px; font-weight: 700;
161
- text-transform: uppercase; letter-spacing: 1.2px;
162
- color: var(--text-muted); padding: 0 20px; margin-bottom: 6px;
163
- }
164
- .sidebar-link {
165
- display: block; padding: 6px 20px 6px 20px;
166
- font-size: 13px; color: var(--text-secondary);
167
- transition: all 150ms ease; border-left: 2px solid transparent;
168
- cursor: pointer;
169
- }
170
- .sidebar-link:hover {
171
- color: var(--text-primary); background: rgba(255,255,255,0.03);
172
- opacity: 1;
173
- }
174
- .sidebar-link.active {
175
- color: var(--accent); border-left-color: var(--accent);
176
- background: var(--accent-dim);
177
- }
178
-
179
- /* ─── MAIN CONTENT ─── */
180
- .main {
181
- flex: 1; margin-left: var(--sidebar-w);
182
- max-width: 860px; padding: 40px 48px 120px;
183
- }
184
-
185
- /* ─── TYPOGRAPHY ─── */
186
- .main h1 {
187
- font-family: var(--font-display); font-size: 36px; font-weight: 700;
188
- margin-bottom: 8px; line-height: 1.2;
189
- }
190
- .main h2 {
191
- font-family: var(--font-display); font-size: 26px; font-weight: 700;
192
- margin-top: 56px; margin-bottom: 16px; padding-top: 24px;
193
- border-top: 1px solid var(--border);
194
- }
195
- .main h2:first-of-type { border-top: none; margin-top: 32px; }
196
- .main h3 {
197
- font-family: var(--font-display); font-size: 20px; font-weight: 600;
198
- margin-top: 36px; margin-bottom: 12px; color: var(--text-primary);
199
- }
200
- .main p { margin-bottom: 16px; color: var(--text-secondary); font-size: 15px; }
201
- .main strong { color: var(--text-primary); }
202
- .main ul, .main ol {
203
- margin-bottom: 16px; padding-left: 24px;
204
- color: var(--text-secondary); font-size: 15px;
205
- }
206
- .main li { margin-bottom: 6px; }
207
- .main li::marker { color: var(--accent); }
208
- .page-desc {
209
- font-size: 17px; color: var(--text-secondary); margin-bottom: 32px;
210
- line-height: 1.7; max-width: 640px;
211
- }
212
-
213
- /* ─── CODE BLOCKS ─── */
214
- .code-block {
215
- background: var(--bg-code); border: 1px solid var(--border);
216
- border-radius: var(--radius-md); padding: 18px 22px;
217
- font-family: var(--font-mono); font-size: 13px; line-height: 1.7;
218
- color: var(--accent); margin-bottom: 20px;
219
- overflow-x: auto; position: relative;
220
- }
221
- .code-block .comment { color: var(--text-muted); }
222
- .code-block .cmd { color: var(--text-primary); }
223
- .code-block .flag { color: var(--amber); }
224
- .code-block .output { color: var(--text-secondary); font-style: italic; }
225
- code {
226
- font-family: var(--font-mono); font-size: 13px;
227
- background: rgba(16, 185, 129, 0.1); padding: 2px 7px;
228
- border-radius: 4px; color: var(--accent);
229
- }
230
-
231
- /* ─── COPY BUTTON ─── */
232
- .code-wrapper { position: relative; }
233
- .copy-btn {
234
- position: absolute; top: 10px; right: 10px;
235
- background: var(--bg-elevated); border: 1px solid var(--border);
236
- color: var(--text-muted); font-size: 12px; padding: 4px 10px;
237
- border-radius: 4px; cursor: pointer; font-family: var(--font-mono);
238
- transition: all 150ms ease; opacity: 0;
239
- }
240
- .code-wrapper:hover .copy-btn { opacity: 1; }
241
- .copy-btn:hover { color: var(--accent); border-color: var(--accent); }
242
-
243
- /* ─── CALLOUT BOXES ─── */
244
- .callout {
245
- border-radius: var(--radius-md); padding: 16px 20px;
246
- margin-bottom: 20px; font-size: 14px; border-left: 3px solid;
247
- }
248
- .callout-tip {
249
- background: rgba(16, 185, 129, 0.08); border-color: var(--accent);
250
- }
251
- .callout-tip strong { color: var(--accent); }
252
- .callout-warn {
253
- background: rgba(245, 158, 11, 0.08); border-color: var(--amber);
254
- }
255
- .callout-warn strong { color: var(--amber); }
256
- .callout-info {
257
- background: rgba(59, 130, 246, 0.08); border-color: var(--blue);
258
- }
259
- .callout-info strong { color: var(--blue); }
260
-
261
- /* ─── COMPARISON TABLE ─── */
262
- .compare-table {
263
- width: 100%; border-collapse: collapse; margin-bottom: 24px;
264
- font-size: 13px;
265
- }
266
- .compare-table th {
267
- font-family: var(--font-display); font-weight: 600; font-size: 13px;
268
- color: var(--text-primary); padding: 10px 14px;
269
- border-bottom: 2px solid var(--border); text-align: left;
270
- }
271
- .compare-table td {
272
- padding: 10px 14px; border-bottom: 1px solid var(--border);
273
- color: var(--text-secondary);
274
- }
275
- .compare-table tr:hover { background: rgba(255,255,255,0.02); }
276
- .check { color: var(--accent); font-weight: 700; }
277
-
278
- /* ─── PLATFORM TABS ─── */
279
- .tab-group { margin-bottom: 24px; }
280
- .tab-buttons {
281
- display: flex; gap: 0; margin-bottom: 0;
282
- border-bottom: 1px solid var(--border);
283
- }
284
- .tab-btn {
285
- padding: 10px 20px; font-family: var(--font-body); font-size: 13px;
286
- font-weight: 600; color: var(--text-muted); background: none;
287
- border: none; cursor: pointer; border-bottom: 2px solid transparent;
288
- transition: all 150ms ease; margin-bottom: -1px;
289
- }
290
- .tab-btn:hover { color: var(--text-secondary); }
291
- .tab-btn.active { color: var(--accent); border-bottom-color: var(--accent); }
292
- .tab-panel { display: none; padding-top: 16px; }
293
- .tab-panel.active { display: block; }
294
-
295
- /* ─── WORKFLOW DIAGRAM ─── */
296
- .flow {
297
- display: flex; flex-wrap: wrap; gap: 8px; align-items: center;
298
- margin-bottom: 24px;
299
- }
300
- .flow-step {
301
- background: var(--bg-card); border: 1px solid var(--border);
302
- border-radius: var(--radius-sm); padding: 8px 14px;
303
- font-family: var(--font-mono); font-size: 12px; color: var(--text-primary);
304
- white-space: nowrap;
305
- }
306
- .flow-step.highlight { border-color: var(--accent); color: var(--accent); }
307
- .flow-arrow { color: var(--text-muted); font-size: 16px; }
308
-
309
- /* ─── SKILL CARD ─── */
310
- .skill-grid {
311
- display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
312
- gap: 12px; margin-bottom: 24px;
313
- }
314
- .skill-card {
315
- background: var(--bg-card); border: 1px solid var(--border);
316
- border-radius: var(--radius-md); padding: 14px 16px;
317
- transition: border-color 150ms ease;
318
- }
319
- .skill-card:hover { border-color: var(--accent); }
320
- .skill-card strong {
321
- font-family: var(--font-mono); font-size: 13px;
322
- display: block; margin-bottom: 4px;
323
- }
324
- .skill-card span { font-size: 12px; color: var(--text-muted); }
325
-
326
- /* ─── LAYER BADGE ─── */
327
- .layer-badge {
328
- display: inline-block; font-family: var(--font-mono); font-size: 11px;
329
- font-weight: 700; padding: 2px 8px; border-radius: 4px;
330
- margin-right: 6px;
331
- }
332
- .layer-badge.l0 { background: rgba(16, 185, 129, 0.15); color: var(--accent); }
333
- .layer-badge.l1 { background: rgba(99, 102, 241, 0.15); color: #6366f1; }
334
- .layer-badge.l2 { background: rgba(59, 130, 246, 0.15); color: var(--blue); }
335
- .layer-badge.l3 { background: rgba(139, 92, 246, 0.15); color: var(--purple); }
336
- .layer-badge.l4 { background: rgba(245, 158, 11, 0.15); color: var(--amber); }
337
-
338
- /* ─── MESH EMBED ─── */
339
- .mesh-embed {
340
- width: 100%; height: 500px; border: 1px solid var(--border);
341
- border-radius: var(--radius-lg); overflow: hidden; margin-bottom: 24px;
342
- }
343
- .mesh-embed iframe { width: 100%; height: 100%; border: none; }
344
-
345
- /* ─── BEFORE/AFTER ─── */
346
- .before-after {
347
- display: grid; grid-template-columns: 1fr 1fr; gap: 16px;
348
- margin-bottom: 24px;
349
- }
350
- .ba-card {
351
- background: var(--bg-card); border: 1px solid var(--border);
352
- border-radius: var(--radius-md); padding: 20px;
353
- }
354
- .ba-card h4 {
355
- font-family: var(--font-display); font-size: 14px; font-weight: 700;
356
- margin-bottom: 12px; text-transform: uppercase; letter-spacing: 0.5px;
357
- }
358
- .ba-card.before h4 { color: var(--red); }
359
- .ba-card.after h4 { color: var(--accent); }
360
- .ba-card p, .ba-card ul { font-size: 13px; }
361
- .ba-card li { margin-bottom: 4px; }
362
-
363
- /* ─── VIDEO PLACEHOLDER ─── */
364
- .video-placeholder {
365
- background: var(--bg-card); border: 1px solid var(--border);
366
- border-radius: var(--radius-lg); padding: 48px;
367
- text-align: center; margin-bottom: 24px;
368
- }
369
- .video-placeholder .play-icon {
370
- font-size: 48px; color: var(--accent); margin-bottom: 12px;
371
- }
372
- .video-placeholder p { color: var(--text-muted); font-size: 14px; }
373
-
374
- /* ─── THEME TOGGLE + TRANSLATE ─── */
375
- .nav-controls { display: flex; align-items: center; gap: 8px; }
376
- .theme-toggle {
377
- background: none; border: 1px solid var(--border); color: var(--text-secondary);
378
- width: 34px; height: 34px; border-radius: var(--radius-sm);
379
- cursor: pointer; display: flex; align-items: center; justify-content: center;
380
- font-size: 16px; transition: all var(--transition); flex-shrink: 0;
381
- }
382
- .theme-toggle:hover, .lang-toggle:hover { border-color: var(--accent); color: var(--text-primary); }
383
- .lang-toggle {
384
- background: none; border: 1px solid var(--border); color: var(--text-secondary);
385
- width: 34px; height: 34px; border-radius: var(--radius-sm);
386
- cursor: pointer; display: flex; align-items: center; justify-content: center;
387
- font-size: 16px; transition: all var(--transition); flex-shrink: 0;
388
- }
389
- /* Google Translate — hide ALL injected elements */
390
- .goog-te-banner-frame { display: none !important; }
391
- body { top: 0 !important; position: static !important; }
392
- .skiptranslate { display: none !important; height: 0 !important; overflow: hidden !important; }
393
- .goog-te-spinner-pos, .goog-te-balloon-frame, #goog-gt-tt, .goog-te-ftab-frame { display: none !important; }
394
- .goog-text-highlight { background: none !important; box-shadow: none !important; }
395
- font[style] > font { vertical-align: unset !important; }
396
- #_gt_dummy { display: none !important; visibility: hidden !important; height: 0 !important; overflow: hidden !important; }
397
- /* Language dropdown */
398
- .lang-dropdown { position: relative; }
399
- .lang-menu {
400
- position: absolute; top: calc(100% + 6px); right: 0; z-index: 100;
401
- background: var(--bg-card); border: 1px solid var(--border);
402
- border-radius: var(--radius-md); padding: 4px; min-width: 140px;
403
- box-shadow: 0 8px 24px rgba(0,0,0,0.15);
404
- display: flex; flex-direction: column;
405
- }
406
- .lang-menu[hidden] { display: none; }
407
- .lang-menu button {
408
- background: none; border: none; color: var(--text-secondary);
409
- padding: 7px 12px; font-family: var(--font-body); font-size: 13px;
410
- text-align: left; cursor: pointer; border-radius: var(--radius-sm);
411
- transition: all var(--transition);
412
- }
413
- .lang-menu button:hover { background: var(--bg-elevated); color: var(--text-primary); }
414
-
415
- /* ─── RESPONSIVE ─── */
416
- @media (max-width: 900px) {
417
- .sidebar { transform: translateX(-100%); transition: transform 300ms ease; z-index: 200; }
418
- .sidebar.open { transform: translateX(0); }
419
- .sidebar-toggle { display: block; }
420
- .main { margin-left: 0; padding: 32px 20px 80px; }
421
- .before-after { grid-template-columns: 1fr; }
422
- .mesh-embed { height: 350px; }
423
- .nav-links a:not(.btn):not(.active) { display: none; }
424
- }
425
- @media (max-width: 640px) {
426
- .main h1 { font-size: 28px; }
427
- .main h2 { font-size: 22px; }
428
- .skill-grid { grid-template-columns: 1fr; }
429
- }
430
-
431
- /* Sidebar overlay for mobile */
432
- .sidebar-overlay {
433
- display: none; position: fixed; inset: 0; background: rgba(0,0,0,0.5);
434
- z-index: 150;
435
- }
436
- .sidebar-overlay.visible { display: block; }
437
- </style>
438
- </head>
439
- <body>
440
-
441
- <!-- NAV -->
442
- <nav class="nav">
443
- <div class="nav-inner">
444
- <div style="display:flex;align-items:center;gap:16px;">
445
- <button class="sidebar-toggle" id="sidebar-toggle" aria-label="Toggle sidebar">&#9776;</button>
446
- <a href="../" class="nav-logo">
447
- <span class="logo-rune">&#9670;</span> Rune
448
- </a>
449
- </div>
450
- <div class="nav-links">
451
- <a href="../">Home</a>
452
- <a href="./" class="active">Guides</a>
453
- <a href="../#pricing">Pricing</a>
454
- <div class="nav-controls notranslate" translate="no">
455
- <button class="theme-toggle" id="theme-toggle" aria-label="Toggle light/dark mode" title="Toggle theme">&#9790;</button>
456
- <div class="lang-dropdown" id="lang-dropdown">
457
- <button class="lang-toggle" id="lang-btn" aria-label="Translate page" title="Translate page">
458
- <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M2 12h20"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10A15.3 15.3 0 0 1 12 2z"/></svg>
459
- </button>
460
- <div class="lang-menu notranslate" id="lang-menu" translate="no" hidden>
461
- <button data-lang="">English</button>
462
- <button data-lang="vi">Tiếng Việt</button>
463
- <button data-lang="ja">日本語</button>
464
- <button data-lang="ko">한국어</button>
465
- <button data-lang="zh-CN">中文(简)</button>
466
- <button data-lang="zh-TW">中文(繁)</button>
467
- <button data-lang="fr">Français</button>
468
- <button data-lang="de">Deutsch</button>
469
- <button data-lang="es">Español</button>
470
- <button data-lang="pt">Português</button>
471
- <button data-lang="ru">Русский</button>
472
- <button data-lang="th">ไทย</button>
473
- <button data-lang="id">Bahasa</button>
474
- </div>
475
- </div>
476
- </div>
477
- <a href="https://github.com/rune-kit/rune" class="btn btn-ghost btn-sm" target="_blank" rel="noopener">GitHub</a>
478
- </div>
479
- </div>
480
- </nav>
481
-
482
- <div class="layout">
483
-
484
- <!-- SIDEBAR -->
485
- <div class="sidebar-overlay" id="sidebar-overlay"></div>
486
- <aside class="sidebar" id="sidebar">
487
- <div class="sidebar-search">
488
- <input type="text" id="guide-search" placeholder="Search guides..." aria-label="Search guides">
489
- </div>
490
-
491
- <div class="sidebar-group">
492
- <div class="sidebar-group-title">Getting Started</div>
493
- <a href="#what-is-rune" class="sidebar-link">What is Rune?</a>
494
- <a href="#install" class="sidebar-link">Installation</a>
495
- <a href="#first-run" class="sidebar-link">First Run</a>
496
- <a href="#existing-project" class="sidebar-link">Add to Existing Project</a>
497
- </div>
498
-
499
- <div class="sidebar-group">
500
- <div class="sidebar-group-title">Core Concepts</div>
501
- <a href="#mesh-architecture" class="sidebar-link">Mesh Architecture</a>
502
- <a href="#five-layers" class="sidebar-link">5-Layer System</a>
503
- <a href="#skill-connections" class="sidebar-link">Skill Connections</a>
504
- <a href="#model-routing" class="sidebar-link">Model Routing</a>
505
- </div>
506
-
507
- <div class="sidebar-group">
508
- <div class="sidebar-group-title">Workflows</div>
509
- <a href="#wf-cook" class="sidebar-link">/rune cook</a>
510
- <a href="#wf-debug" class="sidebar-link">/rune debug</a>
511
- <a href="#wf-rescue" class="sidebar-link">/rune rescue</a>
512
- <a href="#wf-team" class="sidebar-link">/rune team</a>
513
- <a href="#wf-onboard" class="sidebar-link">/rune onboard</a>
514
- </div>
515
-
516
- <div class="sidebar-group">
517
- <div class="sidebar-group-title">IDE & Platforms</div>
518
- <a href="#ide-claude" class="sidebar-link">Claude Code</a>
519
- <a href="#ide-cursor" class="sidebar-link">Cursor</a>
520
- <a href="#ide-windsurf" class="sidebar-link">Windsurf</a>
521
- <a href="#ide-antigravity" class="sidebar-link">Antigravity</a>
522
- <a href="#ide-codex" class="sidebar-link">OpenAI Codex</a>
523
- <a href="#ide-opencode" class="sidebar-link">OpenCode</a>
524
- </div>
525
-
526
- <div class="sidebar-group">
527
- <div class="sidebar-group-title">Extension Packs</div>
528
- <a href="#ext-using" class="sidebar-link">Using Packs</a>
529
- <a href="#ext-list" class="sidebar-link">Available Packs</a>
530
- <a href="#ext-creating" class="sidebar-link">Creating Packs</a>
531
- </div>
532
-
533
- <div class="sidebar-group">
534
- <div class="sidebar-group-title">Configuration</div>
535
- <a href="#config-file" class="sidebar-link">rune.config.json</a>
536
- <a href="#config-disable" class="sidebar-link">Disabling Skills</a>
537
- </div>
538
-
539
- <div class="sidebar-group">
540
- <div class="sidebar-group-title">Troubleshooting</div>
541
- <a href="#troubleshooting" class="sidebar-link">Common Issues</a>
542
- <a href="#faq" class="sidebar-link">FAQ</a>
543
- </div>
544
- </aside>
545
-
546
- <!-- MAIN CONTENT -->
547
- <main class="main">
548
-
549
- <h1>Rune Guides</h1>
550
- <p class="page-desc">
551
- Everything you need to go from install to production. Rune turns your AI coding assistant into a
552
- structured engineering team with 58 interconnected skills.
553
- </p>
554
-
555
- <!-- ═══════════════════════════════════ -->
556
- <!-- GETTING STARTED -->
557
- <!-- ═══════════════════════════════════ -->
558
-
559
- <h2 id="what-is-rune">What is Rune?</h2>
560
-
561
- <p>
562
- <strong>Rune is a 59-skill mesh ecosystem</strong> for AI coding assistants. Instead of giving your AI one prompt at a time,
563
- Rune gives it structured workflows where skills call each other automatically.
564
- </p>
565
-
566
- <div class="before-after">
567
- <div class="ba-card before">
568
- <h4>Without Rune</h4>
569
- <ul>
570
- <li>You prompt "fix this bug"</li>
571
- <li>AI guesses a fix, might break tests</li>
572
- <li>No security check before commit</li>
573
- <li>Same mistake next session</li>
574
- <li>Context lost between sessions</li>
575
- </ul>
576
- </div>
577
- <div class="ba-card after">
578
- <h4>With Rune</h4>
579
- <ul>
580
- <li>You say <code>/rune cook "fix login bug"</code></li>
581
- <li>scout scans codebase, debug traces root cause</li>
582
- <li>fix writes code, test verifies, sentinel blocks secrets</li>
583
- <li>session-bridge saves context for next session</li>
584
- <li>git creates semantic commit automatically</li>
585
- </ul>
586
- </div>
587
- </div>
588
-
589
- <p>
590
- Think of it like this: without Rune, your AI is a solo intern. With Rune, your AI is a
591
- coordinated engineering team — debugger, tester, security auditor, architect, all talking to each other.
592
- </p>
593
-
594
- <!-- INSTALL -->
595
- <h2 id="install">Installation</h2>
596
-
597
- <div class="tab-group">
598
- <div class="tab-buttons">
599
- <button class="tab-btn active" data-tab="install-claude">Claude Code</button>
600
- <button class="tab-btn" data-tab="install-cursor">Cursor</button>
601
- <button class="tab-btn" data-tab="install-windsurf">Windsurf</button>
602
- <button class="tab-btn" data-tab="install-antigravity">Antigravity</button>
603
- <button class="tab-btn" data-tab="install-openclaw">OpenClaw</button>
604
- </div>
605
-
606
- <div class="tab-panel active" id="install-claude">
607
- <p>Claude Code uses Rune as a <strong>native plugin</strong> — no compilation needed.</p>
608
- <div class="code-wrapper">
609
- <div class="code-block"><span class="comment"># Step 1: Add marketplace (one-time)</span>
610
- <span class="cmd">claude plugin marketplace add rune-kit/rune</span>
611
-
612
- <span class="comment"># Step 2: Install the plugin</span>
613
- <span class="cmd">claude plugin install rune</span>
614
-
615
- <span class="comment"># Verify it's loaded</span>
616
- <span class="cmd">claude</span>
617
- <span class="output"> 59 skills loaded from rune</span></div>
618
- <button class="copy-btn" data-copy="claude plugin marketplace add rune-kit/rune && claude plugin install rune">Copy</button>
619
- </div>
620
- <div class="callout callout-tip">
621
- <strong>Tip:</strong> The marketplace only needs to be added once. After that,
622
- just <code>claude plugin install rune</code> or <code>claude plugin update rune</code>.
623
- </div>
624
- </div>
625
-
626
- <div class="tab-panel" id="install-cursor">
627
- <p>Cursor uses <code>.mdc</code> rule files. Rune compiles all 59 skills into Cursor's format.</p>
628
- <div class="code-wrapper">
629
- <div class="code-block"><span class="comment"># In your project directory</span>
630
- <span class="cmd">npx --yes @rune-kit/rune init <span class="flag">--platform cursor</span></span>
631
-
632
- <span class="output"> → Detected: cursor</span>
633
- <span class="output"> ✓ Created rune.config.json</span>
634
- <span class="output"> ✓ Built 59 skills + 14 extensions to .cursor/rules/</span></div>
635
- <button class="copy-btn" data-copy="npx --yes @rune-kit/rune init --platform cursor">Copy</button>
636
- </div>
637
- <p>Skills are compiled into <code>.cursor/rules/</code>. Cursor picks them up automatically.</p>
638
- </div>
639
-
640
- <div class="tab-panel" id="install-windsurf">
641
- <p>Windsurf uses <code>.md</code> rule files in its rules directory.</p>
642
- <div class="code-wrapper">
643
- <div class="code-block"><span class="cmd">npx --yes @rune-kit/rune init <span class="flag">--platform windsurf</span></span>
644
-
645
- <span class="output"> ✓ Built 59 skills + 14 extensions to .windsurf/rules/</span></div>
646
- <button class="copy-btn" data-copy="npx --yes @rune-kit/rune init --platform windsurf">Copy</button>
647
- </div>
648
- </div>
649
-
650
- <div class="tab-panel" id="install-antigravity">
651
- <p>Google Antigravity (formerly Jules) uses the <code>.agent/</code> directory.</p>
652
- <div class="code-wrapper">
653
- <div class="code-block"><span class="cmd">npx --yes @rune-kit/rune init <span class="flag">--platform antigravity</span></span>
654
-
655
- <span class="output"> ✓ Built 59 skills + 14 extensions to .agent/rules/</span></div>
656
- <button class="copy-btn" data-copy="npx --yes @rune-kit/rune init --platform antigravity">Copy</button>
657
- </div>
658
- <div class="callout callout-info">
659
- <strong>Note:</strong> Antigravity is currently in early access. Install it from
660
- <a href="https://idx.google.com/" target="_blank" rel="noopener">idx.google.com</a> (Project IDX)
661
- or via your Google Cloud workspace.
662
- </div>
663
- </div>
664
-
665
- <div class="tab-panel" id="install-openclaw">
666
- <p>OpenClaw uses Rune as a unified mesh package from <strong>ClawHub</strong>.</p>
667
- <div class="code-wrapper">
668
- <div class="code-block"><span class="cmd">clawhub install rune-kit</span>
669
-
670
- <span class="comment"># All 59 skills installed as one mesh package</span>
671
- <span class="comment"># Works with any OpenClaw-compatible agent</span></div>
672
- <button class="copy-btn" data-copy="clawhub install rune-kit">Copy</button>
673
- </div>
674
- <div class="callout callout-info">
675
- <strong>Note:</strong> Rune is published as a single unified package on ClawHub.
676
- Individual skills are NOT published separately — the mesh requires all skills together.
677
- </div>
678
- </div>
679
- </div>
680
-
681
- <!-- FIRST RUN -->
682
- <h2 id="first-run">First Run</h2>
683
-
684
- <p>After installing, <strong>onboard your project</strong> so Rune understands your codebase:</p>
685
-
686
- <div class="code-wrapper">
687
- <div class="code-block"><span class="cmd">/rune onboard</span>
688
-
689
- <span class="output"> [scout] Scanning project structure...</span>
690
- <span class="output"> [scout] Detected: Next.js 16 + TypeScript + Prisma + TailwindCSS 4</span>
691
- <span class="output"> [onboard] Created .rune/conventions.md</span>
692
- <span class="output"> [onboard] Created .rune/decisions.md</span>
693
- <span class="output"> [onboard] Created CLAUDE.md (project configuration)</span>
694
- <span class="output"> ✓ Project context ready. Rune will remember this across sessions.</span></div>
695
- </div>
696
-
697
- <p>This creates persistent context files that every Rune skill reads. No more re-explaining your stack every session.</p>
698
-
699
- <div class="callout callout-tip">
700
- <strong>Tip:</strong> Commit the <code>.rune/</code> directory to your repo. This way every team member
701
- (and every AI session) starts with the same project understanding.
702
- </div>
703
-
704
- <!-- EXISTING PROJECT -->
705
- <h2 id="existing-project">Add to Existing Project</h2>
706
-
707
- <p>
708
- <strong>"I already have a project. How do I make Rune debug it?"</strong> — Great question.
709
- Rune works on any existing codebase. Here's the 3-step flow:
710
- </p>
711
-
712
- <ol>
713
- <li><strong>Install Rune</strong> (see platform tabs above)</li>
714
- <li><strong>Run onboard</strong> — <code>/rune onboard</code> scans your codebase, detects stack, frameworks, patterns</li>
715
- <li><strong>Start using workflows</strong> — <code>/rune debug "my error"</code>, <code>/rune cook "add feature"</code>, etc.</li>
716
- </ol>
717
-
718
- <p>
719
- Rune's <code>scout</code> skill reads your files, <code>onboard</code> creates context,
720
- and from there every skill knows your project structure, conventions, and dependencies.
721
- You don't need to configure anything manually.
722
- </p>
723
-
724
- <div class="code-wrapper">
725
- <div class="code-block"><span class="comment"># Example: debug a real bug in your existing project</span>
726
- <span class="cmd">/rune debug "API returns 500 on /api/users when filtering by date"</span>
727
-
728
- <span class="output"> [scout] Scanning: src/api/users/route.ts, src/lib/db.ts...</span>
729
- <span class="output"> [debug] Root cause: Date parsing fails for ISO format without timezone</span>
730
- <span class="output"> [debug] → Handing off to fix</span>
731
- <span class="output"> [fix] Patched: src/lib/db.ts:47 — added timezone normalization</span>
732
- <span class="output"> [verification] ✓ All tests pass</span></div>
733
- </div>
734
-
735
- <!-- ═══════════════════════════════════ -->
736
- <!-- CORE CONCEPTS -->
737
- <!-- ═══════════════════════════════════ -->
738
-
739
- <h2 id="mesh-architecture">Mesh Architecture</h2>
740
-
741
- <p>
742
- Unlike a pipeline (A→B→C) or hub-spoke (everything through one center), Rune's mesh means
743
- <strong>skills call each other bidirectionally</strong> and <strong>route around failures</strong>.
744
- </p>
745
-
746
- <div class="mesh-embed">
747
- <iframe src="../assets/mesh-diagram.html" title="Rune Mesh Architecture — Interactive Diagram" loading="lazy"></iframe>
748
- </div>
749
-
750
- <p>
751
- 200+ connections between 59 skills. When <code>debug</code> can't find the cause,
752
- it escalates to <code>problem-solver</code>. When <code>cook</code> hits a wall 3 times,
753
- it pivots to <code>brainstorm</code>. When <code>sentinel</code> finds a vulnerability,
754
- it blocks the commit. The mesh is self-healing.
755
- </p>
756
-
757
- <!-- FIVE LAYERS -->
758
- <h2 id="five-layers">5-Layer System</h2>
759
-
760
- <table class="compare-table">
761
- <thead>
762
- <tr>
763
- <th>Layer</th>
764
- <th>Role</th>
765
- <th>Count</th>
766
- <th>Examples</th>
767
- </tr>
768
- </thead>
769
- <tbody>
770
- <tr>
771
- <td><span class="layer-badge l0">L0</span></td>
772
- <td>Router</td>
773
- <td>1</td>
774
- <td>skill-router — routes every action to the right skill</td>
775
- </tr>
776
- <tr>
777
- <td><span class="layer-badge l1">L1</span></td>
778
- <td>Orchestrators</td>
779
- <td>5</td>
780
- <td>cook, team, launch, rescue, scaffold</td>
781
- </tr>
782
- <tr>
783
- <td><span class="layer-badge l2">L2</span></td>
784
- <td>Workflow Hubs</td>
785
- <td>27</td>
786
- <td>plan, debug, fix, test, review, sentinel, design, ba, adversary...</td>
787
- </tr>
788
- <tr>
789
- <td><span class="layer-badge l3">L3</span></td>
790
- <td>Utilities</td>
791
- <td>24</td>
792
- <td>research, verification, git, session-bridge, sentinel-env...</td>
793
- </tr>
794
- <tr>
795
- <td><span class="layer-badge l4">L4</span></td>
796
- <td>Extension Packs</td>
797
- <td>13</td>
798
- <td>@rune/trading, @rune/saas, @rune/ai-ml, @rune/gamedev...</td>
799
- </tr>
800
- </tbody>
801
- </table>
802
-
803
- <p>
804
- <strong>Layer rules:</strong> Skills only call downward (L1→L2→L3).
805
- L3 utilities never call L1 orchestrators.
806
- This prevents circular dependencies and keeps the mesh predictable.
807
- </p>
808
-
809
- <!-- SKILL CONNECTIONS -->
810
- <h2 id="skill-connections">Skill Connections</h2>
811
-
812
- <p>Every skill declares who it calls and who calls it. Here's how <code>cook</code> orchestrates a feature:</p>
813
-
814
- <div class="flow">
815
- <div class="flow-step highlight">cook</div>
816
- <span class="flow-arrow">→</span>
817
- <div class="flow-step">scout</div>
818
- <span class="flow-arrow">→</span>
819
- <div class="flow-step">ba</div>
820
- <span class="flow-arrow">→</span>
821
- <div class="flow-step">plan</div>
822
- <span class="flow-arrow">→</span>
823
- <div class="flow-step">adversary</div>
824
- <span class="flow-arrow">→</span>
825
- <div class="flow-step">test</div>
826
- <span class="flow-arrow">→</span>
827
- <div class="flow-step">fix</div>
828
- <span class="flow-arrow">→</span>
829
- <div class="flow-step">preflight</div>
830
- <span class="flow-arrow">→</span>
831
- <div class="flow-step">sentinel</div>
832
- <span class="flow-arrow">→</span>
833
- <div class="flow-step">review</div>
834
- <span class="flow-arrow">→</span>
835
- <div class="flow-step">git</div>
836
- </div>
837
-
838
- <p>
839
- This is just one path. If <code>fix</code> fails 3 times, <code>cook</code> escalates:
840
- first to <code>debug</code>, then to <code>brainstorm</code> (rescue mode),
841
- then asks the user. The mesh adapts.
842
- </p>
843
-
844
- <!-- MODEL ROUTING -->
845
- <h2 id="model-routing">Model Routing</h2>
846
-
847
- <p>Rune auto-selects the cheapest model that can handle each task:</p>
848
-
849
- <table class="compare-table">
850
- <thead>
851
- <tr><th>Model</th><th>Cost</th><th>Used For</th></tr>
852
- </thead>
853
- <tbody>
854
- <tr><td><strong>Haiku</strong></td><td>Lowest</td><td>scout, verification, git, sentinel-env — scanning, checking</td></tr>
855
- <tr><td><strong>Sonnet</strong></td><td>Medium</td><td>fix, test, review, design — code writing, analysis</td></tr>
856
- <tr><td><strong>Opus</strong></td><td>Highest</td><td>plan, architect, adversary, ba — deep reasoning, decisions</td></tr>
857
- </tbody>
858
- </table>
859
-
860
- <div class="callout callout-tip">
861
- <strong>Cost estimate:</strong> A typical <code>/rune cook</code> feature costs ~$0.05-0.15 in API tokens.
862
- Most of the work is done by Haiku and Sonnet.
863
- </div>
864
-
865
- <!-- ═══════════════════════════════════ -->
866
- <!-- WORKFLOWS -->
867
- <!-- ═══════════════════════════════════ -->
868
-
869
- <h2 id="wf-cook">/rune cook — Build Features</h2>
870
-
871
- <p>The primary workflow. Builds any feature with TDD discipline, security gates, and automatic verification.</p>
872
-
873
- <div class="code-wrapper">
874
- <div class="code-block"><span class="cmd">/rune cook "add Stripe subscription billing with plan management"</span></div>
875
- </div>
876
-
877
- <div class="flow">
878
- <div class="flow-step">Phase 0: Resume</div>
879
- <span class="flow-arrow">→</span>
880
- <div class="flow-step">Phase 0.5: Env Check</div>
881
- <span class="flow-arrow">→</span>
882
- <div class="flow-step">Phase 1: Understand</div>
883
- <span class="flow-arrow">→</span>
884
- <div class="flow-step">Phase 2: Plan</div>
885
- <span class="flow-arrow">→</span>
886
- <div class="flow-step highlight">Phase 2.5: Adversary</div>
887
- <span class="flow-arrow">→</span>
888
- <div class="flow-step">Phase 3: Test</div>
889
- <span class="flow-arrow">→</span>
890
- <div class="flow-step">Phase 4: Implement</div>
891
- <span class="flow-arrow">→</span>
892
- <div class="flow-step">Phase 5: Quality</div>
893
- <span class="flow-arrow">→</span>
894
- <div class="flow-step">Phase 6: Verify</div>
895
- <span class="flow-arrow">→</span>
896
- <div class="flow-step">Phase 7: Commit</div>
897
- </div>
898
-
899
- <p>
900
- <strong>Phase 2.5 (Adversary)</strong> is unique to Rune: before writing any code,
901
- the adversary skill red-teams the plan across 5 dimensions — edge cases, security,
902
- scalability, error propagation, and integration risk. It catches issues before they become bugs.
903
- </p>
904
-
905
- <div class="callout callout-warn">
906
- <strong>Key gate:</strong> If adversary returns REVISE, the plan must be updated before proceeding.
907
- This prevents "code first, fix later" patterns that waste time.
908
- </div>
909
-
910
- <!-- DEBUG -->
911
- <h2 id="wf-debug">/rune debug — Root Cause Analysis</h2>
912
-
913
- <div class="code-wrapper">
914
- <div class="code-block"><span class="cmd">/rune debug "login returns 401 for valid credentials"</span>
915
-
916
- <span class="output"> [scout] Found: src/auth/middleware.ts, src/auth/jwt.ts, src/api/login.ts</span>
917
- <span class="output"> [debug] Tracing authentication flow...</span>
918
- <span class="output"> [debug] Root cause: JWT_SECRET rotated but old secret not in fallback array</span>
919
- <span class="output"> [debug] Confidence: HIGH (verified with test case)</span>
920
- <span class="output"> [debug] → Handing off to fix</span>
921
- <span class="output"> [fix] Patched: src/auth/jwt.ts — added secret rotation fallback</span>
922
- <span class="output"> [verification] ✓ 14/14 tests pass, 0 regressions</span></div>
923
- </div>
924
-
925
- <p>
926
- Debug uses structured reasoning to trace code paths. If it can't find the cause after 3 attempts,
927
- it escalates to <code>problem-solver</code> (5 Whys, Fishbone analysis).
928
- </p>
929
-
930
- <!-- RESCUE -->
931
- <h2 id="wf-rescue">/rune rescue — Refactor Legacy Code</h2>
932
-
933
- <div class="code-wrapper">
934
- <div class="code-block"><span class="cmd">/rune rescue src/legacy/payment-processor.ts</span>
935
-
936
- <span class="output"> [autopsy] Health score: 34/100 (CRITICAL)</span>
937
- <span class="output"> [autopsy] Issues: 12 God classes, 8 circular deps, 0% test coverage</span>
938
- <span class="output"> [safeguard] Creating characterization tests...</span>
939
- <span class="output"> [surgeon] Refactoring 1 module per session (Strangler Fig pattern)</span></div>
940
- </div>
941
-
942
- <p>
943
- Rescue takes the safe approach: autopsy first (health score), then characterization tests (safety net),
944
- then one module at a time. Never rewrites everything at once.
945
- </p>
946
-
947
- <!-- TEAM -->
948
- <h2 id="wf-team">/rune team — Parallel Execution</h2>
949
-
950
- <div class="code-wrapper">
951
- <div class="code-block"><span class="cmd">/rune team "refactor auth, add billing, update dashboard"</span>
952
-
953
- <span class="output"> [team] Decomposing into 3 parallel streams...</span>
954
- <span class="output"> [worktree] Created: auth-refactor, billing-feature, dashboard-update</span>
955
- <span class="output"> [team] Stream 1: cook → auth refactor (worktree: auth-refactor)</span>
956
- <span class="output"> [team] Stream 2: cook → billing (worktree: billing-feature)</span>
957
- <span class="output"> [team] Stream 3: cook → dashboard (worktree: dashboard-update)</span>
958
- <span class="output"> [team] All streams complete → merging...</span>
959
- <span class="output"> [completion-gate] ✓ All 3 streams verified</span></div>
960
- </div>
961
-
962
- <p>
963
- Team decomposes large tasks into a DAG, creates isolated git worktrees for each stream,
964
- runs parallel agents, then merges everything back. Use when a task spans 5+ files or 3+ modules.
965
- </p>
966
-
967
- <!-- ONBOARD -->
968
- <h2 id="wf-onboard">/rune onboard — Project Setup</h2>
969
-
970
- <div class="code-wrapper">
971
- <div class="code-block"><span class="cmd">/rune onboard</span>
972
-
973
- <span class="output"> [scout] Scanning 247 files...</span>
974
- <span class="output"> [scout] Stack: Next.js 16 + Prisma 6 + TailwindCSS 4 + TypeScript 5.7</span>
975
- <span class="output"> [onboard] Created .rune/conventions.md (coding patterns detected)</span>
976
- <span class="output"> [onboard] Created .rune/decisions.md (architecture decisions)</span>
977
- <span class="output"> [onboard] Updated CLAUDE.md (project configuration for AI)</span></div>
978
- </div>
979
-
980
- <p>Run this once per project. After that, every Rune skill knows your stack, patterns, and conventions.</p>
981
-
982
- <!-- ═══════════════════════════════════ -->
983
- <!-- IDE & PLATFORMS -->
984
- <!-- ═══════════════════════════════════ -->
985
-
986
- <h2 id="ide-claude">Claude Code</h2>
987
-
988
- <p>
989
- Rune is a <strong>native Claude Code plugin</strong>. It uses the full plugin system:
990
- subagents, hooks, commands, contexts, and skills. This is the richest experience.
991
- </p>
992
-
993
- <div class="code-wrapper">
994
- <div class="code-block"><span class="comment"># Step 1: Add marketplace (one-time)</span>
995
- <span class="cmd">claude plugin marketplace add rune-kit/rune</span>
996
-
997
- <span class="comment"># Step 2: Install</span>
998
- <span class="cmd">claude plugin install rune</span>
999
-
1000
- <span class="comment"># Use any skill directly</span>
1001
- <span class="cmd">/rune cook "add user authentication"</span>
1002
- <span class="cmd">/rune debug "TypeError in dashboard"</span>
1003
- <span class="cmd">/rune review</span></div>
1004
- </div>
1005
-
1006
- <h2 id="ide-cursor">Cursor</h2>
1007
-
1008
- <p>
1009
- Cursor uses <code>.mdc</code> (Markdown Config) rule files. The compiler converts each SKILL.md
1010
- into Cursor's native format with proper frontmatter.
1011
- </p>
1012
-
1013
- <div class="code-wrapper">
1014
- <div class="code-block"><span class="cmd">npx --yes @rune-kit/rune init <span class="flag">--platform cursor</span></span>
1015
-
1016
- <span class="comment"># Skills appear in .cursor/rules/rune/</span>
1017
- <span class="comment"># Cursor auto-loads them for every conversation</span></div>
1018
- </div>
1019
-
1020
- <h2 id="ide-windsurf">Windsurf</h2>
1021
-
1022
- <div class="code-wrapper">
1023
- <div class="code-block"><span class="cmd">npx --yes @rune-kit/rune init <span class="flag">--platform windsurf</span></span>
1024
-
1025
- <span class="comment"># Skills appear in .windsurf/rules/rune/</span></div>
1026
- </div>
1027
-
1028
- <h2 id="ide-antigravity">Antigravity</h2>
1029
-
1030
- <div class="code-wrapper">
1031
- <div class="code-block"><span class="cmd">npx --yes @rune-kit/rune init <span class="flag">--platform antigravity</span></span>
1032
-
1033
- <span class="comment"># Skills appear in .agent/rules/rune/</span></div>
1034
- </div>
1035
-
1036
- <h2 id="ide-codex">OpenAI Codex</h2>
1037
-
1038
- <p>
1039
- OpenAI Codex uses a <strong>directory-per-skill</strong> structure inside <code>.codex/skills/</code>.
1040
- Each skill gets its own folder with a <code>SKILL.md</code> file — similar to Rune's native format.
1041
- </p>
1042
-
1043
- <div class="code-wrapper">
1044
- <div class="code-block"><span class="cmd">npx --yes @rune-kit/rune init <span class="flag">--platform codex</span></span>
1045
-
1046
- <span class="comment"># Output structure:</span>
1047
- <span class="output"> .codex/skills/</span>
1048
- <span class="output"> ├── rune-cook/SKILL.md</span>
1049
- <span class="output"> ├── rune-debug/SKILL.md</span>
1050
- <span class="output"> ├── rune-fix/SKILL.md</span>
1051
- <span class="output"> ├── rune-plan/SKILL.md</span>
1052
- <span class="output"> ├── rune-test/SKILL.md</span>
1053
- <span class="output"> └── ... (59 skills total)</span></div>
1054
- </div>
1055
-
1056
- <p>
1057
- Codex skills use <strong>YAML frontmatter</strong> with <code>name</code> and <code>description</code> fields,
1058
- matching Codex's native skill format. The compiler also maps tool names to
1059
- Codex-compatible descriptions (e.g., <code>Read</code> → <code>read the file</code>).
1060
- </p>
1061
-
1062
- <div class="callout callout-info">
1063
- <strong>Codex project config:</strong> Codex uses <code>AGENTS.md</code> (equivalent to Claude's <code>CLAUDE.md</code>).
1064
- Rune skills work alongside your existing <code>AGENTS.md</code> without conflicts.
1065
- </div>
1066
-
1067
- <h2 id="ide-opencode">OpenCode</h2>
1068
-
1069
- <p>
1070
- OpenCode is an open-source AI coding agent with 120K+ GitHub stars. It supports
1071
- <strong>directory-per-skill</strong> <code>SKILL.md</code> format with native subagent support.
1072
- </p>
1073
-
1074
- <div class="code-wrapper">
1075
- <div class="code-block"><span class="comment"># Build Rune skills for OpenCode</span>
1076
- <span class="cmd">npx @rune-kit/rune build <span class="flag">--platform opencode</span> <span class="flag">--output .</span></span>
1077
-
1078
- <span class="comment"># Or initialize with auto-detection</span>
1079
- <span class="cmd">npx @rune-kit/rune init</span>
1080
-
1081
- <span class="comment"># Output structure:</span>
1082
- <span class="output"> .opencode/</span>
1083
- <span class="output"> └── skills/</span>
1084
- <span class="output"> ├── rune-cook/</span>
1085
- <span class="output"> │ └── SKILL.md</span>
1086
- <span class="output"> ├── rune-plan/</span>
1087
- <span class="output"> │ └── SKILL.md</span>
1088
- <span class="output"> └── ...</span></div>
1089
- </div>
1090
-
1091
- <p>
1092
- OpenCode preserves <strong>native subagent support</strong> — parallel agents are kept as true
1093
- parallel invocations rather than collapsed to sequential steps. The compiler also generates
1094
- an <code>AGENTS.md</code> file for project-level context.
1095
- </p>
1096
-
1097
- <div class="callout callout-info">
1098
- <strong>Note:</strong> OpenCode also searches <code>.claude/skills/</code> and
1099
- <code>.agents/skills/</code> — so Claude-compatible skill formats work too.
1100
- </div>
1101
-
1102
- <h2 id="ide-openclaw">OpenClaw (ClawHub)</h2>
1103
-
1104
- <p>
1105
- OpenClaw agents can install Rune from <strong>ClawHub</strong> — the skill registry for the
1106
- OpenClaw ecosystem. Rune is published as a single unified package (not individual skills).
1107
- </p>
1108
-
1109
- <div class="code-wrapper">
1110
- <div class="code-block"><span class="cmd">clawhub install rune-kit</span>
1111
-
1112
- <span class="comment"># All 59 skills + 14 extension packs as one mesh package</span>
1113
- <span class="comment"># Slug: rune-kit on clawhub.ai</span></div>
1114
- </div>
1115
-
1116
- <div class="callout callout-warn">
1117
- <strong>Important:</strong> Rune skills are NOT published individually on ClawHub.
1118
- The mesh requires all 200+ connections to function — installing skills separately would break routing.
1119
- </div>
1120
-
1121
- <div class="callout callout-info">
1122
- <strong>All platforms get the same 59 skills.</strong> The compiler handles format differences.
1123
- Cross-references, tool names, and model hints are adapted per platform.
1124
- </div>
1125
-
1126
- <!-- ═══════════════════════════════════ -->
1127
- <!-- EXTENSION PACKS -->
1128
- <!-- ═══════════════════════════════════ -->
1129
-
1130
- <h2 id="ext-using">Using Extension Packs</h2>
1131
-
1132
- <p>
1133
- Extension packs are domain-specific skill bundles. They're included with Rune and auto-detected
1134
- when your project matches their domain.
1135
- </p>
1136
-
1137
- <div class="code-wrapper">
1138
- <div class="code-block"><span class="comment"># Packs are auto-loaded by the mesh. No configuration needed.</span>
1139
- <span class="comment"># When cook detects a SaaS project, @rune/saas patterns activate automatically.</span>
1140
-
1141
- <span class="comment"># To manually compile with specific packs only:</span>
1142
- <span class="cmd">npx --yes @rune-kit/rune build <span class="flag">--extensions trading,saas</span></span></div>
1143
- </div>
1144
-
1145
- <h2 id="ext-list">Available Packs</h2>
1146
-
1147
- <div class="skill-grid">
1148
- <div class="skill-card"><strong>@rune/ui</strong><span>Frontend patterns, component architecture, responsive design</span></div>
1149
- <div class="skill-card"><strong>@rune/backend</strong><span>API design, database patterns, auth, caching</span></div>
1150
- <div class="skill-card"><strong>@rune/devops</strong><span>CI/CD, Docker, K8s, monitoring, chaos engineering</span></div>
1151
- <div class="skill-card"><strong>@rune/mobile</strong><span>React Native, Flutter, platform-specific patterns</span></div>
1152
- <div class="skill-card"><strong>@rune/security</strong><span>OWASP, threat modeling, penetration testing</span></div>
1153
- <div class="skill-card"><strong>@rune/trading</strong><span>Market data, backtesting, risk management, quant patterns</span></div>
1154
- <div class="skill-card"><strong>@rune/saas</strong><span>Multi-tenancy, billing, usage tracking, onboarding</span></div>
1155
- <div class="skill-card"><strong>@rune/ecommerce</strong><span>Cart, checkout, inventory, payment gateways</span></div>
1156
- <div class="skill-card"><strong>@rune/ai-ml</strong><span>ML pipelines, LLM integration, prompt patterns, evaluation</span></div>
1157
- <div class="skill-card"><strong>@rune/gamedev</strong><span>Game loops, ECS, physics, asset pipelines</span></div>
1158
- <div class="skill-card"><strong>@rune/content</strong><span>CMS patterns, markdown processing, SEO</span></div>
1159
- <div class="skill-card"><strong>@rune/analytics</strong><span>Tracking, dashboards, SQL patterns, data validation</span></div>
1160
- <div class="skill-card"><strong>@rune/chrome-ext</strong><span>Browser extensions, content scripts, popup UI</span></div>
1161
- </div>
1162
-
1163
- <h2 id="ext-creating">Creating Your Own Pack</h2>
1164
-
1165
- <div class="code-wrapper">
1166
- <div class="code-block"><span class="comment"># Use skill-forge to scaffold a new extension pack</span>
1167
- <span class="cmd">/rune skill-forge "create extension pack @rune/my-domain"</span>
1168
-
1169
- <span class="comment"># Pack structure:</span>
1170
- <span class="output"> extensions/my-domain/</span>
1171
- <span class="output"> ├── PACK.md ← Pack manifest (skills, patterns, conventions)</span>
1172
- <span class="output"> └── README.md ← Documentation</span></div>
1173
- </div>
1174
-
1175
- <p>
1176
- See <code>docs/EXTENSION-TEMPLATE.md</code> for the full PACK.md format.
1177
- Community packs are welcome — submit a PR to add yours!
1178
- </p>
1179
-
1180
- <!-- ═══════════════════════════════════ -->
1181
- <!-- CONFIGURATION -->
1182
- <!-- ═══════════════════════════════════ -->
1183
-
1184
- <h2 id="config-file">rune.config.json</h2>
1185
-
1186
- <p>Created by <code>rune init</code>. Only needed for non-Claude platforms.</p>
1187
-
1188
- <div class="code-wrapper">
1189
- <div class="code-block">{
1190
- <span class="comment">"$schema"</span>: "https://rune-kit.github.io/rune/config-schema.json",
1191
- <span class="flag">"version"</span>: 1,
1192
- <span class="flag">"platform"</span>: "cursor",
1193
- <span class="flag">"skills"</span>: {
1194
- "disabled": ["video-creator", "marketing"]
1195
- },
1196
- <span class="flag">"extensions"</span>: {
1197
- "enabled": null <span class="comment">// null = all, or ["trading", "saas"]</span>
1198
- },
1199
- <span class="flag">"output"</span>: {
1200
- "index": true
1201
- }
1202
- }</div>
1203
- </div>
1204
-
1205
- <h2 id="config-disable">Disabling Skills</h2>
1206
-
1207
- <p>Don't need marketing or video skills? Disable them:</p>
1208
-
1209
- <div class="code-wrapper">
1210
- <div class="code-block"><span class="comment"># Via CLI flag</span>
1211
- <span class="cmd">npx --yes @rune-kit/rune build <span class="flag">--disable marketing,video-creator</span></span>
1212
-
1213
- <span class="comment"># Or in rune.config.json</span>
1214
- "skills": { "disabled": ["marketing", "video-creator"] }</div>
1215
- </div>
1216
-
1217
- <!-- ═══════════════════════════════════ -->
1218
- <!-- TROUBLESHOOTING -->
1219
- <!-- ═══════════════════════════════════ -->
1220
-
1221
- <h2 id="troubleshooting">Common Issues</h2>
1222
-
1223
- <h3>"Skills not loading" (Claude Code)</h3>
1224
- <div class="code-wrapper">
1225
- <div class="code-block"><span class="comment"># Reinstall the plugin</span>
1226
- <span class="cmd">claude plugin uninstall rune</span>
1227
- <span class="cmd">claude plugin install rune-kit/rune</span>
1228
-
1229
- <span class="comment"># Restart Claude Code to pick up changes</span></div>
1230
- </div>
1231
-
1232
- <h3>"npx command not found" (Cursor/Windsurf)</h3>
1233
- <p>Make sure Node.js 18+ is installed. Or install globally:</p>
1234
- <div class="code-wrapper">
1235
- <div class="code-block"><span class="cmd">npm install -g @rune-kit/rune</span>
1236
- <span class="cmd">rune init <span class="flag">--platform cursor</span></span></div>
1237
- </div>
1238
-
1239
- <h3>"Skills compiled but AI doesn't use them"</h3>
1240
- <p>
1241
- Restart your IDE after running <code>rune init</code> or <code>rune build</code>.
1242
- Some IDEs cache rules and need a restart to pick up new files.
1243
- </p>
1244
-
1245
- <h3>"How do I update Rune?"</h3>
1246
- <div class="code-wrapper">
1247
- <div class="code-block"><span class="comment"># Claude Code</span>
1248
- <span class="cmd">claude plugin install rune-kit/rune</span> <span class="comment"># reinstall gets latest</span>
1249
-
1250
- <span class="comment"># Other platforms</span>
1251
- <span class="cmd">npx --yes @rune-kit/rune@latest build</span></div>
1252
- </div>
1253
-
1254
- <!-- FAQ -->
1255
- <h2 id="faq">FAQ</h2>
1256
-
1257
- <h3>Is Rune free?</h3>
1258
- <p>
1259
- Yes. The full 59-skill mesh + 14 extension packs are <strong>free forever, MIT license</strong>.
1260
- <a href="../#pricing">Rune Pro</a> ($49 lifetime) adds business department skills (Product, Sales, Data Science).
1261
- </p>
1262
-
1263
- <h3>Does Rune work with my existing CLAUDE.md / .cursorrules?</h3>
1264
- <p>
1265
- Yes. Rune's skills are additive — they don't overwrite your existing configuration.
1266
- Your project-specific rules take precedence.
1267
- </p>
1268
-
1269
- <h3>How much does it cost in API tokens?</h3>
1270
- <p>
1271
- A typical <code>/rune cook</code> feature: $0.05-0.15. Rune auto-routes to the cheapest model
1272
- (Haiku for scanning, Sonnet for code, Opus only for architecture decisions).
1273
- </p>
1274
-
1275
- <h3>Can I create my own skills?</h3>
1276
- <p>
1277
- Yes! Use <code>/rune skill-forge</code> to scaffold a new skill. Skills are just Markdown files
1278
- with a specific format. See <code>docs/SKILL-TEMPLATE.md</code>.
1279
- </p>
1280
-
1281
- <h3>Does it work offline?</h3>
1282
- <p>
1283
- Rune itself is offline (all skills are local Markdown files). But the AI model
1284
- you're using (Claude, GPT, etc.) needs internet access.
1285
- </p>
1286
-
1287
- <!-- FOOTER -->
1288
- <div style="margin-top:80px;padding-top:32px;border-top:1px solid var(--border);text-align:center;">
1289
- <p style="color:var(--text-muted);font-size:13px;">
1290
- <span class="logo-rune">&#9670;</span> Rune — Less skills. Deeper connections.
1291
- <br>
1292
- <a href="https://github.com/rune-kit/rune" target="_blank" rel="noopener">GitHub</a> &bull;
1293
- <a href="https://www.npmjs.com/package/@rune-kit/rune" target="_blank" rel="noopener">npm</a> &bull;
1294
- <a href="https://github.com/rune-kit/rune/issues" target="_blank" rel="noopener">Issues</a>
1295
- </p>
1296
- </div>
1297
-
1298
- </main>
1299
- </div>
1300
-
1301
- <script>
1302
- // ─── Tab switching ───
1303
- document.querySelectorAll('.tab-btn').forEach(btn => {
1304
- btn.addEventListener('click', () => {
1305
- const group = btn.closest('.tab-group');
1306
- group.querySelectorAll('.tab-btn').forEach(b => b.classList.remove('active'));
1307
- group.querySelectorAll('.tab-panel').forEach(p => p.classList.remove('active'));
1308
- btn.classList.add('active');
1309
- document.getElementById(btn.dataset.tab).classList.add('active');
1310
- });
1311
- });
1312
-
1313
- // ─── Scroll spy ───
1314
- const sections = document.querySelectorAll('h2[id], h3[id]');
1315
- const sidebarLinks = document.querySelectorAll('.sidebar-link');
1316
-
1317
- function updateScrollSpy() {
1318
- let current = '';
1319
- sections.forEach(section => {
1320
- const top = section.getBoundingClientRect().top;
1321
- if (top < 120) current = section.id;
1322
- });
1323
- sidebarLinks.forEach(link => {
1324
- link.classList.toggle('active', link.getAttribute('href') === '#' + current);
1325
- });
1326
- }
1327
-
1328
- let scrollTick = false;
1329
- window.addEventListener('scroll', () => {
1330
- if (!scrollTick) {
1331
- requestAnimationFrame(() => { updateScrollSpy(); scrollTick = false; });
1332
- scrollTick = true;
1333
- }
1334
- });
1335
-
1336
- // ─── Copy buttons ───
1337
- document.querySelectorAll('.copy-btn').forEach(btn => {
1338
- btn.addEventListener('click', () => {
1339
- const text = btn.dataset.copy || btn.closest('.code-wrapper').querySelector('.code-block').textContent;
1340
- navigator.clipboard.writeText(text).then(() => {
1341
- btn.textContent = 'Copied!';
1342
- setTimeout(() => { btn.textContent = 'Copy'; }, 1500);
1343
- });
1344
- });
1345
- });
1346
-
1347
- // ─── Sidebar search ───
1348
- document.getElementById('guide-search').addEventListener('input', (e) => {
1349
- const query = e.target.value.toLowerCase();
1350
- document.querySelectorAll('.sidebar-group').forEach(group => {
1351
- const links = group.querySelectorAll('.sidebar-link');
1352
- let hasVisible = false;
1353
- links.forEach(link => {
1354
- const matches = link.textContent.toLowerCase().includes(query);
1355
- link.style.display = matches ? '' : 'none';
1356
- if (matches) hasVisible = true;
1357
- });
1358
- group.style.display = (hasVisible || !query) ? '' : 'none';
1359
- });
1360
- });
1361
-
1362
- // ─── Mobile sidebar toggle ───
1363
- const sidebar = document.getElementById('sidebar');
1364
- const overlay = document.getElementById('sidebar-overlay');
1365
- const toggle = document.getElementById('sidebar-toggle');
1366
-
1367
- toggle.addEventListener('click', () => {
1368
- sidebar.classList.toggle('open');
1369
- overlay.classList.toggle('visible');
1370
- });
1371
- overlay.addEventListener('click', () => {
1372
- sidebar.classList.remove('open');
1373
- overlay.classList.remove('visible');
1374
- });
1375
- sidebarLinks.forEach(link => {
1376
- link.addEventListener('click', () => {
1377
- if (window.innerWidth <= 900) {
1378
- sidebar.classList.remove('open');
1379
- overlay.classList.remove('visible');
1380
- }
1381
- });
1382
- });
1383
-
1384
- // Initial scroll spy
1385
- updateScrollSpy();
1386
- </script>
1387
-
1388
- <!-- Theme toggle (shared with landing page) -->
1389
- <script>
1390
- (function initTheme() {
1391
- const toggle = document.getElementById('theme-toggle');
1392
- const stored = localStorage.getItem('rune-theme');
1393
- if (stored === 'light') {
1394
- document.documentElement.setAttribute('data-theme', 'light');
1395
- toggle.innerHTML = '&#9728;';
1396
- }
1397
- toggle.addEventListener('click', () => {
1398
- const isLight = document.documentElement.getAttribute('data-theme') === 'light';
1399
- if (isLight) {
1400
- document.documentElement.removeAttribute('data-theme');
1401
- toggle.innerHTML = '&#9790;';
1402
- localStorage.setItem('rune-theme', 'dark');
1403
- } else {
1404
- document.documentElement.setAttribute('data-theme', 'light');
1405
- toggle.innerHTML = '&#9728;';
1406
- localStorage.setItem('rune-theme', 'light');
1407
- }
1408
- });
1409
- })();
1410
- </script>
1411
-
1412
- <!-- Language Switcher (Google Translate via cookie) -->
1413
- <script>
1414
- (() => {
1415
- const btn = document.getElementById('lang-btn');
1416
- const menu = document.getElementById('lang-menu');
1417
- const wrap = document.getElementById('lang-dropdown');
1418
-
1419
- btn.addEventListener('click', () => {
1420
- const open = !menu.hidden;
1421
- menu.hidden = open;
1422
- btn.setAttribute('aria-expanded', String(!open));
1423
- });
1424
-
1425
- document.addEventListener('click', (e) => {
1426
- if (!wrap.contains(e.target)) menu.hidden = true;
1427
- });
1428
-
1429
- menu.addEventListener('click', (e) => {
1430
- const lang = e.target.dataset.lang;
1431
- if (lang === undefined) return;
1432
- menu.hidden = true;
1433
- if (!lang) {
1434
- document.cookie = 'googtrans=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/';
1435
- document.cookie = 'googtrans=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/; domain=.' + location.hostname;
1436
- location.reload();
1437
- return;
1438
- }
1439
- document.cookie = 'googtrans=/en/' + lang + '; path=/';
1440
- document.cookie = 'googtrans=/en/' + lang + '; path=/; domain=.' + location.hostname;
1441
- location.reload();
1442
- });
1443
- })();
1444
- </script>
1445
- <script src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>
1446
- <script>function googleTranslateElementInit() { new google.translate.TranslateElement({ pageLanguage: 'en', autoDisplay: false }, '_gt_dummy'); }</script>
1447
- <div id="_gt_dummy" style="display:none"></div>
1448
-
1449
- </body>
1450
- </html>