How it works

In Claude Code, /paprika3d:paprika-make <request> takes a three.js game or 3D page through four stages: references, a look and character sheets, a design doc, then the build. /paprika3d:paprika-loop <request> for <time> adds the fifth: rounds that keep improving it while you are away. Each stage writes a plain file in your project, so you can read it, change it and change course. The home page walks through them with Kaeru Flip's brief and pictures. The stages are shipped in the plugin; the tools under them are the same ones any MCP client gets.

Stage What runs What it writes What you are asked
1. References A reference subagent when you bring no pictures; on a yes, a study subagent and a web assets subagent refs/01.jpg, refs/02.jpg, ...; refs/study/ (study notes, never published) The first batch of questions, then which of the numbered picks to keep
2. Look and character sheets reference samples the palette from your pictures; sheet composes the board LOOK.md, CHARACTERS.md, refs/sheets/LOOK.png (free); with your key and a yes, a look board and turnarounds in refs/sheets/ Where each key model comes from: the library, a free model from the web, generated with your key, or code
3. Design doc For a game, the creative calls the request leaves open DESIGN.md (yours, when you have one: read and added to, never overwritten), then BRIEF.md Up to two design decisions, such as the tone or the win condition
4. Build The page is written from BRIEF.md and the sheets, opened, looked at and played with the tools; then a critic subagent The page, with a Made with paprika3d line at the top of each file it writes; CREDITS.md for CC BY models; paprika3d/sourcing.json Nothing. The reply says how to run it and what to try next
5. Loops paprika-loop: a builder session and a read-only judge session each round, until the time is up paprika-loop/PROMPT.md, PROGRESS.md, loop.json, REPORT.md; a git commit per round, the highest-scored tagged paprika-loop/best Nothing after the brief. Edit PROMPT.md while it runs to change the request

1. References

The first call is one sheet with check: true, which names the image and 3D keys set on this machine (never a value). Then one batch of up to four questions, each with its recommended answer first:

When you name no pictures, a reference subagent finds some while you answer. Its picks are drawn numbered on one picture, refs/candidates/picks.png, opened in your image viewer, and one question asks which to keep. Each kept picture becomes refs/01.jpg and so on, with its role (layout, style, mechanics, mood), whether to match it or take it as inspiration, its source and its licence. A reference is inspiration unless you say match.

On a yes to the web search, the study subagent looks at how the look, the camera and the sound of the works you name are done, and writes refs/study/STUDY.md; the web assets subagent finds licensed models for the key characters and props.

2. The look and character sheets

The picking round. For up to four key items, asset_search searches the hosted library (using a crop of your picture when one shows the item) and saves a contact sheet to refs/assets/; the web assets subagent's finds go on a second sheet. One question per item asks where it comes from. Your answer becomes its Source line, and you can change that line later.

3. The design doc

For a game, DESIGN.md has the core loop, controls, progression, win and lose, levels, feel, audio and UI, sized to what you gave: one screen for a one-line request, or yours kept as written when you bring one. Its Decisions section lists the calls that change what the game is. Up to two are asked (tone, the progression shape, the win condition); the rest are listed under "Left to the builder" with the builder's recommendation, and every call is logged with who made it.

Then BRIEF.md, short, at the project root:

# <title>
## What it is
## Must have
1. <what the build is checked against, and what a paprika-loop judge scores>
## References
refs/01.jpg · <layout | style | mechanics | mood> · <inspiration | match> · <source URL>
## Inspirations and notes
## Sheets
LOOK.md · CHARACTERS.md · DESIGN.md · refs/sheets/LOOK.png
## Left to the builder

The Must have list gets one line per sheet: the page looks as LOOK.md says, each character matches CHARACTERS.md, and a game plays as DESIGN.md's core loop and controls say.

4. The build

The first version is written whole from BRIEF.md and the sheets: the palette hexes and camera from LOOK.md, each model from its Source line (a library pick, a web download, a generation job, or model_run), and DESIGN.md's controls are what interact plays. model_run's searched option logs why something is built in code ("by design: terrain") in paprika3d/sourcing.json, next to every model search.

Once the page runs and has a look, a critic subagent reads the newest pictures against the brief, LOOK.md's Checks, the boards and the sources, and lists what is broken or falls short of the look. Those are fixed one at a time: zoom, one change, look again.

5. Loops

/paprika3d:paprika-loop <request> for <time> writes the same brief with you, to paprika-loop/PROMPT.md, then starts a driver in the background and stops. Each round is a fresh claude -p builder session that makes as many improvements as fit, then a read-only judge session that scores the page against the Must have list and writes the next three improvements. Every round is committed; the highest-scored commit is tagged paprika-loop/best. A request with no time gets 60 minutes.

It never starts by itself: you type it. Each round is two Claude Code sessions, billed as such, and the driver needs claude and git on PATH.

The quick path

A one-line request with no pictures takes about four questions in all: the first batch, the picks to keep, what its kind needs and the rest in one call, and for a game the design decisions. There is no picking round: each key item takes its recommended free source, logged picked by builder in CHARACTERS.md, where you can change it. Nothing paid is used unasked. A request that already decides everything, or "just build it", gets no questions.

What needs a key

Everything above runs without a key except the picture sheets and generated 3D models, which use your own provider key and are billed to it:

Job Providers
Look boards and turnarounds fal, OpenAI, Gemini
3D models from a picture fal, Meshy, Tripo

Connect one with /plugin configure paprika3d (image_key and image_provider) or the provider's usual variable: FAL_KEY, OPENAI_API_KEY, GEMINI_API_KEY, MESHY_API_KEY or TRIPO_API_KEY. sheet with check: true names the keys it finds, recommends one and shows each provider's listed price. A yes to picture sheets is remembered across projects (sheet remember: "yes"; "ask" forgets it). A 3D job starts during the build, never in the brief, and its model is checked with model_audit and model_look before the page uses it.

The web search uses your agent's own search tools. publish (preview, invite-only) runs when you ask for a public link, never by itself.

In other MCP clients

The questions, the subagents, the critic, the slash commands and the loop's claude -p sessions are Claude Code features, so the full flow is Claude Code. Cursor, Codex, Gemini CLI and any other MCP client get the same 16 tools, reference and sheet included: an agent there can sample a palette, compose a free LOOK.png, search the library and make boards or models with your key when you ask it to, then see, play and measure the page. The method is in AGENTS.md and the threejs-game skill. Install covers both.