Recursive AI
LibraryC#Available

onescope

A viewer for deterministic libraries. Open a scene, snapshot or replay, or attach to a running program, and watch the world: scrub its history, inspect any entity, compare runs, and fork from any frame to poke at it.

Open source, MIT or Apache-2.0, made by Recursive AI. Version 1.0.0 is on NuGet, for .NET 10. One shell, one module per library; the onephysics and onepath modules are bundled. Everything the window does is also a command-line operation and a Model Context Protocol tool, so an agent can drive it the same way.

dotnet tool install --global RecursiveAI.OneScope.Tool

A quick look

Open a replay headless, seek to a step, inspect the world and capture a frame. Each operation prints its result as one line of JSON.

The frame is from a run of the 1.0.0 tool from NuGet on a 240-step onephysics replay: five balls on the ground at step 120, in a 2D and a 3D view, with the inspector, the timeline and the event log. Getting started has the program that recorded it and the full output.

Terminalshell
onescope open run.oppr --headless \
  --run 'seek {"step":120}' \
  --run 'inspect {"entity":1}' \
  --run 'capture_frame {"path":"frame.png"}'
Getting started
frame.png, step 120 of 240capture_frame
The onescope shell at step 120 of 240. On the left, the entity list: World, Body 0 (Static) and Bodies 1 to 5 (Awake). In the middle, a 2D and a 3D view of five green balls resting on a long box. On the right, the inspector for the world, with its step, time step, hash 96f47843cd094b33 and counters. Below, the timeline with a red marker at step 120 and contact events near step 60, and the event log.
Time

A step index, and the library’s own hash

From the README:

Time is a step index. Seeking to step k lands on exactly the state that playing straight to k gives, however you got there, and the world hash it reports is the library’s own. A fork re-simulates from the original’s bits, records each poke into its own replay, and shows where it diverges. The original file and the running program are never changed.

What it does

What it does

Scrub and inspect

An entity tree, an inspector, 2D and 3D scene views, and a timeline with a track per source, plus an event log and a compare panel.

Fork and poke

Fork any source at any step, poke the fork, step it, and find where it diverges. Forks hang below the timeline as branches; in a window, drag a body in a fork to poke it.

Compare

A fork against its original, or two versions of a library on one replay, each module in its own load context.

Watch a running program

A host calls RecursiveAI.OneScope.Probe once, and the shell attaches to its live stream. The probe never blocks or throws into the host.

Headless and scriptable

Every operation takes and returns JSON, from the window, the command line or the Model Context Protocol. Headless captures are byte-identical from run to run on one renderer.

Add a library

A module built on RecursiveAI.OneScope.Sdk describes a world as data. The library never depends on onescope; the module lives in the library’s repository.

Agents

Drive it over the Model Context Protocol

onescope open <file> --live <socket> serves the operations on a Unix socket, and onescope mcp --socket <socket> bridges it to stdio. The README’s client configuration:

Client configurationJSON
{ "mcpServers": { "onescope": { "command": "onescope", "args": ["mcp", "--socket", "/tmp/onescope.sock"] } } }

Status and packages

Go further