platter
★ a quiet review · for the agent age

The human-in-the-loop step
Claude Code is missing.

Agents make mockups, screenshots, PDFs — dozens a day. Platter watches where they land and surfaces them in a Pinterest-style gallery on your Mac. When Claude wants your call, it pauses and asks. Three keystrokes. Work continues.

v0.4macOS 11+auto-updatingopen source · free
platter
Platter showing a Pinterest-style gallery of agent-generated mockups
how it works

Three pieces. One loop.

01

Watch the folders

Platter watches ~/github/*/mockups, screenshots, artifacts, worktree mockups — anywhere your agents drop visual artifacts. Add custom roots in Settings.

02

See what was made

Pinterest-style masonry on cream paper. Live HTML thumbnails, image previews, decision marks per file. Recency-sorted across every project. Spacebar to Quicklook.

03

Decide when Claude asks

The MCP server lets Claude call present_mockups() mid-session. The call blocks. A modal pops on your Mac. A approve, R reject, 19 pick. Decision flows back. Done.

★ get started

Up in four steps.

From download to your first agent-driven review in under five minutes.

01

Download & install

Grab the .dmg from GitHub Releases, drag platter.app to Applications, launch. The gallery opens immediately.

Download ↗
02

Add watch folders

Open Settings → Watch roots ⌘,. The default ~/github/*/mockups is already active. Add any folder where agents drop files.

⌘,
03

Register the MCP server

Run once — wires platter into every Claude Code session.

$ claude mcp add platter -- /Applications/platter.app/Contents/MacOS/platter --mcp-stdio
04

Claude asks — you decide

Agent calls present_mockups(). Platter comes forward. Press A to approve, R to reject. Work resumes instantly.

AR1–9
★ use cases

What it's used for.

Anywhere a human call sits between an agent action and the next step — that's where platter fits.

design · html

UI mockup approval

Claude generates 3–5 variants. You pick the winner in Pick One mode. Iteration time drops from days to minutes.

pdf · markdown

Document sign-off

Agents draft proposals and spec PDFs. Approved ones go out; rejected ones loop back with your note.

png · compare

Screenshot regression

Before/after screenshots surface side-by-side. You approve before the PR merges.

share · remote

Async stakeholder review

Press S in any preview to create a public link. Client decides in their browser; verdict syncs back while you sleep.

iteration · mcp

Revision loops

Revise mode sends your note back to the agent mid-session. It adjusts and re-presents — all inside one Claude Code run.

svg · png · batch

Production asset pipeline

Icons, banners, social images — platter is the last gate. Approved batch gets committed; rejected files never land in the repo.

★ the moat

Wire Claude up.

Once registered as an MCP server, platter is callable from any Claude Code session. The agent decides when to ask; you decide what passes.

terminal · zsh
$ claude mcp add platter -- /Applications/platter.app/Contents/MacOS/platter --mcp-stdio
added MCP server platter · transport: stdio
present_mockups
Block until the human approves, rejects, ranks, or picks one. The headline tool.
record_decision
Record a verdict without asking — when you're confident the answer is obvious.
get_decision_history
Look up past decisions. Learn from what was already approved or rejected.
list_recent
Ask "what have I made recently" before deciding what to make next.
design

Editorial gallery.
Not file-manager.

Asset review is a moment of judgment. A critic at a print room. An editor on a contact sheet. Platter borrows from that world: cream paper, ink, hairlines, italic display moments — and a single confident accent in vermilion, the color of Italian print-shop ink and the imperial seal.

The MCP review modal isn't a system dialog. It's a dimmed stage with the asset framed and the prompt rendered in italic Hoefler Text. The lights dim. You decide. The lights come back up.

Read the design notes →
paper#F4EFE5
ink#1B1714
vermilion#C9472A
sage · approve#6E7F58
brick · reject#A04428
gold · ranked#B58A3D