Experiment ·
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.
System specifications
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.
Starting point
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 for the prompt · 677 × 680 pixels
Open the reference image at full sizeAbout the experiment
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.
Technical documentation
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
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.
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”.
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.
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.
| Request | Prompt | Cache | Output | Time (s) | Decode (tok/s) | Status |
|---|---|---|---|---|---|---|
| #54 | 10,948 | 4,177 | 187 | 15.45 | 34.9 | done |
| #53 | 10,841 | 4,177 | 209 | 16.53 | 34.4 | tool_calls |
| #52 | 11,136 | 4,177 | 93 | 13.25 | 33.5 | tool_calls |
| #51 | 11,224 | 4,177 | 108 | 12.84 | 35.6 | tool_calls |
| #50 | 10,926 | 4,177 | 92 | 13.00 | 32.9 | tool_calls |
| #49 | 11,012 | 4,177 | 664 | 28.89 | 35.0 | tool_calls |
| #48 | 11,147 | 4,177 | 111 | 12.14 | 35.4 | done |
| #47 | 10,890 | 4,177 | 107 | 13.72 | 35.2 | tool_calls |
| #46 | 11,238 | 4,177 | 108 | 12.53 | 32.8 | tool_calls |
| #45 | 11,106 | 4,177 | 713 | 30.59 | 33.8 | tool_calls |
| #44 | 11,181 | 4,177 | 66 | 12.33 | 33.3 | tool_calls |
| #43 | 11,226 | 4,177 | 42 | 12.35 | 31.7 | tool_calls |
| #42 | 10,987 | 4,177 | 55 | 13.65 | 34.2 | tool_calls |
| #41 | 11,157 | 4,177 | 87 | 16.34 | 32.0 | tool_calls |
| #40 | 11,103 | 4,177 | 91 | 12.25 | 33.8 | tool_calls |
| #39 | 11,186 | 4,177 | 81 | 12.67 | 33.7 | tool_calls |
Screenshots of the run

WerkWorker
October 26, 2026 · 14:44:56 · Europe/Berlin
Open original screenshot
Werk1112 · Werk top
October 26, 2026 · 14:45:22 · Europe/Berlin
Open original screenshotThe 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 JSONSelected 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

