Back to the lab

Tetris on graph paper.

What does a small browser game built with a local model and a coding agent look like? This experiment with WerkWorker and Werk1112 produced a playable Tetris with a sketchbook aesthetic.

The machine behind the experiment.

GPU
NVIDIA GeForce RTX 3090
24 GiB VRAM · CUDA
CPU
2 × Intel Xeon E5-2673 v3
24 cores / 48 threads total · 2.4 GHz base clock
Memory
128 GiB RAM
8 × 16 GiB installed · 98.3 GiB visible to WSL
Environment
WSL2
Ubuntu 22.04.5 LTS · Microsoft Windows 11 Pro

System inventory collected locally after the experiment: October 26, 2026 at 5:56 PM (Europe/Berlin). Installed RAM and memory visible to WSL are listed separately.

Software versions and system details
CPU architecture
x86_64
Windows host
Microsoft Windows 11 Pro · 10.0.26200 · Build 26200
Linux distribution
Ubuntu 22.04.5 LTS
WSL kernel
6.18.54.1-microsoft-standard-WSL2
NVIDIA driver
616.92
Werk1112
1.9.1
WerkWorker
0.1.0
llama.cpp
0.4.1-dev · Build 1 · Commit ec92815
llama.cpp build C++ compiler
GNU 11.4.0
llama.cpp build CUDA compiler
13.0.48
CUDA build architecture
sm_86
Model file
Qwen3.8-27B-UD-Q4_K_XL.gguf
Model format
GGUF

Sources: Windows CIM, lscpu, nvidia-smi, Linux system files, installed program versions and metadata from the selected llama.cpp build. This is a later inventory; software versions were not frozen at run start. The Werk top memory values below come from the original screenshot. The CUDA compiler version describes the build, not the driver’s maximum supported CUDA version.

Prompt and reference.

This run takes Mia AI’s Retro Tetris experiment as its starting point. Here, the task is implemented using WerkWorker and Werk1112.

Original prompt · English

Build me a Retro Tetris game with film grain effects. The grain effect needs to be rolling when playing. Include game sound, optional music, and great graphic effects + movement. Use the referenced image.

Reference image: coloured-pencil Tetris on aged graph paper, with blocks, a next-piece preview, score and level

Reference image for the prompt · 677 × 680 pixels

Open the reference image at full size
Gameplay recording · 27 seconds · optional audio

The setup.

Agent
WerkWorker · coding-basic
Inference
Werk1112 · llama.cpp · CUDA
Model identifier
qwen3.8-27b-ud-q4_k_xl
Output
One HTML file · Canvas · Web Audio

The original HTML file runs directly in your browser. Open the demo on a desktop with a keyboard.

One run, in numbers.

The run on October 26, 2026 is documented by the local WerkWorker session and both terminal screenshots. The session provides the totals; Werk top adds a later snapshot of inference activity.

Total run time
30 min 23 s
From agent run start to completion
Agent steps
52
2 high-level steps in the task plan
Model requests
54
Including interrupted attempts
Tool calls
45
7 different tools used

Setup and workflow

  1. Task and reference

    A single-file HTML game with a sketchbook look, graph paper, film grain and sound. The session contains one reference image at 677 × 680 pixels. The prompt and reference image are documented above in this report.

  2. Local agent and inference

    WerkWorker v0.1.0 uses the coding-basic profile in continuous mode. Werk1112 serves qwen3.8-27b-ud-q4_k_xl through llama.cpp and CUDA. WerkWorker reports 2 inference slots and 0 subagents; reasoning is set to “Server default: Off”.

  3. Implementation and iteration

    The task plan has 2 steps: build the game and verify it. Across 52 agent steps, files are written, read and edited, and processes are run. The 54 model requests and 45 tool calls are separate counters, distinct from plan steps.

  4. The technical output

    One self-contained HTML file holds CSS and JavaScript. Canvas 2D draws a 10 × 20 board with 36-pixel cells; CSS creates the paper and a separate canvas renders film grain. Web Audio synthesises effects and music. The game loads no external libraries and needs no server for its game logic.

Timing and status

Start · Europe/Berlin
13:37:31
Completion · Europe/Berlin
14:07:55
Measured run time
1,823.438 s
Time to first tool
13.198 s
Time to first text
133.640 s
Approval wait time
0.000 s
Run status
completed

Duration comes from the stored total_ms counter, including model and tool time. It excludes the later gameplay recording and publication.

Tokens and agent context

Input tokens · total
540,232
Output tokens · total
17,600
Agent context budget
16,384
Reserved for output
4,096
Last context estimate
11,460
Messages omitted in last context
98

Token totals add reported usage across requests: repeated context is counted again, and interrupted requests may report no usage. Output includes code and tool calls. Omitted messages are not a count of compaction runs.

Tools used

files.read
17
process.run
10
files.search
7
files.edit
6
task.plan
3
skills.load
1
files.write
1
Tool status
43 succeeded · 2 failed

Tool status describes tool execution. A successful process.run can still contain a process with a nonzero exit code or failed assertions.

Interruptions and errors

Model attempts with an error
3
model_feedback_echo
2
model_output_limit
1
files.read
validation_error
process.run
path_denied
Processes with exit code 0
6
Processes with nonzero exit code
3
Process launch denied
1

These events belong to the documented run. Process outcomes are a subset of tool calls and must not be added to the total.

Memory · Werk top

WSL memory including cache
26.5 / 98.3 GiB
Available in WSL
75.8 GiB
Worker RSS
10.5 GiB
Swap
0.0 GiB
GPU memory
23.9 / 24.0 GiB
GPU pressure
EMERGENCY

Snapshot at 14:45:22 Europe/Berlin, after the run completed. These are not peaks or a time series. “EMERGENCY” is the displayed memory pressure, not evidence of an out-of-memory crash.

Inference · Werk top

Server uptime
01:09:57
Backend context · used / capacity
21,870 / 65,536
Inference slots
2
GPU layers · requested
999
Decode · visible requests
31.7–35.6 tok/s
Duration · visible requests
12.14–30.59 s

Server uptime is not experiment duration. Ranges cover only the 16 visible requests, not the full run. Backend context is separate from the agent context budget; requested GPU layers are not a measured layer count.

What the checks establish

The final process extracts JavaScript from the completed HTML and reports a successful syntax check with node --check. Earlier attempts include failed extractions and denied access to the temporary check file.

The gameplay checks recreate selected functions in Node. The final check writes “Assertion failed: rotateCW” but ends with exit code 0 and a success message. console.assert does not terminate this process when an assertion fails. This does not establish passing behavioral tests, nor does the message alone prove a rotation bug in the game.

The “completed” status and checked plan steps record the agent finishing its work. They do not amount to a complete automated browser test. The video and unchanged demo show the output; neither establishes comprehensive verification of game rules, audio and animation.

The 16 visible requests in detail

Transcribed from the Werk top screenshot, newest request first. Prompt, cache and output are token counts; decode is as reported by the backend. This is a subset, not a complete trace.

The 16 visible requests in detail
RequestPromptCacheOutputTime (s)Decode (tok/s)Status
#5410,9484,17718715.4534.9done
#5310,8414,17720916.5334.4tool_calls
#5211,1364,1779313.2533.5tool_calls
#5111,2244,17710812.8435.6tool_calls
#5010,9264,1779213.0032.9tool_calls
#4911,0124,17766428.8935.0tool_calls
#4811,1474,17711112.1435.4done
#4710,8904,17710713.7235.2tool_calls
#4611,2384,17710812.5332.8tool_calls
#4511,1064,17771330.5933.8tool_calls
#4411,1814,1776612.3333.3tool_calls
#4311,2264,1774212.3531.7tool_calls
#4210,9874,1775513.6534.2tool_calls
#4111,1574,1778716.3432.0tool_calls
#4011,1034,1779112.2533.8tool_calls
#3911,1864,1778112.6733.7tool_calls

Screenshots of the run

WerkWorker terminal showing a completed session, 54 model requests and 45 tool calls

WerkWorker

October 26, 2026 · 14:44:56 · Europe/Berlin

Open original screenshot
Werk top showing model identifier, memory usage and the last 16 inference requests

Werk1112 · Werk top

October 26, 2026 · 14:45:22 · Europe/Berlin

Open original screenshot

The documented artifact

index.html · 20,304 bytes · 508 lines. The original file and demo file share the same SHA-256 checksum.

SHA-256 65cfee244a50c5b0bad7d0ca6692e66d31e08f095477a5dce2f015260829e90b

Download measurements as JSON

Selected session metrics, subsequently collected system specifications, check outcomes, transcribed screenshot values and checksum. Excludes the full conversation. The prompt and reference image are documented above in this report. This individual experiment is not a model comparison or benchmark.

The result

The game combines pencil-hatched blocks, graph paper and animated film grain. A piece preview, score, levels, pause, sound effects and optional music are all included in the HTML file. Graphics and audio are generated in the browser; playing requires no external libraries or backend.

A documented individual experiment

The technical documentation combines measurements from the saved WerkWorker session with the original WerkWorker and Werk top screenshots. The prompt and reference image are documented above; the gameplay recording shows a short excerpt of the result. The complete session transcript is not published here. This is not a model comparison or benchmark.

Original output and limitations

The published demo is an unchanged copy of the generated HTML artifact. It targets desktop keyboard input and has no touch controls. Its fixed playfield may be clipped on small screens. The artifact preserves this state, including possible gameplay and rendering bugs.

Try the result.

Arrow keys: move and rotate · Space: drop · P: pause · M: music