jev-doom-agent
Browser Doom experiment where two WebAssembly engines play from the same start and Jev picks tactical macros from structured state.
Overview
PROMPT FPS runs two isolated instances of the real Chocolate Doom 3.1.1 engine compiled to WebAssembly, playing the same Freedoom map from the same initial state. Each step, a Jev Choice (or a clearly labelled deterministic offline policy) selects a tactical macro, and a local motor controller turns it into movement, turning, firing, weapon or use inputs. Jev receives structured game state such as health, ammo, coordinates and visible monsters and pickups, not pixels.
The server validates choice, probabilities and confidence; failed or low-confidence calls are visibly marked FALLBACK and never silently replaced, and offline mode permanently shows 'OFFLINE SIMULATED POLICY — NOT JEV'. The TypeSafe key is sent once to the local server, kept only in memory and removed on disconnect. It ships only Freedoom, and includes unit, schema, policy and controller tests, a Chromium smoke test and video capture.
What the decision model decides
| Type | Question | Answers |
|---|---|---|
| Choice | Which tactical macro should the player execute next? | — |
How it works
- Engine bridge exposes health, armour, ammo, position and visible entities
- Browser converts observations to a bounded tactical schema
- Jev chooses a macro; validate confidence or mark FALLBACK
- Motor controller executes the macro as Doom inputs
Strengths
- Same-start comparison of two players
- Honest labelling of fallback and offline modes
- Key held only in memory
Caveats
- Experiment, not a game AI product
- Live play requires a TypeSafe key
Getting started
`npm install && npm run dev`, open http://127.0.0.1:5173/compare, click Connect Jev and paste a TypeSafe key.At a glance
- Type
- Service
- Status
- prototype
- Language
- TypeScript
- Runtime
- Browser (Chocolate Doom WASM) with Node/Vite server
- Has code
- yes
- Has tests
- yes
Use cases and integrations
How curated lists describe it
Browser-native Doom with Chocolate Doom WASM, spatial state, and live decision telemetry.
AnotiaWang/awesome-decision-modelsA browser Doom experiment comparing Jev-controlled players from the same initial state.
logicrw/awesome-jev-projectsA browser-native Doom agent experiment with structured spatial state, composable AI controls, live decision telemetry, and a Chocolate Doom WebAssembly runtime.
hellogumbo/awesome-jev
Frequently asked questions
What does Jev decide?
Which tactical macro the player should run next.
Does Jev see the screen?
No, it receives structured state from the engine, not pixels.
What if Jev fails?
The step is visibly marked FALLBACK; it is never disguised as a Jev decision.
Related projects
Observable browser stealth game where Jev supplies guards' typed threat, suspicion and intent judgments while code owns the world.
AppprototypeTypeScriptLocal dashboard to watch Jev play Freedoom via ViZDoom, showing choices, probabilities, latency and cost with spending bounds.
ServiceprototypePythonAI life-and-civilization simulation where Jev makes every person's next action as an auditable Choice and LLMs only plan.
ProjectprototypeJavaScriptSource for browser chess and Chess960 where code computes each legal move's facts and Jev picks one per turn as a typed Choice.
ProjectproductionTypeScriptBrowser 1v1 sniper arena where Jev reads match state about 9 times a second and chooses movement, aim, ADS, firing and jumping.
ServicebetaTypeScriptInstrumented 2048 web lab where every move is a Jev Choice over four directions, with probabilities, latency and cost shown live.
ProjectbetaTypeScript