"Parallel divergent ideation (5 isolated agents, rotating frames, novelty/viability/fit scoring). Use when the question is open-ended. Say 'brainstorm'. Not for syntax, lookups, or closed-phrasing asks."
Resources
2Install
npx skillscat add wasikarn/method-harness/ideate Install via the SkillsCat registry.
Ideate
Divergent ideation: five isolated generator agents under different cognitive frames, then one
critic agent that scores, clusters, ranks and deepens. Explicit (mh:ideate <problem>,
"brainstorm") and auto-routed invocations run the same algorithm.
Pre-flight gate
A run costs 6 Agent calls (8 on the opt-in host path), 30-90 s, and 5-10x a direct
answer. An imperative request to run it (mh:ideate <problem>, "brainstorm", "ideate mode",
"run ideate on this") is opt-in: go straight to Phase 1. Mentioning the skill's name inside a
question about whether to run it is not opt-in; the gate applies. Otherwise ask three
questions and abort on any NO:
- Open-ended? Several viable answers. One canonical answer (syntax fix, known-root-cause
bug, lookup, "what is the X for Y", "find the file that does X") is a NO. - High-stakes? The obvious answer is expensive to get wrong (architecture, public API,
naming, schema, fuzzy debugging). A side project at 11pm is a NO. - Open phrasing? "quick", "standard", "canonical", "textbook", "just", "one-liner" mean
the user wants the direct answer: NO.
On abort, answer directly; optionally add one line: "For a wider exploration under parallel
cognitive frames with explicit trap detection, run mh:ideate <your problem>."
Done when: the brief names either the three YES answers or the explicit trigger.
Wave structure (load-bearing)
- Phase 1 Diverge: 5 parallel Agent calls, peak 5.
- Phase 2 Focus: one sequential critic call, which also deepens and so replaces Phase 3;
on the opt-in host path, score and cluster on the host, no fan-out. - Phase 3 Deepen (opt-in host path only): 3 parallel Agent calls, peak 3.
Peak concurrency 5 is this skill's own design limit (Rule 13 caps at 10). Phase 1 completes before Phase 2 starts; never
collapse Diverge and Deepen into one wave of 8. History of the 44-to-105-agent failure this
guards against: references/provenance.md.
Phase 1: Diverge
- Pick 5 frames from
references/frames.md. Code-shaped problem: 4 taggedcodeordesignplus 1 taggedwild; product or strategy problem: a mix across all tags. Name
the five in the brief. A re-run on the same problem swaps at least two. - Dispatch 5 parallel Agent calls (
subagent_type: general-purpose), one per frame. Each
prompt is the DIVERGENT block followed by the payload fromreferences/algorithm-detail.md,
Phase 1, copied verbatim. The Agent tool has no separate system prompt; the block goes at
the top of the prompt. A prompt carries only the problem, optional context, and its own
frame: never another branch's ideas or a list of the other frames (Isolation invariant). - Wait for all five, then parse each as a JSON array. A branch that returns nothing
parseable is reported in the brief as a failed branch, never silently dropped; fewer than 3
parseable branches stops the run with that fact.
Done when: every branch is either an idea list or a named failure.
Phase 2: Focus
- Score every idea on three axes, 0-10, before ranking any (anchoring guard):
novelty (distance from the obvious default), viability (could it ship), fit (addresses the
stated problem). Then pipe the scores intoscripts/rank.py(stdin JSON, see the file
docstring) fortotal, the shortlist, runner-up and non-obvious pick; viability weighs
heaviest because unshippable-but-brilliant is the dominant failure mode. Attach a one-linetrapreason to any attractive idea with a hidden cost, false economy, scale ceiling, or
premature abstraction (confirmation guard: look for why an attractive idea is wrong).trap
is a reason field, never a score threshold. - Cluster into 3-6 groups by underlying angle, labelled by the angle ("remove-the-server
plays"), never by surface keyword. A cluster drawn from 3 or more distinct frames is
independent convergence: say so beside the label. - Shortlist rank.py's top 3 (traps excluded) with a one-line reason each, the
runner-up and why it missed, and a confidence level with its reason.
Who scores. Every run hands Phase 2 to the ideate-critic agent, explicit or auto-fired:
one sequential Agent call (subagent_type: mh:ideate-critic) with the envelope inagents/ideate-critic.md; its JSON reply carries every field the output shape renders,
including the three deepened branches, so Phase 3 is skipped. Score on the host and run Phase 3
instead only when the user asks for host scoring ("host scoring", "no critic"). The critic is
pinned to Sonnet (agents/ideate-critic.md), so scoring and deepening no longer run on a stronger
host model: fresh context cuts anchoring, and its output is advisory evidence, not ground truth. Done when: every idea has three scores, a cluster, and a trap or none.
Phase 3: Deepen (opt-in host path)
Dispatch 3 parallel Agent calls (subagent_type: general-purpose), one per shortlisted idea,
each prompt the FOCUS block fromreferences/algorithm-detail.md, Phase 3, plus the focus idea and the Phase 1 sibling ideas as a
read-only recombination pool. Never pass another deepen branch's output. Done when: each
returns a sketch, a load-bearing risk, a first concrete step, and 3-5 child ideas.
Isolation invariant
Diverge branches never see each other. A branch that reads another's output anchors to it and
the method collapses into one wider thought. Siblings are shared only at Phase 3 (or inside the critic's one context), only as a
pool, never as the focus idea. A Diverge or Deepen branch never spawns its own Agent calls:
the branch prompt is the whole task, and a nested wave is the 44-to-105 failure again.
Output shape
Render in this order; the structure is the point, never a wall of prose. Full per-item
contract: references/algorithm-detail.md, Output shape.
- Brief: problem in 1-2 lines, the five frames, any failed branch, the cost line
("6 Agent calls", or "8" on the opt-in host path; advisory, not metered). - Wide set: clusters with angle labels, one phrase per idea, score chips
[N7 V8 F9],
convergence notes. - Converge: the 3 shortlisted ideas with reasons, ★ on the non-obvious-but-viable pick with its
reason, confidence, runner-up, traps listed separately with their reasons. - Focus: the 3 deepened branches.
- Provocation: one wildcard, "What if we took this seriously: ".
Phase 4: follow-up (opt-in)
When the user replies asking to deepen one idea, re-run with named frames, or combine two ideas,
run the matching short pass in references/phase4.md (1-3 Agent calls) instead of a full run.
Never offer it unprompted.
Failure modes
- Decoration, not divergence. Ten variations on one assumption. Spread the frame picks.
- Refusing to commit. "Here are 30 ideas, you decide" is a cop-out; converge with an opinion.
- Sequential branches in one context. That is one wider thought, not ideate. Use Agent calls.
- Silent parse failure. An empty branch reported as a run that succeeded.
- Judge as ground truth. Same model class scored it; the user remains the gate.
Bundled resources
references/algorithm-detail.md: the literal DIVERGENT and FOCUS prompt blocks, payload,
rubric mechanics, rendering contract. Load before dispatching.references/frames.md: the 15 frames with tags. Load at Phase 1 step 1.scripts/rank.py: the deterministic ranker both scoring paths run.--selftestchecks it.references/phase4.md: the three follow-up patterns. Load only on a follow-up.references/provenance.md: upstream citations, cap history, eval rigor limitation. Not
needed to run.