evidence-grade environments for evaluating agents · WallRiderLang · TRVM

Write the wall. Run the world.
Keep the proof.

TRAAVIIS provides evidence-grade environments for evaluating agents, and proves what happened inside them. TRVM worlds are its strongest deterministic substrate. Write a world in WallRiderLang, and trvs lowers it to a content-addressed SemanticArtifactID, folds each episode into a replayable film, and verifies that film with every applicable check. Same world, same scenario, same trajectory — same hash, every time.

author the world run the episode record the film verify & replay
trvs — run captured · verbatim CLI output
$ trvs run worlds/alley.wrl
world sem-8ae91fe9cbc5fd086ce4356d587c403211e5c7b2b3ebdd316496367429ecfe4a scenario scen-2be578f63401d0a424be78f069cc81278efcb3469ae405ec66a2a340c26b8842 reducer ic_ref epochs 7 epoch film 1 56a2980eb5530db250848395 2 23c7c0cd5d2e7688f0be1b62 3 b9cd725ac52a876bf754b16c 4 2c2d8ac24faafa9e2492dea2 5 7cf6b32b260e16fba6952cbc 6 fb270e91d8d4ac3f2e3b5bc0 7 8c7bf5edcab3693a81de70ec film 8c7bf5edcab3693a81de70ec

Every terminal on this page is verbatim output from the real trvs CLI folding worlds/alley.wrl over the TRVM engine — nothing here is scripted. TRAAVIIS does not embed, select, or route a model; the shipped world commands call none. The same world always folds to the same identity and the same film; that is the whole point.

$ pipx install traaviis · then trvs doctor · needs the TRVM/forge engine on-path
authora WallRiderLang world file
runfold the episode, deterministically
rewardobjective, computed — not asserted
verifyreference · native · oracle
replaycontent-addressed evidence, reproduced

Two researchers should be able to answer four questions and never argue about the answers: did we run the same world, the same scenario, the same trajectory — and did the verifiers agree? That is what a content-addressed environment is for. Reward is a computed number over a proven film, not a claim.

Identity

A world is what it means, hashed.

trvs id lowers the source to its canonical semantic graph and hashes it. Presentation — where a node sits, its colour, the wire curve — never enters the hash; a rotor or a rewire does. Two files that mean the same world print the same SemanticArtifactID; one meaningful edit and the id moves. It is the world's fingerprint.

trvs — id captured · verbatim CLI output
$ trvs id worlds/alley.wrl
sem-8ae91fe9cbc5fd086ce4356d587c403211e5c7b2b3ebdd316496367429ecfe4a

semantic

sem-… — the world's meaning, geometry-independent.

scenario

scen-… — the run inputs, deliberately kept out of identity.

film

the per-epoch evidence the deterministic fold produces.

Verifiable

Prove the film. Show the coverage.

trvs verify folds the world through the pure-Python reference reducer, re-folds it through the compiled native reducer, and cross-checks both against an independent hand-written oracle where that oracle's domain applies. A film is not asserted — it is checked by every applicable verifier, and the coverage is explicit. Golden Spinner agrees 3/3; a verifier that cannot apply is reported not_applicable, never as pass or fail.

trvs — verify captured · verbatim CLI output
$ trvs verify worlds/alley.wrl
world sem-8ae91fe9cbc5fd086ce4356d587c403211e5c7b2b3ebdd316496367429ecfe4a scenario scen-2be578f63401d0a424be78f069cc81278efcb3469ae405ec66a2a340c26b8842 reference native oracle agreement 3/3
certificate · triple fold agreement · exit 0
reducers reference native oracle
filmic_ref = ic32 = oracle — byte-for-byte
exit0 agree · 1 disagree · 2 unavailable
Replayable

Pin a film. Prove it reproduces. Diff two worlds.

A film is content-addressed evidence. trvs replay re-folds a world and, given a pinned --expect id or --film hash, asserts the fold reproduces it — exit 0 when it does, 1 when it drifts. trvs diff folds two worlds and marks the first epoch where their films diverge. This is the replayable-reward substrate an RL loop can gate on.

trvs — replay --expect captured · verbatim CLI output
$ trvs replay worlds/alley.wrl --expect "$(trvs id worlds/alley.wrl)"
world sem-8ae91fe9cbc5fd086ce4356d587c403211e5c7b2b3ebdd316496367429ecfe4a scenario scen-2be578f63401d0a424be78f069cc81278efcb3469ae405ec66a2a340c26b8842 reducer ic_ref epochs 7 epoch label film 1 set rotor = quar 56a2980eb5530db250848395 2 idle pulse tick 23c7c0cd5d2e7688f0be1b62 3 set rotor = 256. b9cd725ac52a876bf754b16c 4 reset orb fault 2c2d8ac24faafa9e2492dea2 5 set rotor = 128. 7cf6b32b260e16fba6952cbc 6 idle pulse tick fb270e91d8d4ac3f2e3b5bc0 7 set rotor = 10.0 8c7bf5edcab3693a81de70ec final film 8c7bf5edcab3693a81de70ec reproduced ✓ yes
trvs — diff captured · demo world vs an n=4 variant
$ trvs diff worlds/alley.wrl worlds/alley_n4.wrl
a sem-8ae91fe9cbc5fd086ce4356d587c403211e5c7b2b3ebdd316496367429ecfe4a (alley.wrl) b sem-24cf1b583f925ed27a4107272064546019a7042dd902f0a415786bc57b0f6113 (alley_n4.wrl) identity ✗ differ epoch a film b film 1 56a2980eb5530db25084 cefc85b866ab3430a66f 2 23c7c0cd5d2e7688f0be 0a18b4ed95946e59b1c4 3 b9cd725ac52a876bf754 52cecf7a5f31f9c731e3 4 2c2d8ac24faafa9e2492 b1258d4f2293c12e9043 5 7cf6b32b260e16fba695 d6e497c2efae09f87bdb 6 fb270e91d8d4ac3f2e3b 5d1fe6a506110328aca9 7 8c7bf5edcab3693a81de 318829a5c9bf543272c6 first divergence epoch 1
Legible

See exactly what you wrote — as the engine sees it.

trvs inspect shows the lowered world: every actor with its resolved static config, every edge with its kind, and any diagnostics. The named rotor quarter_turn_z has already become [181, 0, 0, 181]; the wires carry their semantic kind. Nothing hides between your source and its identity.

trvs — inspect captured · verbatim CLI output
$ trvs inspect worlds/alley.wrl
world sem-8ae91fe9cbc5fd086ce4356d587c403211e5c7b2b3ebdd316496367429ecfe4a profile forge.world.core.v1 actors 6 edges 4 diagnostics 0 actors d0 door ob orb p0 pulser clock=['periodic', 2, 0] p1 pulser clock=['once', 1] r0 relay sp spinner configurable=True n=8 rotor=[181, 0, 0, 181] w=16 graph p0 --SignalWire--> r0 p1 --SignalWire--> d0 r0 --SignalWire--> sp sp --SocketControl--> ob
The terminal

One honest workflow.

trvs is a small, stable surface. Seven commands ship today and fold real worlds over the TRVM engine; the rest are the environment surface that turns a subject into something an agent can be evaluated against. Its beachhead is trvs eval-one — a one-shot evaluation of a single frozen subject. Nothing below embeds, selects, or routes a model.

trvs doctorengine location, versions, verifier availabilityshipped
trvs idthe world's SemanticArtifactID — pure identityshipped
trvs inspectactors, edges, resolved config, diagnosticsshipped
trvs runlower + deterministically fold; per-epoch filmshipped
trvs verifyreference · native · oracle agreement (strict)shipped
trvs replayre-fold a film and assert it reproducesshipped
trvs diffcompare two worlds' identity + per-epoch filmsshipped
trvs eval-oneevaluate one agent run over one frozen subjectshipped
trvs verify-episodere-verify a saved episode with no agent processshipped
trvs initscaffold an environment for a substrate templateshipped
trvs packclose a scaffold into a verified, reopened packageshipped
trvs evalrun an agent over a split, score every episodeshipped
trvs comparerank two closed episodes answering one taskshipped
trvs batchrun several candidates over one split, compare per taskshipped
trvs verify-bundlere-verify a package tree or archive against bundle-…shipped
trvs archive-bundleemit a canonical archive + its transport checksumshipped
trvs serve --orsserve a packed environment as a submission endpointshipped
trvs serve --mcpthe same kernel behind the MCP wire vocabularylater

shipped commands are real over the engine today. planned commands describe the environment surface below and are not yet built — they are the published roadmap, not a claim.

The environment surface · kernel + ORS shipped

A neutral kernel. Protocols are adapters.

A tool list tells an agent what it can call. It does not define tasks, splits, rewards, episode completion, or reset. So TRAAVIIS's internal contract is a neutral Episode Kernel — and public protocols are adapters over it, not runtime law. The Open Reward Standard is the first and primary adapter; MCP is a compatibility adapter; a local JSONL surface is for automation and debugging.

startprepare a subject for a task
observedeterministic projection of state
stepone action → advance to next boundary
resetreconstruct initial state (≠ replay)
finalizeseal trace + outputs; pin episode receipt

The kernel carries no substrate semantics; any verb may be unsupported. Evidence Residency v1 is one-shot and implements only start → finalize. For the TRVM profile, observe is a label-free projection and step advances the fold to an epoch boundary.

primary adapter — trvs serve pkg --ors --split all --output episodes/
The Open Reward wire surface — list_tasks · session · call_tool → reward · finished — over the neutral kernel. Over Residency v1 that is exactly one tool, submit_candidate: the client sends a finding and a patch and nothing else, and finished: true is returned only after the episode is staged, replayed, fsynced and published. shipped
compatibility adapter — trvs serve pkg --mcp
The same world as MCP tools / resources / prompts, wrapping the kernel — never the source of truth. not yet built
trvs — serve --ors real output
$ trvs serve pkg --ors --split all --output episodes/ --port 8791
environment env-a38ec4c04532be258a59663588b0b7e678bf7ad31… split all substrate residency.repository.v1 profile traaviis.ors-profile.v1 runner traaviis.ors-submission.v1 listening http://127.0.0.1:8791/ors/v1 episodes /tmp/orsdemo/episodes tools submit_candidate refused by this substrate observe reset step loopback only. ctrl-c to stop.

Verbatim output, ids truncated to fit. The banner is the profile: nothing is advertised that cannot be done, and the three interactive routes exist only so they can refuse in the substrate's words (KERNEL_OPERATION_UNSUPPORTED, HTTP 501) rather than as a 404 — a 404 would claim the endpoint is missing, which is a statement about this server, not about the substrate. Everything is admitted before the socket binds, so there is no arrangement of failures that produces a listening server over a package that did not admit. The default bind is loopback; leaving it takes --allow-remote.

Strategy: do not compete with hosting catalogs. TRAAVIIS aims to be one of the best ways to author deterministic environments that export to them.

The artifact ladder · planned

One clean question each.

TRAAVIIS separates what a thing means from how it is shipped. The environment contract (env-…) fixes the subject, tasks, rewards, and splits; the outer package (bundle-…) carries presentation and docs and may change without moving env-…. Each layer answers exactly one question, and re-scoring a trace never pretends the behavior changed. The lowest rung is the substrate subject, sealed differently per substrate; everything above it is shared.

substrate subject

same subject? TRVM seals sem-… + scen-…; Residency seals snap-….

rew-… · task-…

a reward rubric, and a task binding subject + prompt + reward + termination.

trace-… · episode-…

the observable record (TRVM's film-… is its exact-trace case), and the receipt.

env-… · bundle-…

the environment contract, and the transport package — identity vs. shipping.

Evaluation before training · shipped

Prove the environment before you train in it.

The first job is not a trainer, and the first interface was not a batch — it was a one-shot trvs eval-one over a single frozen subject. Now that that is boring, trvs eval runs a whole split and emits one episode-… per task. Because every episode is verified and content-addressed, the numbers are reproducible and each trace is re-checkable on its own, with no agent process.

trvs — eval real output
$ trvs eval lab-pkg --split test --output episodes/ --agent python3 agent.py
[1/2] task-082e11c181f3be21aa82e138 ok reward 1 [2/2] task-0cd4992e274e07fc7da0bddd ok reward 1 environment env-aa7df5dde4a4999e4ddedff40a9fc2d0de039… split test (2 tasks) episodes task-082e11c181f3be21aa82e138 ok reward 1 episode-cfef6da48401cdb434c4d05a11715c527f29db19e… task-0cd4992e274e07fc7da0bddd ok reward 1 episode-01bea141effec36b35d4341516051d918d61a07ab… ok 2/2 mean reward 1 episodes kept 2/2 evaluation episodes/evaluation.json

Verbatim output, ids truncated to fit. The package is reopened and every task-/rew-/snap- re-derived from the bytes on disk before the first agent process starts, so a tampered package costs zero episodes. eval mints no new id: the ladder stops at env-…, so its evaluation.json is an index over episodes that are each already content-addressed.

ok and episodes kept are two lines because they answer two questions: what the evaluation found, and whether the evidence you asked for is still on disk. A run can be fully ok and still have failed to retain its own proof — and a score with no retained proof is not a result you can take away. The exit code reads them in precedence: 0 all ok and all kept · 1 ran and disagreed · 2 could not run, or could not keep what was asked for.

Flagship worlds

One proves the mechanism. The next one earns the thesis.

The Spinner is the conformance artifact — exact, tiny, already folding three ways. Evidence Residency is the first end-to-end environment that shows what evidence-grade agent evaluation actually looks like. Two more worlds widen the surface after it lands.

Golden Spinner shipped

The identity, replay and triple-fold tutorial. Installs, verifies, and reproduces byte-for-byte. Proof that the mechanism is real.

Evidence Residency next

An agent inspects a frozen repository, finds one real spec/implementation inconsistency, cites the conflicting evidence, proposes the smallest patch, runs the declared checks — and returns a structured finding plus a re-verifiable receipt. The first evidence-grade evaluation environment.

Courier / Factory planned

Move objects, open gates, route signals, spend energy, obey safety constraints, complete deliveries — spatial state, long-horizon tasks, objective rewards, resets, splits.

WallRider / Graffiti planned

An agent moves through a city and writes executable tags that alter surfaces, routes and permissions. It proposes graph edits; TRVM decides what they mean. The brand demo.

Where the seams are

TRAAVIIS is the product. It stands on a stack.

The boundary is frozen on purpose. trvs carries no world semantics — it packages capabilities the layers below already provide, for someone who does not know the internal history of TRVM.

TRAAVIISthe product — CLI, environment surface, evaluator, packaging
trvsthe command-line interface
TaskSpecV1the substrate-neutral assignment + evaluation contract
WallRiderLang ↗the language for TRVM worlds, actors and world rules — wrl.traaviis.com
Forgethe compiler, identity and artifact pipeline
TRVM ↗the deterministic execution substrate — trvm.traaviis.com
Spinner Benchthe reference workbench and conformance laboratory
Primitives, not features

What TRAAVIIS is not.

trvs is a thin, honest terminal over an engine that already exists. Its credibility comes from what it refuses to do.

Not a coding agent

trvs builds and proves environments. It is not another Claude Code, not a chat interface.

Not a model router

TRAAVIIS does not embed, select, or route a model. The fold is deterministic; the reward is computed. Evaluation runs an agent command supplied by the user.

Not an RL cloud

Worlds run locally. TRAAVIIS authors environments that export to hosting stacks — it is not the catalog.

Not a game engine

WallRider worlds are deterministic agent environments, not a rendering or physics engine.

Not the language or engine

WallRiderLang defines a world; TRVM/Forge lower and fold it. trvs carries no world semantics.

Not trust-me

Every film is checked by every applicable verifier and content-addressed. Disagreement is exit 1, not a warning.