DEV Community

Cover image for One AI wrote the plan. A forgetful one found 26 holes in it.
The Release Desk
The Release Desk

Posted on AI-assisted

One AI wrote the plan. A forgetful one found 26 holes in it.

Google just open-sourced the AI workflow its engineers use daily. We ran it on a real mini project. 26 findings, 2 of them wrong, and 2 bugs no Goldfish saw.

Every long AI coding session hits the same wall. By minute forty, the AI agrees with everything you say.

It knows your project, your plan and your reasons. That's exactly why it can't see the hole in the plan anymore. Neither can you.

On October 22, Google open-sourced the workflow its own engineers use to get around this: the Elephant-Goldfish Model (EGM). Google says thousands of Googlers use it every day. It's free (Apache 2.0), and it already works in Claude Code and Codex, not just Google's Antigravity.

This is a tutorial, so we'll do what we always do: learn it by building one small project. First the idea in two minutes, then the real run, with real numbers.

Part 1: Two animals, one rule

🐘 The Elephant remembers everything. It's one long AI session. You load your project into it, talk for 20–30 minutes, argue, and turn the result into a design doc. (It writes no code)

🐠 The Goldfish remembers nothing. It's a brand-new AI session with zero history. It gets only the design doc and the files the doc links to. It never heard your reasons, so it doesn't share your blind spots. If the doc doesn't make sense to a stranger, the Goldfish says so.

🧑‍💻You own the outcome. The AI argues. You decide.

How it works, in 5 steps

How it works: 1 make the plan with the Elephant, 2 a fresh Goldfish checks it, 3 you decide what to fix, repeat 2 and 3, 4 another fresh session builds from the final plan, 5 you test it.

  1. Make the plan. In one long chat, you and the AI talk the feature through. The AI writes a design doc: what to build, the rules, the files to change. No code yet.
  2. Check the plan. Open a new, empty session and give it only the plan. Ask: "What's missing, wrong or unclear?"
  3. You decide. Fix what makes sense and ignore the rest. Then repeat step 2 with another fresh session, until it only finds small things.
  4. Build it. Give the final plan to one more fresh session: "Build exactly this."
  5. Test it. Run the tests and try it for real.

The idea is simple: if a stranger can understand and build from your plan, the plan is good. If they can't, the gaps show up before any code exists.

What "fresh" really means

It's the same AI, just a new session. But "new" must mean empty.

In Claude Code, a new session in the same project folder isn't empty. It automatically loads that folder's CLAUDE.md and project memory, so it already knows your notes. That's a half-Goldfish.

Three ways to get a real one:

  • The plugin (easiest): its Goldfish are subagents that see only the plan and the files it links. They skip CLAUDE.md and can't see your chat.
  • By hand in Claude Code: copy only the plan into an empty folder and start a session there.
  • By hand in a chat app: start a new chat with memory turned off and paste the plan.

You don't need to install anything to try it. Dave Rensin, the Google Distinguished Engineer who wrote the original essay, uses three questions, each one asked in a fresh chat (as quoted by I Programmer, June 2026):

1. "Read this document and the files it references. Tell me what it's
    trying to accomplish..."
2. "Assume the role of an expert technical reviewer... Tell me all the
    things I missed, all the faulty assumptions, all the edge cases..."
3. "...Does it absolutely have all the information you would require to
    successfully implement this feature in your first pass?"
Enter fullscreen mode Exit fullscreen mode

You'll want the plugin when copy-pasting those gets old. It automates the loop:

Command What it does
/egm-brainstorm Pokes holes in a raw idea before you write anything
/egm-draft Writes the design doc section by section
/egm-review Sends in the Goldfish: Zoom Out → Comprehension → Critic → Readiness
/egm-resolve Walks you through the findings and patches the doc
/egm-drift-report A weekly check: has the code drifted from the doc?
claude plugin marketplace add google/elephant-goldfish-model
claude plugin install egm@egm
# in Claude Code the commands get a prefix:
# /egm:egm-review docs/designs/my-feature.md
Enter fullscreen mode Exit fullscreen mode

One small detail: Claude Code needs 2.1.271 or newer. Older versions can't hide your CLAUDE.md from the Goldfish, and a Goldfish that has read your notes isn't a Goldfish.

Part 2: Let's understand it with a simple project

The project is pkg-pulse, a tiny CLI that answers one question: is this npm package still alive? It's a 5-minute "is this library dying?" check, turned into a tool.

Step 1: Be the Elephant (step 2)

We wrote a one-page design doc. No code. Here's the heart of it:

## Verdict rules
- DEAD: latest version is deprecated, OR the GitHub repo is archived.
- SLOWING: no release and no push for more than 180 days.
- ALIVE: anything else.

## Design
- Run the three requests in parallel with `Promise.all`.
- Exit code 0 for ALIVE, 1 for SLOWING, 2 for DEAD, so it works in CI.
Enter fullscreen mode Exit fullscreen mode

Looks fine, right? We thought so too.

Step 2: Release the Goldfish (step 2)

claude --plugin-dir ./elephant-goldfish-model   # loads it for this session only
> /egm:egm-review docs/designs/pkg-pulse.md
Enter fullscreen mode Exit fullscreen mode

Pick "consolidated report". Five review stages run one after another, and each stage sends fresh, read-only Goldfish (9 in total): a Zoom Out architect ("is this the simplest thing?"), a naive new hire, a hostile design critic, Zoom Out again, and the tech lead who has to build it.

14 minutes later: six report files and 26 findings (9 blockers, 9 major, 8 nits).

The three best catches:

1. Packages that aren't on GitHub. Our rules never said what happens when there's no GitHub data. The tool would quietly print ALIVE. The Zoom Out Goldfish called it out: this "reproduces the exact failure mode the tool exists to prevent."

2. "Last release" is a trap. The doc never said which date counts as the last release. We checked the obvious field, time.modified, on request. It says July 2026. The last real release was February 2020. A naive build would call a deprecated package fresh.

3. Exit code 1 was taken twice. We gave SLOWING exit code 1. A crash in Node also exits with 1. In CI, "this package is slowing down" and "the tool blew up" would look the same.

Step 3: Be the human (step 3, twice)

Not everything the Goldfish said was gold.

The Goldfish scorecard: 26 findings, 20 fixed, 4 skipped, 2 wrong. Readiness blockers 6 to 3. The build passed 24 of 24 tests. Two bugs missed by every Goldfish.

  • 4 skipped: one asked for a formal "Alternatives Considered" section. For a CLI this small? No.
  • 2 wrong: one said scoped names like @tanstack/react-query need %2F encoding. We tested both forms; npm accepts both. And two Goldfish disagreed about GITHUB_TOKEN: one called it unneeded, the other said shared CI runners hit GitHub's 60-requests-an-hour limit fast. You're the tiebreaker. (We kept it.)

Rensin's own rule of thumb is that about 30% of the suggestions are highly valuable. We fixed 20 of 26, but that says as much about our rough first draft as about the Goldfish.

Then we ran just the tech-lead Goldfish on v2. Blockers went from 6 to 3. All three were real (one: where does the "GitHub unavailable" line go in the output?). We fixed them by hand in v3.

Step 4: Hand it to a stranger (steps 4 and 5)

Now the real test. A brand-new Claude session, no plugin, one instruction: build exactly what the doc says.

Five minutes later it had made 6 files, and 24 of 24 tests passed on the first try. Then we ran it on real packages:

$ node bin/pkg-pulse.js esm
esm 3.2.25
  last release     17 May 2019  (2716 days ago)
  last push        10 Apr 2024  (925 days ago)
  open issues+PRs  86
  archived         yes
  deprecated       no
  weekly downloads 4.1M  (not used in the verdict)
verdict: DEAD - GitHub repo is archived
also ask: how hard would it be to replace this? (not checked)
Enter fullscreen mode Exit fullscreen mode

4.1 million downloads a week, and the repo is archived. That's exactly why downloads don't get a vote. request and node-sass came back DEAD, formik SLOWING, and react-hook-form and @tanstack/react-query ALIVE, all with the right exit codes.

What every Goldfish missed

Two things got past all 12 Goldfish (9 in the first review, 3 in the second):

  • The parallel requests. v1 said "run the three requests in parallel." That's impossible: the GitHub address comes from the npm answer. We spotted it while writing v2. No Goldfish named it.
  • "15 Sept 2026". Node 24 writes September as Sept in British English, so that one date is a letter wider and nudges its line. The tech-lead Goldfish had even confirmed the date format, using a November example.

Goldfish read documents. They don't run code. Your tests and a real run still do that job.

Should you use it?

  • Today, for free: use the three prompts above on any feature bigger than a bug fix. Fresh chat each time.
  • Install the plugin when you're doing that every week. Our full review took 14 minutes and about $3.40 of usage at API prices (it ran on Claude Sonnet 5). On a subscription, that comes out of your plan limits.
  • Skip it for one-line fixes. Google's own docs say not to force the design-first process when you can fix a simple bug in one shot.

I taught myself to code, mostly without a senior to read my plans and ask, "What happens when the repo isn't on GitHub?" A Goldfish is a decent stand-in for that senior. It isn't a replacement: it was wrong twice and blind twice.

Tested on October 23, 2026 with Claude Code 2.1.278, EGM 0.1.0 and Node 24.19.0.

What's one question you wish someone had asked about your last feature before you built it?

Top comments (0)