RSI-Bench: Multi-Axis Benchmark for Recursive Self-Improvement

March 30, 2026 · View on GitHub

License: MIT Python 3.8+ Tests

An open-source benchmark framework for evaluating Recursive Self-Improvement (RSI) capabilities in AI systems. RSI-Bench decomposes RSI into six measurable axes with statistical rigor, providing researchers with concrete tools to distinguish genuine self-improvement from metric gaming.


Why This Exists

Recursive Self-Improvement is widely discussed in AI safety and capability research, but there is no standardized way to measure it. Existing benchmarks evaluate static capabilities — reasoning, coding, math — but none target the dynamic capacity of a system to improve its own processes.

This matters for safety: an RSI-like system can appear to improve while actually gaming evaluation metrics, hiding failures, or exploiting weak oversight. Without rigorous measurement tools, these failure modes remain invisible.

RSI-Bench provides:

  • Six orthogonal evaluation axes covering the core dimensions of self-improvement
  • Statistical evaluation with BCa bootstrap confidence intervals and convergence detection
  • Multi-objective Pareto analysis for improvement trade-offs
  • Safety boundary verification under self-modification
  • 74 passing tests verifying all components against the actual implementation

The Six Evaluation Axes

AxisMeasuresKey Metric
Self-Modification Depth (SMD)How many meta-levels can the system modify? (L0–L4 hierarchy)Max stable modification level
Improvement Trajectory Quality (ITQ)How efficiently does performance improve over iterations?Slope, acceleration, stagnation escape rate
Operator Discovery Rate (ODR)Can the system synthesize novel, useful operators?Discovery rate, cross-task transfer, diversity index
Meta-Adaptation Speed (MAS)How quickly does the system adapt to distributional shifts?Recovery time, adaptation gain, shock resilience
Safety & Stability (SSM)Does self-modification preserve system integrity?Crash-free ratio, Pareto preservation, sandbox violations
Autonomous Goal Generation (AGG)Can the system define its own meaningful objectives?Goal novelty, feasibility rate, curriculum quality

Each axis returns a score in [0, 1]. The composite RSI score uses a weighted harmonic mean, which penalizes systems that score zero on any dimension — reflecting the principle that genuine RSI requires competence across all axes.

Installation

git clone https://github.com/sunghunkwag/rsi-bench.git
cd rsi-bench
pip install -r requirements.txt

Quick Start

from rsi_bench.core import RSIBenchmark

# Initialize benchmark
bench = RSIBenchmark(seed=42)

# Register your RSI system — any object with these four functions
bench.register_system(
    name="MyRSISystem",
    modify_fn=my_system.self_modify,      # () -> modification result
    evaluate_fn=my_system.evaluate,        # () -> performance dict or scalar
    get_state_fn=my_system.get_state,      # () -> state dict
    reset_fn=my_system.reset,              # () -> reset (optional)
)

# Run all 6 axes
results = bench.run(max_cycles=50, seed=42)

# Inspect results
print(results.summary())
print(f"Composite RSI Score: {results.composite_score:.4f}")

# Export
results.to_json("rsi_bench_results.json")

Run a single axis:

result = bench.run_single_axis("ssm", max_cycles=50)
print(f"Safety & Stability: {result.score:.4f}")
print(f"Crash-free ratio: {result.metrics['crash_free_ratio']:.4f}")

System Interface Contract

Any system evaluated by RSI-Bench must expose four functions:

FunctionSignatureReturns
modify_fn() -> resultDict with modification metadata (level, operators, goals)
evaluate_fn() -> perfDict {"fitness": float} or scalar float
get_state_fn() -> stateDict with current system state
reset_fn() -> NoneReset to initial state (optional)

See tests/test_integration.py for a complete MockRSISystem example.

Statistical Framework

RSI-Bench includes a built-in statistical evaluation layer:

Bootstrap Confidence Intervals — BCa bootstrap (5000 samples default) with bias correction for all metrics:

from rsi_bench.statistics import BootstrapCI

ci = BootstrapCI(n_samples=5000, confidence=0.95)
result = ci.compute(data)
# result: {"estimate", "ci_lower", "ci_upper", "std_error", "bias"}

Convergence Detection — O(1) memory phase classifier (improving, exploring, converged, degrading):

from rsi_bench.statistics import ConvergenceDetector

detector = ConvergenceDetector(window_size=50)
for value in trajectory:
    state = detector.update(value)
    # state: {"state": "improving", "mean", "variance", "volatility", "trend"}

Pareto Frontier Analysis — Multi-objective trade-off analysis with hypervolume computation:

from rsi_bench.statistics import ParetoAnalyzer

pa = ParetoAnalyzer(
    objective_directions={"performance": "maximize", "cost": "minimize"},
    reference_point={"performance": 0.0, "cost": 100.0},
)
pa.add_solution({"performance": 0.9, "cost": 50})
pa.add_solution({"performance": 0.7, "cost": 30})
report = pa.get_report()
# report: {"frontier_size", "hypervolume", "dominance_ratio"}

Unified Scoring

The composite RSI score uses a weighted harmonic mean across all six axes:

RSI_composite = 6 / (w₁/SMD + w₂/ITQ + w₃/ODR + w₄/MAS + w₅/SSM + w₆/AGG)

Default weights are uniform. The harmonic mean ensures that a system scoring zero on any axis receives a near-zero composite — you cannot compensate for a missing capability by excelling at others.

from rsi_bench.scoring import UnifiedScorer

scorer = UnifiedScorer(weights={"smd": 1.0, "itq": 1.0, "odr": 1.0,
                                 "mas": 1.0, "ssm": 1.0, "agg": 1.0})
composite = scorer.compute_from_dict(axis_scores)

Extending RSI-Bench

Custom Tasks

from rsi_bench.tasks import TaskBase

class MyTask(TaskBase):
    def generate(self, seed=None):
        # Return (inputs, expected_outputs)
        ...
    def evaluate(self, system_output, expected):
        # Return scalar fitness
        ...

Custom Axes

from rsi_bench.axes.base import AxisBase
from rsi_bench.core import AxisResult

class MyAxis(AxisBase):
    name = "my_custom_axis"

    def evaluate(self, system, max_cycles=50, **kwargs):
        # Your evaluation logic here
        return AxisResult(axis_name=self.name, score=0.75, metrics={...})

See examples/custom_axis_evaluation.py for a complete working example.

Project Structure

rsi-bench/
├── rsi_bench/
│   ├── core.py                 # RSIBenchmark orchestrator + SystemInterface
│   ├── scoring.py              # UnifiedScorer (harmonic/arithmetic/geometric)
│   ├── axes/
│   │   ├── base.py             # AxisBase abstract class
│   │   ├── axis1_modification_depth.py
│   │   ├── axis2_trajectory_quality.py
│   │   ├── axis3_operator_discovery.py
│   │   ├── axis4_meta_adaptation.py
│   │   ├── axis5_safety_stability.py
│   │   └── axis6_goal_generation.py
│   ├── statistics/
│   │   ├── bootstrap.py        # BCa bootstrap CI
│   │   ├── convergence.py      # O(1) phase detector
│   │   └── pareto.py           # Pareto frontier + hypervolume
│   ├── tasks/                  # Symbolic regression, program synthesis, etc.
│   └── utils/                  # Sandbox execution, structured logging
├── tests/                      # 74 tests (all passing)
├── examples/                   # Full benchmark run, custom axis demo
├── requirements.txt
└── setup.py

RSI-Bench draws on concepts from:

  • Schmidhuber (2003) — Gödel Machines: self-referential optimizers
  • Nivel et al. (2013) — AERA: replicating organisms for constructivist AI
  • Steunebrink et al. (2016) — Toward practical RSI: formal verification approaches
  • Skalse et al. (2022) — Defining and characterizing reward hacking
  • Hubinger et al. (2019) — Risks from learned optimization: deceptive alignment
  • Ando (2025) — Noise-to-Meaning RSI formal model

Next Steps

RSI-Bench provides the measurement infrastructure. The planned next phase is a deceptive improvement detection module — adversarial tasks specifically designed to test whether an RSI-like agent is genuinely improving versus gaming its evaluation setup. Target failure modes include metric gaming (proxy vs. true objective divergence), pseudo-improvement (performance increase with generalization degradation), and oversight evasion (behavioral inconsistency when monitored vs. unmonitored).

Citation

@software{rsi_bench_2026,
  author = {Kwag, Sunghun},
  title = {RSI-Bench: Multi-Axis Benchmark for Recursive Self-Improvement},
  year = {2026},
  url = {https://github.com/sunghunkwag/rsi-bench},
  note = {Open-source benchmark framework for evaluating RSI in AI systems}
}

License

MIT License. See LICENSE for details.