TL;DR und Fazit
Der Agent, der deinen Plan geschrieben hat, sieht dessen Lücken nicht. EGM, das Elephant-Goldfish Model, ist Googles kostenloses Plugin für Claude Code, das genau das behebt: Der Elefant schreibt den Plan mit dir, und Goldfisch-Reviewer ohne Gedächtnis des Gesprächs lesen nur den Plan und deinen Code. Es ist kein offiziell unterstütztes Google-Produkt s25.
Wir haben es an einem echten Feature einer Familien-Wunschlisten-App getestet (Next.js, Notion als Datenbank): Ein Verwandter soll ein Geschenk reservieren können, damit nie zwei Leute dasselbe kaufen, und die Eltern sollen nicht sehen, wer was reserviert hat. Auf einer Kopie des Repos, nie auf der echten Liste.
- Der Planer benannte die Race selbst. Die Reviewer fanden zwei Lücken, die niemand im Gespräch angesprochen hatte: Die Eltern konnten aus ihren eigenen Hosting-Logs ableiten, wer was reserviert hat, und ein gespeichertes Cookie ließ sich wiedereinspielen, um die Reservierung eines anderen zu stornieren.
- Der Fix des Reviews für die Race schwächte das Ziel ab. Wir fochten ihn an, und das Design änderte sich.
- Eine frische Session baute das Feature nach dem genehmigten Design: 216 Tests, und 30/30 Races um die letzte Einheit ergaben genau einen Gewinner. Das lief gegen einen Ersatz für Notion, der echte Check bleibt also unsere Aufgabe.
- Bei einem einzeiligen README-Fix kostete der normale Workflow $0.0455 und 10 s. Der EGM-Weg für das Feature kostete $7.10 und 32 min, bevor irgendein Code existierte.
Fazit: Führe das Review aus, wenn ein Fehler fremde Daten, Privatsphäre, Rechte oder Geld berührt. Lass es bei einem kleinen, klaren Fix weg. Das Paket unten gibt dir die Installation, die eine CLAUDE.md-Zeile, ein Cheat Sheet und die Checkliste.
Quellengestützte Synthese
Was EGM ist. Googles README sagt, dass Tausende Google-Ingenieure es nutzen, um mit Agenten mit tiefem Kontext Specs zu entwerfen und sie mit Subagents ohne Kontext zu testen, bevor Code entsteht s1. Das ist Googles eigene Aussage, ohne Zahl. Die Idee stammt von Dave Rensin, der schrieb „We are mass-producing our mistakes", wenn wir nicht aufpassen s7. Das einzige Release bisher ist v0.1.0, veröffentlicht am 2026-10-27 s26. Es steht unter Apache-2.0 und ist „not an officially supported Google product" s25 s9.
Die Installation sind zwei Befehle und eine neue Session. claude plugin marketplace add google/elephant-goldfish-model, dann claude plugin install egm@egm, dann eine neue Session starten s1 s2. Andere berichten dieselben zwei Befehle s6 s8. Wir haben der Installation --scope project hinzugefügt, sodass sie nur für dieses Repo gilt. Sie braucht Claude Code 2.1.271 oder neuer wegen der Unterstützung von omitClaudeMd s2. Unsere Version war 2.1.294.
Warum die Reviewer blind sind. Normale Subagents schließen die Eltern-Konversation aus. omitClaudeMd schließt zusätzlich die Instruktionsdateien von Nutzer, Projekt und lokal aus s2. Die Reviewer-Adapter deklarieren tools: [Read, Grep, Glob], model: inherit und omitClaudeMd: true s20. Der Synthesizer ist anders: Er startet Reviewer, wobei Verschachtelung bis zu 3 Ebenen erlaubt ist s2. Die Doku fügt eine Einschränkung hinzu: Das ist „context and tool isolation, not filesystem isolation: reviewers can read accessible files" s2.
Eine CLAUDE.md-Zeile hält die Reports in einem Ordner. Ohne sie sammeln sich Review-Dateien im Wurzelverzeichnis des Repositories, wo du sie versehentlich committen kannst s23. Eine Zeile EGM artifact directory: <path> in CLAUDE.md oder AGENTS.md leitet sie in diesen Ordner s2.
Der Workflow.
- Brainstorm startet einen Goldfisch-Schwarm mit 6 Blickwinkeln und schreibt
concepts_brief.mds21. - Draft schreibt
design_draft.mds22. - Review läuft in fünf Phasen: Initial Zoom Out Review, Comprehension Review, Design Critique, Intermediate Zoom Out Review und Implementation Readiness s3.
- Resolve versieht jedes Problem mit CONTEST, ESCALATE, PROPOSE FIX oder DECLINE. Du entscheidest, und „auto accept" wendet die vorgeschlagenen Fixes gesammelt an und überspringt angefochtene Punkte s24.
Was andere herausfanden. Ein Erfahrungsbericht zu Claude Code und EGM 0.1.0 zählte 26 Befunde (9 Blocker, 9 Major, 8 Nits), 20 behoben, 4 übersprungen, 2 falsch, etwa $3.40 Nutzung zu API-Preisen und 24 von 24 Tests beim ersten Versuch bestanden. Seine eigene Lehre: „Goldfish read documents. They don't run code." s6. Rensin sagt, etwa 30 % der Vorschläge seien hochwertig, was er mehr als genug nennt s7.
Und was dagegen spricht. Die README: Für einen kleinen, klaren Bugfix nimm deinen normalen Coding-Workflow s25. Die FAQ: Design und Review „may not pay off for a small, well-understood change", und allein den Workflow abzuschließen „does not demonstrate a productivity improvement" s4. Ein Mitentwickler würde es bei Hintergrund-Jobs, Berechtigungen, Datenänderungen oder einer neuen Dienstgrenze ausprobieren s10. Ein kleiner Pilotversuch (drei Läufe pro Arm) fand, EGM „added nothing over the plain plan, at about five times the cost" s5. Wir zitieren ihn als einen kleinen Pilotversuch, nicht als Regel.
Warum die Race real ist. Die Notion-Doku bietet kein atomares Erhöhen und kein bedingtes Schreiben für eine Property, und Schreibvorgänge ersetzen den ganzen Wert s27. Zwei Verwandte, die denselben Zähler gelesen haben, können beide schreiben, und eine Reservierung geht verloren.
Unser eigener Lauf, wörtlich. Diese Zahlen sind unsere, nicht aus einer Quelle oben. Session-Modell Claude Sonnet 5.5, die Reviewer erben es. Kosten sind API-Äquivalente auf Sonnet 5.5.
- Das volle Review startete 9 Reviewer-Subagents in 5 aufeinanderfolgenden Stufen, und der konsolidierte Durchlauf dauerte 7 min 24 s. Rohbefunde über die fünf Stufen: 77. Zusammengeführt zu 12 Maßnahmen, mit 1 Blocker.
- Resolve erzeugte 37 Probleme: 4 ESCALATE, 5 CONTEST, 2 DECLINE, 26 PROPOSE FIX. Es prüfte die Reviewer zuerst gegen den Code und fand einen falschen Befund: Ein Reviewer sagte,
input.tsxwerde ungenutzt, aber die Login-Seite importiert es noch. - Die Fix-Richtung des Reviews für die Race war, das Ziel fallen zu lassen. Wir fochten sie an. Das Design mit einem Gewinner entstand aus dieser Anfechtung, und kein Reviewer hat es je gelesen.
- Build aus dem genehmigten Design in einer frischen Session: 216 Tests bestanden, und der Race-Test am letzten Exemplar ergab in 30 von 30 Seeds einen Erfolg und ein „full".
- Kosten: $7.10 und 32 min Modellzeit, bevor irgendein Code existierte (Brainstorm, Draft, Review, Resolve). Der README-Fix auf einer Kopie ohne EGM: $0.0455 und 10 s.
Code
Fünf Referenzdateien. Die ersten vier kopierst du in dein Repo oder hältst sie offen. Die fünfte ist der echte Report aus unserem Lauf, damit du siehst, wie die Ausgabe aussieht.
1. Installieren und deinstallieren. Führe es aus deinem Projektordner aus und starte dann eine neue Session.
egm-install.sh
#!/usr/bin/env bash
# Install Google's EGM plugin for this project only.
# Needs Claude Code 2.1.271 or later (the reviewers rely on omitClaudeMd).
claude plugin marketplace add google/elephant-goldfish-model
claude plugin install egm@egm --scope project
# Start a new Claude Code session now, so the plugin loads.
# The commands then show up with the /egm: prefix.
# Uninstall (run from the same project folder):
# claude plugin uninstall egm@egm --scope project
# claude plugin marketplace remove egm
2. Die CLAUDE.md-Zeile. Füge sie in die CLAUDE.md deines Projekts ein, damit die Reports in docs/egm landen.
CLAUDE.md
<!-- Keeps EGM reports in one folder instead of the repo root. Create docs/egm or let EGM create it. -->
EGM artifact directory: docs/egm
3. Das Review-Cheat-Sheet. Die Befehle der Reihe nach, die fünf Stufen und ihre Report-Dateien, was die Labels von Resolve bedeuten und die Reviewer-Einstellungen.
egm-review-cheatsheet.md
# EGM review cheat sheet
## The commands, in order
1. `/egm:egm-brainstorm <the feature in one sentence>` writes `concepts_brief.md`.
2. `/egm:egm-draft` writes the design document, one section at a time. You approve each section.
3. `/egm:egm-review <design>` runs the five review stages (below). Pick the consolidated mode to get one merged list.
4. `/egm:egm-resolve` turns the reports into one table of issues. You answer each one.
5. Open a fresh session and send:
```
Build the feature exactly to the approved design in docs/egm/<file>.md; add tests.
```
## The five review stages and their report files
| Stage | What it asks | Report file |
|---|---|---|
| 1. Initial Zoom Out Review | Does the design solve the right problem? | `zoom_out_report.md` |
| 2. Comprehension Review | Would a newcomer understand it? | `comprehension_report.md` |
| 3. Design Critique | Attacks the design, its structure and its wording | `critic_report.md` |
| 4. Intermediate Zoom Out Review | Zooms out again on the unedited design | `intermediate_zoom_out_report.md` |
| 5. Implementation Readiness | Checks each step against your real code | `implementation_readiness_report.md` |
The consolidated mode also writes `consolidated_review_report.md`. Resolve writes `goldfish_review_report.md`.
## What resolve's suggestions mean
- ESCALATE: the reviewers found a decision only you can make.
- CONTEST: the agent thinks the finding is wrong or the fix is too weak, and says why. You can still overrule it.
- DECLINE: the agent proposes not acting on the finding.
- PROPOSE FIX: the agent proposes an edit to the design.
- "auto accept": reply with these two words to batch-apply every PROPOSE FIX and skip CONTEST items. Decide the escalated issues first.
## Reviewer settings (Claude adapters)
```
tools: [Read, Grep, Glob]
model: inherit
omitClaudeMd: true
```
Read-only tools, the same model as your session, and no CLAUDE.md or other instruction files. This is context and tool isolation, not filesystem isolation: reviewers can read accessible files.
## Before you build
Reviewers read documents. They do not run code. If your design relies on an outside service behaving a certain way, run a check against a copy of the real thing before you ship.
egm-review-cheatsheet.md on GitHub
4. Die Checkliste Weglassen oder Prüfen. Lies sie, bevor du den Build-Prompt tippst.
skip-or-review.md
# Skip or review
Ask one question before you type the build prompt: if this is wrong, whose data, privacy, permissions or money does it touch?
## Run the EGM review when the change involves
- [ ] Data that several people write at the same time
- [ ] Privacy: something someone must not be able to see or work out
- [ ] Permissions: who can do, change or cancel what
- [ ] Money: a charge, a price, a balance, a refund
- [ ] A time rule, a background job or a new service boundary
## Use your normal workflow when
- [ ] The fix is small and clear and you can say it in one sentence
- [ ] You could one-shot it
- [ ] A wrong result is visible at once and costs nothing to undo
## What the README says
> Use it when a feature needs design decisions before implementation. For a small, clear bug fix, use your normal coding workflow.
## What the FAQ adds
> Design and review take time and may not pay off for a small, well-understood change.
> Completing the EGM workflow alone does not demonstrate a productivity improvement.
5. Ein echter konsolidierter Report. Das ist der Report aus unserem Lauf an einer Familien-Wunschlisten-App. Achte darauf, wie jede Maßnahme auf die Befunde der Stufen dahinter zurückverweist.
example-consolidated-report.md
<!-- The consolidated review report from our run on a family gift-list app. -->
# Consolidated Review Report
**Target:** `docs/egm/gift-reservations.md` (464 lines; FeatureRange 1-280, DetailedRange 281-464)
**Mode:** Consolidated report, all five stages, no checkpoints. No edits were applied to the document.
**Stage reports:** `zoom_out_report.md` (5), `comprehension_report.md` (6), `critic_report.md` (7), `intermediate_zoom_out_report.md` (8), `implementation_readiness_report.md` (9).
**Overall:** The design fits the problem and keeps Notion as the only store. It is not ready to implement. Five issues need decisions from the author, and the plan has errors a reader can check against the code: a build that breaks mid-sequence, a wrong HTTP status, and a wrong assumption about SDK retries.
## Blockers
Stage 8 raised one item to Blocker (A1). Stages 5, 6, 7 and 9 report none.
## Action items by priority
### 🔴 Blocker
**A1. Decide whether to drop the post-write re-read.** (Stage 5 ZO-2, Stage 6 CO-3/CO-6, Stage 7 CR-1/CR-2/CR-3/CR-8, Stage 8 Z8-1, Stage 9 IR-6)
Lines 28, 132-134, 159, 174, 220, 276, 360, 366, 415.
The re-read does not catch the main race (the document says so at line 174), assumes read-after-write consistency with no evidence, checks only `x`, adds a third Notion call, and leaves the cookie and response behaviour undefined when it fails. Goal 2 and the rejection of Alternative F rest on it. Stage 8 recommends removing it, along with `changed_meanwhile` and the "unverified" branch, rewriting Goal 2 as "reduces duplicate purchases, does not prevent them" and rewriting Alternative F around the real trade-off. If kept, every post-write failure needs a stated cookie and response behaviour. Decide this first: it closes or removes about eight other findings.
### 🟡 Major: design and scope
**A2. Fix the cookie's stated guarantees and the stale-record dead end.** (CR-4, CR-5, Z8-2, Z8-3, ZO-5)
Lines 32, 34, 85, 111, 114, 144-148, 246-250, 355.
A saved copy of the cookie can be replayed to cancel someone else's unit, and clearing the cookie bypasses the one-unit and 80-id limits. After the parents release a unit by hand, the stale cookie makes reserve fail with 409 `already_reserved`. State the real threat model (stops accidental cancels and casual tampering among about 30 relatives), and decide whether to keep the `already_reserved` guard and the 80-id cap.
**A3. Qualify "no identity is stored or logged", and decide on the bespoke log line.** (CR-6, Z8-4, CO-7)
Lines 29, 37, 270-271, 367.
Vercel request logs and Notion edit history, together with timestamped log lines, can let the parents correlate who reserved what. The log line is also specified three different ways.
**A4. Settle where configuration is checked, and the effect on the list route.** (ZO-4, Z8-5, CR-17, CO-12, IR-13)
Lines 36, 115, 117, 168, 394-395, 403.
The proxy 503 for `/api/registry*` changes the existing list GET route, which the plan doesn't list. Configuration is checked in the proxy, the routes and `canReserve`. The 401 versus 503 precedence is unspecified.
**A5. Reuse the existing HMAC helper.** (ZO-1, IR-8)
Lines 111, 324. `src/lib/auth.ts` already has `hmacBase64Url`. The plan writes a second implementation and leaves the crypto details (key import, base64url without `Buffer`, signed text) unspecified.
### 🟡 Major: factual errors and unstated assumptions
**A6. "Each step leaves the project building" is false.** (CO-2, IR-1, Z8-6)
Line 283. The build is red from item 8 through item 16. Group the changes into one landing phase or keep the old exports until the consumers go.
**A7. The deleted `PATCH` route returns 404, not 405.** (CO-5, CR-7, IR-2)
Lines 116, 181, 388, 458. Correct the claim and manual test 7. A 410 stub is an option, but Stage 8 advises against adding code for it.
**A8. Handler signatures ignore Next 16 async APIs.** (IR-3)
Lines 115, 378, 382, 402. `params` is a `Promise`, and `cookies()` is async.
**A9. The Notion SDK already retries 429s, and error classification is unspecified.** (IR-4, IR-5)
Lines 276, 339-345. "No automatic retry" is false unless `getClient` sets `retry: false`. Name how `rate_limited`, `not_found` and `retry-after` are detected, state the `pages.update` payloads, and reconcile the two signatures of `writeReservationState`. A missing `Acheté ?` returns 502 before the 422 check.
**A10. Undefined terms and sources.** (CO-1, CR-12, CO-4, CO-10, CO-14)
`concepts_brief.md`, "the owner", "reconciliation", "Public only" filter, `x` and `y`, and the data-source id are used without definition or link. Five places justify choices by process history a new reader cannot verify.
**A11. Required sections and rationale.** (CR-9, CR-10, CR-11)
There is no Risks & Mitigations section (the content is scattered). Alternatives A, J and M are rejected only on "the parents decided"; C and F lack the decisive trade-off. The Open Question at line 57 points to intro wording that is not in the plan.
**A12. Unresolved decisions in the plan.** (IR-6, IR-7, IR-9, IR-10, IR-11, IR-12)
Cancel error mapping, the cookie-change rule, response bodies, final French copy, the client rewrite details and automated test coverage for the Notion layer, routes, proxy and table.
### 🟢 Nit
* **Simplicity.** Single `[action]` route instead of two files; delete the unused `checkbox.tsx` and `input.tsx`; remove the "Optional extras" question; revert to strict `x/y` parsing or fix the Goal wording; fold Alternatives G, H and I into Goals and Non-Goals. (ZO-6, ZO-8, Z8-7, Z8-8, Z8-9, CR-19)
* **Structure.** Reorder Open Questions; split CUJ 4; add one error-path CUJ; fix the ambiguous state table and the packed response table; fix the "two new calls" list. (CR-13 to CR-16)
* **Wording and terminology.** Unify `acheté`/`achete`/`Acheté ?` and `x/y` versus `acquise/totale`; remove filler and duplicated statements; fix French copy and apostrophes; pin `vitest`; split the dense reserve step 7 and `act` handler sentences. (CR-18, CR-20 to CR-24, IR-14 to IR-20)
## Traceability matrix
| Action item | Stage 5 | Stage 6 | Stage 7 | Stage 8 | Stage 9 |
| :--- | :--- | :--- | :--- | :--- | :--- |
| A1 re-read | ZO-2 | CO-3, CO-6 | CR-1, CR-2, CR-3, CR-8 | Z8-1 | IR-6 |
| A2 cookie guarantees, stale record | ZO-5 | | CR-4, CR-5 | Z8-2, Z8-3 | |
| A3 identity and logging | | CO-7 | CR-6 | Z8-4 | IR-17 |
| A4 config checks, list route | ZO-4 | CO-12 | CR-17 | Z8-5 | IR-13 |
| A5 HMAC reuse | ZO-1 | | | | IR-8 |
| A6 build order claim | | CO-2 | | Z8-6 | IR-1 |
| A7 405 vs 404 | | CO-5 | CR-7 | Z8-7 | IR-2 |
| A8 async handler APIs | | | | | IR-3 |
| A9 SDK retry, error mapping | | | | | IR-4, IR-5 |
| A10 undefined terms | | CO-1, CO-4, CO-10, CO-14 | CR-12 | | |
| A11 risks section, rationale | | | CR-9, CR-10, CR-11 | | |
| A12 unresolved plan decisions | ZO-3 | CO-13 | | | IR-6 to IR-12 |
| Nits | ZO-6 to ZO-8 | CO-8, CO-9, CO-11, CO-15, CO-16 | CR-13 to CR-24 | Z8-7 to Z8-9 | IR-14 to IR-20 |
## Coverage and limits
- Stage 7 critics reviewed lines 1-280 only. Stage 9 reviewers audited lines 281-464 against the real code under `src/`.
- No stage reviewed any file outside the target document and the existing source files named above.
- Stage 8 ran on the unedited document, so its recommendations (drop the re-read, drop `already_reserved`, remove the proxy 503) are proposals for the author to decide, not settled findings.
- Reviewers cannot run the app. The claims about Next.js (404 versus 405) and the Notion SDK (retry defaults) come from the reviewers reading the code and type definitions in the repo and should be confirmed during the fix.
example-consolidated-report.md on GitHub
Mach das am Montag
- Prüfe
claude --version. Du brauchst 2.1.271 oder neuer. - Führe die zwei Installationsbefehle aus
egm-install.shin einem Projekt aus und öffne dann eine neue Session. - Füge
EGM artifact directory: docs/egmin die CLAUDE.md dieses Projekts ein. - Wähle ein Feature, das du noch nicht gebaut hast und bei dem ein Fehler gemeinsame Daten, Privatsphäre, Rechte oder Geld berührt. Führe
/egm:egm-brainstormdafür in einem Satz aus. - Führe
/egm:egm-draftaus, genehmige das Design Abschnitt für Abschnitt, dann/egm:egm-review <design>, und lies die fünf Reports. - Führe
/egm:egm-resolveaus. Beantworte die eskalierten Probleme selbst und fechte jeden Fix an, der dein Ziel abschwächt. - Öffne eine frische Session und sende: „Build the feature exactly to the approved design in docs/egm/
.md; add tests." Teste dann den riskanten Pfad selbst. - Öffne bei deinem nächsten kleinen, klaren Fix
skip-or-review.mdund geh direkt zu deinem normalen Workflow.
Weiterführend
Andere Befehle, die wir ausgelassen haben. Das Plugin hat außerdem /egm:egm-bootstrap und /egm:egm-drift-report, einen zweiten Workflow für eine bestehende Codebasis und einen wöchentlichen Drift-Check. Wir haben sie nicht ausgeführt, also sagen wir nichts darüber, wie gut sie funktionieren.
Andere Harnesses und gemischte Modelle. Wir haben nur Claude Code genutzt. Die Reviewer verwenden model: inherit, liefen also auf unserem Session-Modell und können dessen blinde Flecken teilen. Andere Harnesses oder gemischte Modelle haben wir nicht ausprobiert.
Plan Mode und andere Planer. Wir haben EGM nicht gegen Plan Mode oder andere Planungstools bewertet. Der oben zitierte Pilotversuch ist der einzige direkte Vergleich, und er ist klein.
Ehrliche Grenzen unseres Laufs.
- Der Claim-Ledger-Fix für die Race entstand in Resolve, nachdem wir das Review angefochten hatten, und kein Goldfisch hat ihn je erneut geprüft.
- Der Fix setzt voraus, dass Notion bei gleichzeitigen Anhängevorgängen eine einheitliche Reihenfolge einhält. Notions Dokumentation verspricht das nicht.
- Das Ergebnis 30 von 30 lief gegen einen Ersatz für Notion. Der Race-Check des Designs gegen eine Kopie der echten Datenbank wurde nicht ausgeführt. Führe ihn vor dem Release aus.
- Das Review prüft Dokumente und Code und kann die App nicht ausführen. Zwei Framework-Aussagen in unserem Report (404 gegenüber 405, Retry-Standardwerte des SDK) stammen aus dem Lesen von Code, und der Report sagt, dass du sie bestätigen sollst.
- Rensins 30 % und die Zahlen des Erfahrungsberichts sind die Zahlen ihrer Autoren, nicht unsere.
FAQ
Sehen die Reviewer meine CLAUDE.md oder unseren Chat?
Nein. Sie schließen die Konversation aus, und omitClaudeMd: true verbirgt CLAUDE.md und die anderen Instruktionsdateien. Den Plan und jede zugängliche Datei lesen sie trotzdem s2.
Warum liegen meine Review-Dateien im Wurzelverzeichnis des Repos?
Claude Code hat standardmäßig kein Artefakt-Verzeichnis s23. Füge die Zeile EGM artifact directory: in CLAUDE.md ein.
Muss ich in Resolve jedes Problem beantworten? Nein. Beantworte die eskalierten, dann antworte „auto accept", um die vorgeschlagenen Fixes gesammelt anzuwenden. Angefochtene Punkte werden übersprungen s24.
Reicht eine grüne Test-Suite als Beweis? Nein. Unsere bestand 216 Tests, und doch war der Race-Check gegen das echte Notion noch offen. Teste den riskanten Pfad selbst.
Wann sollte ich das Review weglassen? Bei einem kleinen, klaren Fix, wie die README sagt s25. In unserem Lauf kostete dieser Fix ohne es $0.0455 und 10 s.
AIDive