System1Doom
Harness where Jev or Laya pick DOOM tactics and targets from legal options while a deterministic controller presses buttons.
Overview
s1doom lets text-only System One decision models play classic DOOM through ViZDoom. Code converts the engine state into compact JSON and a few atomic typed questions whose options are only the actions legal at that moment; the model picks the tactic and target, and a deterministic controller turns that into button presses every tic. The guiding rule is that code computes geometry and the model makes the judgment.
Supported backends include TypeSafe Jev over HTTP with retries, a circuit breaker and call budget, Laya in-process or over HTTP, SemIf, Clef and any Jev-compatible server, plus heuristic and random baselines. Tools cover play, multi-backend evaluation, backend benchmarking, calibration from logged runs, map inspection, replay and reporting. The README reports milestone results such as Jev exiting Freedoom2 MAP01 on 7 of 10 seeds, rising to 10 of 10 after an unseen-attacker fix, and includes 36 tests.
What the decision model decides
| Type | Question | Answers |
|---|---|---|
| Choice | Which tactic should the player use now?(inferred) | — |
| Choice | Which target should the player engage?(inferred) | — |
How it works
- Serialize the ViZDoom state into compact JSON.
- Build typed questions whose options are only currently legal actions.
- Ask the selected backend; fall back to the heuristic if confidence is low or calls fail.
- The deterministic controller executes the chosen tactic every tic.
- Log answers for replay, calibration and reports.
Strengths
- Clear split between geometry code and model judgment.
- Many interchangeable backends, including local open models.
- Replay and calibration tooling from logged runs.
Caveats
- No licence stated in the README.
- Jev backend needs a TypeSafe key; local Laya relied on fallback often in reported runs.
Getting started
uv sync, then uv run s1doom play --scenario freedoom2_map01 --backend jev --overlay --window.At a glance
- Type
- Model
- Status
- research
- Language
- Python
- Runtime
- CLI (ViZDoom)
- Has code
- yes
- Has tests
- yes
- Stars
- 0
Use cases and integrations
How curated lists describe it
System One models (TypeSafe Jev, Laya) play DOOM via ViZDoom: typed decisions + deterministic controller
wh000wh000/awesome-jev-live
Frequently asked questions
What does the model control?
Only the tactic and target choice from legal options; a deterministic controller handles movement and aiming every tic.
Which models can play?
Jev, Laya, SemIf, Clef and any server speaking the Jev /v1/systemone protocol, plus heuristic and random baselines.
How well does it play?
The README reports Jev completing Freedoom2 MAP01 on 10 of 10 seeds after its unseen-attacker fix.
Related projects
RPG experiment pitting Jev against OpenAI's Decisions API as NPCs, comparing wins, per-move accuracy, calibration and cost.
ServiceresearchPythonInstrumented 2048 web lab where every move is a Jev Choice over four directions, with probabilities, latency and cost shown live.
ProjectbetaTypeScriptFifteen live arcade games where Jev and LLMs play each other, led by WikiRace in which Jev picks only real links.
ProjectbetaTypeScriptOne-page web app where Jev plays chess against OpenRouter LLMs, Stockfish or you, showing the moves it weighed and their probabilities.
AppbetaJavaScriptPac-Man where Jev or other System One models choose each move at junctions, with live odds, fallbacks and a leaderboard.
ProjectbetaTypeScriptBilingual turtle-soup (lateral-thinking) puzzle site where Jev acts as host, judging player questions and grading solutions.
AppbetaTypeScript