claudeflows

claudeflows

Two minds. One workflow.

ClaudeFlows is a Claude Code plugin. It pairs your full-context session — the Elephant — with fresh, blind subagents — Goldfish — to stress-test ideas, designs, bugs, and diffs before any code ships.

/plugin marketplace add omniprag/claudeflows

Run inside the Claude CLI. Six /cf- commands light up.

The idea, in two cards

Inspired by Dave Rensin's "Elephants, Goldfish, and the New Golden Age of Software Engineering". The trick is asymmetry: if a Goldfish that can't read your mind still reaches the same conclusion, the doc is real. If it can't, the doc is wrong — not the Goldfish.

Elephant memory

Your Claude Code session. It's read every file you opened, remembers every decision, knows what you actually want. Great at synthesis. Sometimes too close to the work to notice it has a hole.

Goldfish no memory

A fresh subagent with zero context except what you hand it. It can't be biased by the conversation, because it never saw the conversation. That's the point — it's the cold reader your design doc actually has to convince.

The pipeline

Each stage feeds the next, but you don't have to start at the top. Pick the stage that matches what you have in your head right now.

flowchart LR
    R(["rough idea"]) --> A["brainstorm"]
    A -- concept --> B["prd"]
    B -- PRD --> C["feature"]
    BG(["bug, issue, repro"]) --> D["bug"]
    C -- code change --> E["precommit-review"]
    D -- code change --> E
    E -- validated change --> F(["commit"])
          
A question, not a task
/cf-question
A half-formed thought
/cf-brainstorm
A direction, no requirements yet
/cf-prd
A clear feature to build
/cf-feature
A bug or a #issue
/cf-bug
A diff already in hand
/cf-precommit-review

The six commands

Each command is a different Elephant↔Goldfish dance. Same primitives, different choreography.

/cf-question

a fast, cited answer — read-only

You have a question, not a task. ClaudeFlows splits it into 2–3 narrow lanes, runs a Goldfish on each in parallel, and synthesizes the answer into under 250 words with sources. No clarifying prompts. Nothing on disk changes.

flowchart LR
    Q(["your question"]) --> E["Elephant
classifies"] E --> G1["Goldfish · Lane 1"] E --> G2["Goldfish · Lane 2"] E -.optional.-> G3["Goldfish · Lane 3"] G1 --> S["synthesize"] G2 --> S G3 -.-> S S --> A(["≤250-word cited answer"])

/cf-brainstorm

divergent ideas → ranked picks

You have a rough thought and want options. Multiple Goldfish run in parallel, each through a different lens — technical, business, UX, contrarian. Their lack of shared context is the feature: it's what makes them disagree. The Elephant clusters the output into a brief.

flowchart LR
    I(["rough idea"]) --> SEED["Elephant
frames the seed"] SEED --> T["Goldfish · Technical"] SEED --> B["Goldfish · Business"] SEED --> U["Goldfish · UX"] SEED --> C["Goldfish · Contrarian"] T --> X["cluster & rank"] B --> X U --> X C --> X X --> O(["concepts brief"])

/cf-prd

idea → grounded PRD

You have a direction and need real requirements. Wave 1 grounds the idea in your existing codebase. You answer a few targeted gap questions. Wave 2 sends Goldfish out across market, technical, and UX/compliance lenses. The Elephant writes the PRD, with anything you deferred spelled out as Open Questions.

flowchart LR
    I(["idea or #issue"]) --> W1["Wave 1
codebase grounding"] W1 --> GAPS["gap Q&A
with you"] GAPS --> W2["Wave 2
research lenses"] W2 --> P(["PRD
+ Open Questions"])

/cf-feature

design doc → reviewed code

You know what to build. The Elephant drafts a design doc — no code yet. Three Goldfish read it cold: one for comprehension, one to find gaps, one to check it could ship in a single pass. The implementation gate stays closed until critic and readiness both sign off. Then the diff goes through review.

flowchart LR
    F(["feature / #issue"]) --> D["design doc"]
    D --> P1["Goldfish · Comprehension"]
    D --> P2["Goldfish · Critic"]
    D --> P3["Goldfish · Readiness"]
    P1 --> G{"gate"}
    P2 --> G
    P3 --> G
    G -- gaps --> D
    G -- ready --> IMPL["implement"]
    IMPL --> PR["/cf-precommit-review"]
    PR --> OUT(["reviewed code"])
            

/cf-bug

symptom → failing test → fix

A Goldfish diagnoses the bug from only the symptom and repro — never your hypothesis. If it lands on the same root cause, that's confidence. If it lands somewhere else, that's signal worth chasing. Either way, the bug becomes a failing test before any fix is written.

flowchart LR
    B(["bug / #issue"]) --> H["Elephant
hidden hypothesis"] B --> GD["Goldfish · Diagnose
(symptom only)"] H --> CMP{"compare"} GD --> CMP CMP --> T["write failing test"] T --> FIX["smallest fix → green"] FIX --> PR["/cf-precommit-review"] PR --> OUT(["reviewed fix"])

/cf-precommit-review

a blind reviewer on your diff

The reviewer is itself a Goldfish — it sees the diff, not the conversation, not what you were trying to do. Findings get fixed or rebutted verbatim, never silently dismissed. The loop runs until clean, with a hard cap of five rounds before it asks you what to do.

flowchart LR
    D(["your diff"]) --> PF["pre-flight
lint · types · tests"] PF --> R["Goldfish · Reviewer
(blind)"] R --> F{"findings?"} F -- yes --> TR["fix or rebut verbatim"] TR --> R F -- no --> OUT(["cleared diff"])

Stack-agnostic by design

Every invocation reads your repo's manifests, version managers, and CI config, then picks the right lint, typecheck, and test commands. No install-time configuration. Tested on Rails, Flutter, Node + Vite + Cloudflare Workers, Python (Django / FastAPI), and Go.

Install

Open the Claude CLI in your terminal and run:

/plugin marketplace add omniprag/claudeflows

If your Claude shows "/plugin isn't available in this environment," run Claude CLI from the terminal and add the plugin. Reload skills and restart Claude Desktop or the VS Code extension. The six /cf- commands should appear.