Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Run a historical backtest using npx neural-trader with Rust/NAPI engine (8-19x faster) and walk-forward validation; Ed25519-sign the result for paper→live tamper evidence (ADR-126 Phase 4)
.claude/skills/ruvnet-trader-backtest/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | 38% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 17% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 4% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 38% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 4% | 0% |
Run a historical backtest using the neural-trader Rust/NAPI engine, then Ed25519-sign the result so the paper→live promotion gate has cryptographic tamper evidence (ADR-126 Phase 4 + CWE-347 pattern).
Steps:
npm ls neural-trader 2>/dev/null || npm install --ignore-scripts neural-trader
mcp__plugin_ruflo-core_ruflo__memory_retrieve({ key: "strategy-STRATEGY_NAME", namespace: "trading-strategies" }) If not found, list available: mcp__plugin_ruflo-core_ruflo__memory_search({ query: "strategy", namespace: "trading-strategies", limit: 10 })
bash npx neural-trader --backtest --strategy <name> --symbol <TICKER> --period <range> --walk-forward For multi-indicator strategies: bash npx neural-trader --backtest --strategy multi-indicator --position-sizing kelly --symbol SPY --period 2020-2024
(strategyId, paramsHash) before storing the fresh one (ADR-125 lifecycle / ADR-126 Phase 2 — keep-newest semantics):mcp__plugin_ruflo-core_ruflo__memory_search({ query: "backtest STRATEGY paramsHash:PARAMS_HASH", namespace: "trading-backtests", limit: 10 })backtest-STRATEGY-* AND whose stored paramsHash equals the current run's hash, delete it: mcp__plugin_ruflo-core_ruflo__memory_delete({ key: "OLD_KEY", namespace: "trading-backtests" })MemoryConsolidator.dedup('keep-newest') background pass introduced in @claude-flow/memory@3.0.0-alpha.18 runs every 6h and will eventually converge. Doing it inline keeps memory_search results deterministic immediately after a re-run.)SignedBacktestArtifact body — { strategyId, paramsHash, dataRange: {from,to}, metrics, runsHash, generatedAt } — where paramsHash = sha256(canonical params JSON), runsHash = sha256(canonical runs array JSON), and generatedAt = new Date().toISOString().RUFLO_WITNESS_KEY_PATH env var — points to a JSON file with { "privateKey": "<hex>" }.verification/witness-key.json (the ADR-103 default path, if present).signBacktestArtifact(body, privateKeyHex) from plugins/ruflo-neural-trader/src/signed-artifact.mjs. The returned value is a SignedBacktestArtifact with schema, witnessPublicKey: "ed25519:<hex>", and witnessSignature: "<hex>" populated."[WARN] ruflo-neural-trader: no witness signing key found (RUFLO_WITNESS_KEY_PATH unset, verification/witness-key.json missing) — storing backtest artifact in UNSIGNED degraded mode. paper→live promotion will be refused by trader-cloud-backtest until a signed artifact replaces this one." — and store the body unsigned. NEVER silently fall back.trading-backtests namespace:mcp__plugin_ruflo-core_ruflo__memory_store({ key: "backtest-STRATEGY-TIMESTAMP", value: JSON.stringify(signedArtifact), namespace: "trading-backtests" }) The stored value contains witnessSignature + witnessPublicKey when signed; downstream consumers (trader-cloud-backtest) MUST call verifyBacktestArtifact(artifact, trustedPublicKey) before promoting any artifact to live.
mcp__plugin_ruflo-core_ruflo__agentdb_pattern-store({ pattern: "profitable-STRATEGY_TYPE", data: "PARAMS_AND_RESULTS" })
mcp__plugin_ruflo-core_ruflo__neural_train({ patternType: "trading-strategy", epochs: 10 })
{ "privateKey": "<64-hex-chars>" } in a JSON file referenced by RUFLO_WITNESS_KEY_PATH. Keep it OUT of the repo. For local development, generate one once with node -e "import('@noble/ed25519').then(async ed=>{const sk=crypto.getRandomValues(new Uint8Array(32));console.log(Buffer.from(sk).toString('hex'))})" and write it to ~/.ruflo/witness-key.json.trustedPublicKey to verifyBacktestArtifact(...) — never trust the witnessPublicKey field on the artifact itself (CWE-347 / #1922).| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 16,385 | 6,871 | -58% | 1 | 1 | 0% | 3,432 | 1,896 | -45% | 0 | 0 | — |
case-02 | fail→fail | 36,072 | 7,531 | -79% | 1 | 1 | 0% | 4,079 | 2,207 | -46% | 0 | 0 | — |
case-19 | pass→pass | 4,894 | 9,696 | +98% | 1 | 1 | 0% | 842 | 2,143 | +155% | 0 | 0 | — |
case-20 | pass→pass | 11,443 | 14,410 | +26% | 1 | 1 | 0% | 2,472 | 4,716 | +91% | 0 | 0 | — |
case-21 | pass→pass | 19,679 | 14,776 | -25% | 1 | 1 | 0% | 4,191 | 4,556 | +9% | 0 | 0 | — |
case-22 | pass→pass | 14,232 | 7,941 | -44% | 1 | 1 | 0% | 2,499 | 3,023 | +21% | 0 | 0 | — |
case-07 | fail→pass | 12,023 | 7,960 | -34% | 1 | 1 | 0% | 2,221 | 3,058 | +38% | 0 | 0 | — |
case-13 | fail→pass | 12,131 | 5,022 | -59% | 1 | 1 | 0% | 2,217 | 2,588 | +17% | 0 | 0 | — |
case-03 | fail→fail | 15,793 | 5,125 | -68% | 1 | 1 | 0% | 2,779 | 1,964 | -29% | 0 | 0 | — |
case-04 | fail→fail | 12,165 | 6,993 | -43% | 1 | 1 | 0% | 2,211 | 1,847 | -16% | 0 | 0 | — |
case-05 | fail→fail | 7,250 | 4,715 | -35% | 1 | 1 | 0% | 1,304 | 1,774 | +36% | 0 | 0 | — |
case-06 | fail→pass | 10,376 | 3,047 | -71% | 1 | 1 | 0% | 1,992 | 2,079 | +4% | 0 | 0 | — |
case-08 | fail→pass | 8,348 | 2,884 | -65% | 1 | 1 | 0% | 1,464 | 2,022 | +38% | 0 | 0 | — |
case-09 | fail→pass | 9,017 | 1,898 | -79% | 1 | 1 | 0% | 1,654 | 1,714 | +4% | 0 | 0 | — |
case-10 | fail→fail | 13,301 | 5,156 | -61% | 1 | 1 | 0% | 661 | 1,959 | +196% | 0 | 0 | — |
case-11 | pass→pass | 3,712 | 2,016 | -46% | 1 | 1 | 0% | 649 | 1,793 | +176% | 0 | 0 | — |
case-12 | fail→fail | 9,703 | 5,795 | -40% | 1 | 1 | 0% | 1,983 | 2,674 | +35% | 0 | 0 | — |
case-14 | fail→pass | 9,325 | 1,179 | -87% | 1 | 1 | 0% | 1,466 | 1,612 | +10% | 0 | 0 | — |
case-15 | pass→pass | 14,791 | 7,882 | -47% | 1 | 1 | 0% | 2,765 | 2,902 | +5% | 0 | 0 | — |
case-16 | fail→pass | 16,046 | 4,355 | -73% | 1 | 1 | 0% | 851 | 2,296 | +170% | 0 | 0 | — |
case-17 | fail→pass | 12,907 | 3,009 | -77% | 1 | 1 | 0% | 2,060 | 2,031 | -1% | 0 | 0 | — |
case-18 | fail→pass | 10,430 | 3,119 | -70% | 1 | 1 | 0% | 2,112 | 1,989 | -6% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 15 counted toward the lift figure. The other 7 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +41 percentage points is the difference between those two pass rates over the 15 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.