Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Run a heavy neural-trader job (long walk-forward, big Monte-Carlo, parameter sweep, model training) on the Anthropic Managed Agent cloud runtime instead of locally
.claude/skills/ruvnet-trader-cloud-backtest/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | -19% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 77% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 40% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 4% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 491% | 0% |
Dispatch a heavy neural-trader job to an Anthropic Claude Managed Agent (cloud container) instead of running it locally. See project ADR-117 (recipe + cost rules) and ADR-115 (the managed_agent_* runtime).
trader-backtest (local)| Job | Runtime | |---|---| | Quick sanity check; one short backtest (< ~1 min) | local — use the trader-backtest skill | | Multi-year walk-forward, big Monte-Carlo count, parameter sweep over a grid, or model training (LSTM/Transformer/N-BEATS) | cloud — this skill |
Prereq: ANTHROPIC_API_KEY (or CLAUDE_API_KEY) + Managed Agents beta access. If managed_agent_* returns "needs ANTHROPIC_API_KEY", fall back to the local trader-backtest skill.
managed_agent_create({ name: "nt-cloud", model: "claude-haiku-4-5-20251001", // orchestration only — the compute is the Rust engine, not the LM (ADR-026) system: "You operate the neural-trader CLI in this container. Run exactly the commands asked, report the metrics, write requested artifacts, then stop.", networking: "unrestricted", // or "restricted" pinned to your data host packages: { npm: ["neural-trader"] }, // add apt:["build-essential"] ONLY if there's no prebuilt NAPI binary for the arch (neural-trader ships prebuilds → usually omit) initScript: "npm install -g --ignore-scripts neural-trader >/dev/null 2>&1 || npx -y neural-trader --version >/dev/null 2>&1 || true" }) → { sessionId, agentId, environmentId } For a sweep: create the environment once, run all configs in one managed_agent_prompt (one container), not N sessions.
managed_agent_prompt({ sessionId, message: "Run npx neural-trader --backtest --strategy <name> --symbol <TICKER> --period <last 3 months> --mc-paths 1. Just confirm it ran and report the Sharpe. Then stop.", maxWaitMs: 60000 }) If that fails, fix the args before the real run (and managed_agent_terminate).
managed_agent_prompt({ sessionId, message: "Run npx neural-trader --backtest --strategy <name> --symbol <TICKER> --period <range> --walk-forward --mc-paths <N> (for training: npx neural-trader --train --model <lstm|transformer|nbeats> --symbol <TICKER> --period <range>; for a sweep: loop the configs and run each). Report: total return, annualized return, Sharpe, Sortino, max drawdown, win rate, profit factor, # trades, 95% CVaR. Write the equity curve to /tmp/equity.csv and the trade log to /tmp/trades.csv. Then stop.", maxWaitMs: <generous — minutes> }) → { finished, status, stopReason, assistantText (the metrics), toolUses } If finished:false, follow up with managed_agent_events({ sessionId }) until idle.
managed_agent_prompt({ sessionId, message: "cat /tmp/equity.csv" }) or managed_agent_events and read the tool_result.SignedBacktestArtifact body from the cloud-returned metrics + params hash + runs hash. Sign it locally with signBacktestArtifact(body, privateKeyHex) from plugins/ruflo-neural-trader/src/signed-artifact.mjs (key resolution same as trader-backtest: RUFLO_WITNESS_KEY_PATH → verification/witness-key.json → degraded-unsigned warning).await verifyBacktestArtifact(artifact, trustedPublicKey) where trustedPublicKey is the pinned project-config Ed25519 public key (NOT the artifact.witnessPublicKey field — that's attacker-controllable; see CWE-347 / #1922). If verification returns false: REFUSE to promote — emit a loud error "[ERROR] ruflo-neural-trader: SignedBacktestArtifact signature INVALID against trusted key — refusing to promote to live strategy" and return early. This is the fail-closed gate per ADR-126.memory_store({ key: "backtest-<strategy>-<ts>", value: JSON.stringify(signedArtifact), namespace: "trading-backtests" }). The stored value carries witnessSignature + witnessPublicKey.agentdb_pattern-store({ pattern: "profitable-<strategy-type>", data: "<params + results>" }).cost-tracking namespace (per ADR-117 — cloud sessions bill until terminated). managed_agent_terminate({ sessionId, environmentId }) → { sessionDeleted: true, environmentDeleted: true } Never leave an idle billing container. (ruflo doctor / GC catches orphans — #1931.)
initScript), reuse the environment, batch sweeps into one prompt, pre-flight cheap, terminate eagerly, use Haiku/Sonnet for the agent loop, estimate before kicking off. (ADR-117 §"Cost optimization".)managed_agent_create { "name":"nt-cloud", "model":"claude-haiku-4-5-20251001", "packages":{"npm":["neural-trader"]}, "initScript":"npm install -g --ignore-scripts neural-trader >/dev/null 2>&1 || true" }
→ { sessionId:"sesn_…", environmentId:"env_…" }
managed_agent_prompt { "sessionId":"sesn_…", "message":"Run `npx neural-trader --backtest --strategy multi-indicator --symbol SPY --period 2020-2024 --walk-forward --mc-paths 1000`. Report Sharpe/Sortino/max-DD/win-rate/CVaR; write /tmp/equity.csv. Then stop.", "maxWaitMs":600000 }
→ { finished:true, status:"idle", assistantText:"<metrics>", toolUses:[{bash:"npx neural-trader --backtest …"}] }
# … memory_store the metrics, agentdb_pattern-store if Sharpe>1.5, record cost …
managed_agent_terminate { "sessionId":"sesn_…", "environmentId":"env_…" }| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-13 | pass→pass | 9,751 | 3,533 | -64% | 1 | 1 | 0% | 1,713 | 2,481 | +45% | 0 | 0 | — |
case-01 | fail→fail | 11,052 | 5,273 | -52% | 1 | 1 | 0% | 2,147 | 2,809 | +31% | 0 | 0 | — |
case-02 | fail→pass | 22,020 | 9,717 | -56% | 1 | 1 | 0% | 4,790 | 3,880 | -19% | 0 | 0 | — |
case-03 | fail→fail | 15,632 | 6,266 | -60% | 1 | 1 | 0% | 2,726 | 3,059 | +12% | 0 | 0 | — |
case-04 | pass→pass | 7,725 | 2,988 | -61% | 1 | 1 | 0% | 1,433 | 2,420 | +69% | 0 | 0 | — |
case-05 | fail→fail | 3,790 | 2,944 | -22% | 1 | 1 | 0% | 652 | 2,420 | +271% | 0 | 0 | — |
case-06 | fail→fail | 10,021 | 2,421 | -76% | 1 | 1 | 0% | 1,688 | 2,366 | +40% | 0 | 0 | — |
case-12 | fail→pass | 8,214 | 3,460 | -58% | 1 | 1 | 0% | 1,443 | 2,551 | +77% | 0 | 0 | — |
case-07 | pass→pass | 9,884 | 5,645 | -43% | 1 | 1 | 0% | 1,812 | 3,021 | +67% | 0 | 0 | — |
case-08 | pass→pass | 8,191 | 4,845 | -41% | 1 | 1 | 0% | 1,467 | 2,822 | +92% | 0 | 0 | — |
case-09 | pass→pass | 10,791 | 6,113 | -43% | 1 | 1 | 0% | 1,661 | 2,978 | +79% | 0 | 0 | — |
case-10 | fail→pass | 11,751 | 4,611 | -61% | 1 | 1 | 0% | 2,021 | 2,827 | +40% | 0 | 0 | — |
case-11 | fail→pass | 11,188 | 1,850 | -83% | 1 | 1 | 0% | 2,122 | 2,201 | +4% | 0 | 0 | — |
case-14 | fail→fail | 5,749 | 2,182 | -62% | 1 | 1 | 0% | 932 | 2,259 | +142% | 0 | 0 | — |
case-15 | fail→pass | 2,818 | 2,347 | -17% | 1 | 1 | 0% | 393 | 2,323 | +491% | 0 | 0 | — |
case-16 | fail→pass | 16,090 | 5,804 | -64% | 1 | 1 | 0% | 2,797 | 3,063 | +10% | 0 | 0 | — |
case-17 | fail→pass | 10,323 | 5,487 | -47% | 1 | 1 | 0% | 1,825 | 2,294 | +26% | 0 | 0 | — |
case-18 | fail→pass | 12,400 | 2,903 | -77% | 1 | 1 | 0% | 2,191 | 2,317 | +6% | 0 | 0 | — |
case-19 | pass→pass | 11,556 | 5,379 | -53% | 1 | 1 | 0% | 1,936 | 2,934 | +52% | 0 | 0 | — |
case-20 | fail→pass | 9,757 | 5,552 | -43% | 1 | 1 | 0% | 1,908 | 2,894 | +52% | 0 | 0 | — |
case-21 | fail→pass | 16,986 | 3,196 | -81% | 1 | 1 | 0% | 947 | 2,318 | +145% | 0 | 0 | — |
case-22 | fail→pass | 6,856 | 4,165 | -39% | 1 | 1 | 0% | 1,330 | 2,689 | +102% | 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 21 counted toward the lift figure. The other 1 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 +50 percentage points is the difference between those two pass rates over the 21 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.