Skip to content
Back to skills

Coordinator Running Brainstorm Cycles

ASecurity

A coordinator-orchestrated brainstorm is the right shape when:

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added November 7, 2026
ai-agentsgobashrailscode-reviewgit

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned November 7, 2026

npx -y skills add thrum-team/thrum-pro --skill coordinator-running-brainstorm-cycles --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Coordinator Running Brainstorm Cycles?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Coordinator Running Brainstorm Cycles
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/thrum-team-coordinator-running-brainstorm-cycles-thrum-pro/badge)](https://www.skillsdirectory.com/skills/thrum-team-coordinator-running-brainstorm-cycles-thrum-pro)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: coordinator-running-brainstorm-cycles
description:
  "Use when starting a brainstorm for a bug fix, feature, or architectural
  decision the coordinator can't trivially decide alone — spawns a researcher in
  an isolated worktree, runs the brainstorm interactively with the user,
  iterates dual-review cycles to ready-to-merge, optionally drives an
  overarching coherence pass when multiple sibling brainstorms close, then hands
  off to project-setup. Saves coordinator context by isolating brainstorm work
  in a sub-agent worktree rather than burning main-context tokens on Q-by-Q
  dialog."
# source: claude-plugin/skills/coordinator-running-brainstorm-cycles/SKILL.md
---

## Coordinator: Running Brainstorm Cycles

### When to use

A coordinator-orchestrated brainstorm is the right shape when:

- The user wants to settle the **architecture / design** of a non-trivial bug
  fix or feature before any code is written.
- The decision space has **multiple defensible options** and the user wants to
  explore them dialectically rather than just be told "I picked X."
- The coordinator would otherwise be running the Q-by-Q dialog directly, burning
  main-context tokens that should stay reserved for coordination.
- Multiple parallel brainstorms are valuable (one researcher per topic) and the
  coordinator needs to keep them moving without serializing on its own
  attention.

**Don't use when:**

- The decision is small and the coordinator can just decide and act
  (single-paragraph note, no protocol changes).
- The user explicitly wants the coordinator to do the brainstorm in main context
  (rare; respect it).
- The work is mid-implementation and a researcher would just slow it down — use
  the `adversarial-critique` skill for in-flight design forks instead.

### What this skill does (and what it hands off)

This skill owns the **entire researcher-side design pipeline** with review gates
at every stage:

1. Spawn researcher → 2. Brainstorm interactively with user → 3. **Dual-review
   the brainstorm** → 4. Iterate to LOCK → 5. (Optional) Overarching coherence
   pass when sibling brainstorms close → 6. Researcher writes plan +
   **dual-review the plan** → 7. Researcher runs `project-setup` + **dual-review
   the impl prompt** → 8. Hand off to coord for implementer dispatch.

**Three explicit review gates** at stages 3, 6, and 7 — same dual-axis pattern
each time (`verify-against-source` + a prose-quality reviewer, sub-agents (model
per `choosing-subagent-models`) in parallel — see "Review-loop mechanics"
below). Skipping any review gate is a documented anti-pattern. The brainstorm
review catches design issues; the plan review is the SOLE quality gate on the
plan doc — the researcher authors the plan directly (no external tool with its
own internal reviewer sits upstream of this gate); the prompt review catches
plan→prompt translation errors before the implementer executes against them.

### Subagent model selection

> **Model tiers:** pass an explicit `model:` on every dispatch; choose model and
> effort per the `choosing-subagent-models` skill (read `runtime.role_models` at
> the moment of use). Never let a sub-agent inherit your own model.

#### Prefer `efficient-multi-agent-research` for multi-part research

When a research or investigation task has independent parts, reach for the
`efficient-multi-agent-research` skill FIRST — it partitions the work across
many cheap parallel subagents (cheap gatherers, judgment-tier synthesizers)
instead of one expensive serial subagent. It is the preferred research path:
cheaper, faster, and it keeps each subagent's context tight.

### Review-loop mechanics (applies to Phases 3, 6, 7)

Every prose gate uses the SAME machinery. Define it once here; each phase below
names only its stage-specific source.

#### The two reviewers (parallel, per gate)

| Axis            | Reviewer                                                                                                                                                 | Notes                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Conformance** | `verify-against-source` (thrum-owned skill)                                                                                                              | Does the artifact honor its INPUT(s)? Replaces `verify-against-plan` at prose gates — `verify-against-plan` BAILS without a code diff + a File-Structure table, so it cannot run on a brainstorm/plan/prompt. `verify-against-source` accepts a prose artifact + source doc with neither.                                                                                                                                                                                                                                                              |
| **Quality**     | general-purpose sub-agent (model per `choosing-subagent-models`) + prose-quality rubric (PRIMARY) ∥ `superpowers:requesting-code-review` (SUPPLEMENTARY) | The general-purpose prose-quality pass (internal consistency, gaps, contradiction, ambiguity, scope creep) is AUTHORITATIVE. `requesting-code-review` runs on a DIFF, so point it at the artifact's own commit range (`HEAD~1..HEAD`) — gated on the skill being resolvable; skip gracefully if absent. ⚠️ **That is the diff of the `.md` file, NOT a diff against the production code the artifact describes** — this row does NOT cover the code axis. Prose-vs-code is Conformance's job (see `verify-against-source` § "Second comparison unit"). |

Both are `general-purpose`, `model: <per choosing-subagent-models>`,
`run_in_background: true`. Wait for BOTH before consolidating. Verify each
BLOCKING against source before forwarding.

#### Footer → commit → stamp (per stage)

1. After the artifact is written, append the gate footer:
   `<!-- THRUM-GATE: stage=<brainstorm|plan|prompt> next=<dual-review|plan|project-setup|dispatch> -->`
2. **Commit the artifact (WIP) including the footer** — this gives the
   supplementary `requesting-code-review` pass a real `HEAD~1..HEAD` range.
3. Run the dual review against that range; each fix cycle commits its changes
   (giving the supplementary reviewer a fresh diff).
4. On terminate, append the verdict stamp. Use the **canonical, fixed-key-order
   form** (keys always in the order `stage=`, `verdict=`, `cycle=`, `date=`,
   `verify=`, optional `by=`/`reason=`; **case-sensitive** — exactly `Ready:Yes`
   / `OVERRIDE`; never `grep -i`) so the readers' **anchored**
   `grep -E '…verdict=Ready:Yes([[:space:]]|-->|$)'` matches — the gates no
   longer use `grep -F`, because a bare substring accepts
   `verdict=Ready:Yes-with-residual`:
   `<!-- THRUM-REVIEW: stage=<S> verdict=<Ready:Yes|OVERRIDE> cycle=<N> date=<YYYY-MM-DD> verify=<Ready:Yes|OVERRIDE|PREDATES> [by=<agent> reason="..."] -->`

   **`verify=` is REQUIRED (not optional) for `stage=plan` stamps going
   forward** — it records whether `verify-against-source` specifically ran this
   cycle (as opposed to some other reviewer stamping the artifact), and it must
   be PRESENT with one of exactly three values:
   - `Ready:Yes` — `verify-against-source` ran this cycle and came back clean.
   - `OVERRIDE` — a coordinator deliberately waived `verify-against-source` for
     THIS specific cycle (an active, in-the-moment decision, with a reason, same
     as the outer stamp's `OVERRIDE`).
   - `PREDATES` — this plan/stamp predates the `verify=` convention entirely;
     the legacy case. This is NOT the same as omitting the field — omission
     still fails `project-setup` Phase 0's mechanical gate. A plan from before
     this convention must be RE-STAMPED with `verify=PREDATES` (an explicit,
     checkable claim) to pass, not silently pass by having no `verify=` key at
     all.

   For other stages (`brainstorm`, `prompt`) `verify=` remains optional until
   those gates grow their own mechanical enforcement.

5. **Authored-against stamp (required, top of every artifact):** Before writing
   a brainstorm.md or plan.md, derive and emit the stamp per the
   $thrum:stamp-protocol skill § "Stamp format" — the canonical format,
   derivation commands, and never-type rule.

#### Soft pre-flight greps (the SOFT enforcement tier)

Before writing the plan (Phase 6) and before `project-setup` (Phase 7), grep the
prior artifact for `THRUM-REVIEW: stage=<S> verdict=Ready:Yes` (or
`verdict=OVERRIDE`); absent → STOP and run the review first. Anchor the match —
`grep -E '...verdict=Ready:Yes([[:space:]]|-->|$)'`, never `grep -F` — or an
invented `verdict=Ready:Yes-with-residual` passes as a substring. This is a
STRONG BEHAVIORAL guardrail, NOT a mechanical gate — an agent can ignore it. The
only structurally-enforceable gate is `project-setup` Phase 0 (it hard-bails).

#### Loop semantics

- `Ready:Yes` = ZERO BLOCKING findings remain. IMPORTANT/MINOR may be
  acknowledged-and-deferred without another cycle via a footer line:
  `<!-- THRUM-DEFER: stage=<S> cycle=<N> item="IMPORTANT #2" reason="<why + tracking ref>" -->`
  (any THRUM-DEFER still present at `project-setup` is surfaced in its Phase 0 /
  override audit).
- **Per-stage cap = 3 cycles**, independent per stage (max 9 across the
  pipeline) — a hard brainstorm does not starve the plan's budget.
- Cap hit with BLOCKINGs still open → STOP and escalate to the coordinator, who
  logs an override (stamp `verdict=OVERRIDE … reason="…"`) or redirects.
- **FEASIBILITY findings escalate, they do not reshape.** A FEASIBILITY finding
  (see Severity criteria, `verify-against-source/SKILL.md`) records that a
  reviewer judged a requirement too hard — NOT that the requirement should be
  dropped. The researcher may NOT resolve a FEASIBILITY finding by folding it
  inline into the next plan version as a silent scope cut. STOP and escalate to
  the coordinator as an explicit decision; only the coordinator (on the
  intent-owner's behalf) may rule "so we will not do it." The outcome — keep,
  cut, or weaken — is written into the `## Deviations from Source` block with
  attribution `owner decision`, never silently absorbed.

#### No external plugin drives this pipeline (D6)

Neither the brainstorm stage (Phase 2) nor the plan stage (Phase 6) invokes an
external skill — the researcher writes both artifacts directly, governed by this
skill's own protocol block (Phase 2) and structure/stamp/deviations requirements
(Phase 6). There is nothing to pre-flight-check or bail on for either stage, and
no `/plugin install` path: no such plugin is declared anywhere in this repo's
`.claude-plugin/marketplace.json`.

The one genuinely optional external supplement is `requesting-code-review`
(Review-loop mechanics, "Quality" row) — not resolvable → SKIP the supplementary
quality pass gracefully; the loop still runs on the general-purpose primary,
which is authoritative regardless.

`verify-against-source` and the general-purpose prose-quality pass carry no
external-plugin dependency and always work.

### Phase 1 — Set up the worktree, branch, and agent

#### Reuse an existing relevant brainstormer before spawning a new one

Before creating a new worktree, branch, or researcher agent, check whether an
existing brainstorm researcher is (a) **genuinely idle** — its prior brainstorm
is fully closed and handed off — AND (b) **domain-relevant** to the new topic. A
warm idle researcher carries accumulated codebase context that a fresh spawn
doesn't; reusing it is cheaper and faster when it fits.

**Probe (two commands, run in parallel):**

```bash
thrum team                   # list active agents; inspect intent + last_seen
git worktree list            # identify *-brainstorm worktrees still open
```

For each `*-brainstorm` worktree that looks relevant, inspect:

- The agent's `--intent` field (from `thrum team`) — does it overlap the new
  topic?
- `<worktree>/.thrum/agents/<name>/State.md` — one-sentence current status (idle
  / mid-brainstorm / standing-by)?
- The brainstorm doc in `dev-docs/brainstorms/` — is it stamped
  `verdict=Ready:Yes` or explicitly closed?

**Decision:**

| Condition                               | Action                                                                                                         |
| --------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
| Idle + domain-relevant researcher found | **REUSE** — send the Phase 2 briefing to the existing agent in its current worktree. Skip the rest of Phase 1. |
| No idle relevant researcher             | Fall through → proceed with "Pick the base branch" below.                                                      |

When reusing, have the agent itself run
`thrum session set-intent "<new one-line topic>"` so `thrum team` output stays
accurate (there is no command to set ANOTHER agent's intent — `set-intent` acts
on the caller), then send the Phase 2 briefing as normal. The existing worktree
and branch carry over; the agent is already primed.

**Scope of reuse:** adjacent topics in the same domain (e.g., a researcher who
handled scheduler-persistence brainstorm is a good candidate for a
scheduler-backpressure brainstorm). Cross-domain reuse is not worth the context
noise — start fresh.

> **Clarification vs the "Renaming brainstorm researchers" anti-pattern** (see
> Anti-patterns below): that anti-pattern forbids _renaming or rebinding_ a
> researcher to an _unrelated topic_ — especially while it is still busy on
> active work — because identity is bound to the worktree and mid-flight
> rebinding loses audit coherence. Reusing a **genuinely idle, domain-relevant**
> researcher for an adjacent topic in its **own existing worktree** is the
> ENCOURAGED path; no rename happens, no in-flight work is interrupted. The two
> rules are complementary: reuse when idle + relevant; tear down and start fresh
> when unrelated or still busy.

#### Pick the base branch

| Topic shape                                                          | Base branch                                                                                                                                                                                                                                                      |
| -------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Bug fix, hardening, infra cleanup belonging to the current line      | The configured merge target — `CONFIG=.thrum/config.json; [ -f .thrum/redirect ] && CONFIG="$(cat .thrum/redirect)/config.json"; jq -r '.orchestration.merge_target' "$CONFIG"` (a worktree's `.thrum/` holds only a `redirect` file, not its own `config.json`) |
| Work belonging to a multi-epic version program                       | The version's long-lived branch                                                                                                                                                                                                                                  |
| Work tied to an existing feature epic with its own long-lived branch | That branch                                                                                                                                                                                                                                                      |

When in doubt, ask the user. Don't branch from `upstream/*` (per the global
git-safety rule).

#### Pick a name and module slug

- **Worktree dir name:** `<topic>-brainstorm` — kebab-case, descriptive of the
  topic, ends with `-brainstorm` so it's instantly recognizable in
  `git worktree list`. Examples: `auth-flow-brainstorm`, `cache-ttl-brainstorm`,
  `log-rotation-brainstorm`.
- **Branch name:** `feature/<topic>-brainstorm` (or `fix/<topic>-brainstorm` if
  the topic is a bug fix).
- **Agent name:** `researcher_<topic_underscore>` — matches the
  `<role>_<module>` convention. Examples: `researcher_auth_flow`,
  `researcher_cache_ttl`.
- **Module slug:** `<topic_underscore>` — short, lowercase, underscored.

#### Create branch + worktree + agent + launch runtime

```bash
# One command: branch + worktree + redirect + agent registration + tmux session + runtime launch
thrum worktree create <topic>-brainstorm \
  --branch feature/<topic>-brainstorm \
  --base <base-branch> \
  --name researcher_<topic_underscore> \
  --role researcher \
  --module <topic_underscore> \
  --intent "Brainstorm: <one-line topic description>" \
  --runtime claude
```

Never `git worktree add` an agent worktree: it leaves no `.thrum/redirect` and
lands outside `worktrees.base_path`. `thrum worktree create` wires both.

The runtime auto-primes via the SessionStart hook. Do NOT manually inject
`$thrum:thrum-prime` via send-keys (per `coordinator-dispatching-work`
discipline).

### Phase 2 — Send the briefing message

The briefing message is a structured handoff. Always send it via `thrum send`,
not `tmux send-keys` (per `coordinator-dispatching-work`).

#### The interactive-with-user brainstorm protocol

**Always include this verbatim block at the top of the briefing.** It encodes a
hard-won lesson, but a NARROW one: the failure mode is a researcher who
pre-commits the brainstorm's RESOLVED CHOICES (decisions/rulings) without the
user — those become confident-but-wrong and cost a full review cycle to undo.
The lesson is NOT "don't research." Brainstorming IS researching all aspects so
that when the questions come, they are sharp — and most brainstorms exist
precisely because there is a lot to research. Separate **pre-research (do it
hard)** from **pre-decision (don't)**: the researcher should aggressively survey
the landscape, enumerate options + tradeoffs, gather evidence with file:line
citations, surface the real open questions, and prepare a MEATY working draft of
the design space BEFORE the user joins — that is design-mode prep, exactly what
the user wants to walk into. They hold only the final DECISION-LOCK for the
user.

```text
═══ INTERACTIVE BRAINSTORM PROTOCOL ═══

Research aggressively + prepare MEATY groundwork BEFORE <user> joins:
survey the landscape, enumerate options + tradeoffs, gather evidence with
file:line citations, surface the real open questions, and draft a working
brainstorm doc of the design SPACE. The goal is that when <user> joins,
the questions are sharp and there is substance to work on.

<user> drives the DECISIONS Q-by-Q. Do NOT pre-commit or pre-write the
RESOLVED-CHOICES sections ahead of <user> — research + propose, but hold
the final rulings for them; capture their decisions verbatim. The
`interactive-brainstorm` role rule applies (search: `thrum memory search
"interactive-brainstorm"`).

Exception: a succinct, well-scoped brainstorm with little to research can
run capture-mostly; default to aggressive pre-research otherwise.
```

(Replace `<user>` with the actual user's name. The `interactive-brainstorm` role
rule (kind `agent_rule`, scope `role`) persists across researcher restarts —
find it with `thrum memory search "interactive-brainstorm"`, or browse all role
rules with `thrum memory list --kind agent_rule --scope role`.)

#### Briefing structure

Every briefing should include these sections (use `═══` headers for visual
distinction in the inbox display):

1. **Identity reminder** — agent name, worktree, branch, base branch (and that
   it's outside any larger version program if applicable). **Include an explicit
   "you run thrum commands from THIS worktree, not from the main repo or any
   other worktree" instruction** (see "Where the researcher runs thrum" below).
2. **Interactive brainstorm protocol** (verbatim block above)
3. **The problem** — one paragraph of the user-visible symptom or the feature
   gap
4. **What we already diagnosed / decided** — to prevent relitigation. Be
   explicit: "don't relitigate these; start from here."
5. **Design space to explore** — bulleted list of the open decisions the user
   will drive Q-by-Q
6. **Context to research up front** — concrete file paths + brief relevance
   notes. Tell them to read these AND research the space aggressively (code,
   beads, episodic memory, surveys) so they arrive with grounded options +
   evidence + sharp questions, not generic ones.
7. **Deliverable** — exact path the brainstorm doc lands at; convention:
   `dev-docs/brainstorms/<YYYY-MM-DD>-<topic>-brainstorm.md`. Include the
   "Decision Summary table at the bottom is canonical" framing. A meaty
   options/evidence/questions draft IS wanted up front; **explicitly say NOT to
   pre-commit the RESOLVED decisions** ahead of the user (those wait for the
   Q-by-Q + review feedback).
8. **Go-deep-then-ready instruction** — one sentence telling them to confirm
   readiness, research aggressively, and have meaty material ready when the user
   joins (not to sit idle waiting).
9. **Stop-at-the-artifact instruction** — tell the researcher explicitly: once
   the brainstorm design doc is drafted, STOP there. It goes through the Phase 3
   review gate before anything else happens; the plan doc is a separate,
   deliberate Phase 6 step after the brainstorm is LOCKED.

Send the whole thing as one `thrum send` call. The recipient's runtime will
display it as a single inbox message; structure beats brevity here.

#### Where the researcher runs thrum (do not let them inherit the wrong rule)

Some users have a global `~/.claude/CLAUDE.md` rule that reads "always run thrum
commands from the main repo directory." That rule is correct for the
main-repo-resident coordinator agent — but **it inverts for worktree-resident
researchers.** A researcher running thrum from the main repo path resolves
identity to the coordinator's name (e.g. `@your_coordinator`) and sends every
message under the coordinator's identity, polluting audit trails.

The correct rule is: **agents run thrum commands from their OWN home
directory.** Coordinator from main repo. Researcher from their worktree. **Never
run thrum from a worktree that isn't yours** (that's the underlying intent the
buggy global rule was reaching for).

Always include an explicit instruction in the Identity-Reminder section of the
briefing, e.g.:

```text
⚠ Run thrum commands from THIS worktree
(/Users/<you>/.thrum/worktrees/thrum/<topic>-brainstorm), not from the
main repo or any other worktree. The global CLAUDE.md "main repo only"
rule is correct for coordinators but inverts for worktree-resident
agents — your identity file lives in this worktree, and running thrum
from anywhere else will impersonate whoever owns that path.
```

Project-local capture: run
`thrum memory search --kind agent_rule --scope role --tag thrum-from-own-home`
to see the canonical version of this rule. If your project doesn't have it, the
researcher's first restart may re-inherit the buggy global rule.

### Phase 3 — Dual-review when the brainstorm closes

When the researcher reports the brainstorm is ready for review, run the
**two-reviewer dual review** per "Review-loop mechanics" above.

- **Conformance:** `verify-against-source` — artifact = the brainstorm doc;
  **source(s)** = parent decisions, the feature request, the ticket, and any
  sibling brainstorms.

  **Code side (REQUIRED):** for every decision naming a field, struct, column,
  table, RPC parameter, config key, or stored value, also hand the reviewer the
  ACTUAL definition at the authored-against SHA. Prose sources alone cannot
  catch an artifact that is wrong about the code. A gap there is a MISSING-STEP
  in the artifact, never a defect in the source — `IMPOSSIBLE` is not a verdict.

- **Quality:** general-purpose prose-quality PRIMARY ∥ `requesting-code-review`
  SUPPLEMENTARY (internal consistency, technical soundness, anti-patterns,
  gaps).

Both `general-purpose`, `model: <per choosing-subagent-models>`,
`run_in_background: true`. **Have the researcher append the gate footer and
commit (in their own worktree) BEFORE you spawn the dual-review sub-agents** —
the brainstorm lives in the researcher's branch, and the supplementary
`requesting-code-review` pass needs a real `HEAD~1..HEAD` diff. Wait for BOTH
before consolidating; verify each BLOCKING against source before forwarding.
Apply the footer → commit → stamp protocol and the loop semantics (Ready:Yes = 0
BLOCKING, per-stage 3-cap, override) from "Review-loop mechanics". On terminate,
the researcher stamps the brainstorm:
`<!-- THRUM-REVIEW: stage=brainstorm verdict=Ready:Yes cycle=<N> date=<YYYY-MM-DD> -->`.

#### Consolidated findings format

Send ONE numbered list to the researcher per `thrum send`, ordered:

1. BLOCKINGs in detail (severity, location, finding, suggestion)
2. IMPORTANTs as one-paragraph each
3. MINORs as condensed one-liners

Include "no-action positive tick-offs" at the bottom — this gives the researcher
confidence about what's already correct and prevents over-editing.

### Phase 4 — Iteration cycles

When the researcher reports their fixes are done:

- Run a **targeted verification sub-agent** (one sub-agent, model per
  `choosing-subagent-models`) that reads the updated doc and confirms each
  prescribed fix landed correctly. Do NOT re-derive the original findings —
  that's done.
- For tiny cosmetic fixes (one-line format updates, missing citations), ask
  in-place and spot-verify with a Bash grep — don't run a full verification
  cycle for single-line changes.
- For a researcher's design refinements that diverged from the literal
  recommendation: evaluate on substance, not literal compliance. Smart
  alternatives that close the original concern AND respect prior decisions
  better are coordinator-accepted territory; flag them for the user only if they
  materially change the user-visible shape.

When the verification passes, send the researcher an explicit "APPROVED — ready
to merge" with stand-down instructions.

### Phase 5 — Overarching coherence pass (when sibling brainstorms close)

If the topic is part of a larger program with multiple parallel brainstorms,
once **all sibling brainstorms reach ready-to-merge**, fire a deep-review (model
per `choosing-subagent-models`) coherence + implementability pass over the
corpus before specs are written.

Two parallel passes (background, a deeper tier per `choosing-subagent-models` —
escalate because this is genuinely cross-cutting reasoning over a large corpus):

| Pass                             | Focus                                                                                                                                                                                        |
| -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Coherence / Contradiction**    | Direct contradictions between brainstorms, hidden cross-doc assumptions, vocabulary drift, reserved-field collisions, lifecycle composition, end-to-end event flows, cumulative parent-honor |
| **Implementability / Execution** | Realistic ship-cost, critical-path bottlenecks, capability assumptions that may not hold, test surface, operator-experience journeys, sub-epics needing split, sequencing risk               |

Both passes read the full brainstorm corpus + parent decisions + roadmap + any
existing companion specs. Their job is NOT to re-derive single-brainstorm
findings — it's to surface integration-layer issues that no single review could
see.

Findings from this pass go back to the relevant researchers (or to a follow-up
brainstorm if the issue spans multiple). Do not skip this pass when ≥ 3
brainstorms close in the same program — the integration layer is where the most
expensive footguns hide.

### Phase 6 — Researcher writes the plan (with dual-review gate)

Once the brainstorm is LOCKED (and any companion design spec is LOCKED), the
researcher writes the implementation plan doc directly, converting the
brainstorm + spec into concrete steps. (First, the soft pre-flight grep:
`grep -F` the brainstorm for its
`THRUM-REVIEW: stage=brainstorm verdict=Ready:Yes` (or `OVERRIDE`) stamp —
absent → STOP and finish the brainstorm review.) The plan feeds `project-setup`
— there is no other downstream path.

**The plan doc gets the SAME dual-review treatment as the brainstorm.** This
review step is mandatory: there is no internal reviewer upstream of it, so this
gate is the plan's only quality check. Independent review catches contract-drift
and quality issues a single author would miss.

**The researcher (not coord) dispatches the dual-review** in their own worktree:

1. Researcher writes plan v1 directly.
2. Researcher authors the `## Deviations from Source` block per the
   $thrum:deviations-protocol skill, diffing plan v1 against the brainstorm +
   design spec — BEFORE dual-review, so `verify-against-source` validates it as
   part of conformance. Required even when empty ("No deviations from source.").
3. Researcher runs the two-reviewer dual review (Review-loop mechanics):
   - **Conformance:** `verify-against-source` — artifact = the plan;
     **source(s)** = the brainstorm + the design spec. Verifies the plan honors
     every LOCKED decision AND that the Deviations block is present and
     accurate; flags missing scope, silent deviation, over-scoping, or an
     absent/inaccurate Deviations block. **Code side (REQUIRED):** for every
     requirement naming a field, struct, column, table, RPC parameter, config
     key, or stored value, hand the reviewer the ACTUAL definition at the
     authored-against SHA and require an enumerated SATISFIED / PARTIAL /
     MISSING-STEP / NOT-ADDRESSED verdict per requirement. `IMPOSSIBLE` is not a
     verdict — absent substrate is a MISSING-STEP in the plan, so the plan must
     ADD it.
   - **Quality:** general-purpose prose-quality PRIMARY ∥
     `requesting-code-review` SUPPLEMENTARY — per-task acceptance-criteria
     precision, anti-pattern enumeration, risk-register completeness, sequencing
     logic.
4. Researcher consolidates findings into ONE numbered list (all findings, all
   severities, per the same format Phase 3 uses).
5. Researcher folds findings inline → plan v2; applies footer → commit → stamp.
   Any FEASIBILITY finding (see Loop semantics) routes to the coordinator
   instead of being folded inline.
6. Researcher repeats only if cycle-1 introduces new design surface (rare for
   bounded mechanical plans); otherwise v2 LOCKED. Before stamping, compute
   `plan_obj`/`src_lock` per `stamp-protocol.md` § "Review-object binding"
   (strip-then-hash the plan against itself for `plan_obj`; plain-hash the
   LOCKED source for `src_lock`), then stamp
   `<!-- THRUM-REVIEW: stage=plan verdict=Ready:Yes cycle=<N> date=<YYYY-MM-DD> verify=Ready:Yes plan_obj=<blob> src_lock=<blob> -->`.
7. Researcher signals plan LOCKED back to coord, citing both review passes and
   the Deviations block.

If the researcher skips this step, send them back. Before Phase 7, the soft
pre-flight grep (Review-loop mechanics) confirms the plan carries the
`stage=plan verdict=Ready:Yes` (or `OVERRIDE`) stamp. Don't let them proceed to
`project-setup` until the plan has passed dual-review.

### Phase 7 — Researcher runs project-setup (with dual-review gate)

Plan LOCKED → researcher runs `thrum:project-setup` to produce the bundled
output: bd tickets + implementer prompt + cross-references.

**The implementer-prompt doc gets the SAME dual-review treatment as the plan.**
The prompt is the artifact the implementer executes against turn-by-turn; errors
propagate. The plan dual-review caught contract-drift in the plan; the prompt
review catches translation errors (plan → prompt) plus prompt-specific quality
(instructions clarity, anti-pattern enumeration, dispatch-readiness).

**The researcher (not coord) dispatches the post-setup dual-review**:

1. Researcher runs `project-setup` skill (bd tickets + prompt land together).
   Note: `project-setup` Phase 0 hard-bails unless the plan carries its
   `stage=plan verdict=Ready:Yes`/`OVERRIDE` stamp — Phase 6 must have stamped
   it.
2. Researcher runs the two-reviewer dual review on the impl prompt:
   - **Conformance:** `verify-against-source` — artifact = the impl prompt;
     **source(s)** = the LOCKED plan + the bead task descriptions (dump
     `bd show` to a temp file so the sub-agent can read the per-task ACs).
     Verifies the prompt faithfully translates per-task content + ACs + risk
     callouts; flags missing scope, divergent wording, dropped anti-patterns.
     **Code side (REQUIRED):** for every AC naming a field, struct, column,
     table, RPC parameter, config key, or stored value, hand the reviewer the
     ACTUAL definition at the authored-against SHA. An AC the current code
     cannot satisfy is a MISSING-STEP in the prompt/plan — the substrate must be
     ADDED. `IMPOSSIBLE` is not a verdict.
   - **Quality:** general-purpose prose-quality PRIMARY ∥
     `requesting-code-review` SUPPLEMENTARY — clarity, scope language,
     dispatch-readiness, sub-agent model guidance, DONE-shape spec.
3. Researcher consolidates → folds inline → re-issues prompt; `project-setup`
   OWNS and applies the prompt-stage stamps — the gate footer, the binding-bound
   verdict stamp, and the hard completion requirement that it not exist without
   one — per that skill's canonical contract (`project-setup` SKILL.md § "Step
   5: Stamp the prompt for the review loop" + Phase 0). This step does not
   restate that mechanics; it exists only to confirm the stamp is applied within
   the same project-setup session, before signaling back.
4. Researcher signals "project-setup complete + post-setup dual-review applied"
   back to coord, citing both review passes + final artifact paths.

Reaffirmation (at the prompt stage): `project-setup` is the only downstream path
for the implementer prompt.

If the researcher signals "project-setup complete" WITHOUT mentioning the
post-setup reviews, ASK explicitly: "did the post-setup dual-review run on the
impl prompt?" Send them back if not. The artifact the implementer executes must
be reviewed.

### Phase 8 — Hand off to coord

With plan LOCKED + reviewed AND project-setup complete + reviewed:

1. Researcher provides coord: plan path, prompt path, bd-epic ID, bd-task ID
   list, prereq verifications (philosophy.md, bd version, etc.).
2. Coord verifies the artifacts briefly + proceeds to Phase 0 implementer
   dispatch (worktree creation, hard-freeze if applicable, impl dispatch).
3. Stand the researcher down at-pane (or keep on standby for impl-time Q&A if
   the user explicitly requests continuity). Don't leave brainstorm researchers
   spinning idle indefinitely; they consume tmux sessions.

### Anti-patterns

❌ **Pre-emptive autonomous DECISIONS.** Researcher pre-commits the brainstorm's
RESOLVED choices/rulings without the user driving them — those become
confident-but-wrong and cost a full review cycle to undo. The sin is committing
DECISIONS, NOT researching: aggressive pre-research + a meaty
options/evidence/questions draft is wanted (see the brainstorm protocol). The
`interactive-brainstorm` role memory rule (kind `agent_rule`, scope `role`)
encodes this; include the verbatim protocol block in every briefing.

❌ **Half-batched findings.** Sending review findings before BOTH dual reviews
complete. Researcher fixes batch 1 and never sees batch 2.

❌ **Skipping the post-plan dual-review.** Proceeding directly to
`project-setup` without an independent review of the plan doc — there is no
internal reviewer upstream of it to lean on. The plan and the impl prompt MUST
get the same dual-axis review treatment the brainstorm gets — Phase 6 + Phase 7
explicit.

❌ **Skipping the post-project-setup dual-review on the impl prompt.** The
prompt is the artifact the implementer executes against turn-by-turn. Errors in
it propagate into every task. `project-setup` runs the bundle (bd + prompt)
mechanically; the prompt content is the implementer's spec. Treat it as such and
review it before dispatch.

❌ **Misread BLOCKINGs forwarded as gospel.** Reviewers (sub-agents) sometimes
misread cited code or stretch citations. Spot-verify any BLOCKING that names a
specific file/line/symbol before forwarding.

❌ **`thrum message read --all --force` mid-brainstorm without checking the
report.** `--all` alone is a dry run (marks nothing); `--force` only drains what
THAT dry-run listing named, and reports any later arrival as excluded rather
than silently sweeping it in — so the old "B arrives mid-read and gets silently
marked" timing bomb no longer applies. Still prefer
`thrum message read <id> [<id>...]` with specific IDs when juggling multiple
researchers — it's simpler to reason about than tracking a listing's 10-minute
validity window.

❌ **Sub-agents into the researcher's worktree.** For code research in the
brainstorm worktree, ask the researcher; for broader codebase exploration, spawn
an `Explore` sub-agent in the main repo path, not the worktree path.

❌ **Skipping the coherence pass.** When ≥ 3 sibling brainstorms close in the
same program, integration-layer issues that no single review can see are
virtually guaranteed. Fire the deep-review pass; it's worth the cost.

❌ **Renaming brainstorm researchers between topics.** Identity is bound to the
worktree. If a topic is done, kill the tmux session and tear down the worktree;
don't rebind the agent name to a different topic in place.

### See also

- `coordinator-plan-reconcile-gate` — when ≥2 plans for one program were
  authored in parallel (Phase 6 output) and must be verified to compose before
  `project-setup` (shared seams, no double-build, no gap).

### Project-specific rules (already loaded)

Load the $thrum:project-rules-protocol skill and follow it.

If you accumulate a new rule mid-session about brainstorm orchestration, capture
it via the Memory section of your role preamble — it references the
`thrum-memory` skill for the canonical `thrum memory create` shape. Use a
`brainstorm-<slug>` tag to keep brainstorm-orchestration rules grouped.

Files in this skill

  • SKILL.md39 KB
  • agents/openai.yaml1.1 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.