Show, then ask.
Your agent asks five questions before it does anything. Put a photographer inside it.
Before: "Sure! Before I start, a few questions: 1. Which framework? 2. Database? 3. Auth? 4. Styling? 5. Deploy target?"
After: a page with your own sentence as its title is already open in your browser — "This one?"
Counts from the first validation (10 runs on Claude, sonnet, 2026-09-04): the baseline asked nothing before its first reply in 5 of 5 and showed something in 4 of 5 (the crash run edited a file and showed nothing), so the interrogation pattern did not appear on this model with these prompts. With Shutter on, the skill triggered in 3 of 5 (2 of 2 — csv and crash — on a re-run after a description fix), and the reply carried the Read / Next / One question caption in 2 of 5 (2 of 2 on the re-run). Every row and the method: evals/results/2026-09-04-first-validation.md.
Round 2 (five vague requests, 2026-09-05): without Shutter, the first reply asked 2 to 6 questions in 5 of 5 and offered a choice menu in 4 of 5; with Shutter on, the skill triggered in 5 of 5, the first reply asked 0 or 1 question in 5 of 5 with the Read / Next / One question caption in 5 of 5, and something was on screen by turn 1 in 3 of 5 (turn 2 in 1, none in 1 — a script file). Rows and method: evals/results/2026-09-05-round2.md.
npx skills add aiopshwang/shutterThen just ask for something. Or say its name: use shutter / shutter로 시작하자.
Before it asks you anything, the agent asks itself:
- Could a photo answer it? → take the photo. Don't ask.
- Could running it answer it? → run it. Don't ask.
- Could a default answer it? → pick one and say it in one line. Don't ask.
- Is it money, an account, a deletion, or going public? → ask. Only these four.
- Still stuck? → put the photo on screen first, then ask one question. One.
Before the click, the agent works out why you want it — why → so that → who looks → what changes when it works — until the photo it would take changes. It never asks you the whys; it tells you what it concluded, under Read:.
What I made: where to look
Read: why you want it · who looks at it · what changes when it works
Next: the one step after this, if you nod
One question: the single question the photo made obvious
The photo is the point. The text is a caption.
The smallest thing that can be looked at, in your own words, and put in front of you — opened, run, or written to a file you can open: a page opened in your browser, a script run on a sample with its output, the first rows of your data, a one-paragraph draft in a file, a reproduced failure and the diff. If it can run, run it first. Nothing outside the working folder; nothing that costs money, touches an account, deletes, or goes public.
| Command | What it does |
|---|---|
/shutter off · /shutter on |
Turn it off for the session, or back on. Also works as plain words. |
/shutter-review |
Counts how many questions this session asked before showing anything. |
Only counts are quoted here — a turn number, a pattern match, a file that exists — never a model's opinion. How the runs work: evals/README.md. Results: evals/results/.
- First validation (10 Claude runs plus 2 re-runs, 2026-09-04): evals/results/2026-09-04-first-validation.md
- Codex host runs (2 Codex runs plus 2 failed attempts, 2026-09-04): evals/results/2026-09-04-codex.md
- Round 2, five vague requests (10 Claude runs, 2026-09-05): evals/results/2026-09-05-round2.md
| Host | Install |
|---|---|
| Claude Code (plugin) | /plugin marketplace add aiopshwang/shutter then /plugin install shutter@shutter |
| Claude Code / Codex / Cursor / Windsurf / Gemini CLI / OpenCode (skill file) | npx skills add aiopshwang/shutter |
Codex reads the same SKILL.md; browser opening is handed to you when a sandbox blocks it.
Shutter is one habit cut out of build-with-me, a tutor for people who cannot code — screen before questions, recorded visibly, published through a safety gate. If you teach beginners, start there.
MIT. See LICENSE.
