Show HN: Teaching a 30ms local model, play browser games with LLM written rules A developer released IronBee Gamer, an open-source tool that plays browser games by combining a 30ms local decision model, Laya, with an LLM trainer that writes each game's feature-extraction logic and action rules. The trainer runs through the Claude Code CLI or Codex CLI, and the system reads game state from canvas rendering without any game API or hooks, stripping answer-revealing fields like advice before the decision engine sees them. Each trained game's profile and Laya model is about 700 MB and can be downloaded from Hugging Face or trained locally via the ibgamer command-line tool. Plays browser games live with a fast decision engine. An LLM trains each game's profile from the games it plays. IronBee Gamer opens a browser game, reads what the page draws into a small JSON state, and asks a decision engine to pick every move. It works without any help from the game: it needs no API and no hooks the game exposes. You can watch the game being played in a local web UI. Each decision is shown beside it: the state the engine saw, the action it chose and the probabilities. Laya playing Flappy Bird in the UI, thirty seconds of it. On the right: each decision as it is made flap or wait , the state it was made on, and the rules the trainer wrote. Click it for a still at full size. page canvas / engine └─ perception adapter ── generic, per rendering tech 2D canvas draw recorder, Phaser / PixiJS / Cocos dump, any canvas as a small colour grid , or a reader of the game's own state the trainer wrote from the page's code └─ extract raw, memory ── per game, written by the trainer an LLM , < 1 ms └─ state JSON features, never the answer └─ decision engine ── Jev hosted or Laya local, fine-tuned per game └─ keys held / the pointer held / a click └─ the game's clock runs one tick ← the game moves only between decisions The division of labor. Each part has one job: - The trainer an LLM through a coding-agent CLI: the Claude Code CLI or the Codex CLI, chosen with the UI's Trainer pill writes the logic: what the state computes, such as distances, how soon things happen and what is possible now. It also writes the rules that map those features to an action. - The decision engine makes every live decision by applying those rules to the state. A state that carries the answer advice: "JUMP" would make the engine a rubber stamp. Such fields are stripped before the engine sees the state, and the trainer is told how many were removed. npm install npm run build npm link once: puts the ibgamer command on your PATH ibgamer laya setup once: a Python environment for Laya, the local engine needs python3 npm run ui the web UI at http://127.0.0.1:1986 the same as ibgamer ui Without npm link , npm start --