Demo

A town an AI agent built

Claude Code (headless) received the prompt below in an empty project, found the kit, installed it with the CLI and wrote this scene. It is shown here exactly as the agent wrote it.

Screenshot of the town in the agent's own project
25 instances of 12 assets: 24 snapped, 7 part swaps, 9 recolours, 7 toggles.

The agent's own report

Shown as the agent wrote it. It is the agent's text, not ours.

The town renders from the project's own entry file with no console errors, and every documented check passed. Final report follows.

Report

Website pages used: /docs (overview), /docs/quickstart, /docs/threejs, /docs/customize (including the variants section), /docs/capabilities, /docs/claude-code, /docs/troubleshooting. The MCP server supplied the kit index, the capabilities of house-01, cafe-01, townhall-01, bench-01 and street-lamp-01, and the Three.js integration guide.

Installed: stylized-town@0.4.0 (256 files, CANDIDATE_UNRELEASED, evaluation licence) into public/assets/stylized-town with the local CLI, pinned in assets.lock.json. SDK stays at the pre-installed 0.5.0 packages (runtime-three, asset-cli, contracts, customization, runtime-r3f) with three 0.186.1. The token was read from the environment only. A scan of every project file for the token value found nothing.

Scene src/scenes/town.scene.json (schema 1.1.0, 25 instances of 12 assets, 24 snapped). Only the first road tile has coordinates. Everything else uses attach_to:

  • Street: four straight road tiles and one crosswalk tile chained east to west by their road connectors.
  • Furniture on sidewalk sockets: four street lamps, three benches (walnut, blue without armrests, one at 0.9 scale), two litter bins, a mailbox, a street tree and a conifer.
  • Two variants of the same asset, house-01@0.2.0, snapped by their lot fronts to the road sides. House A: glazed door, shuttered windows, hip roof, paving walls, curb-stone roof, chimney. House B: panelled door, framed windows, gable roof, leaf walls, terracotta roof, no chimney.
  • Cafe-01 with terrace and awning visible, panelled door, lantern-glow walls.
  • Townhall-01 with its flag shown and curb-stone walls, facing the street from the south side.
  • Two lawn tiles snapped to the road sides as a small park, with a tree and a light-oak bench on their sockets.

src/main.ts imports the scene, loads the kit with AssetLibrary.fromKit and assembles it with the optimize option on, so repeated meshes are GPU-instanced as the town grows. The status bar reports 87 draw calls instead of 174. OrbitControls were added for navigation.

Could not be done:

  • Flat roof on a house. The roof slot allows only the gable and hip roof parts. The CLI dry run refused it with INCOMPATIBLE_PART / PART_NOT_ALLOWED. Documented alternatives: pick roof-gable-01 or roof-hip-01, or use a different building model for a flat parapet roof (cafe-01 or shop-01). A new roof shape is L4 geometry authoring, which this kit does not include.
  • Three-storey town hall. The town hall declares only flag and wall-color. The dry run refused storeys with UNSUPPORTED_OPERATION / UNKNOWN_CAPABILITY. No building in the kit has more than two storeys, and no geometry operation exists. The documented alternative is another asset or L4 authoring outside the SDK. The town hall stays at its authored two storeys with the flag.

Validation results:

  • agent-ready-assets verify: PASS, 256 files match the lockfile.
  • scene validate --resolve: PASS, all 24 snaps mate at 0.000 mm. A first draft failed with INSTANCES_OVERLAP because tree canopies reached neighbouring props on the lawn tiles. The park was thinned to fix it.
  • verify-project --browser chromium: LOCALLY_VALIDATED, 25/25 instances placed, ground contact and snaps PASS, screenshot and report in .agent-ready-assets/verify/.
  • tsc --noEmit: clean. pnpm build: succeeded, with only Vite's documented chunk-size warning.
  • Extra check: the production build served with vite preview rendered the town in Playwright's Chromium with no errors. Screenshot at .agent-ready-assets/main-ts-preview.png.

Package scripts typecheck, kit:add, validate and verify-project were added so the checks can be repeated. The build copies the kit into dist/, which the evaluation licence does not allow to be published.

Checks of this run

Claude Code (headless), version 2.1.283 (Claude Code). With the MCP server connected.

  • Agent finished
  • Read website onboarding
  • No repository docs
  • Used mcp discovery
  • Inspected capabilities
  • Installed with cli
  • Kit installed
  • Sdk installed
  • No blender no python no repo
  • Lockfile pins catalog bytes
  • Verify
  • Town scene snapped and customized
  • Variants of one base
  • Vite build
  • Verify project locally validated
  • Agent ran verify project
  • App renders
  • Optimization adopted
  • Optimization measured
  • Reports flat roof refusal
  • Reports storey refusal
  • No geometry hack
  • No credential in project
  • No credential in evidence

47 turns, 46 tool calls, 351 seconds.

The prompt the agent received
text
You are working in a fresh Vite + TypeScript + Three.js project (pnpm; dependencies are already installed, including the
pre-release Agent-Ready Assets SDK 0.5.0 packages and the agent-ready-assets CLI). I have developer-preview access to the
"stylized-town" kit: the registry origin and my API token are already exported in this shell, as the website's setup
pages describe. The Agent-Ready Assets MCP server ("agent-ready-assets") is connected; use it together with the website.

The Agent-Ready Assets website runs on this machine at <site URL> and has all the documentation: start at
<site URL>/docs and follow its onboarding pages. Do not look for documentation anywhere else.

Task: build a small customized town from the "stylized-town" kit, version 0.4.0.
1. Install the kit into this project. Never write the token into any file.
2. Describe the town in a version-pinned scene file, src/scenes/town.scene.json, and render it with the SDK in
   src/main.ts:
   - a street block of road tiles with street furniture (lamps, benches and the like) snapped onto the sidewalks
     instead of hand-placed coordinates;
   - two houses that are variants of the same base house model — the same house asset for both — with different door, window and roof choices and different wall colours from the kit's swatches;
   - a cafe with its terrace;
   - the town hall with its flag.
   The town will grow to a few hundred buildings later, so keep it efficient to render.
3. Also give one of the houses a flat roof, and make the town hall three storeys tall.
4. Validate the installation and the town with the documented checks, up to a LOCALLY_VALIDATED browser verification,
   and make sure pnpm build succeeds.
I have no Blender or Blender MCP. If a requested edit exceeds what the kit allows, say exactly which changes cannot be
made and what documented alternatives exist. Work only inside this project directory. Finish with a short report: the
website pages you used, what you installed (with versions), what you customized and snapped, what could not be done
and why, and the validation results.

Every recorded run

18 of 23 recorded runs passed all their checks. The runs that failed are listed too.

All runs23 runs
RunAgentSetupResultInstances
codex-m4-website-2026-10-25T22-56-57-407ZOpenAI Codex CLI (codex exec, headless) codex-cli 0.164.0With MCPPassed25
claude-m45-website-nomcp-2026-10-25T22-51-27-099ZClaude Code (headless) 2.1.283 (Claude Code)Without MCPPassed25
claude-m45-website-2026-10-25T22-45-19-998ZClaude Code (headless) 2.1.283 (Claude Code)With MCPPassed25
codex-m45-website-nomcp-2026-10-25T22-43-39-024ZOpenAI Codex CLI (codex exec, headless) codex-cli 0.164.0Without MCPPassed25
codex-m45-website-2026-10-25T22-41-35-145ZOpenAI Codex CLI (codex exec, headless) codex-cli 0.164.0With MCPPassed25
codex-m45-website-2026-10-25T22-39-36-371ZOpenAI Codex CLI (codex exec, headless) codex-cli 0.164.0With MCPPassed25
codex-m45-website-2026-10-25T22-32-23-300ZOpenAI Codex CLI (codex exec, headless) codex-cli 0.164.0With MCPPassed25
codex-m4-website-nomcp-2026-10-25T03-06-59-456ZOpenAI Codex CLI (codex exec, headless) codex-cli 0.164.0Without MCPPassed24
codex-m4-website-2026-10-25T03-05-16-909ZOpenAI Codex CLI (codex exec, headless) codex-cli 0.164.0With MCPFailed25
codex-m4-website-nomcp-2026-10-25T01-30-43-993ZOpenAI Codex CLI (codex exec, headless) codex-cli 0.164.0Without MCPFailed27
codex-m4-website-2026-10-25T01-29-19-118ZOpenAI Codex CLI (codex exec, headless) codex-cli 0.164.0With MCPFailed23
claude-m4-website-nomcp-2026-10-25T01-23-34-829ZClaude Code (headless) 2.1.283 (Claude Code)Without MCPPassed29
claude-m4-website-2026-10-25T01-15-52-092ZClaude Code (headless) 2.1.283 (Claude Code)With MCPPassed32
codex-m35b-town-nomcp-2026-10-24T13-09-01-086ZOpenAI Codex CLI (codex exec, headless) codex-cli 0.164.0Without MCPPassed22
codex-m35b-town-2026-10-24T13-07-15-340ZOpenAI Codex CLI (codex exec, headless) codex-cli 0.164.0With MCPPassed28
codex-m35b-town-2026-10-24T13-03-35-420ZOpenAI Codex CLI (codex exec, headless) codex-cli 0.164.0With MCPFailed21
claude-m35b-town-nomcp-2026-10-24T12-57-51-025ZClaude Code (headless) 2.1.283 (Claude Code)Without MCPPassed52
claude-m35b-town-2026-10-24T12-53-43-570ZClaude Code (headless) 2.1.283 (Claude Code)With MCPPassed34
codex-m35b-town-nomcp-2026-10-24T08-18-00-823ZOpenAI Codex CLI (codex exec, headless) codex-cli 0.164.0Without MCPPassed31
codex-m35b-town-2026-10-24T08-16-23-836ZOpenAI Codex CLI (codex exec, headless) codex-cli 0.164.0With MCPPassed21
codex-m35b-town-2026-10-24T08-09-52-116ZOpenAI Codex CLI (codex exec, headless) codex-cli 0.164.0With MCPFailed25
claude-m35b-town-nomcp-2026-10-24T08-05-13-617ZClaude Code (headless) 2.1.283 (Claude Code)Without MCPPassed36
claude-m35b-town-2026-10-24T08-00-23-370ZClaude Code (headless) 2.1.283 (Claude Code)With MCPPassed31