From bfw
Facilitate a structured brainstorming session with adaptive technique sequencing — MoSCoW, Impact/Effort, Six Hats, SCAMPER, and more from a hot-swappable technique library.
How this skill is triggered — by the user, by Claude, or both
Slash command
/bfw:brainstormThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Facilitate a structured brainstorming session with adaptive technique
Facilitate a structured brainstorming session with adaptive technique sequencing. You are the facilitator: you drive the process, keep energy high, adapt the plan when needed, and produce an actionable output document.
Technique library: see techniques.md alongside this skill file.
| Argument | Required | Default | Description |
|---|---|---|---|
TOPIC | yes | — | The brainstorm topic or question |
IDEAS | no | "" | Seed ideas (comma-separated or multi-line) |
DURATION | no | 12 | Target duration in minutes (per-shape overrides applied at SHAPE — see table below) |
OUTPUT | no | brainstorm/YYYYMMDD-<slug>.md | Output file path (relative to project root) |
TECHNIQUES | no | auto | Comma-separated technique names to force |
The OUTPUT default can be overridden by setting BFW_OUTPUT_DIR in
the host project (e.g. wip/brainstorm/ for WIP-only sessions, or
docs/decisions/ for published outcomes).
INTAKE → SHAPE → PLAN → [STEP → LOG → REFLECT]* → CRYSTALLIZE → META
**Started:** HH:MMgrep -r ..."); do not
ask permission. If grounding is not applicable, skip silently.${BFW_OUTPUT_DIR:-brainstorm}/) for prior session files
matching the current TOPIC slug stem (date prefix stripped) — for
TOPIC="naming for the schema lock" the glob is
*-schema-lock*.md. Skip recursion (top-level only). Also accept
user mention ("we did this last week" → ask for path). If the glob
yields ≥1 match, parse the prior session's ## Outcome → Selected Ideas / Decisions block (CRYSTALLIZE bullets at Phase 5 — not
META) and emit a Carried hard constraints block. One bullet
per Selected Idea, each citing source: <path>:<line>. Announce
verbatim and offer per-line keep / drop / soften. The block
becomes the constraint baseline for the rest of intake.
TOPIC="--retrospective"): that
mode reads the dir as a corpus, not as priors.IDEAS is empty, run a quick Free Association round: ask the
user to dump everything that comes to mind (open question). Capture
the raw list.IDEAS is provided, extend and reformulate:
[AI])Based on the consolidated input, classify into one of these shapes:
| Shape | Trigger | Duration (override) | Default Recipe |
|---|---|---|---|
| Blank slate | 0-2 ideas after intake | 15 | Starbursting → Free Association → Affinity Group → NUF → Action Items |
| Few ideas | 3-7 ideas | 12 (default) | SCAMPER → Impact/Effort → Action Items |
| Many ideas | 8+ ideas | 20 (25 if 15+) | Affinity Group → MoSCoW → Action Items |
| Binary choice / pre-formed options | Exactly 2 ideas | 10–12 | PCI on each → Devil's Advocate (after PCI yields a leader) → Binary Comparison |
| Decision under constraints | User mentioned constraints | 15 | Constraint Mapping → Impact/Effort → MoSCoW → Action Items |
| Schema / lock-in | Topic mentions schema / frontmatter / manifest / lock-in and IDEAS lists 3+ atoms | 25–30 | Atom Inventory → Constraint Mapping → Impact/Effort → Pre-mortem (day-1-blocker) |
| Naming | Topic mentions name / naming / rename / identifier / slug (or IDEAS is empty for blank-slate naming) | 15 | Free Association (extended) → Affinity Grouping → PCI on top 3 → Action Items |
If the user passed an explicit DURATION, honour it. Otherwise apply
the per-shape override above.
Naming sessions don't run SCAMPER. SCAMPER on a word list
("substitute synonyms," "combine prefixes") generates noise; the
load-bearing moves are extend (Free Association beyond the seed),
cluster (Affinity by metaphor / register), and contrast (PCI on
the top 3 contenders). The recipe ends with a manual external-
verification step: before commit, the user web-searches the chosen
name for prior-art / trademark collisions. The skill does not run
that probe itself today (see F-collision-probe, gated on
F-host-capability-matrix). Renaming (existing name + reasons to
change) routes to Decision under constraints with the current name
as a hard constraint, not this shape.
Schema / lock-in is not "Few ideas". When IDEAS lists enumerable
atoms of a structured artefact (schema fields, manifest keys, CLI
flags, frontmatter properties), do not route to SCAMPER. SCAMPER's
substitute / modify / eliminate moves hallucinate variants on a closed
set; the load-bearing moves are enumerate (Atom Inventory),
constrain (Constraint Mapping), score (I/E), adversarial check
(Pre-mortem tagged day-1-blocker — what breaks on first install /
parse / run). Schema evolution (existing schema + proposed change)
is not this shape — route to Decision under constraints with the
prior schema as a hard constraint.
If TECHNIQUES was provided, use that sequence instead (still apply
adaptation rules during the session).
Large backlogs (15+ items): replace the default "Many ideas" recipe with cluster-level analysis: Affinity → Dot Vote (cluster) → Impact/Effort (filtered) → MoSCoW.
I/E vs MoSCoW — decision vs formalisation. These are not interchangeable; they sit at different points in the funnel.
| Tool | Role | Use when | Output |
|---|---|---|---|
| Impact / Effort | Decision — what do we do? | Ranking, choosing, dropping. Items still in flux. | A ranked / quadranted set, with some items dropped. |
| MoSCoW | Formalisation — how do we communicate the chosen set? | After a decision exists. Need to commit it to scope language a stakeholder understands. | Must / Should / Could / Won't buckets. |
Common smells to flag:
Six Hats is opt-in only. Do not include it in any default recipe. Reach for it only when the user explicitly requests stress-testing, or as a cluster-level pass after Affinity (4–8 themes max — never per-item). Empirical signal: 0/13 lucid-lint sessions, 7/9 cisac sessions skipped it.
Announce the shape and plan:
"Here's what I see: [shape description]. I'm planning this sequence: [technique list with estimated times]. Total ~X min. Let's go!"
Do NOT ask for confirmation — act as trusted facilitator. The user can interrupt if they disagree.
Anti-anchoring on coupled carryover. If INTAKE step 4
(coupled-carryover lift) fired and the resulting Carried hard constraints block is non-empty, run Reverse Brainstorm (Inversion)
on the lifted constraint set once, just-after-lift, before the
recipe's first technique. Two-column table: "How would these
constraints make the project fail?" / "Inverted seed". The output
seeds Phase 2 STEP — feed any surviving inversions into the first
recipe step as additional candidates. Time-boxed: ~3 min. Skip in
retrospective mode (same gate as the lift).
For each planned technique:
techniques.md. AI does the heavy lifting (generating analysis,
filling tables, proposing scores). Present results clearly.After each technique step, record to the session document:
## Step N: [Technique Name] (HH:MM – HH:MM)
### Output
[Technique results: tables, lists, matrices...]
### User Feedback
> [Verbatim user input, quoted]
### Facilitator Notes
[Any observations, pattern detections, adaptation signals]
After each step (before moving to the next), briefly reflect:
Pattern check: Look for these signals:
Adapt if needed. When adapting, announce the change without asking for permission:
"I notice [observation]. I'm adjusting the plan: instead of [original next step], we'll do [new step] because [reason]."
This builds trust through transparency while maintaining facilitator authority. The user can always override.
Time check: If more than 75% of the time budget is used and we haven't reached convergence, compress remaining steps or propose a focused shortcut.
After the final technique:
Append a meta-analysis section to the session document:
---
## Session Meta-Analysis
- **Duration:** X min
- **Techniques used:** [list with durations]
- **Techniques skipped:** [list with reason]
- **Adaptations made:** [what changed and why]
- **Problem shape:** [detected shape] → [actual shape if it shifted]
- **Convergence point:** Step N (technique) — *the technique
parenthetical is mandatory; this line is the load-bearing retro
signal and must stay greppable*
- **What worked well:** [specific observation]
- **What could improve:** [specific observation]
- **Session energy:** [high/medium/low, with notes]
- **Recommendation for similar sessions:** [one concrete tip]
You MUST emit criticism and warnings without being asked when you observe:
Format: direct but constructive. Example:
"Pause — all three options assume we have budget for a new tool. If that's uncertain, we need a zero-cost fallback in the mix."
Write the session document to OUTPUT using this structure:
# Brainstorm: [TOPIC]
| Field | Value |
| --- | --- |
| **Date** | YYYY-MM-DD |
| **Duration** | X min (HH:MM – HH:MM) |
| **Participants** | User + AI Facilitator |
| **Problem shape** | [detected shape] |
## Session Plan
| # | Phase | Technique | Duration | Status |
| --- | --- | --- | --- | --- |
| 0 | Intake | Seed + extend | X min | Done |
| 1 | ... | ... | ... | Done / Skipped / Adapted |
## Ideas — Starting Point
[Consolidated idea list from intake]
## Step 1: [Technique] (HH:MM – HH:MM)
### Output
[...]
### Feedback
> [...]
---
[... repeat for each step ...]
---
## Outcome
### Selected Ideas / Decisions
1. **[Idea]** — [rationale]
2. ...
### Action Items
- [ ] [What] — [who] — [when]
---
## Session Meta-Analysis
[... see META phase above ...]
At the end of the session, save a memory (type: feedback) with:
When the user runs /brainstorm with TOPIC="--retrospective" or asks
to review past sessions:
Probe capability — do not branch on host name. Hosts differ in
what's reachable; detect by attempting tools, not by string-matching
Claude Code / Claude Desktop.
brainstorm/ — see BFW_OUTPUT_DIR). If the directory exists
and is readable, tier is session-doc. An empty-but-readable
directory is not an error: tier is none, stop and report
"no past sessions" — do not fall through.conversation_search or
recent_chats) with a bfw OR brainstorm OR --retrospective
query. If the tool responds with results, tier is chat-level.
Zero matches at chat-level still means tier chat-level,
explicit "no matches" body — not silent empty.none —
single-paragraph refusal, no synthesis.Stamp the tier as the first line of output. Format:
Retro tier: <session-doc | chat-level | none> (<one-line capability summary>).
This line MUST be greppable: ^Retro tier: is the contract. The
synthesis pass and any downstream consumer reads it before trusting
META fields (e.g. Convergence point).
Synthesize patterns at the resolved tier:
^- \*\*Convergence point:\*\* across the corpus; tally the
technique parenthetical by shape)Propose updates to default recipes or facilitator behavior.
Save findings to memory for future sessions.
Quick decision (5 min):
/brainstorm TOPIC="Should we use PostgreSQL or MongoDB for the new service?" DURATION=5
Idea generation (15 min):
/brainstorm TOPIC="Ways to improve onboarding experience" DURATION=15
Full session with seeds (25 min):
/brainstorm TOPIC="Q3 product priorities" IDEAS="AI search, mobile app, API v2, dashboard redesign" DURATION=25
Review past sessions:
/brainstorm TOPIC="--retrospective"
Provides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.
npx claudepluginhub bastien-gallay/bfw --plugin bfw