Application Setup

Initialize your application for rngo by running:

> rngo init

This will create a .rngo directory, with a spec.yml file. This serves as a minimal simulation spec that you will now flesh out.

Simulation Spec

A complete simulation spec primarily defines entities, which model any logical dataset that your application interacts with.

For even a small application, modeling all those datasets would be tedious, which is why you should delegate this to an LLM.

The best way to do so is to first define a system, which models where your application maintains state, and from which entities can be inferred.

For example, if your application uses SQLite, you might add the following at .rngo/systems/sqlite.yml:

output:
  type: sql
import:
  command: sqlite3 db.sqlite
infer:
  context:
    description: sqlite schema
    command: sqlite3 db.sqlite '.schema'

Let's say that you're using Claude Code - you can ask it to infer the application entities by running:

> rngo infer prompt | claude

Claude will generate one entity per table in the SQLite database, and write each to a file in the .rngo/entities directory, e.g.:

> ls .rngo/entities
users.yml
posts.yml
comments.yml

You should commit everything in the.rngo/systems and.rngo/entities directories to source control. The next step is to run a simulation.

Simulation Output

Now when you run rngo sim, it will construct a spec based on the contents of the .rngo directory.

For any entity inferred from a system, the CLI will attempt to stream the data directly into the system, based upon its import.command configuration.

For entities not associated with a system, the CLI will write the data to files in a dedicated simulation directory, e.g.:

> ls .rngo/simulations/hLpmFg0qFW2idopyd8NAq
users.jsonl
posts.jsonl
comments.jsonl

The directory name is the ID of the simulation. It also contains metadata such assimulation.json, which is the API representation of the constructed simulation.

The.rngo/simulations directory should be ignored by source control - rngo init will configure this.

Next Steps

From here, you can iterate on your entity defintions. Go to any of these pages to learn how: