Skip to content

Gene Lifecycle Commands

Initialize a new Rotifer project with Genesis genes and Arena preview.

Terminal window
rotifer init [project-name]

Arguments:

ArgumentRequiredDescription
project-nameNoDirectory name (defaults to current directory)

What it creates:

my-project/
├── rotifer.json # Project configuration
├── genes/ # Gene source directory
│ ├── genesis-web-search/
│ ├── genesis-web-search-lite/
│ ├── genesis-file-read/
│ ├── genesis-code-format/
│ └── genesis-l0-constraint/
└── .rotifer/
└── playground.db # Local Arena database

Example:

Terminal window
$ rotifer init my-project
Project initialized at ./my-project
$ cd my-project && rotifer arena list
# Shows Genesis genes pre-ranked in the local Arena

Scan source files for candidate functions that can be wrapped as genes.

Terminal window
rotifer scan [path]

Arguments:

ArgumentRequiredDescription
pathNoPath to scan (defaults to genes/)

Supported languages: TypeScript (.ts, .js), Rust (.rs)

Detection patterns:

  • export function name()
  • export async function name()
  • export const name =
  • pub fn name() / pub async fn name()

Example:

Terminal window
$ rotifer scan src/tools/
Scanning src/tools/search.ts...
Found 3 candidate functions:
┌────┬──────────────┬──────────────────────┬──────┐
# │ Name │ File │ Line │
├────┼──────────────┼──────────────────────┼──────┤
1 webSearch src/tools/search.ts 12
2 fileRead src/tools/file.ts 8
3 codeFormat src/tools/format.ts 5
└────┴──────────────┴──────────────────────┴──────┘

Wrap a function as a Rotifer gene, generating a Phenotype and shim code.

Terminal window
rotifer wrap <name> --domain <domain> [options]

Arguments:

ArgumentRequiredDescription
nameYesGene name

Options:

FlagDescription
--domain <domain>Functional domain (e.g., search.web, file.read)
--file <path>Source file path

Generated files:

genes/<name>/
├── phenotype.json # Gene metadata (domain, schemas, fidelity)
├── index.ts # Express function wrapper
└── shim.ts # Compatibility shim

Example:

Terminal window
$ rotifer wrap my-search --domain search.web
Gene 'my-search' wrapped successfully
Domain: search.web
Fidelity: Wrapped
Version: 0.1.0

Execute L2 sandbox tests against a gene, validating schemas and behavior.

Terminal window
rotifer test <name> [options]

Arguments:

ArgumentRequiredDescription
nameYesGene name to test

Options:

FlagDescription
--verboseShow detailed input/output for each test case

Test cases run automatically:

  1. Schema validation — Phenotype conforms to Gene Standard
  2. Express functionexpress() is exported and callable
  3. Input/Output conformance — Output matches outputSchema
  4. Error handling — Graceful failure on invalid input
  5. Null checkexpress() returns non-null data

Example:

Terminal window
$ rotifer test my-search
Running tests for 'my-search'...
Phenotype schema is valid
express() returned successfully
Output conforms to outputSchema
Error handling works correctly
All 4 tests passed
Fitness: F(g) = 0.8234 V(g) = 0.9100

Compile a gene to Rotifer IR (WASM with custom sections).

Terminal window
rotifer compile [name] [options]

Arguments:

ArgumentRequiredDescription
nameNoGene name (auto-detects if omitted)

Options:

FlagDescription
--lang <ts|wasm>Force compilation mode
--wasmEmit WASM output

Compilation pipeline:

TypeScript source
↓ esbuild (bundle + minify)
WASI-compatible JavaScript
↓ Javy (QuickJS → WASM)
Raw WASM module
↓ Rotifer IR Injector
gene.ir.wasm (with custom sections)

Custom sections injected:

  • rotifer.version — Protocol version
  • rotifer.phenotype — Serialized phenotype
  • rotifer.constraints — L0 constraint metadata
  • rotifer.metering — Fuel/resource limits

Example:

Terminal window
$ rotifer compile my-search
Compiling 'my-search'...
Pipeline: TypeScript esbuild Javy IR
Compiled successfully
IR Hash: a3f2b1...c4d5
Size: 142.3 KB
Sections: version, phenotype, constraints, metering

Output: genes/<name>/gene.ir.wasm