pong-jev
Jev plays Atari Pong with one up/down/stay Choice per frame, receiving only digit-free relative descriptions computed by code.
Overview
pong-jev has TypeSafe's Jev play Atari Pong by asking one typed Choice per frame: move the paddle up, down or stay. Its design follows Jev 1.13's documented weaknesses in arithmetic, counting and comparing magnitudes, and the finding that unrelated state detail costs accuracy. So no coordinates reach the model: code computes geometry, including the relative ball-minus-paddle position, and sends five short phrases such as 'ball far below my paddle' or 'travelling towards my paddle', and a test asserts the payload has no digits. Scores, opponent position, speed and court size are left out.
A raw-encoding flag sends coordinates instead, to measure what the wording is worth, and a heuristic policy provides a no-API baseline. The environment runs via gymnasium/ALE in a Python bridge with a Bun agent and dashboard. A duel mode lets you play against Jev on a local court. It suits developers learning to shape state for decision models.
What the decision model decides
| Type | Question | Answers |
|---|---|---|
| Choice | Which way should I move my paddle right now? | up · down · stay |
How it works
- Read the game state from ALE.
- Code computes relative positions and phrases.
- Ask Jev one Choice per frame.
- Move the paddle accordingly.
Strengths
- Demonstrates state design around documented model weaknesses.
- Raw vs phrased encoding comparison.
- Heuristic baseline and human duel mode.
Caveats
- Requires a TypeSafe key for Jev play.
- Game demo, not a framework.
Getting started
bun install; set up a Python venv with gymnasium[atari], ale-py, fastapi, uvicorn, numpy; add TYPESAFE_API_KEY; bun run bridge then bun start.At a glance
- Type
- Project
- Status
- prototype
- Language
- TypeScript
- Runtime
- Bun agent, Python ALE bridge
- Has code
- yes
- Has tests
- yes
Use cases and integrations
How curated lists describe it
TypeSafe's Jev plays Atari Pong. One typed Choice question per frame, no coordinates sent to the model.
hellogumbo/awesome-jev
Frequently asked questions
Why not send coordinates?
Jev 1.13 is documented as weak at comparing magnitudes, so code computes comparisons and sends phrases.
Can I play against it?
Yes, use --duel.
Is there a no-API baseline?
Yes, --policy heuristic.
Related projects
Real-time bot battles where you write a fighter's strategy in plain English and a System One model pilots it several times a second.
ProjectbetaTypeScriptBot that plays Red Alert 2 web skirmishes, with code handling mechanics and a decision model making stance, threat and timing calls.
ServicebetaPythonMultiplayer 3D science-fantasy version of Houston's River Oaks District with Jev-powered NPC companion, chauffeur and smart drive.
ProjectbetaTypeScriptBrowser 3D planetary rover sandbox where a TypeSafe controller chooses the next action from complete candidates, versus a baseline.
ProjectbetaTypeScriptDoom runs as a spacecraft payload over real flight software; Jev pilots from the ground every half second while Claude reviews.
ProjectprototypePythonMinecraft agent where Hermes plans, Jev picks one bounded action at a time and a Mineflayer harness validates and executes.
ProjectprototypeJavaScript