---
name: clover-circuit
description: Build an interactive offline lawn mower with first-person driving, actual swept deck cutting, measurable grass trails, obstacle contacts and editable bilingual gardens.
version: 0.1.0
---

# Clover Circuit

## Example

Drive Estate Cut from a ride-on mower through tall grass in a fenced garden. Hold forward and steering together, engage the blade and watch actual grass tufts become shorter. Switch to Overview to inspect the genuine trail. Coverage is the fraction of trimmed tuft centers, not a continuous land-area estimate. Guided drive follows a short route through the same simulator and brakes to a stop.

```sh
node <skill>/scripts/fill-prompt.mjs --slots <skill>/assets/prompts/examples/estate-cut.json --out prompt.md
node <skill>/scripts/new-project.mjs --out my-garden
cd my-garden && npm ci
npm run dev
npm run build:single
npm run shoot -- --file dist-single/index.html
```

Use pinned Node22.14.0 and build only in a generated project. Read [method](references/method.md), [slots](references/prompt-slots.md), [verification](references/verification.md) and [hosting](references/hosting.md).

## Edit and deliver

Edit src/garden.json: bilingual garden/course names, seed, three obstacle layouts and three palettes. Names accept1–40characters. Forward speed2–3.2, reverse speed1–1.8, acceleration1.5–3, braking3–5 and steering0.45–0.7radians are bounded. Each course has2–8circular trunks/plinths at centers within±6, radius0.5–1.2, away from spawn. Keep the18-unit lawn,24×24tuft grid, vehicle radius0.68, deck radius0.8 and wheelbase1.1 fixed unless physics, geometry and tests change together. Structural data failures use stable garden_* codes. Test an alternate valid garden before delivery.

W/S or arrows drive, A/D or arrows steer, Space switches the blade, V switches view, P pauses and R resets. Touch users can hold drive and steering buttons simultaneously. Pointer release/cancel, key release and blur clear input; blur pauses live play. The vehicle coasts to a stop after release; pause freezes immediately. Changing garden or restarting clears cuts. Guided drive resets the current garden, engages the blade and executes a short preview route; manual drive cancels it. It can meet obstacles in edited layouts. Palette/view changes do not change physics or cut records. Deliver source, one offline HTML and actual reports.

## Boundaries

The mower uses a bicycle steering approximation and piecewise-linear120Hz swept circular contacts for the body and forward deck; wheel/seat/art silhouettes are decorative. Obstacles collide at their measured trunk/plinth circles, not leafy canopies. The blade trims whole tuft clusters when their center enters its moving circular footprint. Both actual blade height and patch color change; no score writes can replace cutting. Grass does not regrow, and data stays in memory only. No storage/backend, key or runtime model call is required. Public npm packages install at build time; built HTML has no network or external assets. Reduced motion removes the small travel bob; ready geometry remains stationary until explicit drive. Optional synthesized tones are gesture-gated and muted by default, not a soundtrack or human listening acceptance. Headless touch/frame rates do not establish physical-device performance.

## FAQ

- Why did cutting stop? Engage the blade, drive at nonzero speed and avoid the fence/trunks. Existing short tufts do not count twice.
- Why is Overview useful? It displays the same actual mower/grass geometry and genuine cut pattern from above.
- Can a new garden use a different size? Change the validated layout, scenery and tests together; the bundled edit surface keeps fixed dimensions.
- Portable output? Open the single HTML offline or host it in an allow-scripts sandbox, retaining dependency notices.
