@rune-kit/rune 2.8.0 → 2.11.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 (287) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +68 -34
  3. package/agents/adversary.md +27 -0
  4. package/agents/architect.md +19 -29
  5. package/agents/asset-creator.md +18 -4
  6. package/agents/audit.md +25 -4
  7. package/agents/autopsy.md +19 -4
  8. package/agents/ba.md +35 -0
  9. package/agents/brainstorm.md +31 -4
  10. package/agents/browser-pilot.md +21 -4
  11. package/agents/coder.md +21 -29
  12. package/agents/completion-gate.md +20 -4
  13. package/agents/constraint-check.md +18 -4
  14. package/agents/context-engine.md +22 -4
  15. package/agents/context-pack.md +32 -0
  16. package/agents/cook.md +41 -4
  17. package/agents/db.md +19 -4
  18. package/agents/debug.md +33 -4
  19. package/agents/dependency-doctor.md +20 -4
  20. package/agents/deploy.md +27 -4
  21. package/agents/design.md +22 -4
  22. package/agents/doc-processor.md +27 -0
  23. package/agents/docs-seeker.md +19 -4
  24. package/agents/docs.md +31 -0
  25. package/agents/fix.md +37 -4
  26. package/agents/git.md +29 -0
  27. package/agents/hallucination-guard.md +20 -4
  28. package/agents/incident.md +21 -4
  29. package/agents/integrity-check.md +18 -4
  30. package/agents/journal.md +19 -4
  31. package/agents/launch.md +32 -4
  32. package/agents/logic-guardian.md +26 -11
  33. package/agents/marketing.md +23 -4
  34. package/agents/mcp-builder.md +26 -0
  35. package/agents/neural-memory.md +30 -0
  36. package/agents/onboard.md +22 -4
  37. package/agents/perf.md +21 -4
  38. package/agents/plan.md +29 -4
  39. package/agents/preflight.md +22 -4
  40. package/agents/problem-solver.md +20 -4
  41. package/agents/rescue.md +23 -4
  42. package/agents/research.md +19 -4
  43. package/agents/researcher.md +19 -29
  44. package/agents/retro.md +32 -0
  45. package/agents/review-intake.md +20 -4
  46. package/agents/review.md +32 -4
  47. package/agents/reviewer.md +20 -28
  48. package/agents/safeguard.md +19 -4
  49. package/agents/sast.md +18 -4
  50. package/agents/scaffold.md +41 -0
  51. package/agents/scanner.md +19 -28
  52. package/agents/scope-guard.md +18 -4
  53. package/agents/scout.md +23 -4
  54. package/agents/sentinel-env.md +26 -0
  55. package/agents/sentinel.md +33 -4
  56. package/agents/sequential-thinking.md +20 -4
  57. package/agents/session-bridge.md +24 -4
  58. package/agents/skill-forge.md +22 -4
  59. package/agents/skill-router.md +26 -4
  60. package/agents/slides.md +24 -0
  61. package/agents/surgeon.md +19 -4
  62. package/agents/team.md +30 -4
  63. package/agents/test.md +36 -4
  64. package/agents/trend-scout.md +17 -4
  65. package/agents/verification.md +20 -4
  66. package/agents/video-creator.md +20 -4
  67. package/agents/watchdog.md +19 -4
  68. package/agents/worktree.md +17 -4
  69. package/commands/rune.md +168 -168
  70. package/compiler/__tests__/analytics.test.js +370 -0
  71. package/compiler/adapters/openclaw.js +2 -2
  72. package/compiler/analytics.js +385 -0
  73. package/compiler/bin/rune.js +68 -2
  74. package/compiler/dashboard.js +883 -0
  75. package/compiler/transforms/branding.js +1 -1
  76. package/contexts/dev.md +34 -34
  77. package/contexts/research.md +43 -43
  78. package/contexts/review.md +55 -55
  79. package/extensions/ai-ml/PACK.md +88 -88
  80. package/extensions/ai-ml/skills/ai-agents.md +172 -172
  81. package/extensions/ai-ml/skills/code-sandbox.md +187 -187
  82. package/extensions/ai-ml/skills/deep-research.md +146 -146
  83. package/extensions/ai-ml/skills/embedding-search.md +66 -66
  84. package/extensions/ai-ml/skills/fine-tuning-guide.md +74 -74
  85. package/extensions/ai-ml/skills/llm-architect.md +125 -125
  86. package/extensions/ai-ml/skills/llm-integration.md +64 -64
  87. package/extensions/ai-ml/skills/prompt-patterns.md +72 -72
  88. package/extensions/ai-ml/skills/rag-patterns.md +66 -66
  89. package/extensions/ai-ml/skills/web-extraction.md +114 -114
  90. package/extensions/analytics/PACK.md +92 -92
  91. package/extensions/analytics/skills/ab-testing.md +72 -72
  92. package/extensions/analytics/skills/dashboard-patterns.md +83 -83
  93. package/extensions/analytics/skills/data-validation.md +68 -68
  94. package/extensions/analytics/skills/funnel-analysis.md +81 -81
  95. package/extensions/analytics/skills/sql-patterns.md +57 -57
  96. package/extensions/analytics/skills/statistical-analysis.md +79 -79
  97. package/extensions/analytics/skills/tracking-setup.md +71 -71
  98. package/extensions/backend/PACK.md +104 -104
  99. package/extensions/backend/skills/api-patterns.md +84 -84
  100. package/extensions/backend/skills/async-pipeline.md +193 -193
  101. package/extensions/backend/skills/auth-patterns.md +97 -97
  102. package/extensions/backend/skills/background-jobs.md +133 -133
  103. package/extensions/backend/skills/caching-patterns.md +108 -108
  104. package/extensions/backend/skills/cli-generation.md +133 -133
  105. package/extensions/backend/skills/database-patterns.md +87 -87
  106. package/extensions/backend/skills/middleware-patterns.md +104 -104
  107. package/extensions/chrome-ext/PACK.md +93 -93
  108. package/extensions/chrome-ext/skills/cws-preflight.md +143 -143
  109. package/extensions/chrome-ext/skills/cws-publish.md +104 -104
  110. package/extensions/chrome-ext/skills/ext-ai-integration.md +251 -251
  111. package/extensions/chrome-ext/skills/ext-messaging.md +139 -139
  112. package/extensions/chrome-ext/skills/ext-storage.md +133 -133
  113. package/extensions/chrome-ext/skills/mv3-scaffold.md +164 -164
  114. package/extensions/content/PACK.md +96 -96
  115. package/extensions/content/skills/blog-patterns.md +88 -88
  116. package/extensions/content/skills/cms-integration.md +131 -131
  117. package/extensions/content/skills/content-scoring.md +107 -107
  118. package/extensions/content/skills/i18n.md +83 -83
  119. package/extensions/content/skills/mdx-authoring.md +137 -137
  120. package/extensions/content/skills/reference.md +1014 -1014
  121. package/extensions/content/skills/seo-patterns.md +67 -67
  122. package/extensions/content/skills/video-repurpose.md +153 -153
  123. package/extensions/devops/PACK.md +101 -101
  124. package/extensions/devops/skills/chaos-testing.md +67 -67
  125. package/extensions/devops/skills/ci-cd.md +75 -75
  126. package/extensions/devops/skills/docker.md +58 -58
  127. package/extensions/devops/skills/edge-serverless.md +163 -163
  128. package/extensions/devops/skills/infra-as-code.md +158 -158
  129. package/extensions/devops/skills/kubernetes.md +110 -110
  130. package/extensions/devops/skills/monitoring.md +57 -57
  131. package/extensions/devops/skills/server-setup.md +64 -64
  132. package/extensions/devops/skills/ssl-domain.md +42 -42
  133. package/extensions/ecommerce/PACK.md +116 -116
  134. package/extensions/ecommerce/skills/cart-system.md +79 -79
  135. package/extensions/ecommerce/skills/inventory-mgmt.md +102 -102
  136. package/extensions/ecommerce/skills/order-management.md +126 -126
  137. package/extensions/ecommerce/skills/payment-integration.md +472 -472
  138. package/extensions/ecommerce/skills/shopify-dev.md +69 -69
  139. package/extensions/ecommerce/skills/subscription-billing.md +93 -93
  140. package/extensions/ecommerce/skills/tax-compliance.md +117 -117
  141. package/extensions/gamedev/PACK.md +142 -142
  142. package/extensions/gamedev/skills/asset-pipeline.md +74 -74
  143. package/extensions/gamedev/skills/audio-system.md +129 -129
  144. package/extensions/gamedev/skills/camera-system.md +87 -87
  145. package/extensions/gamedev/skills/ecs.md +98 -98
  146. package/extensions/gamedev/skills/game-loops.md +72 -72
  147. package/extensions/gamedev/skills/input-system.md +199 -199
  148. package/extensions/gamedev/skills/multiplayer.md +180 -180
  149. package/extensions/gamedev/skills/particles.md +105 -105
  150. package/extensions/gamedev/skills/physics-engine.md +89 -89
  151. package/extensions/gamedev/skills/scene-management.md +146 -146
  152. package/extensions/gamedev/skills/threejs-patterns.md +90 -90
  153. package/extensions/gamedev/skills/webgl.md +71 -71
  154. package/extensions/mobile/PACK.md +106 -106
  155. package/extensions/mobile/skills/app-store-connect.md +152 -152
  156. package/extensions/mobile/skills/app-store-prep.md +66 -66
  157. package/extensions/mobile/skills/deep-linking.md +109 -109
  158. package/extensions/mobile/skills/flutter.md +60 -60
  159. package/extensions/mobile/skills/ios-build-pipeline.md +142 -142
  160. package/extensions/mobile/skills/native-bridge.md +66 -66
  161. package/extensions/mobile/skills/ota-updates.md +97 -97
  162. package/extensions/mobile/skills/push-notifications.md +111 -111
  163. package/extensions/mobile/skills/react-native.md +82 -82
  164. package/extensions/saas/PACK.md +116 -116
  165. package/extensions/saas/skills/billing-integration.md +200 -200
  166. package/extensions/saas/skills/feature-flags.md +130 -130
  167. package/extensions/saas/skills/multi-tenant.md +103 -103
  168. package/extensions/saas/skills/onboarding-flow.md +139 -139
  169. package/extensions/saas/skills/subscription-flow.md +95 -95
  170. package/extensions/saas/skills/team-management.md +144 -144
  171. package/extensions/security/PACK.md +99 -99
  172. package/extensions/security/skills/api-security.md +140 -140
  173. package/extensions/security/skills/compliance.md +68 -68
  174. package/extensions/security/skills/owasp-audit.md +64 -64
  175. package/extensions/security/skills/pentest-patterns.md +77 -77
  176. package/extensions/security/skills/secret-mgmt.md +65 -65
  177. package/extensions/security/skills/supply-chain.md +65 -65
  178. package/extensions/trading/PACK.md +80 -80
  179. package/extensions/trading/skills/chart-components.md +55 -55
  180. package/extensions/trading/skills/experiment-loop.md +125 -125
  181. package/extensions/trading/skills/fintech-patterns.md +47 -47
  182. package/extensions/trading/skills/indicator-library.md +58 -58
  183. package/extensions/trading/skills/quant-analysis.md +111 -111
  184. package/extensions/trading/skills/realtime-data.md +58 -58
  185. package/extensions/trading/skills/trade-logic.md +104 -104
  186. package/extensions/ui/PACK.md +130 -130
  187. package/extensions/ui/skills/a11y-audit.md +91 -91
  188. package/extensions/ui/skills/animation-patterns.md +127 -106
  189. package/extensions/ui/skills/component-patterns.md +100 -75
  190. package/extensions/ui/skills/design-decision.md +108 -108
  191. package/extensions/ui/skills/design-system.md +68 -68
  192. package/extensions/ui/skills/landing-patterns.md +155 -155
  193. package/extensions/ui/skills/palette-picker.md +173 -173
  194. package/extensions/ui/skills/react-health.md +90 -90
  195. package/extensions/ui/skills/type-system.md +125 -125
  196. package/extensions/ui/skills/web-vitals.md +153 -153
  197. package/extensions/zalo/PACK.md +145 -145
  198. package/extensions/zalo/skills/zalo-oa-mcp.md +317 -317
  199. package/extensions/zalo/skills/zalo-oa-messaging.md +429 -429
  200. package/extensions/zalo/skills/zalo-oa-setup.md +236 -236
  201. package/extensions/zalo/skills/zalo-oa-webhook.md +189 -189
  202. package/extensions/zalo/skills/zalo-personal-messaging.md +194 -194
  203. package/extensions/zalo/skills/zalo-personal-setup.md +153 -153
  204. package/extensions/zalo/skills/zalo-rate-guard.md +219 -219
  205. package/hooks/auto-format/index.cjs +48 -48
  206. package/hooks/context-watch/index.cjs +95 -68
  207. package/hooks/hooks.json +111 -111
  208. package/hooks/metrics-collector/index.cjs +86 -42
  209. package/hooks/post-session-reflect/index.cjs +189 -153
  210. package/hooks/pre-compact/index.cjs +95 -95
  211. package/hooks/run-hook.cmd +1 -1
  212. package/hooks/secrets-scan/index.cjs +100 -100
  213. package/hooks/session-start/index.cjs +71 -65
  214. package/hooks/typecheck/index.cjs +65 -65
  215. package/package.json +63 -63
  216. package/references/ui-pro-max-data/LICENSE-UI-PRO-MAX +21 -21
  217. package/references/ui-pro-max-data/charts.csv +26 -26
  218. package/references/ui-pro-max-data/colors.csv +161 -161
  219. package/references/ui-pro-max-data/styles.csv +68 -68
  220. package/references/ui-pro-max-data/typography.csv +74 -74
  221. package/references/ui-pro-max-data/ui-reasoning.csv +162 -162
  222. package/references/ui-pro-max-data/ux-guidelines.csv +99 -99
  223. package/skills/adversary/SKILL.md +283 -283
  224. package/skills/asset-creator/SKILL.md +157 -157
  225. package/skills/audit/SKILL.md +148 -2
  226. package/skills/autopsy/SKILL.md +335 -259
  227. package/skills/autopsy/references/repo-analysis-patterns.md +113 -0
  228. package/skills/ba/SKILL.md +72 -2
  229. package/skills/brainstorm/SKILL.md +342 -341
  230. package/skills/browser-pilot/SKILL.md +168 -168
  231. package/skills/constraint-check/SKILL.md +165 -165
  232. package/skills/context-engine/SKILL.md +404 -404
  233. package/skills/cook/SKILL.md +917 -834
  234. package/skills/cook/references/output-format.md +33 -0
  235. package/skills/db/SKILL.md +273 -272
  236. package/skills/debug/SKILL.md +465 -443
  237. package/skills/dependency-doctor/SKILL.md +265 -235
  238. package/skills/deploy/SKILL.md +274 -231
  239. package/skills/design/DESIGN-REFERENCE.md +365 -365
  240. package/skills/design/SKILL.md +589 -482
  241. package/skills/doc-processor/SKILL.md +254 -254
  242. package/skills/docs/SKILL.md +374 -373
  243. package/skills/docs-seeker/SKILL.md +177 -177
  244. package/skills/fix/SKILL.md +330 -308
  245. package/skills/git/SKILL.md +339 -339
  246. package/skills/graft/SKILL.md +352 -0
  247. package/skills/graft/references/challenge-framework.md +98 -0
  248. package/skills/graft/references/mode-decision.md +44 -0
  249. package/skills/hallucination-guard/SKILL.md +219 -219
  250. package/skills/incident/SKILL.md +254 -251
  251. package/skills/integrity-check/SKILL.md +169 -169
  252. package/skills/journal/SKILL.md +240 -238
  253. package/skills/launch/SKILL.md +344 -342
  254. package/skills/logic-guardian/SKILL.md +251 -251
  255. package/skills/marketing/SKILL.md +290 -245
  256. package/skills/mcp-builder/SKILL.md +425 -423
  257. package/skills/mcp-builder/references/auto-discovery-pattern.md +169 -0
  258. package/skills/neural-memory/SKILL.md +362 -362
  259. package/skills/onboard/SKILL.md +404 -403
  260. package/skills/perf/SKILL.md +346 -346
  261. package/skills/plan/SKILL.md +433 -370
  262. package/skills/plan/references/feature-map.md +84 -0
  263. package/skills/preflight/SKILL.md +415 -396
  264. package/skills/problem-solver/SKILL.md +380 -284
  265. package/skills/rescue/SKILL.md +474 -450
  266. package/skills/retro/SKILL.md +5 -1
  267. package/skills/review/SKILL.md +612 -535
  268. package/skills/review-intake/SKILL.md +249 -249
  269. package/skills/safeguard/SKILL.md +200 -200
  270. package/skills/sast/SKILL.md +190 -190
  271. package/skills/scaffold/SKILL.md +328 -286
  272. package/skills/scope-guard/SKILL.md +180 -162
  273. package/skills/scout/SKILL.md +263 -263
  274. package/skills/sentinel/SKILL.md +382 -353
  275. package/skills/sentinel-env/SKILL.md +254 -254
  276. package/skills/sequential-thinking/SKILL.md +234 -234
  277. package/skills/session-bridge/SKILL.md +543 -397
  278. package/skills/skill-forge/SKILL.md +581 -539
  279. package/skills/skill-router/{skill.md → SKILL.md} +30 -2
  280. package/skills/surgeon/SKILL.md +215 -215
  281. package/skills/team/SKILL.md +556 -514
  282. package/skills/test/SKILL.md +614 -587
  283. package/skills/trend-scout/SKILL.md +145 -145
  284. package/skills/verification/SKILL.md +326 -325
  285. package/skills/video-creator/SKILL.md +201 -201
  286. package/skills/watchdog/SKILL.md +168 -168
  287. package/skills/worktree/SKILL.md +140 -140
@@ -1,111 +1,111 @@
1
- ---
2
- name: "quant-analysis"
3
- pack: "@rune/trading"
4
- description: "Quantitative analysis patterns — portfolio metrics, risk calculations, statistical edge detection, Monte Carlo simulation, and position sizing models."
5
- model: sonnet
6
- tools: [Read, Edit, Write, Grep, Glob, Bash]
7
- ---
8
-
9
- # quant-analysis
10
-
11
- Quantitative analysis patterns — portfolio metrics, risk calculations, statistical edge detection, Monte Carlo simulation, and position sizing models.
12
-
13
- #### Workflow
14
-
15
- **Step 1 — Define analysis scope**
16
- Determine what the user needs: portfolio-level metrics (Sharpe, Sortino, max drawdown, VaR), strategy-level analysis (win rate, profit factor, expectancy, risk-of-ruin), or position sizing (Kelly criterion, fixed fractional, volatility-adjusted). Load trade history from data source (CSV, database query, API response).
17
-
18
- **Step 2 — Calculate core metrics**
19
- For portfolio analysis:
20
- - **Sharpe Ratio**: (mean return - risk-free rate) / std(returns). Annualize with √252.
21
- - **Sortino Ratio**: (mean return - risk-free rate) / downside_std. Only penalizes downside volatility.
22
- - **Max Drawdown**: Largest peak-to-trough decline. Include recovery time.
23
- - **Value at Risk (VaR)**: 95th/99th percentile loss using historical simulation or parametric method.
24
- - **Calmar Ratio**: Annualized return / max drawdown. > 1.0 = good risk-adjusted return.
25
-
26
- For strategy analysis:
27
- - **Expectancy**: (win_rate × avg_win) - (loss_rate × avg_loss). Must be positive.
28
- - **Profit Factor**: gross_profit / gross_loss. > 1.5 = viable, > 2.0 = strong.
29
- - **Risk of Ruin**: probability of losing X% of capital given win rate and risk per trade.
30
-
31
- **Step 3 — Monte Carlo simulation**
32
- Run 10,000 random resamples of the trade sequence to estimate:
33
- - Probability of reaching profit target within N trades
34
- - Confidence interval for max drawdown (95th percentile)
35
- - Optimal position size that maximizes geometric growth (Kelly fraction)
36
-
37
- Emit results as structured data + visualization-ready format for `chart-components`.
38
-
39
- **Step 4 — Position sizing recommendation**
40
- Based on Monte Carlo results, recommend:
41
- - **Conservative**: Half-Kelly (50% of optimal Kelly fraction)
42
- - **Moderate**: Full Kelly
43
- - **Aggressive**: 1.5x Kelly (with warning about increased ruin probability)
44
-
45
- Save analysis to `.rune/trading/quant-analysis-<date>.md`.
46
-
47
- #### Example
48
-
49
- ```typescript
50
- import Decimal from 'decimal.js';
51
-
52
- interface TradeResult {
53
- pnl: Decimal;
54
- entryPrice: Decimal;
55
- exitPrice: Decimal;
56
- size: Decimal;
57
- duration: number; // minutes
58
- }
59
-
60
- interface QuantMetrics {
61
- totalTrades: number;
62
- winRate: Decimal;
63
- profitFactor: Decimal;
64
- expectancy: Decimal;
65
- sharpeRatio: Decimal;
66
- sortinoRatio: Decimal;
67
- maxDrawdown: Decimal;
68
- maxDrawdownDuration: number;
69
- calmarRatio: Decimal;
70
- valueAtRisk95: Decimal;
71
- kellyFraction: Decimal;
72
- riskOfRuin: Decimal;
73
- }
74
-
75
- function calculateExpectancy(trades: TradeResult[]): Decimal {
76
- const wins = trades.filter(t => t.pnl.gt(0));
77
- const losses = trades.filter(t => t.pnl.lte(0));
78
- const winRate = new Decimal(wins.length).div(trades.length);
79
- const avgWin = wins.length > 0
80
- ? wins.reduce((sum, t) => sum.plus(t.pnl), new Decimal(0)).div(wins.length)
81
- : new Decimal(0);
82
- const avgLoss = losses.length > 0
83
- ? losses.reduce((sum, t) => sum.plus(t.pnl.abs()), new Decimal(0)).div(losses.length)
84
- : new Decimal(0);
85
- return winRate.mul(avgWin).minus(new Decimal(1).minus(winRate).mul(avgLoss));
86
- }
87
-
88
- function kellyFraction(winRate: Decimal, avgWinLossRatio: Decimal): Decimal {
89
- // Kelly: f* = (p * b - q) / b where p=winRate, q=1-p, b=avgWin/avgLoss
90
- const q = new Decimal(1).minus(winRate);
91
- return winRate.mul(avgWinLossRatio).minus(q).div(avgWinLossRatio);
92
- }
93
-
94
- // Monte Carlo: resample trades 10,000 times
95
- function monteCarloDrawdown(trades: TradeResult[], simulations = 10000): Decimal {
96
- const drawdowns: Decimal[] = [];
97
- for (let i = 0; i < simulations; i++) {
98
- const shuffled = [...trades].sort(() => Math.random() - 0.5);
99
- let peak = new Decimal(0), maxDd = new Decimal(0), equity = new Decimal(0);
100
- for (const t of shuffled) {
101
- equity = equity.plus(t.pnl);
102
- if (equity.gt(peak)) peak = equity;
103
- const dd = peak.minus(equity).div(peak.gt(0) ? peak : new Decimal(1));
104
- if (dd.gt(maxDd)) maxDd = dd;
105
- }
106
- drawdowns.push(maxDd);
107
- }
108
- drawdowns.sort((a, b) => a.cmp(b));
109
- return drawdowns[Math.floor(simulations * 0.95)]; // 95th percentile
110
- }
111
- ```
1
+ ---
2
+ name: "quant-analysis"
3
+ pack: "@rune/trading"
4
+ description: "Quantitative analysis patterns — portfolio metrics, risk calculations, statistical edge detection, Monte Carlo simulation, and position sizing models."
5
+ model: sonnet
6
+ tools: [Read, Edit, Write, Grep, Glob, Bash]
7
+ ---
8
+
9
+ # quant-analysis
10
+
11
+ Quantitative analysis patterns — portfolio metrics, risk calculations, statistical edge detection, Monte Carlo simulation, and position sizing models.
12
+
13
+ #### Workflow
14
+
15
+ **Step 1 — Define analysis scope**
16
+ Determine what the user needs: portfolio-level metrics (Sharpe, Sortino, max drawdown, VaR), strategy-level analysis (win rate, profit factor, expectancy, risk-of-ruin), or position sizing (Kelly criterion, fixed fractional, volatility-adjusted). Load trade history from data source (CSV, database query, API response).
17
+
18
+ **Step 2 — Calculate core metrics**
19
+ For portfolio analysis:
20
+ - **Sharpe Ratio**: (mean return - risk-free rate) / std(returns). Annualize with √252.
21
+ - **Sortino Ratio**: (mean return - risk-free rate) / downside_std. Only penalizes downside volatility.
22
+ - **Max Drawdown**: Largest peak-to-trough decline. Include recovery time.
23
+ - **Value at Risk (VaR)**: 95th/99th percentile loss using historical simulation or parametric method.
24
+ - **Calmar Ratio**: Annualized return / max drawdown. > 1.0 = good risk-adjusted return.
25
+
26
+ For strategy analysis:
27
+ - **Expectancy**: (win_rate × avg_win) - (loss_rate × avg_loss). Must be positive.
28
+ - **Profit Factor**: gross_profit / gross_loss. > 1.5 = viable, > 2.0 = strong.
29
+ - **Risk of Ruin**: probability of losing X% of capital given win rate and risk per trade.
30
+
31
+ **Step 3 — Monte Carlo simulation**
32
+ Run 10,000 random resamples of the trade sequence to estimate:
33
+ - Probability of reaching profit target within N trades
34
+ - Confidence interval for max drawdown (95th percentile)
35
+ - Optimal position size that maximizes geometric growth (Kelly fraction)
36
+
37
+ Emit results as structured data + visualization-ready format for `chart-components`.
38
+
39
+ **Step 4 — Position sizing recommendation**
40
+ Based on Monte Carlo results, recommend:
41
+ - **Conservative**: Half-Kelly (50% of optimal Kelly fraction)
42
+ - **Moderate**: Full Kelly
43
+ - **Aggressive**: 1.5x Kelly (with warning about increased ruin probability)
44
+
45
+ Save analysis to `.rune/trading/quant-analysis-<date>.md`.
46
+
47
+ #### Example
48
+
49
+ ```typescript
50
+ import Decimal from 'decimal.js';
51
+
52
+ interface TradeResult {
53
+ pnl: Decimal;
54
+ entryPrice: Decimal;
55
+ exitPrice: Decimal;
56
+ size: Decimal;
57
+ duration: number; // minutes
58
+ }
59
+
60
+ interface QuantMetrics {
61
+ totalTrades: number;
62
+ winRate: Decimal;
63
+ profitFactor: Decimal;
64
+ expectancy: Decimal;
65
+ sharpeRatio: Decimal;
66
+ sortinoRatio: Decimal;
67
+ maxDrawdown: Decimal;
68
+ maxDrawdownDuration: number;
69
+ calmarRatio: Decimal;
70
+ valueAtRisk95: Decimal;
71
+ kellyFraction: Decimal;
72
+ riskOfRuin: Decimal;
73
+ }
74
+
75
+ function calculateExpectancy(trades: TradeResult[]): Decimal {
76
+ const wins = trades.filter(t => t.pnl.gt(0));
77
+ const losses = trades.filter(t => t.pnl.lte(0));
78
+ const winRate = new Decimal(wins.length).div(trades.length);
79
+ const avgWin = wins.length > 0
80
+ ? wins.reduce((sum, t) => sum.plus(t.pnl), new Decimal(0)).div(wins.length)
81
+ : new Decimal(0);
82
+ const avgLoss = losses.length > 0
83
+ ? losses.reduce((sum, t) => sum.plus(t.pnl.abs()), new Decimal(0)).div(losses.length)
84
+ : new Decimal(0);
85
+ return winRate.mul(avgWin).minus(new Decimal(1).minus(winRate).mul(avgLoss));
86
+ }
87
+
88
+ function kellyFraction(winRate: Decimal, avgWinLossRatio: Decimal): Decimal {
89
+ // Kelly: f* = (p * b - q) / b where p=winRate, q=1-p, b=avgWin/avgLoss
90
+ const q = new Decimal(1).minus(winRate);
91
+ return winRate.mul(avgWinLossRatio).minus(q).div(avgWinLossRatio);
92
+ }
93
+
94
+ // Monte Carlo: resample trades 10,000 times
95
+ function monteCarloDrawdown(trades: TradeResult[], simulations = 10000): Decimal {
96
+ const drawdowns: Decimal[] = [];
97
+ for (let i = 0; i < simulations; i++) {
98
+ const shuffled = [...trades].sort(() => Math.random() - 0.5);
99
+ let peak = new Decimal(0), maxDd = new Decimal(0), equity = new Decimal(0);
100
+ for (const t of shuffled) {
101
+ equity = equity.plus(t.pnl);
102
+ if (equity.gt(peak)) peak = equity;
103
+ const dd = peak.minus(equity).div(peak.gt(0) ? peak : new Decimal(1));
104
+ if (dd.gt(maxDd)) maxDd = dd;
105
+ }
106
+ drawdowns.push(maxDd);
107
+ }
108
+ drawdowns.sort((a, b) => a.cmp(b));
109
+ return drawdowns[Math.floor(simulations * 0.95)]; // 95th percentile
110
+ }
111
+ ```
@@ -1,58 +1,58 @@
1
- ---
2
- name: "realtime-data"
3
- pack: "@rune/trading"
4
- description: "Real-time data architecture — WebSocket lifecycle management, auto-reconnect with exponential backoff, event normalization, rate limiting, and TanStack Query cache invalidation."
5
- model: sonnet
6
- tools: [Read, Edit, Write, Grep, Glob, Bash]
7
- ---
8
-
9
- # realtime-data
10
-
11
- Real-time data architecture — WebSocket lifecycle management, auto-reconnect with exponential backoff, event normalization, rate limiting, and TanStack Query cache invalidation.
12
-
13
- #### Workflow
14
-
15
- **Step 1 — WebSocket setup and event normalization**
16
- Use `Read` on existing data-fetching files to understand current polling or REST patterns. Replace with a WebSocket client class that emits typed, normalized events regardless of upstream message format. Define a `NormalizedTick` interface at the boundary.
17
-
18
- **Step 2 — Implement exponential backoff reconnect**
19
- In the WebSocket class, add a reconnect handler: attempt 1 after 1 s, attempt 2 after 2 s, attempt 3 after 4 s, cap at 30 s. Use `Bash` to run unit tests covering disconnect and reconnect sequences. Track `reconnectAttempts` in state; reset to 0 on successful open.
20
-
21
- **Step 3 — Wire to TanStack Query cache invalidation**
22
- On each normalized event received, call `queryClient.setQueryData(['ticker', symbol], tick)` for optimistic updates or `queryClient.invalidateQueries(['orderbook', symbol])` for full refresh. Use `Grep` to confirm no stale `setInterval` polling remains alongside the new WebSocket feed.
23
-
24
- #### Example
25
-
26
- ```typescript
27
- class TradingWebSocket {
28
- private ws: WebSocket | null = null;
29
- private reconnectAttempts = 0;
30
- private readonly MAX_DELAY_MS = 30_000;
31
-
32
- connect(url: string, onTick: (tick: NormalizedTick) => void): void {
33
- this.ws = new WebSocket(url);
34
-
35
- this.ws.onmessage = (event) => {
36
- const raw = JSON.parse(event.data as string);
37
- onTick(this.normalize(raw));
38
- };
39
-
40
- this.ws.onclose = () => {
41
- const delay = Math.min(
42
- 1000 * 2 ** this.reconnectAttempts,
43
- this.MAX_DELAY_MS,
44
- );
45
- this.reconnectAttempts += 1;
46
- setTimeout(() => this.connect(url, onTick), delay);
47
- };
48
-
49
- this.ws.onopen = () => { this.reconnectAttempts = 0; };
50
- }
51
-
52
- private normalize(raw: unknown): NormalizedTick {
53
- // map exchange-specific shape to shared interface
54
- const r = raw as Record<string, unknown>;
55
- return { symbol: String(r['s']), price: String(r['p']), ts: Date.now() };
56
- }
57
- }
58
- ```
1
+ ---
2
+ name: "realtime-data"
3
+ pack: "@rune/trading"
4
+ description: "Real-time data architecture — WebSocket lifecycle management, auto-reconnect with exponential backoff, event normalization, rate limiting, and TanStack Query cache invalidation."
5
+ model: sonnet
6
+ tools: [Read, Edit, Write, Grep, Glob, Bash]
7
+ ---
8
+
9
+ # realtime-data
10
+
11
+ Real-time data architecture — WebSocket lifecycle management, auto-reconnect with exponential backoff, event normalization, rate limiting, and TanStack Query cache invalidation.
12
+
13
+ #### Workflow
14
+
15
+ **Step 1 — WebSocket setup and event normalization**
16
+ Use `Read` on existing data-fetching files to understand current polling or REST patterns. Replace with a WebSocket client class that emits typed, normalized events regardless of upstream message format. Define a `NormalizedTick` interface at the boundary.
17
+
18
+ **Step 2 — Implement exponential backoff reconnect**
19
+ In the WebSocket class, add a reconnect handler: attempt 1 after 1 s, attempt 2 after 2 s, attempt 3 after 4 s, cap at 30 s. Use `Bash` to run unit tests covering disconnect and reconnect sequences. Track `reconnectAttempts` in state; reset to 0 on successful open.
20
+
21
+ **Step 3 — Wire to TanStack Query cache invalidation**
22
+ On each normalized event received, call `queryClient.setQueryData(['ticker', symbol], tick)` for optimistic updates or `queryClient.invalidateQueries(['orderbook', symbol])` for full refresh. Use `Grep` to confirm no stale `setInterval` polling remains alongside the new WebSocket feed.
23
+
24
+ #### Example
25
+
26
+ ```typescript
27
+ class TradingWebSocket {
28
+ private ws: WebSocket | null = null;
29
+ private reconnectAttempts = 0;
30
+ private readonly MAX_DELAY_MS = 30_000;
31
+
32
+ connect(url: string, onTick: (tick: NormalizedTick) => void): void {
33
+ this.ws = new WebSocket(url);
34
+
35
+ this.ws.onmessage = (event) => {
36
+ const raw = JSON.parse(event.data as string);
37
+ onTick(this.normalize(raw));
38
+ };
39
+
40
+ this.ws.onclose = () => {
41
+ const delay = Math.min(
42
+ 1000 * 2 ** this.reconnectAttempts,
43
+ this.MAX_DELAY_MS,
44
+ );
45
+ this.reconnectAttempts += 1;
46
+ setTimeout(() => this.connect(url, onTick), delay);
47
+ };
48
+
49
+ this.ws.onopen = () => { this.reconnectAttempts = 0; };
50
+ }
51
+
52
+ private normalize(raw: unknown): NormalizedTick {
53
+ // map exchange-specific shape to shared interface
54
+ const r = raw as Record<string, unknown>;
55
+ return { symbol: String(r['s']), price: String(r['p']), ts: Date.now() };
56
+ }
57
+ }
58
+ ```
@@ -1,104 +1,104 @@
1
- ---
2
- name: "trade-logic"
3
- pack: "@rune/trading"
4
- description: "Trading logic preservation and reasoning — entry/exit spec management, indicator parameter registry, strategy state tracking, and backtest result linkage. Prevents the #1 trading bot failure: AI sessions overwriting working logic without understanding it."
5
- model: sonnet
6
- tools: [Read, Edit, Write, Grep, Glob, Bash]
7
- ---
8
-
9
- # trade-logic
10
-
11
- Trading logic preservation and reasoning — entry/exit spec management, indicator parameter registry, strategy state tracking, and backtest result linkage. Prevents the #1 trading bot failure: AI sessions overwriting working logic without understanding it.
12
-
13
- #### Workflow
14
-
15
- **Step 1 — Load trading logic context**
16
- Check if `logic-guardian` (L2) has a manifest loaded. If `.rune/logic-manifest.json` exists, read it and extract trading-specific components (ENTRY_LOGIC, EXIT_LOGIC, FILTER, INDICATOR). If no manifest exists, trigger `logic-guardian` Phase 3 to generate one with trading-aware scanning.
17
-
18
- Trading-specific file patterns to scan:
19
- - `**/scenarios/**`, `**/signals/**`, `**/strategies/**` — entry/exit logic
20
- - `**/trailing/**`, `**/exit/**`, `**/stoploss/**` — exit engine components
21
- - `**/indicators/**`, `**/core/indicators*` — technical indicator implementations
22
- - `**/backtest/**`, `**/engine*` — backtesting mirrors of production logic
23
- - `**/config/settings*`, `**/config/token*` — parameter source of truth
24
-
25
- **Step 2 — Build trading logic spec**
26
- For each trading component, extract a structured spec:
27
-
28
- ```
29
- COMPONENT: RSI Entry Detector
30
- TYPE: ENTRY_LOGIC
31
- STATUS: ACTIVE (production)
32
- LAYERS: [which layer in the trading pipeline this belongs to]
33
-
34
- ENTRY CONDITIONS:
35
- 1. TrendPass ticket exists with available fires
36
- 2. RSI_MA crosses threshold (65 LONG / 35 SHORT)
37
- 3. Previous RSI in entry zone (30-55 LONG / 45-70 SHORT)
38
- 4. RSI crosses RSI_MA + 40% TF filter + EMA filter
39
-
40
- PARAMETERS:
41
- - rsi_period: 7 (source: settings.py)
42
- - challenge_threshold_long: 65 (source: settings.py)
43
- - entry_zone_long: [30, 55] (source: settings.py)
44
-
45
- DEPENDENCIES: trend_pass.tracker, core.indicators
46
- MIRROR: backtest/engine.py (must stay in sync with production)
47
- ```
48
-
49
- **Step 3 — Enforce production-backtest sync**
50
- For trading bots, production logic and backtest logic MUST be mirrors. Scan for:
51
- - Production file: `src/worker/production_worker.py` or equivalent
52
- - Backtest file: `backtest/engine.py` or equivalent
53
- - Compare entry/exit function signatures and conditional branches
54
- - Flag any divergence: "Production uses condition X but backtest doesn't"
55
-
56
- **Step 4 — Parameter registry**
57
- Build a parameter registry linking every configurable threshold to its source:
58
- - Single source of truth file (e.g., `settings.py`)
59
- - Per-token overrides (e.g., `token_config.py`, `final_config.json`)
60
- - Scan for hardcoded magic numbers in logic files that should be in config
61
- - Flag: "Hardcoded value 65 in detect.py:L42 — should reference settings.CHALLENGE_THRESHOLD_LONG"
62
-
63
- **Step 5 — Strategy state machine documentation**
64
- If the trading logic uses a multi-step state machine (e.g., 3-step RSI entry):
65
- - Document each state and its transition conditions
66
- - Generate a state diagram in text format
67
- - Save to manifest as `state_machine` field on the component
68
-
69
- ```
70
- State Machine: RSI Entry
71
- [IDLE] --ticket_exists--> [STEP1_CHALLENGE]
72
- [STEP1_CHALLENGE] --rsi_ma_crosses_threshold--> [STEP2_ZONE_CHECK]
73
- [STEP2_ZONE_CHECK] --prev_rsi_in_zone--> [STEP3_ENTRY_POINT]
74
- [STEP3_ENTRY_POINT] --rsi_crosses_rsi_ma + filters--> [SIGNAL_EMITTED]
75
- [any_step] --ticket_expired--> [IDLE]
76
- ```
77
-
78
- **Step 6 — Backtest result linkage**
79
- Link logic components to their backtest performance:
80
- - Scan `backtest/scan_results/` or equivalent for result files
81
- - Associate each strategy variant with its performance metrics
82
- - Record in manifest: "RSI Entry v5 with EMA Follow: $20,445 over 6mo backtest"
83
- - Flag if logic was modified AFTER the latest backtest: "Logic changed since last backtest — results may be invalid"
84
-
85
- #### Example
86
-
87
- ```python
88
- # trade-logic generates this spec from code analysis:
89
- # COMPONENT: EMA Follow Exit
90
- # TYPE: EXIT_LOGIC
91
- # STATUS: ACTIVE
92
- # BUG_HISTORY: 2026-02-22 fixed wick detection (was using close, now uses candle_low/high)
93
- #
94
- # EXIT CONDITION:
95
- # if candle_wick crosses EMA120 -> exit position
96
- # (NOT candle_close — this was the V4 bug)
97
- #
98
- # PARAMETERS:
99
- # ema_period: 120 (source: settings.py)
100
- # use_wick: True (source: settings.py, changed from False in V4)
101
- #
102
- # MIRROR: backtest/exit_checker.py:check_ema_follow()
103
- # BACKTEST: $22,481 (x2.0 adaptive variant, validated 2026-02-22)
104
- ```
1
+ ---
2
+ name: "trade-logic"
3
+ pack: "@rune/trading"
4
+ description: "Trading logic preservation and reasoning — entry/exit spec management, indicator parameter registry, strategy state tracking, and backtest result linkage. Prevents the #1 trading bot failure: AI sessions overwriting working logic without understanding it."
5
+ model: sonnet
6
+ tools: [Read, Edit, Write, Grep, Glob, Bash]
7
+ ---
8
+
9
+ # trade-logic
10
+
11
+ Trading logic preservation and reasoning — entry/exit spec management, indicator parameter registry, strategy state tracking, and backtest result linkage. Prevents the #1 trading bot failure: AI sessions overwriting working logic without understanding it.
12
+
13
+ #### Workflow
14
+
15
+ **Step 1 — Load trading logic context**
16
+ Check if `logic-guardian` (L2) has a manifest loaded. If `.rune/logic-manifest.json` exists, read it and extract trading-specific components (ENTRY_LOGIC, EXIT_LOGIC, FILTER, INDICATOR). If no manifest exists, trigger `logic-guardian` Phase 3 to generate one with trading-aware scanning.
17
+
18
+ Trading-specific file patterns to scan:
19
+ - `**/scenarios/**`, `**/signals/**`, `**/strategies/**` — entry/exit logic
20
+ - `**/trailing/**`, `**/exit/**`, `**/stoploss/**` — exit engine components
21
+ - `**/indicators/**`, `**/core/indicators*` — technical indicator implementations
22
+ - `**/backtest/**`, `**/engine*` — backtesting mirrors of production logic
23
+ - `**/config/settings*`, `**/config/token*` — parameter source of truth
24
+
25
+ **Step 2 — Build trading logic spec**
26
+ For each trading component, extract a structured spec:
27
+
28
+ ```
29
+ COMPONENT: RSI Entry Detector
30
+ TYPE: ENTRY_LOGIC
31
+ STATUS: ACTIVE (production)
32
+ LAYERS: [which layer in the trading pipeline this belongs to]
33
+
34
+ ENTRY CONDITIONS:
35
+ 1. TrendPass ticket exists with available fires
36
+ 2. RSI_MA crosses threshold (65 LONG / 35 SHORT)
37
+ 3. Previous RSI in entry zone (30-55 LONG / 45-70 SHORT)
38
+ 4. RSI crosses RSI_MA + 40% TF filter + EMA filter
39
+
40
+ PARAMETERS:
41
+ - rsi_period: 7 (source: settings.py)
42
+ - challenge_threshold_long: 65 (source: settings.py)
43
+ - entry_zone_long: [30, 55] (source: settings.py)
44
+
45
+ DEPENDENCIES: trend_pass.tracker, core.indicators
46
+ MIRROR: backtest/engine.py (must stay in sync with production)
47
+ ```
48
+
49
+ **Step 3 — Enforce production-backtest sync**
50
+ For trading bots, production logic and backtest logic MUST be mirrors. Scan for:
51
+ - Production file: `src/worker/production_worker.py` or equivalent
52
+ - Backtest file: `backtest/engine.py` or equivalent
53
+ - Compare entry/exit function signatures and conditional branches
54
+ - Flag any divergence: "Production uses condition X but backtest doesn't"
55
+
56
+ **Step 4 — Parameter registry**
57
+ Build a parameter registry linking every configurable threshold to its source:
58
+ - Single source of truth file (e.g., `settings.py`)
59
+ - Per-token overrides (e.g., `token_config.py`, `final_config.json`)
60
+ - Scan for hardcoded magic numbers in logic files that should be in config
61
+ - Flag: "Hardcoded value 65 in detect.py:L42 — should reference settings.CHALLENGE_THRESHOLD_LONG"
62
+
63
+ **Step 5 — Strategy state machine documentation**
64
+ If the trading logic uses a multi-step state machine (e.g., 3-step RSI entry):
65
+ - Document each state and its transition conditions
66
+ - Generate a state diagram in text format
67
+ - Save to manifest as `state_machine` field on the component
68
+
69
+ ```
70
+ State Machine: RSI Entry
71
+ [IDLE] --ticket_exists--> [STEP1_CHALLENGE]
72
+ [STEP1_CHALLENGE] --rsi_ma_crosses_threshold--> [STEP2_ZONE_CHECK]
73
+ [STEP2_ZONE_CHECK] --prev_rsi_in_zone--> [STEP3_ENTRY_POINT]
74
+ [STEP3_ENTRY_POINT] --rsi_crosses_rsi_ma + filters--> [SIGNAL_EMITTED]
75
+ [any_step] --ticket_expired--> [IDLE]
76
+ ```
77
+
78
+ **Step 6 — Backtest result linkage**
79
+ Link logic components to their backtest performance:
80
+ - Scan `backtest/scan_results/` or equivalent for result files
81
+ - Associate each strategy variant with its performance metrics
82
+ - Record in manifest: "RSI Entry v5 with EMA Follow: $20,445 over 6mo backtest"
83
+ - Flag if logic was modified AFTER the latest backtest: "Logic changed since last backtest — results may be invalid"
84
+
85
+ #### Example
86
+
87
+ ```python
88
+ # trade-logic generates this spec from code analysis:
89
+ # COMPONENT: EMA Follow Exit
90
+ # TYPE: EXIT_LOGIC
91
+ # STATUS: ACTIVE
92
+ # BUG_HISTORY: 2026-02-22 fixed wick detection (was using close, now uses candle_low/high)
93
+ #
94
+ # EXIT CONDITION:
95
+ # if candle_wick crosses EMA120 -> exit position
96
+ # (NOT candle_close — this was the V4 bug)
97
+ #
98
+ # PARAMETERS:
99
+ # ema_period: 120 (source: settings.py)
100
+ # use_wick: True (source: settings.py, changed from False in V4)
101
+ #
102
+ # MIRROR: backtest/exit_checker.py:check_ema_follow()
103
+ # BACKTEST: $22,481 (x2.0 adaptive variant, validated 2026-02-22)
104
+ ```