It decides at the network boundary.

Responses and push messages are judged before your app sees them. Cheap facts are computed for everything; only salient situations reach the model, so normal traffic costs nothing.

Illustration of the failure GenClass targets, drawn for this page with the report line shortened; the real line format is on the docs. Without GenClass the app renders "pa" results under a search box that says "paris". In observe mode, the default, GenClass reports this and delivers the response unchanged; in guard mode, opt-in, it can discard the write when its gate clears.

The pipeline

From fetch to report in six steps.

01

Observe

Instruments fetch, XHR, WebSocket, EventSource, DOM events, errors, storage and timers, and links async work into causal chains.

02

Learn

Builds per-operation baselines for latency, failure and request rate, and relations that keep holding, like total == sum(price × qty).

03

Triage

Computes facts for every write and request. Only a response over newer data, a repeat, a failure streak or a broken relation goes to the model.

04

Decide

An 8.8M-parameter model (8.1M encoder, 0.7M heads) in a Web Worker reads the situation and returns a calibrated diagnosis and action.

05

Act, if you opt in

Only in guard or heal mode, and only when acting beats doing nothing by the margin of the profile you chose: cautious, balanced or eager. At the shipped setting that is rare: under 8% of the cases where acting would help.

06

Explain

Every call is logged in plain English. rt.explain(id) returns the exact text the model read, and reversible actions can be undone.

ModeWhat it doesActions
observe · defaultReports likely problems with the evidence. Never holds, delays or changes anything.none
guard · opt-inSmall, reversible actions at the network boundary when the model's gate says acting clearly wins.discarddefercoalescedelay
heal · experimentalThe full action set, with idempotency-aware retries and a breaker that downgrades it after undos.retryserve_cachedhedgerollbackresync
Training

Trained in a simulated world, checked in real browsers.

Nobody has a dataset of what should have happened during a production race, so we built a world that generates one. Random apps run on the real runtime inside a deterministic simulator. For every decision, each candidate action is replayed and its cost measured, and the label is whatever turned out best. CPU nodes only, no GPUs.

SourceRows, log scaleRows
Simulated, unlabeled: generated for teacher labelling, not used for training yet
51,272,078
Simulated gold, format v2, 115 app domains
10,423,855
On-policy rounds: the model acting in the simulator
2,343,084
Simulated gold, v2.3 top-up
2,107,824
Simulated, format v1 (superseded; trained earlier rounds only)
2,000,000
Curriculum, exact labels
~1,900,000
Real browsers, gold: 158 apps, 40+ stacks
837,623
Real browsers, unlabeled: not used for training yet
~523,000
Real-app certification set: fits the action gates, not the weights
427,576
Real-app eval set, never trained on
16,600

About 17.6 million labeled rows (simulated gold, on-policy rounds, curriculum and real-browser gold) are what the shipped model trained on. The 51.8 million unlabeled rows were generated for a teacher-labelling step that was skipped because the 150M teacher did not beat the student; they are not used for training yet. The eval set is never trained on.

How a label is made

One decision, every possible future. The label is the cheapest outcome given only what the runtime could have known at that moment.

28 hours, from pruning to model 0.2.0
  1. Day 1, 13:00Vocabulary pruned to 16k tokens; the model shrinks to about 10 MB
  2. Day 1, 18:00Curriculum stage on 10 nodes: 1.2M exact-label rows
  3. Day 1, 23:20Situation format frozen; 600k simulated rows in 41 minutes
  4. Day 2, 04:00Format v2: 10.4M gold rows on 20 nodes in about 31 minutes
  5. Day 2, 06:15Real-browser gold mixed in; a 150M-parameter teacher trains alongside
  6. Day 2, 08:34On-policy rounds: the model acts inside the simulator and learns from its mistakes
  7. Day 2, 16:35Gates certified on 427k real-app rows; model 0.2.0 ships