Skip to content

Bots: cost and strength

gorge ships a handful of bot policies that a host can seat at a table. This page lists them with what each costs to run and the strongest measured claim about how well it plays, so a host operator can pick one and a bot author knows the baselines to beat. Every strength claim below is the one the bot registers in code, with the source it names; every cost marked measured 2026-10-20 was measured for this page at ad3777023. What each policy does and how to choose one is on Bots and strategies.

Where the numbers come from

Each policy registers itself in the bot registry (bots/registry.go) with a bots.Info record: a tier, a description, Strength claims (each with the opponent, the setting and a source) and a Cost. bots/all imports the policies a host offers. The registry is the source of truth (a running server serves it at GET /api/bot-policies); this page is a readable copy of it as of 513a2a0c3 (2026-10-21).

flowchart LR
  subgraph registered["bots/all: hosted policies"]
    bot["bot<br/>(production)"]
    lp["lethal-pressure"]
    fh["forge-heuristic"]
    sbt["sb-tactical"]
    az["az-redeal"]
  end
  bp["bots/botpolicy<br/>+ bots/heuristic"] --> bot
  bp --> lp
  bot -- "same constructor<br/>+ Forge rule families" --> fh
  sb["bots/spellbench/builtins"] --> sbt
  mcts["bots/azmcts"] --> az
  bot -. "plays every unsearched<br/>decision" .-> az

Hosted policies

Policy Tier What it is Strongest registered claim Cost
bot production The default heuristic bot (bots/bot, built on bots/heuristic and bots/botpolicy). On auto-pay tables it simulates combat for attacks and blocks; it answers the London mulligan with Forge's rule. It is also the opponent model inside the search seats. 53.17% [52.68, 53.65] constructed and 53.69% [52.73, 54.64] Commander against the plain auto-pay bot, on held-out auto-pay tables (commit 66aa546dd, before the Forge mulligan); 31.5% [27.1, 36.2] against Forge's AI over 400 games (Forge bridge runs, 2026-10-20) measured 2026-10-20: 7.5 ms per FDN game with manual taps, 9.7 ms with auto-pay, both seats, one core (134 and 103 games per core-second); about 15-22 µs per decision
lethal-pressure experimental The plain heuristic with the AR7 lethal-pressure attack rule; no combat simulation on any table, coin mulligan 51.65% [50.10, 53.20] against the pre-AR7 bot, held-out, manual mana as bot
forge-heuristic experimental The production bot's constructor with every Forge-derived rule family armed: removal timing, targeting, AI hints, deck-shape posture, attachments, spell timing, gang blocks 32.0% [27.6, 36.7] against Forge's AI over 400 games, +0.5 points over bot (inside noise; Forge bridge run, 2026-10-20); 46.8% [41.9, 51.6] against bot before it gained the combat simulation. Rechecked 2026-10-21: 48.2% against bot over 1,320 games, with the bot-vs-bot control at 47.7% as bot (same policy shape; not measured separately)
sb-tactical experimental The SpellBench scored heuristic in its hosted shape: it prices its plays through a payment planner and scores creature values, timing, races and removal from what its seat can see 110-18 against the SpellBench bot arm on the Pauper kernel decks (benchmark seed), 87-41 on FDN mirrors; Elo 1507 against bot's 1242 on the Pauper kernel about 80 ms per game against bot on 8 workers (registered); per-decision time not measured
az-redeal experimental AlphaZero-style tree search: at each searched decision, 100 MCTS simulations over freshly re-dealt worlds rebuilt from the seat's own observations; bot plays every other decision 70.5% [68.5, 72.5] against bot over 2,000 games (+20.5 pp over the 50.0% control); 25-simulation variant rated 1382 against bot's 1264 on the Pauper kernel 216-278 ms mean per searched decision at 100 sims, p95 380-550 ms (registered); measured 2026-10-20: see the MCTS row below

The strength sources are gorge design notes: hosted bot packages, SpellBench agent design (§3.4, §12.5) and the A2 target rules; the Forge AI claims cite their bridge runs. The 2026-10-21 recheck is the matchup program on Bot-vs-bot games (-pairs all -games 20). Percentages are win rates with 95% confidence intervals.

Measured cost, 2026-10-20

From cmd/enginebench at ad3777023, Go 1.26.3, one pinned core (GOMAXPROCS=1) of a Ryzen 9 9950X, load average 5-7, three reps run concurrently on cores 24, 26 and 28, FDN pairs A and B pooled (median and min-max of six runs). The rows are the same runs as the cross-engine comparison.

Policy (both seats) FDN pair A FDN pair B
bot, manual taps 7.45 ms per game (134 games per core-second), 14.7 µs per decision 6.95 ms (144), 14.0 µs
bot, auto-pay 9.70 ms per game (103), 21.5 µs per decision 9.02 ms (111), 21.0 µs
random legal action, auto-pay, for comparison 10.8 ms per game (92.3), 19.7 µs per decision 11.5 ms (86.8), 18.9 µs
az -sims 100 (the azmcts search behind az-redeal, honest re-deal, heuristic leaf), pair A only 88.6 ms of CPU per searched decision, 1,129 simulations per core-second -

The az row is enginebench -row az -sims 100 (build tag enginebench_az), one 30-second run on one core; it times the search alone, not a hosted game, on the FDN pair-A roots (turns 5-8), so it is not the same measurement as the registered 216-278 ms per searched decision, which was taken over whole hosted games with other decks.

The cost of the heuristic bot is mostly the engine, not the policy: a game between two bots takes about the same CPU as a game between two random players (9.6-11.5 ms), because the bot ends games in fewer turns (18 against 23-42); about 15% of a bot game's CPU is the bot's own code (Engine speed). The search seat's cost is the engine too, many times over: each simulation clones and steps a game.

Support packages

Packages the hosted bots and outside policies build on:

Package What it is
bots/botpolicy, bots/heuristic The one heuristic decision policy, and the bot types built on it (NewBot, the attack-simulation bot, the lethal-pressure bot)
bots/sanity The common-sense decorator bot, forge-heuristic and sb-tactical apply when the host asks (gorged -bot-common-sense); it drops, for example, a hostile effect aimed only at the seat's own permanents
bots/azmcts The PUCT tree search behind az-redeal: one seat's searched decisions, a value leaf (a learned value head or a frozen heuristic)
bots/searchseat, bots/searchprobe A perfect-information Monte Carlo search seat, and an experimental history-conditioned search harness with a hidden-information world sampler; neither is a hosted policy
bots/policynet, bots/gonet, bots/netsimd A feature encoder for a learned per-option policy, a pure-Go forward pass for MLP value networks, and an AVX-512 version of that forward pass with a scalar fallback
bots/spellbench (+builtins, payexec) gorge's side of the SpellBench arena: benchmark deck catalogs, the ported builtin bots and sb-tactical, and payexec, which lowers a payment plan onto the manual mana surface
bots/traceboard The redacted per-seat board snapshot schema written into decision-trace records

Evaluating a policy yourself

testkit/bench (PlayGame, RunPairs) plays seeded games and deck-pair matrices between any seat.Seat implementations, with watchdogs and livelock recovery. cmd/enginebench -row bot measures the cost of the default bot on the committed workload decks. The adoption ladder, the evaluation protocol and the rules for bot code are in Bot training and adoption.