Executes the Antagonistic-Review process from the Elephant-Goldfish Model (EGM) via an automated multi-agent review loop to audit documents against qualitative standards and structural templates, and automatically apply approved fixes. Use when reviewing design docs, READMEs, feature specifications, implementation plans, or verifying document completeness and tone.
When running in Codex or ChatGPT Work, first read Codex integration.
In Claude Code or Cowork, read ${CLAUDE_PLUGIN_ROOT}/docs/claude.md first.
This skill acts as the central orchestration engine driving the multi-agent review loop. It coordinates two distinct agent memory models:
The driver manages argument intake, resolves paths for reviewers and standards, unconditionally re-parses target line ranges before every iteration, spawns concurrent specialized Goldfish auditors based on configuration, and coordinates with the Elephant context to resolve findings.
A Goldfish runs in a fresh context with no conversation history. Spawn each
subagent with your harness's subagent tool (Antigravity: invoke_subagent; Claude Code: Agent; Codex: spawn_agent). Each subagent is defined in agents/<file>.md, and its
frontmatter name (for example egm-zoom-out) is the subagent type to request
where your harness registers named subagents. Otherwise spawn a general-purpose
subagent and tell it to read that persona file first. Pass the prompt verbatim
and wait for the report. If your harness cannot nest subagents,
use direct dispatch instead of the synthesizer. See docs/harnesses.md.
If your harness has no subagent tool, stop and tell the user: a review in the same
context is not a Goldfish review.
The caller or user provides exactly these parameters:
TargetFile: Absolute or relative path to target document.SemanticTarget: Descriptive targeting string (e.g., "Target the H4
block with SS-ID 'S1.12'"), or full file.Reviewers: List of reviewer names (shortnames or paths).Standards: Mapping of reviewer names to standard names (shortnames or
paths).GoldfishContext: A reading list (source files, directories, or
documentation URLs) fed to reviewers to establish their baseline. An empty
list from the caller counts as provided; do not ask for it again. Some
reviewers cannot open URLs, so before the first round save the raw page of
each URL as a new file in the working directory (or your harness's artifact
directory) and pass its absolute path instead. If a page cannot be saved,
ask the user for a local copy and end your turn; if no one can answer,
as in a headless run, leave it out, tell the user, and keep going.When resolving names in Reviewers and Standards:
design_critic,
structural, style, implementation_readiness,
codebase_details, comprehension, zoom_out) to agents/{name}.md.
The persona file defines the reviewer's core mandates, audit vectors, and
output format.feature-spec-standard,
implementation-readiness-standard, zoom-out-standard, heilmeier-standard,
re-implementation-standard) to resources/document_standards/{name}.md./), treat it as an
absolute or workspace-relative path and read it directly.Evaluate the provided inputs (TargetFile, SemanticTarget, Reviewers,
Standards, GoldfishContext).
design_critic (mapped to
resources/document_standards/feature-spec-standard.md) and
structural (mapped to resources/document_standards/feature-spec-standard.md).implementation_readiness
(mapped to resources/document_standards/implementation-readiness-standard.md)
and codebase_details.Execute the following sequence in a continuous loop:
Before every iteration, unconditionally re-scan TargetFile by reading it
and using the stable SemanticTarget string (e.g., locating the target header) to
dynamically determine the updated absolute start and end line numbers. This
ensures absolute accuracy even if the file was edited in prior rounds. (If full file mode is specified, confirm full-file line bounds).
agents/synthesizer.md / egm-synthesizer).
The synthesizer spawns the Goldfish review swarm in
parallel, deduplicates findings, writes the report artifact, and
returns a single summary message to avoid context pollution in the root
conversation. Pass it the Failed Reviewers rule below and
GoldfishContext, and tell it to give those files to each reviewer.
Its summary must give a status, completed or not run, for each
requested reviewer.Reviewers directly.
Instruct each subagent to first read its persona definition in
agents/{name}.md, then audit TargetFile at the resolved line range
against its designated standard in resources/document_standards/,
supplying GoldfishContext.FindingsList. Give each finding a stable id
(<reviewer>-<round>-<n>) and record its reviewer, severity, and affected
scope.TargetFile, the active line range, and the aggregated FindingsList
to the egm-resolve workflow.CONTEST vs. PROPOSE FIX.goldfish_review_report.md with your file-writing tool.TargetFile using your file-editing tool.Fresh reviewers sample differently each round, so a round with zero findings is rare even when the document improves. Use these rules instead:
On converged, go to Step 3. On cap or churn, write a short list of the open findings by severity, then ask the user one question: accept and proceed, continue past the cap, or return the document to drafting.
Crucial Turn-Taking Requirement: After the resolution phase finishes for a
given round, the loop driver MUST respect the turn-taking checkpoint in
egm-resolve. The driver must remain idle across human turns,
only looping back to Step 2.1 when the user explicitly confirms they wish to run
another round of review.
Upon completion (converged, cap or churn accepted by the user, or manual halt):
egm-review, exit
cleanly to hand execution back to the parent workflow.Copy a source-pinned command for your client. You run it yourself.
Destination: .claude/skills/egm-review-loop · pinned to the source commit
# Run from your project root
git clone https://github.com/google/elephant-goldfish-model.git .skillboard-tmp
git -C .skillboard-tmp checkout bdcfe8cdaee99699c4b2cb7ad4e3b2c1a6b56a31
mkdir -p ".claude/skills"
cp -r ".skillboard-tmp/distributions/claude/skills/egm-review-loop" ".claude/skills/"
rm -rf .skillboard-tmpReview the source before running. This copies files into your project; it is not a one-click install and does not verify runtime safety.
sudo apt update && sudo apt install -y gitnpm install -g @anthropic-ai/claude-code# Run from your project root
git clone https://github.com/google/elephant-goldfish-model.git .skillboard-tmp
git -C .skillboard-tmp checkout bdcfe8cdaee99699c4b2cb7ad4e3b2c1a6b56a31
mkdir -p ".claude/skills"
cp -r ".skillboard-tmp/distributions/claude/skills/egm-review-loop" ".claude/skills/"
rm -rf .skillboard-tmpDestination: .claude/skills/egm-review-loop
Scanner static-checks@0.1.0 · commit bdcfe8cdaee9. Static checks cannot prove runtime safety – review the source and the exact diff before installing. How checks work.
References parent-directory traversal, which can escape a target directory.
Evidence: ../· fingerprint fa08499e14d0113b