Demo
Demo: https://kitchen-planner-aiysxix6sq-ew.a.run.app/ Drag-and-drop planners accept coordinates.
Core trick
An agent writes a scene JSON file in its sandbox, which the backend downloads via the Files API and streams to a three.js renderer over SSE.
Description
Demo: https://kitchen-planner-aiysxix6sq-ew.a.run.app/
Drag-and-drop planners accept coordinates. AI Kitchen Planner accepts goals.
"Wheelchair-accessible galley with induction hob and a double-bowl sink" → a buildable 3D kitchen, modeled from real IKEA components at millimetre precision.
How it works
Opus 4.7 is the CAD operator, running inside an Anthropic Managed Agent. Authored skills teach it each IKEA product family on demand. The agent writes kitchen.json to its sandbox; we pull it via the Files API as a structured-output channel. A custom notify_model_updated tool drives live SSE updates, so the 3D view re-renders mid-conversation as Opus reasons through the layout.
Cabinets and worktops are procedural; appliances are real GLB meshes. Sessions are resumable from the URL hash.
pavelkraleu/anthropic-opus-hackathon★ 00 forksTypeScriptCreated Apr 24, 2026 · last push Apr 26, 2026
README excerpt
# AI Kitchen Planner — POC
Chat with an Anthropic Managed Agent to design a kitchen. The agent writes a
scene JSON file in its sandbox, the backend downloads it via the Files API,
the frontend renders the result with three.js.
## Architecture
```
browser (React + three.js)
│ POST /api/sessions ← create Anthropic session
│ POST /api/sessions/:id/messages ← send a user message
│ GET /api/sessions/:id/stream (SSE) ← agent_message / kitchen_update
▼
backend (Node + Express + Anthropic SDK)
│ beta.sessions.stream() ← SSE from Anthropic
│ beta.sessions.events.send() ← user.message / user.custom_tool_result
│ beta.files.list({scope_id}) ← find kitchen.json
│ beta.files.download() ← fetch scene JSON
▼
Anthropic Managed Agent
│ skills: ikea-cabinet / worktop / stove / light (one per product family)
│ tools: agent_toolset_20260401 (write, read, bash), notify_model_updated
└── writes /mnt/session/outputs/kitchen.json, then calls notify_model_updated
```
The agent contract is **the scene JSON schema**. Every instance has a `kind`:
- `ikea-cabinet` / `ikea-worktop` — procedural: FE builds geometry from params.
- `ikea-stove` / `ikea-light` — GLB-backed with a placeholder fallback.
See `skills/<name>/SKILL.md` for the exact fields per kind.
## Repo
```
skills/ Skill sources (SKILL.md per product family)
backend/ Express server + orchestrator + setup