New · Nagi Burst V2 · SDK v0.7.0

Write the rules.
Get the decision.

exact lookahead · 3.10M-param core · one CPU thread

Describe a small machine in the mz-1 rules language (not plain English yet). Nagi Burst V2 parses it exactly, searches ahead on that exact model and picks a move every tick. A small learned core only breaks ties the search cannot. Numpy only, no GPU.

Booster Gauntlet · sealed seed #34, the median-margin seed · uncut, real speed, three players (V2, V1, Jev) · full rounds ↓
Unseen machines
0.854mean success on Zoo-Unseen-D, 48 families / 16 domains from a separate author process · gate G lower bounds (unadjusted) 0.760 family, 0.706 domain · PASS
Arena vs Nagi Burst V1
1.000 · 1.000 · 0.979share of 24 sealed seeds won, ties count half (Snake Rush · Rotorwash-Ramp · Booster Gauntlet) · seen games: Snake = search pack, the others = the core's game head without lookahead · gate A PASS ×3
Decision latency
≤ 50.8 mslargest p95 upper bound over every population, Apple M2 (cpu-m2-1t), native arm64, 1 thread · gate L (200 ms) PASS
Learned core
3.10Mparameters, numpy only · on unseen machines it added no measurable gain over the same search (G+ not shown)

On unseen machines, V2G's success comes mainly from exact lookahead on the given rules, which on small machines covers much or all of the reachable state set. The learned core did not measurably add to that lookahead (claim G+ not shown), so we do not claim that learning generalizes.

What we claim

  • The must-pass gates A, G, L and I passed in one frozen, sealed run; the routing gate R failed, so the exact parser path ships, as preregistered. A separate agent recounted every number from the raw receipts with its own code (MATCH; in-house, not third-party).
  • On unseen machines written by a separate author process (48 families, 16 domains), mean success is above 0.60 under the preregistered test (claim NS, a threshold on this full set): θ̂ = 0.854, Holm-matched lower bounds 0.746 (family) and 0.681 (domain).
  • Against Nagi Burst V1 on the same sealed Arena seeds of three seen games, V2 won every seed it did not tie: win share W 1.000 on Snake Rush, 1.000 on Rotorwash-Ramp and 0.979 on Booster Gauntlet, where it landed 23 of 24 rounds and V1 landed none. V2 was replayed offline with the nominal one-tick reply (justified by gate L); V1's numbers are its live records.
  • Latency on one Apple M2 thread: the p95 upper bound is at most 50.8 ms in every population, against a 200 ms gate; the p99 is not gated and reaches 194.6 ms on Snake Rush.
  • The text path gives exactly the decision of the structured path: 0 mismatches in 7,506 requests.

What we do not claim

  • That learning generalizes to unseen machines. Claim G+ is not shown: the core minus the same search is −0.003 (Holm p 1.000).
  • North-star attainment (strong success on unseen kinds of machines at scale). The test machines are small (median 922.5 reachable states). On the subset where the lookahead saw least, success is 0.730 and NS is not shown there (lower bounds 0.485 / 0.398).
  • Strength on every kind of machine. On Rotorwash-like unseen machines success is only 0.484 (descriptive).
  • Reading rules written in plain English. The prose reader got 23 of 48 rulebooks exactly right, so gate R failed and the reader moves to V2.1.
  • Generalization on the Arena games: the core was trained on all three, so they are seen tasks.
  • Any comparison beyond Nagi Burst V1. The release gates compare V2 with V1 only. Jev appears in the clips and the Game Arena for reference, labelled descriptive.

01 / How it works

Exact search first. A small prior for ties.

Every decision goes through the same path. The parts drawn in yellow are exact: they work on the rules you wrote, not on a learned approximation of them, and give the same answer for the same rules, state, session and step. The search is bounded, though: at most 100,000 simulations and depth 40 per decision, so on larger machines it sees only part of the future (on the sealed set it exhausted the tree on 24.9% of decisions). Only the core is learned, and it is only asked when the search finds several moves equally good.

How Nagi Burst V2 makes one decisionRules and state go to the exact parser, which builds the exact machine. A belief step keeps the states that fit what was seen when variables are hidden or replies are delayed. The exact lookahead simulates the machine (at most 100,000 simulations, depth at most 40) and returns the tie set A of moves it cannot tell apart. Only when A holds more than one move is the learned core asked; if its probability that its pick is optimal is at least 0.6, the seeded draw samples the core prior inside A, otherwise it samples uniformly on A. The core never chooses outside A. The draw is replayable with session and step, and returns the choice: one option per control, with probabilities. Exact parts: parser, belief, lookahead, draw. Learned part: the core.Exact: same input, same answerLearned: the coreInput and outputINPUTRules + statemz-1 / mz-1x textand the state nowEXACTExact parsertext → the exactmachine; rejectsrather than guessesEXACTBeliefstates that fitwhat was seen(hidden variables,reply delays)EXACTExact lookaheadsimulates the machine≤ 100,000 simulationsdepth ≤ 40→ tie set AEXACTSeeded drawone move from Aseeded by session+ step: replayableOUTPUTChoiceone option percontrol, and theprobabilitiesALEARNEDLearned coreasked only when A holds more than one movegate: P(its pick is optimal) ≥ τ = 0.6open → the draw uses its prior inside Aclosed → uniform on A; it never leaves AAprior inside AHow Nagi Burst V2 makes one decisionRules and state go to the exact parser, which builds the exact machine. A belief step keeps the states that fit what was seen when variables are hidden or replies are delayed. The exact lookahead simulates the machine (at most 100,000 simulations, depth at most 40) and returns the tie set A of moves it cannot tell apart. Only when A holds more than one move is the learned core asked; if its probability that its pick is optimal is at least 0.6, the seeded draw samples the core prior inside A, otherwise it samples uniformly on A. The core never chooses outside A. The draw is replayable with session and step, and returns the choice: one option per control, with probabilities. Exact parts: parser, belief, lookahead, draw. Learned part: the core.Exact: same input, same answerLearned: the coreInput and outputINPUTRules + statemz-1 / mz-1x textand the current stateEXACTExact parsertext → the exact machine;rejects rather than guessesEXACTBeliefstates that fit what was seen(hidden variables, reply delays)EXACTExact lookahead≤ 100,000 simulations, depth ≤ 40→ tie set A of equally good movesLEARNEDLearned coreasked only when A has several movesgate: P(pick optimal) ≥ τ = 0.6open → the draw uses its prior on Aclosed → uniform on AEXACTSeeded drawone move from A, seeded bysession + step: replayableOUTPUTChoiceone option per controland the probabilitiesA
  1. Reader. Parses mz-1 text (integer variables, controls with DEC / KEEP / INC options, ordered rules, an optional random input, crash conditions, a goal) into the exact machine. mz-1x adds reply delay, hidden variables and a history window. Invalid programs are rejected, never guessed.
  2. Lookahead. Simulates the parsed machine itself: 100,000 simulations per decision, horizon up to 40, with belief tracking when variables are hidden or controls are delayed.
  3. Learned core. Reads the program structure and proposes a prior. It is used only inside the set of moves the search cannot tell apart, and only when its confidence is at least 0.6.

The learned core

Inside the Nagi Burst V2 learned coreOne checkpoint, 3.10M parameters. Zoo branch, for machines: the program as typed tokens (var, rule, item, ctrl, glob; exact features, no names, ids or positions), a trunk with relation-biased attention over 21 relation types, d 128 × 3 layers, and heads for a prior over 27 joints, a success value and p_opt, the confidence gate. On unseen machines the exact lookahead decides and the core only breaks its ties, when P(pick optimal) ≥ 0.6. Game branches: each Arena game has its own encoder and its own trunk copy, ending in per-slot logits: a CNN over a 23×23 window for Snake Rush, MLP encoders for Rotorwash-Ramp and Booster Gauntlet. Where each game is decided: Snake Rush by the SDK search pack (20,000 simulations, horizon 12) with no learned core, so the Snake branch is unused by the released policy; Rotorwash-Ramp and Booster Gauntlet by the core game head, one forward per tick, no lookahead.Search: no learned weightsLearned: one checkpoint, 3.10M parametersIn the checkpoint, unused by the released policyINPUT AND ENCODERTRUNKOUTPUTWHERE IT DECIDESINPUTYour machinetyped tokens: var, rule, item,ctrl, glob · exact featuresno names, ids or positionsLEARNEDZoo trunkrelation-biased attention21 relation typesd 128 × 3 layersLEARNEDHeadsprior over 27 jointssuccess valuep_opt: the confidence gateSEARCHUnseen machinesexact lookahead decides;the core only breaks its tiesif P(pick optimal) ≥ 0.6GAME BRANCHES · EACH GAME HAS ITS OWN ENCODER AND TRUNK COPYSnake RushCNN encoderover a 23×23 windowOwn trunk copysame size as the Zoo trunkno relation biasPer-slot logitsone set of logitsper controlLEARNEDRotorwash-RampMLP encoderon the parsed viewLEARNEDOwn trunk copysame size as the Zoo trunkno relation biasLEARNEDPer-slot logitsone set of logitsper controlLEARNEDBooster GauntletMLP encoderon the parsed viewLEARNEDOwn trunk copysame size as the Zoo trunkno relation biasLEARNEDPer-slot logitsone set of logitsper controlSEARCHSDK search pack20,000 simulations, horizon 12no learned core×LEARNEDCore game headplays Rotorwash-Ramp andBooster Gauntlet: per-slotargmax, one forward per tick,no lookaheadInside the Nagi Burst V2 learned coreOne checkpoint, 3.10M parameters. Zoo branch, for machines: the program as typed tokens (var, rule, item, ctrl, glob; exact features, no names, ids or positions), a trunk with relation-biased attention over 21 relation types, d 128 × 3 layers, and heads for a prior over 27 joints, a success value and p_opt, the confidence gate. On unseen machines the exact lookahead decides and the core only breaks its ties, when P(pick optimal) ≥ 0.6. Game branches: each Arena game has its own encoder and its own trunk copy, ending in per-slot logits: a CNN over a 23×23 window for Snake Rush, MLP encoders for Rotorwash-Ramp and Booster Gauntlet. Where each game is decided: Snake Rush by the SDK search pack (20,000 simulations, horizon 12) with no learned core, so the Snake branch is unused by the released policy; Rotorwash-Ramp and Booster Gauntlet by the core game head, one forward per tick, no lookahead.Search: no learned weightsLearned: one checkpoint, 3.10M parametersUnused by the released policyZOO BRANCH · MACHINESINPUTYour machinetyped tokens: var, rule, item,ctrl, glob; exact featuresno names, ids or positionsLEARNEDZoo trunkrelation-biased attention21 relation types · d 128 × 3 layersLEARNEDHeadsprior over 27 joints · success valuep_opt: the confidence gateSEARCHUnseen machinesexact lookahead decides; the coreonly breaks its ties, whenP(pick optimal) ≥ 0.6GAME BRANCHES · OWN TRUNK COPY EACHSNAKE RUSHUNUSEDCNN encoder23×23 windowown trunk → logitsSEARCHSDK search pack20,000 simulationshorizon 12, no core×ROTORWASH-RAMPLEARNEDMLP encoderon the parsed viewown trunk → logitsLEARNEDCore game headone forward per tickno lookaheadBOOSTER GAUNTLETLEARNEDMLP encoderon the parsed viewown trunk → logitsLEARNEDCore game headone forward per tickno lookahead

On the three Arena games the released policies differ: on Snake Rush the SDK Snake search pack plays (20,000 simulations, horizon 12, no learned core); on Rotorwash-Ramp and Booster Gauntlet the core's game head plays without lookahead.

02 / See it play

Watch the sealed rounds.

One full round per game, at real speed, from the recorded controls: Nagi Burst V2, Nagi Burst V1 and Jev on the same sealed seed. The seed is fixed by a rule, not picked.

Snake Rush · median-margin sealed seed #32
V2 48.25 s · V1 11.00 s · Jev 3.50 s (survival_s (s, censored at 60 s))
V2: offline 1-tick replies; V1, Jev: live records
Rotorwash-Ramp · median-margin sealed seed #44
V2 1.05 · V1 0.30 · Jev 0.25 (K3-RR2.1 Y)
V2: offline 1-tick replies; V1, Jev: live records
Booster Gauntlet · median-margin sealed seed #34
V2 1.00 · V1 0.00 · Jev 0.00 (K3 Y (first hop))
V2: offline 1-tick replies; V1, Jev: live records

Each clip replays one sealed round from the recorded controls, three players on the same seed: Nagi Burst V2, Nagi Burst V1 and, for reference only, Jev (descriptive; the release gates compare with V1 only). The seed is fixed by a rule, not picked: the round at the median of V2's per-seed margin over Jev, so each clip shows a typical round, not V2's best. Rotorwash-Ramp's median seed #38 could not be replayed exactly for V1 on the render host, so the rule's fallback (the next seed by distance to the median) gave #44. Raw full rounds at real speed: no cuts, no slow motion; the last frame holds for about a second on the per-seat scores. Every on-screen score equals its record; render receipt arena_v2_videos.json.

Highlights: V2's best 3 of 24 sealed seeds per game, by V2 score (ties: larger V2-V1 margin, then lowest seed; Rotorwash-Ramp #42 skipped for replay drift). Same seeds for all three seats. · raw full rounds back to back, chosen by score, so not typical: the per-game clips above are the typical rounds.

Every seed, every score: the Game Arena

03 / Benchmarks

One sealed run. Every gate receipted.

The candidate (core, search configuration, policies) was frozen before any sealed data was touched. Each step ran exactly once: the prose reader test R, the sealed policy runs, latency and interface, the analysis, and a recount by a separate agent that recomputed every number from the raw receipts with its own code (in-house, not third-party). R decides which path ships: it failed, so V2 ships the exact parser path.

Terms used below

W: share of seeds won in a paired comparison, ties count half. θ̂: estimated mean success over families. Δ̂+: success of the core plus search minus the same search without the core. NS: the claim that mean success on the unseen set is above the threshold. G+: the claim that the learned core adds to the same search. LODO: leave one domain out. C8: the preregistered rule that every unseen-task number reports how much of each machine the search saw. K3 Y: the landing-quality score of a Booster or Rotorwash round. cpu-m2-1t: one thread on an Apple M2. V2G: the research name of Burst V2. mz-1: the Nagi machine language.

Release gates, frozen sealed run (bounds: one-sided 97.5%)
GateWhat it testsEstimateLower boundsRuleResult
AArena vs Nagi Burst V1 (seen games)W 1.000 · 1.000 · 0.979t lower 1.000 · 1.000 · 0.936t lower bound of W above one half and sign-flip p ≤ 0.025, per gamePASS ×3
GUnseen machines, Zoo-Unseen-Dθ̂ 0.8540.760 family · 0.706 domain · LODO 0.844θ̂ ≥ 0.50; both lower bounds > 0.40; leave-one-domain-out ≥ 0.50PASS
LLatency, one threadp95 ≤ 50.8 ms (upper bound)4 populations, cpu-m2-1tp95 upper bound ≤ 200 ms in every populationPASS
IText path = structured path0 mismatches / 7,506rate upper bound 0.040% (rule of three, 95%)identical probability vectors and drawsPASS
RProse reader (routes the shipped path)23/48 families exactπ̂ 0.479 · CP lower 0.333π̂ ≥ 0.95 and CP lower bound > 0.85; FAIL ships the parser pathFAIL

Decision: RELEASE on the parser path. In-house recount of every number by a separate agent: MATCH.

Arena: V2 against Nagi Burst V1

The comparator is our previous release, Nagi Burst V1 (Nagi-ENORMOUS-Burst, a 27B model), through its pinned live evaluation records on the same seeds. This is release gate A, the claim. All three games were in V2's training data.

Gate A · V2 vs Nagi Burst V1 on the same sealed seeds (paired)
GameMetricnV2 meanV1 meanWins / ties / lossesWt lower 97.5% (gate)Exact lower 97.5% (win rate, untied)Sign-flip pGate
Snake Rushsurvival_s (s, censored at 60 s)2450.7 s12.6 s24 / 0 / 01.0001.0000.8586.0e-08PASS
Rotorwash-RampK3-RR2.1 Y241.050.3524 / 0 / 01.0001.0000.8586.0e-08PASS
Booster GauntletK3 Y (first hop)240.960.0023 / 1 / 00.9790.9360.8521.2e-07PASS

Seeds: Snake 10–33, Rotorwash-Ramp and Booster 34–57; 250 ms ticks; reply profile: nominal 1-tick (decision for boundary t applies at t+1). Booster: 23/24 landed (rule: at least 6); V1 landed none, and a Booster round is its first hop. V2's own rounds replay exactly from their recorded controls: 72/72. With no losses the t bound of the gate is degenerate (it equals W), so the exact Clopper–Pearson column shows the real uncertainty. Gate A tests improvement over V1, our previous release, and nothing else; V1 never landed a Booster hop, so that game says little about absolute skill.

Arena with Jev, for reference

Jev (jev-1.13.0, an outside vendor model served by API) played the same seeds; its single-stream records were pinned before V2 played. The preregistration made every Jev comparison descriptive, so these rows show counts only, with no test and no claim. Timing differs: V2 was replayed offline with one-tick replies, while the V1 and Jev numbers are live records, where a slow reply lands later.

Unseen machines: Zoo-Unseen-D

The test machines were written by Claude Opus agents in a separate author process from the training authors, checked by blind review and an exact oracle, kept hash-only until the single sealed run, and opened once. Each family groups related machines; families are grouped into domains. A machine's success is the share of its 16 episodes (each capped at 100 ticks) that reach the goal; θ̂ is the mean over families. Two research claims were preregistered next to the gates and tested together with a Holm correction: NS asks whether mean success is above the threshold; G+ asks whether the learned core adds anything to the same lookahead at the same latency cap.

Research claims · Holm over {G+, NS} at α = 0.025 · never gates
ClaimEstimatepHolm levelLower bounds (family / domain)Result
NS · mean success on unseen machines above 0.600.8540.001170.01250.746 / 0.681shown
G+ · the learned core adds to the same lookahead at the same latency cap (Δ̂+)−0.0031.0000.025−0.009 / −0.011not shown

Reference: every Zoo-Unseen-D machine was admitted only if an exact oracle succeeds at least 0.95 of the time (48 families / 16 domains). V2 θ̂ 0.854; the same search with no core 0.857. The gap is the planner's: mostly the Rotorwash-like stratum (0.484) and 3 domains below 0.60, which hold 88.4% of the failed episodes.

Zoo-Unseen-D success θ̂ by stratum (descriptive, no test) · Δ̂+ = core minus the same search without it
  • Snake-like12 families · Δ̂+ −0.0030.997
  • Booster-like12 families · Δ̂+ −0.0030.953
  • Mixed12 families · Δ̂+ +0.0050.982
  • Rotorwash-like12 families · Δ̂+ −0.0130.484

How much of each machine the lookahead saw

C8 · how much of each test machine the lookahead saw (candidate run)
Scored machines / decisions96 / 46,966
Reachable states per machine: min / median / max72 / 922.5 / 25,921
Machines with at most a thousand / twenty thousand reachable states52.1% / 95.8%
Decisions where the search exhausted the tree24.9%
High-coverage decisions (exhausted, or saw at least half the machine)48.3%
Low-coverage subset: machines · families / domains · θ̂ (descriptive)26 · 14 / 9 · 0.730
Low-coverage subset: lower bounds family / domain (NS needs > 0.60)0.485 / 0.398
Machines larger than the search budget (policy-free subset)0

Only the low-coverage subset says something about machines the search cannot cover, and there NS is not shown. Its lower bounds sit below the NS threshold, so the full-set number is not north-star attainment.

Descriptive checks

Latency

Measured single-threaded on the serving class cpu-m2-1t. The gate bounds the p95 from above; the p99 is reported, not gated. Booster Gauntlet rounds are short, so it has fewer requests than the target sample and every one was used.

Gate L · Apple M2 (cpu-m2-1t), native arm64, 1 thread
PopulationRequestsp50p95p95 upper bound (gate ≤ 200 ms)p99 (reported)Share > 250 ms
Zoo-Unseen-D (unseen machines)2,0009.6 ms41.1 ms41.8 ms44.5 ms0.00%
Snake Rush2,0000.8 ms38.0 ms50.8 ms194.6 ms0.05%
Rotorwash-Ramp2,0000.4 ms0.5 ms0.5 ms0.6 ms0.00%
Booster Gauntlet1,5060.5 ms0.6 ms0.7 ms0.8 ms0.00%

04 / What we learned

With the rules given, search does the work.

On unseen machines, V2G's success comes mainly from exact lookahead on the given rules, which on small machines covers much or all of the reachable state set.

Why the learned core could not help

The learned core added nothing measurable on unseen machines: Δ̂+ = −0.003, so claim G+ is not shown. By construction that was close to certain. The core may only reorder moves that the exact search already rates as tied for best. When the tied moves are all truly optimal, the run with the core and the run with search alone both play optimally and cannot differ; the core matters only where a tie hides a worse move.

And the test machines are small for the search: the median machine has 922.5 reachable states and the largest 25,921, against 100,000 simulations per decision. The search exhausted its tree on 24.9% of decisions, and 48.3% were high-coverage. The same search with no core (and a slightly larger budget) scores 0.857. So this null answers a narrow question (does a tie-breaking prior help a near-exhaustive search on small machines?), not whether learning can generalize. That needs machines the search cannot cover: E2 below.

The prose reader failed, in line with the literature

Our small (0.8B-parameter) prose reader turned 23 of 48 sealed rulebooks into exactly the right machine (gate R FAIL). With it in front, success on unseen machines would be 0.469 instead of 0.854, so V2 ships the exact parser. That is in line with published results: strict semantic checks are much harsher than "it parses". Planetarium (NAACL 2025) reports GPT-4o at 96.1% parseable and 94.4% solvable, but only 24.8% semantically correct, and small open models are known to be weak formalizers without inference-time scaffolding. Our transition-exact check is a strict test of the same kind.

The planner leaves success on the table

Every Zoo-Unseen-D machine was admitted only if an exact oracle, a policy solved offline from the rules with no privileged view of hidden state, succeeds at least 0.95 of the time. That floor was fixed in the family gate on 2026-10-12, before the test set was assembled under it (2026-10-13; the preregistration had defined the test populations the day before). V2 scores 0.854 and the same search with no core 0.857: at least 0.096 below the oracle's mean on the same machines (V2's score is an estimate, the oracle's is exact).

The shortfall is concentrated. The Rotorwash-like stratum scores 0.484. Of the 16 domains, 3 score below 0.60 (cargo airdrop 0.146 · avalanche control 0.333 · rail hump yard 0.458), all of them Rotorwash-like, and they hold 88.4% of the failed test episodes. The open explanations: V2 cannot plan to gather information (it averages its lookahead over the possible hidden states), its lookahead is too shallow, or its leaf values are too crude. E1 is designed to tell them apart.

Where it sits

V2 is a model-based planner: it is told the rules and searches them. That family is well studied, and in it generalization to unseen tasks comes from search on a given model, which is what C8 found for V2. Our own review says it plainly: every part that produces V2's unseen-task success is textbook material, and what is worth showing is the evaluation method.

What is narrowly ours: the learned prior can only reorder the planner's exact ties, so it can never pick a move the planner proves worse (safe by construction, and the reason it could not help here); the C8 rule that every unseen-task number carries how much of the state space the search saw; and the protocol below. The full review lists 57 references; on this page, works the review could not re-check are named without venue or year.

What comes next

The Zoo-Unseen benchmark itself will be released with the Nagi Machine Zoo data (coming), so others can run these comparisons too.

No result is claimed for any of these. Each gets a preregistration with its refutation rule before it runs.

05 / Method

Why you can check the numbers.

The release followed one fixed order, and every step left a dated, hashed receipt.

From the preregistration freeze to publication took about 29 hours (times UTC+7). Cloud GPU spend for all of V2-general: $25.16, billed as finalized provider bills over 4 closed ledgers, with $0.00 still reserved; the frozen evaluation itself cost $0.20.

Dated errata and deviations

Departures from the plan, each dated in the run book and checked by the in-house recount, which found that the errata change no number and that the deviation favours the comparator:

Sources: AUDIT_M4.md (errata and process notes), CANDIDATE.json (dated deviation), timeline.json (commit times), budget_m4.json (closed ledgers), zoo_d_admission.json (the admission rule above) and RELATED_WORK.md.

Every number on this page is stamped from the files below by the page builder, which re-derives them and fails on any mismatch. data.json maps each number to its file, JSON key and sha256.

06 / Use it

Install. Describe. Decide.

Burst V2 ships in the Nagi SDK v0.7.0 as the module nagi.burst2. The core is one small numpy file. It downloads from Hugging Face at a revision pinned in the SDK and is checked against its sha256 before use.

# the SDK (module nagi.burst2), pinned to this release
python -m pip install "nagi-decisions @ git+https://github.com/nagisanzenin/nagi.git@v0.7.0"

Write the machine as text, then ask for a decision. The quickstart from the README:

from nagi.burst2 import load_core, operate

RULES = """machine mz-1
vars:
  x in [0, 6], start {3}, out of range: clamp
controls:
  @m: DEC -1, KEEP 0, INC 1
random $w: none
rules (in order, each tick):
  1. x := x + @m
crash if any holds:
  1. all(x <= -1)
goal: all(x == 6)
"""
core = load_core()   # nagisanzeninz/Nagi-Burst-V2, pinned revision, sha256-checked
out = operate(RULES, {"x": 3}, {"core": core, "session": "episode-1", "step": 0})
print(out["choice"], out["probabilities"])   # {'m': 'inc'} {'m': {'dec': 0.0, 'keep': 0.0, 'inc': 1.0}}

The output is {"choice", "joint", "probabilities", "joint_probabilities", "stats"}. The defaults are the released configuration; changing them gives a configuration that was not evaluated. Pass a session and an increasing step to make every draw replayable.

Example: a delivery robot

Your own game stays your own code; Nagi only needs its rules. A robot on a small grid must pick up a parcel and deliver it before its battery runs out, and standing on a charger adds battery. With these rules and session robot-1, Nagi delivers after 9 ticks.

machine mz-1
vars:
  x in [0, 4], start {0}, out of range: clamp
  y in [0, 4], start {0}, out of range: clamp
  battery in [0, 10], start {8}, out of range: clamp
  parcel in [0, 1], start {0}, out of range: clamp
controls:
  @dx: DEC -1, KEEP 0, INC 1
  @dy: DEC -1, KEEP 0, INC 1
random $w: none
rules (in order, each tick):
  1. x := x + @dx
  2. y := y + @dy
  3. battery := battery - abs(@dx) - abs(@dy)
  4. if all(x == 4, y == 0): parcel := 1
  5. if all(x == 2, y == 2): battery := battery + 4
crash if any holds:
  1. all(battery <= 0)
goal: all(parcel == 1, x == 0, y == 4)

The full example: your game class, the loop, every tick, and how to read out["stats"] ↗

Open data: the Nagi Machine Zoo

The machines, their prose, the exact-oracle labels and the opened Zoo-Unseen-D benchmark are public. V2 scores 0.854 on Zoo-Unseen-D, where an exact oracle reaches at least 0.95 on every machine. Can you close the gap?

Know the edges

07 / FAQ

Straight answers.

Is this just a planner?

On unseen machines, mostly yes, and the release says so in its binding sentence: On unseen machines, V2G's success comes mainly from exact lookahead on the given rules, which on small machines covers much or all of the reachable state set. The learned core only reorders moves the search rates as tied. On Rotorwash-Ramp and Booster Gauntlet a learned game head acts every tick without lookahead, but those games were in its training data. On Snake Rush, V2 plays a search pack (20,000 simulations) with no learned core.

Why does learning add nothing?

Because there was little left for it to decide. The core may only break the search's ties, and on machines this small the search covers much or all of the machine: median 922.5 reachable states against 100,000 simulations per decision. Claim G+ is not shown (Δ̂+ = −0.003). Whether learning helps where search cannot cover is E2.

Can it read rules written in English?

Not in this release. The prose reader got 23 of 48 sealed rulebooks exactly right, and success through it would fall to 0.469. V2 ships the exact parser for the Nagi machine language; a better reader and an adapter for external LLM readers are planned for V2.1.

Does it beat Jev?

We do not claim that. The release gates compare V2 with Nagi Burst V1 only. Jev played the same sealed Arena seeds, but that comparison was preregistered as descriptive: no test and no claim. Descriptively, on those 72 seeds V2 scored higher on 71, the same on 1 and lower on 0. Read that with its caveats: V2 was played offline with the nominal one-tick reply (justified by its latency gate), while Jev's scores come from live records through a vendor API, where a slow reply lands later; and V2's core was trained on these games. See the Game Arena.

What can't it do?

Read plain-English rules (V2.1). Say anything about large machines: the sealed set had 0 families larger than the search budget. Plan for a rule you left out. Plan to gather information about hidden variables (it averages over them). Promise its latency on hardware other than the measured Apple M2. See Know the edges.

How do I cite it?
@misc{nagi_burst_v2,
  author  = {{Nagi}},
  title   = {Nagi Burst V2: exact lookahead on rules you write},
  year    = {2026},
  version = {v0.7.0},
  url     = {https://github.com/nagisanzenin/nagi},
  note    = {Model: https://huggingface.co/nagisanzeninz/Nagi-Burst-V2, revision 803cdcbb384c81c0a7411aa65fe058b933a4545b}
}