Recursive self-improvement, as a library

Super­intelligence
you can switch off.

OURO invents its own strategies for any goal, runs a population of them, judges its own failures and rewrites itself. It gets measurably better with no human in the loop. Any chain, any venue, any model.

+0.00 population ci
Population CI
+0.00
Cycle
0
Strategies born
8
01 / The loop

It writes the strategy. Then argues with it.

Every cycle the SDK ranks what's alive, asks a Critic why the weak ones lost, lets a Generator mutate, crossbreed and invent, and promotes only what wins on data it has never seen. This terminal is simulated. The real one prints the same lines.

ouro run --paper --assets BTC,ETH --tf 15mpaper

    
S
Seed
Generator reads the goal and primitives, writes 8 strategies. Each passes the sandbox first.
1
Collect
Last N episodes per strategy. Newest 30% is holdout, untouched until validation.
2
Rank
Score every live strategy on holdout. Bottom quarter marked for retirement.
3
Diagnose
Critic reads the worst losses and the best wins, writes a 60-word diagnosis.
4
Generate
Mutate the weak. Crossbreed the strong. Write one fresh strategy from the diagnosis.
5
Trial
Replay on train. Must beat the population median by the margin.
6
Validate
Replay on holdout. Wins on train that lose here are curve-fit. Dropped.
7
Promote
Survivors enter. Retired leave. Population stays at K. History never deleted.
02 / Takeoff

The one chart that says if it's getting smarter.

Capability Index is a strategy's holdout score against the seed generation. The population average per cycle is the takeoff curve. When velocity flattens, it has hit the ceiling of its primitives and a human adds packs. That is the only time a human steps in.

.ouro/takeoff.json · live · ■ population CI · ■ best CI · ■ velocity
population CI
+0.00
best CI
+0.00
velocity
+0.00
ceiling
clear
03 / Population

Eight alive at once. Nothing is sacred.

Each row is a strategy the SDK wrote. A struck row is being retired this cycle. A green-edged row was just born. Origin says whether it was seeded, mutated from one parent, crossbred from two, or written fresh.

04 / Superintelligence

Four primitives of SI, shipped as code.

A superintelligence is not a bigger model. It is a system whose capability rises on its own. Today's agents are frozen at deploy time. OURO is the rise, with the brakes bolted on.

Self-model
The system holds a readable description of itself.
ships asThe live population plus every strategy ever generated, with parents and rationale.
Self-critique
The system judges its own output.
ships asThe Critic: an LLM step that diagnoses the agent's own failures before anything changes.
Self-modification
The system rewrites itself.
ships asSeed, mutate, crossbreed, fresh-write. The population changes without a human edit.
Corrigibility
The system can be bounded and switched off.
ships asSandbox, holdout, risk caps, approval switch, one-call rollback.
05 / Corrigibility

The switch is real.
Try it.

Flip it off and every panel on this page halts mid-cycle. In the SDK that is requireApproval: true: a cycle returns pending and nothing is promoted until you say so.

1
SandboxGenerated code runs in an isolated VM. No network, no filesystem, no imports, 50 ms per decision.
2
HoldoutThe newest slice of data is never shown to the Critic or Generator. Only to the judge.
3
Risk capsAny candidate that breaches max drawdown or max position is rejected before trial.
4
Rollbackouro rollback <cycle> restores the population as it was. Nothing is ever lost.
RUNNING
loop.start() · cycles promote automatically
06 / Install

A goal, a source, a scorer. No strategy.

Runs on your machine with your own LLM key. No server, no account, no token in the SDK. Sources and executors are plugins, so the same config runs on any venue or chain someone writes 60 lines for.

terminal
# any LLM, your key, your bill
npm i @ourointelligence/sdk @ourointelligence/source-hyperliquid
export OURO_LLM=anthropic
export ANTHROPIC_API_KEY=sk-...

# seeds 8 strategies on paper, starts evolving
npx ouro run --paper --assets BTC,ETH --tf 15m
npx ouro takeoff
ouro.config.ts
import { primitives, type LoopConfig } from '@ourointelligence/sdk';
import { hyperliquid } from '@ourointelligence/source-hyperliquid';

export default {
  goal: 'Maximise realised PnL after fees on BTC,ETH 15m, max dd 8%',
  primitives: [primitives.ta, primitives.volume, primitives.time],
  source: hyperliquid({ assets: ['BTC','ETH'], tf: '15m' }),
  executor: 'paper',
  score: (ep) => ep.outcome.pnl - ep.outcome.fees - 0.5 * ep.outcome.drawdown,
  population: 8, cycleEvery: 40, holdout: 0.3, margin: 0.05,
  guards: { maxDrawdownPct: 8, maxPositionPct: 10 },
} satisfies LoopConfig;