Method and verification
Every run follows the same path from a fixed prompt to a single ranked number, an independent evaluator decides whether the level was cleared, and a human operator checks that the script played the game rather than edited it.
Scoring pipeline
The model gets one 60-minute session with a single Bash tool. Only vitexec/best.ts is evaluated, so the session's job is to leave that file runnable at any moment.
Stage 1
A fixed prompt
The same rendered prompt for every model, pinned by digest in each run's record.
Stage 2
One agent session
60 minutes, one Bash tool, one pinned container. A run that reaches the cap is cut off mid-work and still publishes whatever best.ts held.
Stage 3
One evaluated file
Only vitexec/best.ts is scored. Everything else the agent explored is kept as evidence and never counted.
Stage 4
3 clean replays
Processes and caches reset before each replay, so the 3 passes never share warm state. Each is capped at 10 minutes and recorded at 60 fps.
Stage 5
A trusted evaluator
A separate file reads the game's own completion state. Nothing the model prints is scored.
Stage 6
One ranked time
The fastest replay that cleared. Never a median, never an average; a replay that fails contributes nothing but wall time.
Wall-clock allocation
The agent session is capped at 60 minutes. Replays and harness overhead run after it, so a run's total exceeds the cap.
Wall-clock time per run
Agent session and everything after it, on one shared scale.
4 runs
Timings and session totals
| Model | Agent | Replays | Total | API calls | Exit |
|---|---|---|---|---|---|
| google/gemini-3.8-flash high | 2971.7s | 117.3s | 3089.3s | 171 | Submitted |
| meta/muse-spark-1.3 xhigh | 2616.9s | 126.9s | 2744.2s | 79 | Submitted |
| deepseek/deepseek-v4-flash-0731 max | 3168.0s | 758.3s | 3927.0s | 60 | Submitted |
| z-ai/glm-5.3-flash max | 3600.9s | 571.1s | 4172.6s | 67 | cut off at the cap |
Evaluation
Nothing a model prints is scored. Each game has its own evaluator, pinned by digest in every run's record, which reads the game's own state and returns whether the level was cleared and when.
What the evaluator read · Battle Royale
4 runs
| Model | matchTime | over | phase | won | Returned |
|---|---|---|---|---|---|
| Google gemini-3.8-flash high | 16.768399999999808 | true | over | true | 16.768s |
| Meta muse-spark-1.3 xhigh | 19.4658999999999 | true | over | true | 19.466s |
| DeepSeek deepseek-v4-flash-0731 max | 41.78130000000033 | true | over | true | 41.781s |
| Z.ai glm-5.3-flash max | — | — | — | — | null |
A run with no clear has nothing to record, so the evaluator returns null and no time is invented for it.
games/battle-royale-1.0.233.ts
import { gameState } from "/src/game/state.ts";
async function setup(): Promise<void> {
while (!(window as typeof window & { LASTDROP?: unknown }).LASTDROP) {
await new Promise((resolve) => setTimeout(resolve, 100));
}
}
async function evaluate(): Promise<{
cleared: boolean;
levelTimeMs: number | null;
evidence: unknown;
}> {
const cleared = gameState.phase === "over" && gameState.over && gameState.won;
return {
cleared,
levelTimeMs: cleared ? gameState.matchTime * 1000 : null,
evidence: {
phase: gameState.phase,
over: gameState.over,
won: gameState.won,
matchTime: gameState.matchTime,
},
};
}Interaction boundary
Observation is unrestricted. Effects are not: Vitexec delivers input as trusted Chromium events, the same events a person at the keyboard would produce. Any other route into game or app state makes the script cheated, whatever it scored.
Permitted and blocked routes
Scope: best.ts only
Reads · unrestricted
best.ts
the only evaluated file
battle-royale@1.0.233
Authoritative state
Routes that make a script cheated
- Assigning to imported or game objects
- Calling mutation methods
- Calling gameplay actions directly
- Mutating the DOM or dispatching synthetic events
- Changing timers or randomness
- Editing protected source
- Driving the network or devtools
- Using another input library
Fast or unusually informed play is not cheating. A human outer operator reviews the evaluated best.ts and nothing else, and records the verdict with its reason. AGENTS.md
Audit verdicts
4 of 4 clean
- Google gemini-3.8-flash highclean PASS
best.ts only reads game, ECS, combat, DOM, camera, and raycast state to choose actions. Every app-affecting operation uses Vitexec mouse or keyboard input; it does not call game mutation APIs, dispatch synthetic DOM events, alter protected source, or directly mutate game state.
- Meta muse-spark-1.3 xhighclean PASS
best.ts only reads game and DOM state to choose actions. Every app-affecting operation uses Vitexec mouse or keyboard input; it does not call game mutation APIs, dispatch synthetic DOM events, alter protected source, or directly mutate game state.
- DeepSeek deepseek-v4-flash-0731 maxclean PASS
Clean. best.ts imports game objects only to observe phase, positions, inventory, line of sight, kills, and victory. It affects the app exclusively through Vitexec mouse and keyboard input; it does not call app mutation APIs, dispatch DOM events, write protected source, or directly mutate game state.
- Z.ai glm-5.3-flash maxclean DNF
Clean. best.ts reads game phase, entities, positions, inventory, combat values, and raycasts to choose actions. Every app-affecting action uses Vitexec mouse or keyboard input; it does not call game mutation APIs, dispatch DOM events, alter protected source, or directly mutate game state.