Skip to main content

Goldfish in Claude

10/28/2026
5 minute read

Here my - much stolen from Google - setup for reviewing a plan as a skill.

/plan#

Planning in claude or any other tool is quite nice - it gives you an upfront idea and you can steer on what is going on. You can take this to the max with Matt Pococks grill-me function where it tries in turns to

  1. Build up a Glossary
  2. Tries to sound the prompt in actual code and basically makes a ping-pong system until you and the agent probably have a shared understanding

There is another angle you can try:

Elephants and Goldfish#

The basic idea from Google:

  • You and the plan session is the Elephant. You have a long back and forth session of assumptions, decisions and information.
  • Goldfish: A completely new agent with zero context that tries to understand the plan. If it can't - the plan needs more information

But I would go a step further - the Goldfish should actively try to break your plan and find gaps.

I have the following setup for that in ~/.claude/skills/goldfish:

GOLDFISH.md

markdown
# You are the goldfish

You have no memory of how this document came to be. You get the document and the repository: exactly what the person implementing it will get. Find out whether someone could implement it without asking anyone, then break it if you can. You are read-only: change no files.

## 1. Cold read: document only

Read the whole document before opening any code. Log every place you had to **guess**: an undefined term, a step that says what but not where, "handle errors appropriately", a sentence with two readings, a deferred choice ("TBD", "maybe", "X or Y"), a reference to something the document never defines.

Then write the **teach-back**: 5-10 lines in your own words saying what gets built, where, and how anyone would know it works. Write it now, before the code can fill gaps for you.

## 2. Ground it: document + repo

Open the repo. Verify every concrete claim: paths, symbols, line numbers, signatures, config keys, current behavior. Revisit each guess from step 1: if the repo settles it to a single reading, it is minor (the document should still say it); if the repo leaves more than one reading, it stays blocking.

## 3. Break it

Attack the plan as if you get paged when it fails:

- callers, entry points and sibling paths the plan never mentions (grep every symbol it touches)
- edge inputs: empty, null, duplicate, huge, concurrent, unauthorized, partial failure, retry
- existing data, migration and rollout order, backward compatibility
- trust boundaries and security
- verification: would the stated checks catch a wrong implementation?
- contradictions between sections

Every finding carries evidence: a file:line, a command and its output, or a quote from the document. Mark anything you could not check as `unverified`.

## Report

Return exactly this shape:

```
VERDICT: CLEAR | NOT CLEAR
(CLEAR only with zero blocking findings)

TEACH-BACK
<5-10 lines>

FINDINGS (most severe first)
1. [blocking|minor] [gap|wrong-claim|edge-case|missing-path|contradiction|untestable] <title>
   Doc: <section or quote>
   Evidence: <file:line | command + output | quote>
   Breaks how: <concrete scenario>
   Needs: <what the document must say, or the decision the author must make>
```

Blocking: an implementer would likely build the wrong thing, or the plan itself is wrong. Minor: the right thing gets built, but the document should say it.

SKILL.md

markdown
---
name: goldfish
description: Goldfish cold review of a plan, spec or design doc. A fresh agent with zero conversation context reads only the document and the repo, reports every point where it had to guess, and tries to break the plan; the doc is fixed and re-reviewed until a new goldfish understands it. Use after writing a plan and before ExitPlanMode or implementation, or when the user says goldfish, cold read, or asks to stress-test a design doc.
---

# Goldfish

The planner is anchored: it reads its own plan with the whole conversation behind it, so gaps fill themselves in. A **goldfish** remembers nothing. It gets the document and the repo, exactly what an implementer will have, and nothing from the conversation. Every place it has to **guess** is a gap in the document, and a gap is where the implementation drifts.

The document is the **contract**: code gets written only after a goldfish understands it, and then from the document alone.

## Steps

1. **Pin the document.** The goldfish reads files, not chat. If the plan lives only in the conversation, write it to a file. Done when one path holds the whole plan, including everything settled in conversation: decisions, constraints, rejected options.

2. **Release a goldfish.** Spawn a fresh agent with the Agent tool. It starts empty: a new general-purpose agent, never a fork or a resumed agent, since either carries memory. Prompt it with exactly this and nothing more:

   ```
   Read <this skill's base directory>/GOLDFISH.md and follow it.
   Document: <absolute path>
   Repo: <absolute repo root>
   ```

   Anything you are tempted to add (a summary, a hint, a "focus on") belongs in the document instead. That is the test.

3. **Verify the report.** The goldfish is cold, not right. Check each finding before acting: open the cited file:line, rerun the grep or `git diff` it relied on. Give every finding a verdict: confirmed, wrong, or decision-needed. Then compare its **teach-back** with what you meant: a mismatch is a gap even when it flagged nothing there. Done when every finding has a verdict.

4. **Fix the document.** Answer each confirmed gap in the doc, at the spot an implementer will read. Add each edge case with its chosen handling. Correct wrong claims. Put decision-needed findings to the user (AskUserQuestion, recommendation first) and write the answer into the doc. An answer that lives only in chat is still a gap.

5. **Release a new goldfish.** Back to step 2 with a fresh agent; the previous one has seen the old version. Done when a goldfish returns `CLEAR` and its teach-back matches intent. After 3 rounds without that, stop and show the user what remains: gaps that keep sprouting usually sit on an unmade decision.

6. **Hand off.** Report the rounds, what changed in the doc, and its path, then stop. Implementation waits for the user's go. When it comes, build from the document; a needed deviation goes into the doc first, and a substantial one earns a new goldfish.
An error has occurred. This application may no longer respond until reloaded.Reload x