SwineKeeper
In this walkthrough you write two short markdown specs for a Minesweeper-style farm game, then let three different coding agents build it. You end up with three playable games from the same description, and the most expensive run cost under five dollars.
Claude Code2026-07-09claude-sonnet-5
cost (reported) $4.69
wall time25m 19s
Codex2026-07-09gpt-5-codex
cost (computed) $1.26
wall time5m 45s
OpenCode2026-07-09openrouter/deepseek/deepseek-v4-flash
cost (reported) $0.10
tokens2.2M in / 42K out
wall time21m 2s
Approximate figures from the recorded build run on the date shown.
Play it
Play it
Play it
Build it
The whole project is one config, two specs, and one command per agent. Point
--agent at a different backend and -o at a different
output directory, and you get an independent implementation of the same specs.
Unchanged specs hit the build cache, so switching agents or re-running is free.
mkdir swinekeeper && cd swinekeeper
overplane init
overplane sandbox build
overplane spec new # 001-shape.md
overplane spec new # 002-game-enhancements.md
overplane build all --agent claude-code -o code/claude
overplane build all --agent codex -o code/codex
overplane build all --agent opencode -o code/opencode
Each output directory gets index.html plus
screenshot-desktop.png and screenshot-mobile.png.
When a spec's acceptance criteria ask for browser snapshots, Overplane
captures any missing ones after codegen, so every agent's build comes back with
a comparable pair.
The specs
This is everything the agents were given. Spec one shapes the game; spec two tightens it up after a few playthroughs. Copy them, tweak them, make your own farm.
001-shape.md
---
id: '#0001'
title: Core Game
tags: [core]
---
# Core Game
## Goal
Build "SwineKeeper", a farm-themed Minesweeper for mobile browsers. The sole
output is a single file, `index.html`, in the working directory; write nothing
else. Structure the HTML for easy AI mutation of individual components
(styles, assets, scripts).
## Requirements
* Self-contained to the maximum degree: all CSS/JS inline, all graphics as
inline SVG or `data:` URLs. Public CDN links are allowed only as a fallback
when embedding is impractical. The file must render fully offline.
* Embeddable: the file must work identically inside an `<iframe>` on any page.
No frame-busting, no `window.top` or `window.parent` access, no assumption of
being the top-level document. Size everything to the document's own viewport
(which may be an iframe of any dimensions), and keep touch, mouse, and
long-press input working when embedded.
* Graphics: free, openly licensed vector art (OpenMoji, Twemoji, or similar
CC/MIT SVG sets) embedded inline for the farmer mascot, pigs, piles, and
flags, not raw emoji glyphs or hand-rolled shapes.
* Full viewport: `100dvh`, no scrollbars, no pinch-zoom, safe-area insets
respected. On desktop, render the same app in a centered phone-width column.
* Minimal chrome: compact title banner (farmer mascot, game name, guilty pigs
in the distance), pile count top-right, timer bottom-right. No other buttons
or text during play.
* Adaptive grid: cells are square with a touch target of at least 48px.
Column count derives from viewport width (clamped to 6–10); row count fills
the remaining height. The grid always fits without scrolling.
* Gameplay: tap reveals a cell; long-press flags it (vibrate if supported).
First tap is always safe. Empty reveals flood-fill outward. Numbered cells
show adjacent-pile counts. Revealing a pile (ice-cream-swirl style vector)
loses; revealing every safe cell wins. After win or loss, show a single
restart affordance.
* Visual mood: warm, playful farm pastels; soft rounded tiles; cartoon farmer.
Pick the exact palette, font, and rendering details yourself. Cell icons and
numbers are large and legible, filling most of the cell.
## Acceptance
- A `?seed=N` URL parameter yields a deterministic board; without it, boards
are random. No test-related text or UI appears anywhere in the page.
- A headless browser loads the file with no console errors. A screenshot of a
seeded board is saved if missing, and compared for parity otherwise. 002-game-enhancements.md
---
id: '#0002'
title: Polish
tags: [polish]
---
# Polish
## Goal
* Cascade reveals animate wave-like, staggered outward from the tapped cell.
* Micro-interactions: press-down feedback on tiles, flag pop-in, board shake
on loss, a small celebration on win.
* Subtle ambient background motion, pure CSS. All motion honors
`prefers-reduced-motion`.
* Timer and pile count styled as part of the scene, not overlaid debug text. Checked before built
Before any agent writes code, Overplane raises each spec into a formal IR and hands the game rules to Z3: warning counts stay in range, revealing a pile ends the game, and the snapshot grid can actually show all four cell states at once. Contradictions surface before you spend a single agent token. The visual requirements ride along as tracked obligations.
The results, side by side
All three agents land on a farmer mascot and a pastel farm, but the layouts, HUDs, and reveal animations diverge. Every build below is live and playable right here; when per-stage snapshots are committed, the switcher steps through each spec stage of the build.