
Brainstorming
- 380 installs
- 133 repo stars
- Updated February 24, 2026
- jwynia/agent-skills
brainstorming is an agent skill that runs structured Escape Velocity and Seed Expansion protocols to surface product concepts, user problems, and orthogonal solution angles for developers who need divergent ideation befo
About
brainstorming is a version 1.1 agent skill from jwynia/agent-skills that structures AI-assisted ideation through two protocols: the five-phase Escape Velocity Protocol for breaking convergent thinking and the six-phase Seed Expansion Protocol for growing partial ideas. The skill diagnoses sessions across five states (B1–B5), separates solution form from required function, maps options on four axes (Who, When, Scale, Method), and audits idea orthogonality before evaluation. A bundled Deno/TypeScript script, constraint-entropy.ts, injects random constraints from five categories—actors, resources, combinations, inversions, and domains—to force exploration humans and LLMs typically skip. Session outputs persist as dated markdown files covering enumerated defaults, axis maps, entropy prompts, and shortlisted concepts. Developers reach for brainstorming when early product or feature discussions keep recycling the same options, or when they have a seed concept but need adjacent moves before writing prototypes, PRDs, or implementation plans.
- Structured ideation prompts and frames
- Problem-solution exploration
- Divergent then convergent facilitation
- Theme clustering for product directions
- Pre-prototype concept discovery
Brainstorming by the numbers
- 380 all-time installs (skills.sh)
- +3 installs in the week ending Aug 2, 2026 (Skillselion tracking)
- Ranked #820 of 3,282 Productivity & Planning skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/jwynia/agent-skills --skill brainstormingAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 380 |
|---|---|
| repo stars | ★ 133 |
| Last updated | February 24, 2026 |
| Repository | jwynia/agent-skills ↗ |
How do you escape convergent brainstorming before prototyping?
Facilitate structured brainstorming to surface product concepts, user problems, and solution angles before committing to prototypes, specs, or implementation plans.
Who is it for?
Developers or technical leads whose feature or product discussions keep producing the same tool-and-meeting variations and need a repeatable divergent ideation process before specs.
Skip if: Teams that already have a locked requirements document or approved architecture and only need implementation, testing, or code generation.
When should I use this skill?
The user has a seed idea to expand, reports brainstorming the same options repeatedly, or asks to explore solution space before committing to a prototype, PRD, or build plan.
What you get
Dated markdown files with enumerated defaults, function extractions, four-axis maps, entropy constraints, orthogonality audit results, and shortlisted concept lists.
- dated markdown session files
- four-axis maps with alternatives
- enumerated defaults and function-extraction lists
By the numbers
- Version 1.1 in SKILL.md metadata
- 5 Escape Velocity phases and 6 Seed Expansion phases (S1–S6)
- 5 convergence states (B1–B5) and 4 axis-mapping dimensions
Files
Brainstorming: Ideation Skill
You help people expand ideas and escape convergent thinking across any domain—software, business, creative projects, or personal decisions.
Core Principle
Ideas need room to grow and things to collide with. Sometimes you're stuck and need to escape a rut. Sometimes you have a seed and need to expand it. Both are ideation problems with different entry points.
Two modes, one goal: explore possibility space rather than settling for the first available option.
Entry Diagnostic
Before diving in, identify where you're starting:
| Starting Point | Signals | Mode |
|---|---|---|
| Stuck | Same ideas keep surfacing. All options feel like variations. "We've tried everything." Evaluation before exploration. | → Escape Velocity Protocol |
| Seed | Have the start of something. Want to see what it could become. Looking for adjacent moves or missing pieces. | → Seed Expansion Protocol |
| Unclear | Not sure if stuck or just early. Have something but not sure if it's good. | → Start with Seed Expansion; switch to Escape Velocity if you hit convergence |
Key question: Are you trying to get OUT of something (stuck) or grow INTO something (seed)?
---
The Convergence Problem (Stuck Mode)
Ideas cluster because they match expected patterns on multiple dimensions. When your solution uses the obvious WHO doing the obvious WHAT at the obvious SCALE via the obvious METHOD—that's why it feels predictable.
The key test: Could three different people brainstorming independently produce the same list? If yes, you haven't diverged yet.
The States
State B1: Convergence Blindness
Symptoms:
- First ideas feel "right" immediately
- All ideas cluster around same approach
- Session produces variations on one theme
- "We already know what to do, we just need to pick"
Key Questions:
- What's the most obvious solution? Have you named it explicitly?
- Would three different people produce the same list?
- Are you exploring the space or confirming an intuition?
- How many fundamentally different APPROACHES (not variations) are on the table?
Interventions: Run Default Enumeration (Phase 1). Name the cluster before trying to escape it. You cannot escape defaults you haven't made visible.
---
State B2: Function Lock
Symptoms:
- Ideas all take the same form
- Discussion assumes the solution type ("We need an app that...")
- Can't see alternatives because solution-form is assumed
- "We need X" rather than "We need to accomplish Y"
Key Questions:
- What must this accomplish? (Not: what should it be?)
- Could something completely different achieve the same outcome?
- What problem are you actually solving vs. what solution are you attached to?
- What constraints are real vs. assumed?
Interventions: Run Function Extraction (Phase 2). Separate WHAT from HOW. Generate 5 alternatives per function, not per solution.
---
State B3: Axis Collapse
Symptoms:
- Ideas differ cosmetically but share underlying structure
- "Same idea wearing different clothes"
- Variations on WHO but same WHAT/WHEN/HOW
- Easy to categorize all ideas into one bucket
Key Questions:
- What's the obvious WHO for this? Have you tried a completely different who?
- What's the obvious WHEN? What if it was 10x slower? Instant? Recurring vs. one-time?
- What's the obvious SCALE? What about 10x bigger? 10x smaller?
- What's the obvious METHOD? What's a completely different approach?
Interventions: Run Axis Mapping (Phase 3). Map the default solution on four axes. Rotate at least one axis to break the pattern.
---
State B4: Domain Imprisonment
Symptoms:
- All ideas come from same reference class
- "How we always do it" or "how our industry does it"
- Solutions are obvious to anyone in the field
- No ideas from adjacent or distant domains
Key Questions:
- What field/industry does this idea come from?
- What domain has definitely solved something similar?
- How would a completely different profession approach this?
- What industry would find this problem trivial?
Interventions: Run Domain Import (Phase 4). Generate ideas by applying logic from 3+ unrelated fields. Use constraint-entropy.ts with domains category.
---
State B5: Productive Divergence
Symptoms:
- Ideas span different forms, scales, actors, and timeframes
- Evaluation problem (too many options) rather than generation problem
- Some ideas feel uncomfortable or surprising
- Hard to group all ideas into one cluster
Key Questions:
- Which criteria should filter these?
- What's the minimum viable experiment for top candidates?
- Which ideas can be combined?
- Which ideas serve different user segments?
Interventions: Move to evaluation framework. Cluster by approach, pick representative from each cluster to prototype/test.
---
The Escape Velocity Protocol
A structured process for breaking out of convergent brainstorming. Use all five phases for stuck sessions; skip to relevant phase when the problem is clear.
Phase 1: Default Enumeration (Mandatory)
Before generating "real" ideas, explicitly list the defaults:
- What would "anyone" suggest?
- What's the genre/industry default for this problem?
- What did you/your team suggest last time?
- What would the first search result say?
Output: A list of 5-10 obvious ideas, explicitly labeled as defaults.
Purpose: Make attractors visible. You cannot escape what you haven't named.
---
Phase 2: Function Extraction
For each requirement, separate WHAT from HOW:
- What must be accomplished? (function)
- What are we assuming about how? (form)
- What constraints are real vs. assumed?
Reframe: "We need [FORM]" becomes "We need to [FUNCTION] and [FORM] is one way"
Output: A list of 3-5 core functions the solution must accomplish, independent of form.
Example:
- "We need a mobile app" → "We need users to accomplish X on the go, and a mobile app is one form"
- "We need weekly meetings" → "We need information to flow between teams, and meetings are one mechanism"
---
Phase 3: Axis Mapping
Map the default solution on four axes:
| Axis | Question | Default | Alternatives |
|---|---|---|---|
| Who | Who does/uses/owns this? | [obvious actor] | 3 unlikely actors |
| When | What timeframe/frequency? | [obvious timing] | Different cadence/timing |
| Scale | What size/scope? | [obvious scale] | 10x bigger? 10x smaller? |
| Method | What approach/mechanism? | [obvious approach] | Completely different approach |
The key insight: Ideas feel predictable when they match "likely" on all four axes. Change ANY axis and the idea becomes less obvious.
Output: Completed axis map with at least 2 alternatives per axis.
---
Phase 4: Entropy Injection
Introduce random constraints to force exploration:
Types of entropy:
- Random actor (from different domain)
- Random constraint (time, resource, capability limit)
- Random combination (solve this AND something unrelated)
- Inversion (what would PREVENT this? Now design around that)
- Domain import (how would [random field] solve this?)
Tool: Use constraint-entropy.ts to generate random constraints:
deno run --allow-read constraint-entropy.ts --combo
deno run --allow-read constraint-entropy.ts domains --count 3
deno run --allow-read constraint-entropy.ts inversionsOutput: 3-5 ideas generated under unusual constraints.
Purpose: Force exploration of non-adjacent possibility space. Accept the constraints even if uncomfortable.
---
Phase 5: Orthogonality Audit
For promising ideas, check:
- Does this idea "know" it's the obvious solution? (If it could articulate "I'm the expected approach," it's convergent)
- Would this surprise someone expecting the genre default?
- Which axis did we actually rotate on?
- Does this serve the function while breaking the expected form?
The test: An idea is orthogonal when it has its own logic that collides with the problem rather than serving it in the expected way.
Output: Ideas flagged as genuinely divergent vs. cosmetically different.
---
The Seed Expansion Protocol
A structured process for growing ideas from initial seeds. Based on Steven Johnson's research on where good ideas come from. Use when you have something to expand rather than something to escape.
The Johnson Principles
These aren't inspirational—they're diagnostic. Each describes a mechanism for how ideas actually develop:
| Principle | Mechanism | Diagnostic Question |
|---|---|---|
| Adjacent Possible | Most "new" ideas are the next reachable step from what exists. Stairs, not teleportation. | What's one step away from this seed? What becomes possible once this exists? |
| Liquid Networks | Ideas form when partial thoughts collide—people, artifacts, past work, unrelated domains. | What should this seed collide with? What's in the environment that could connect? |
| Slow Hunch | Many good ideas start half-baked. They need time to meet their missing piece. | What's incomplete about this seed? What would finish it? |
| Serendipity | Luck plus recognition. You notice the useful anomaly when it appears. | What unexpected thing have you encountered recently that might connect? |
| Error | Failure is information. Feedback turns wandering into convergence. | What's the dumbest version of this? Where does this break? |
| Exaptation | Repurpose something built for one job into a different job. Reuse as invention. | Could this seed solve a completely different problem? What was built for something else that could work here? |
| Platforms | Stable primitives let people build faster and safer. | What stable thing could this build on? What would make this a platform for other ideas? |
---
Seed State Diagnosis
Before expanding, understand what kind of seed you have:
State S1: Adjacent-Ready
Signals:
- Seed is concrete and specific
- Clear what it does, unclear what's next
- Feels like "step one" of something larger
Key Questions:
- What becomes possible once this exists that isn't possible now?
- What's the natural next step someone would want?
- What would you build on top of this?
Expansion: Map the adjacent possible. List 3-5 things that become reachable from this seed. Pick the most interesting and repeat.
---
State S2: Collision-Hungry
Signals:
- Seed feels incomplete on its own
- Sense that it needs "something else"
- Works in some contexts but not others
Key Questions:
- What domain has never seen this idea?
- What past work does this remind you of?
- Who would find this obvious? Who would find it alien?
Expansion: Force collisions. Throw domains, constraints, and artifacts at the seed. Use entropy injection from Escape Velocity Protocol if needed.
---
State S3: Half-Baked Hunch
Signals:
- Can't fully articulate the idea yet
- Feels important but fuzzy
- "There's something here but I can't name it"
Key Questions:
- What's the part you CAN articulate clearly?
- What question would this answer if it were finished?
- What's missing—a mechanism? An example? A use case?
Expansion: Don't force completion. Articulate what you have. Name the gap. Keep the hunch alive by writing it down, then look for collisions that might fill the gap over time.
---
State S4: Error-Rich
Signals:
- Seed has been tried and failed
- Know what doesn't work
- Failure feels informative, not terminal
Key Questions:
- What specifically broke? (Mechanism, context, execution?)
- What did the failure reveal about the problem structure?
- What would have to change for this to work?
Expansion: Mine the failure. Errors contain information about the shape of the solution. List what you learned, then look for adjacent seeds that avoid the failure modes.
---
State S5: Exaptation Candidate
Signals:
- Seed works well for its original purpose
- Sense it could do something else entirely
- "This reminds me of X" where X is unrelated
Key Questions:
- What job was this seed built to do?
- What other jobs share similar structure?
- Where would transplanting this seed be surprising but plausible?
Expansion: Transplant deliberately. List 5 completely different contexts. Try the seed in each. Note what changes, what survives.
---
Seed Expansion Phases
Unlike Escape Velocity (which is sequential), use these phases as needed based on seed state:
Phase S1: Seed Articulation
Before expanding, capture what you have:
- What's the core of this seed? (One sentence)
- What's it good for? What's it not good for?
- Where did it come from? (Collision, adjacent step, hunch, failure, exaptation?)
- What's your current uncertainty about it?
Output: A clear statement of the seed and what kind of seed it is.
---
Phase S2: Adjacent Mapping
Map what's reachable from this seed:
- What's one step away?
- What becomes possible that wasn't before?
- What would naturally follow if this succeeded?
- What would someone build on top of this?
Output: 3-5 adjacent possibilities with one marked as "most interesting."
---
Phase S3: Collision Generation
Force the seed to collide with other material:
- Domain collision: How would [unrelated field] see this seed?
- Artifact collision: What past work (yours or others') connects?
- Constraint collision: What happens under unusual constraints?
- Inversion collision: What's the opposite? What breaks if inverted?
Tool: Use constraint-entropy.ts domains --count 5 to generate random domains for collision.
Output: 3-5 collision results, noting which produced something interesting.
---
Phase S4: Gap Identification
For incomplete seeds, name what's missing:
- What question would this seed answer if complete?
- What's the mechanism you can't articulate?
- What example would prove this works?
- What would someone need to see to believe this?
Output: A clear statement of the gap. This is what you're looking for in future collisions.
---
Phase S5: Transplant Testing
For seeds that might work elsewhere:
- List 5 completely different contexts
- For each: What changes? What survives? What's gained?
- Does any transplant reveal something about the seed you didn't see?
Output: Transplant results with notes on what each revealed.
---
Phase S6: Stress Testing
Find where the seed breaks:
- What's the worst-case application?
- What assumption, if wrong, kills this?
- What's the dumbest possible implementation?
- Who would hate this? Why?
Output: Failure modes and what they reveal about the seed's actual structure.
---
Switching Between Modes
You may start in one mode and need to switch:
Seed → Stuck: If seed expansion produces clustering (all expansions are variations of the same thing), switch to Escape Velocity. You've hit convergence.
Stuck → Seed: If Escape Velocity produces a promising divergent idea, switch to Seed Expansion to develop it. You've found a seed worth growing.
The handoff: Escape Velocity generates candidates. Seed Expansion develops winners. They're different phases of the same ideation process.
---
Anti-Patterns
The Quantity Delusion
Problem: Generating 50 ideas that are all variations of the same 3 approaches.
Symptom: High count, low spread. Ideas cluster visually when mapped. Easy to group into few buckets.
Fix: Stop counting. Start mapping on axes. Require at least one idea per quadrant before adding more. Measure spread, not volume.
---
The Inversion Trap
Problem: "What if we did the opposite?" is lazy divergence. Opposites share the same axis—they're still convergent.
Symptom: "Instead of fast, make it slow." "Instead of automated, make it manual." "Instead of expensive, make it free."
Fix: Inversion changes magnitude, not dimension. Find a truly orthogonal axis, not the negative of the same axis. "What if speed wasn't the relevant dimension at all?"
---
The Premature Evaluation Loop
Problem: Evaluating ideas while generating them. "That won't work because..." kills divergence.
Symptom: Ideas die mid-sentence. Group corrects toward "realistic" ideas. Discomfort with impractical suggestions.
Fix: Strict phase separation. Generation is not evaluation. All ideas written down before ANY filtering. Impractical ideas may contain seeds of practical ones.
---
The Expert Anchor
Problem: Domain expert's first idea dominates because of authority, not quality.
Symptom: First speaker's idea becomes the reference point. All subsequent ideas are variants or reactions. Deference to experience.
Fix: Anonymous idea generation first. Or: expert speaks last. Or: explicitly enumerate expert's default in Phase 1, then exclude it from further consideration.
---
The Novelty Chase
Problem: Divergence for its own sake. Pursuing weird ideas that don't serve the actual function.
Symptom: Ideas are surprising but useless. Clever without being functional. "That's creative but doesn't solve the problem."
Fix: Return to Phase 2 (Function Extraction). Does the weird idea actually accomplish the required function? If not, it's not divergent—it's irrelevant. Orthogonality must serve function.
---
The Research Avoidance
Problem: Brainstorming from scratch when prior art exists. Reinventing existing solutions.
Symptom: "I wonder if anyone has tried..." (they have). Ideas are novel to the group but exist elsewhere.
Fix: Research before ideation. Find 5+ existing approaches, enumerate them as defaults in Phase 1, THEN diverge. Standing on shoulders, not reinventing wheels.
---
Key Questions by State
For Convergence Diagnosis (Any State)
- How many fundamentally different APPROACHES (not variations) did you generate?
- If you grouped ideas into clusters, how many clusters would there be?
- Did any idea make you uncomfortable? (Discomfort often signals actual divergence)
- Would someone from a different field produce the same list?
For Function Lock (B2)
- What happens if the "obvious solution" doesn't exist?
- What would you do with 10x resources? 1/10th resources?
- If you couldn't use [assumed approach], what else achieves the function?
- What's the actual outcome you need, separate from how you get there?
For Domain Expansion (B4)
- What industry has definitely solved something similar?
- What industry would find this problem trivial?
- What would someone from [random field] notice that you're missing?
- How does nature solve this problem? How does the military? How does a kindergarten teacher?
For Axis Audit (B3)
- Who is the "obvious" user/actor? Who else could it be?
- What's the "obvious" timeframe? What if 10x slower? Instant?
- What's the "obvious" scale? What if for 1 person? 1 million people?
- What's the "obvious" method? What's a completely different method?
---
Available Tools
constraint-entropy.ts
Generates random constraints to force divergent exploration.
# Generate random constraints
deno run --allow-read constraint-entropy.ts --count 3
# Get domain-import prompts
deno run --allow-read constraint-entropy.ts domains --count 5
# Generate constraint combo (one from each category)
deno run --allow-read constraint-entropy.ts --combo
# Specific categories
deno run --allow-read constraint-entropy.ts actors
deno run --allow-read constraint-entropy.ts resources
deno run --allow-read constraint-entropy.ts inversions
deno run --allow-read constraint-entropy.ts combinations
# JSON output
deno run --allow-read constraint-entropy.ts --combo --jsonCategories:
actors- Who constraints ("A 10-year-old must use it", "Someone hostile to it")resources- Resource constraints ("1/10th budget", "Can't use obvious technology")combinations- Forced combinations ("Must also solve X", "Must NOT do expected thing")inversions- Perspective flips ("What if failure is the goal?", "What if the constraint is the feature?")domains- Domain import prompts ("How would military logistics solve this?")
Why a script: True randomness forces exploration that humans and LLMs would otherwise avoid. Curated constraints that actually produce useful divergence.
---
Example Interaction
User: "We need ideas for improving team communication. We keep generating the same ideas—Slack channels, more meetings, documentation."
Diagnostic approach:
1. Identify state: B1 (Convergence Blindness) + B4 (Domain Imprisonment). Ideas cluster around communication tools and meeting structures—the obvious defaults for this problem space.
2. Phase 1 - Default Enumeration: Let's name the defaults explicitly:
- Better Slack/Teams usage or new tool
- More meetings / fewer meetings
- Documentation wiki
- Daily standups
- Team-building activities
- Office layout changes
These are the genre defaults. Valid but predictable.
3. Phase 2 - Function Extraction: What must team communication accomplish?
- F1: Information reaches people who need it
- F2: Questions get answered without blocking
- F3: Context preserved across time
- F4: Trust enables hard conversations
- F5: Signal-to-noise ratio stays manageable
4. Phase 3 - Axis Mapping (for "daily standup"):
| Axis | Default | Alternatives |
|---|---|---|
| Who | Whole team | Rotating pairs? Cross-team? Include customers? |
| When | Daily morning | Weekly? On-demand trigger? After blockers? |
| Scale | 15 minutes | 2-minute hard limit? 2-hour deep dive monthly? |
| Method | Verbal sync | Async text? Video recordings? Walk-and-talk? |
5. Phase 4 - Entropy Injection: Running constraint-entropy.ts --combo:
- Actor: "Someone who is hostile to it must benefit"
- Inversion: "What if over-communication was the failure mode?"
This forces: What if people who hate meetings still get the information? What if we designed for LESS communication that's more effective?
6. Divergent ideas generated:
- Pair rotations: No team meetings. Rotating pairs sync daily. Information spreads through network, not broadcast. Introverts prefer.
- Decision records: Every decision documented with context. Communication becomes "read the record" not "ask again." Async-first.
- Silence budget: Each person has limited "interrupt" tokens per week. Forces prioritization of what's worth saying.
- The grandmother test: Any announcement understandable to a non-technical family member. Catches jargon, forces clarity.
- Context-forward: Every update MUST start with "what would confuse someone joining today?"
These ideas are orthogonal—different axes, not variations of "meeting tools."
---
What You Do
1. Diagnose the state - Which of B1-B5 describes the current situation? 2. Run appropriate protocol phase - Match intervention to state 3. Generate random constraints - Use entropy tool when stuck 4. Audit for orthogonality - Check if ideas are genuinely divergent 5. Map spread, not count - Measure coverage of possibility space
Output Persistence
This skill writes primary output to files so work persists across sessions.
Output Discovery
Before doing any other work:
1. Check for context/output-config.md in the project 2. If found, look for this skill's entry 3. If not found or no entry for this skill, ask the user first:
- "Where should I save output from this brainstorming session?"
- Suggest:
explorations/brainstorming/or a sensible location for this project
4. Store the user's preference:
- In
context/output-config.mdif context network exists - In
.brainstorming-output.mdat project root otherwise
Primary Output
For this skill, persist:
- Defaults enumerated (Phase 1 output)
- Function extraction results (Phase 2)
- Axis mapping with alternatives explored (Phase 3)
- Entropy constraints applied and ideas generated (Phase 4)
- Orthogonality audit results - which ideas are genuinely divergent (Phase 5)
- Selected/promising ideas with rationale
Conversation vs. File
| Goes to File | Stays in Conversation |
|---|---|
| Enumerated defaults | Discussion of which defaults feel sticky |
| Axis map with rotations | Iteration on constraint choices |
| Generated divergent ideas | Real-time feedback on ideas |
| Orthogonality assessments | Clarifying questions |
| Promising combinations | Discarded options |
File Naming
Pattern: {topic}-{date}.md Example: product-naming-2025-01-15.md
What You Do NOT Do
- Generate ideas FOR the user (provide process, not content)
- Evaluate ideas during generation (separate phases)
- Skip default enumeration (invisible defaults can't be escaped)
- Chase novelty without function (weird ≠ useful)
- Replace domain expertise (work WITH knowledge, not instead of)
- Guarantee good ideas (guarantee exploration of possibility space)
- Accept "we've tried everything" (probably variations of same approach)
{
"_meta": {
"description": "Curated constraint lists for divergent thinking",
"usage": "Load via constraint-entropy.ts --file or directly import",
"total_items": 195,
"quality_tier": "production"
},
"actors": [
"A 10-year-old must be able to use it",
"Someone actively hostile to the idea must still benefit",
"The implementer has never done anything like this before",
"The user has unlimited budget but only 5 minutes",
"The user has unlimited time but zero budget",
"Someone who doesn't want it must find it valuable anyway",
"A complete stranger must understand it in 30 seconds",
"Your harshest critic must admit it works",
"Someone from 1950 must be able to grasp the core concept",
"A competitor must be unable to easily copy it",
"The person who benefits is not the person who pays",
"It must work for someone with the opposite personality type",
"A non-native speaker must find it intuitive",
"Someone exhausted at 3 AM must be able to use it",
"The most junior person on the team must be able to maintain it",
"Someone who tried and failed before must succeed this time",
"A person who hates technology must prefer this over the alternative",
"The CEO and the intern must both find it useful",
"Someone with conflicting incentives must still participate honestly",
"A person who will only use it once must get value immediately",
"The user's boss must see clear value without explanation",
"Someone who has already given up must be re-engaged",
"A perfectionist must be satisfied with the output",
"Someone impatient must not abandon it halfway through",
"The person responsible for outcomes has no direct control",
"A skeptic must become an advocate",
"Someone who prefers the old way must choose this instead",
"The user has physical constraints (one hand, poor vision, etc.)",
"A person who lies about their usage must still be served",
"Someone who actively tries to break it must fail",
"The beneficiary is several steps removed from the user",
"A person in crisis must find it calming",
"Someone with analysis paralysis must be able to decide",
"The user has been burned by similar solutions before",
"A person who refuses to read instructions must succeed",
"Someone who will judge harshly in hindsight must approve",
"The most distracted person in the room must engage",
"A user who will never give feedback must be understood",
"Someone with exactly the wrong background must adapt quickly",
"The person implementing it will never meet the end user"
],
"resources": [
"You have 1/10th the typical budget",
"You have 10x the budget but 1/10th the time",
"You cannot use the most obvious technology or approach",
"You can only use what's already owned or freely available",
"It must be completely reversible within 24 hours",
"You can only make changes that require no approval",
"It must work if the key person quits tomorrow",
"You cannot add anything—only remove or recombine",
"It must work during a complete infrastructure outage",
"You have one hour to implement the first version",
"The solution cannot require any training",
"You cannot hire anyone or buy anything",
"It must be maintainable by one person part-time",
"You must be able to explain it in one sentence",
"It cannot depend on any external service",
"The entire solution must fit on one page",
"You cannot use any solution that's been tried before",
"It must work at 100x the current scale",
"It must work at 1/100th the current scale",
"You cannot measure anything new",
"You must reuse at least 80% of existing work",
"It must be completely free to operate",
"You cannot add any ongoing obligations",
"The entire implementation must be deletable in one action",
"You cannot introduce any new concepts or vocabulary",
"It must work with zero network connectivity",
"You have infinite compute but zero storage",
"You cannot change anything that's already working",
"It must survive the departure of institutional knowledge",
"You can only use tools that existed 10 years ago",
"The solution cannot be longer than the problem statement",
"You must launch in public on day one",
"You cannot iterate—it must work first time",
"It must work even if everyone forgets it exists",
"You cannot create any new artifacts or documents",
"It must be explainable to an auditor",
"You have unlimited resources but can only keep one result",
"The solution must be portable to a completely different context",
"You cannot automate anything—all steps must be manual",
"It must continue working if you lose access to everything digital"
],
"combinations": [
"This must simultaneously solve a completely unrelated problem",
"The solution must explicitly NOT do the most expected thing",
"It must work even if a core assumption turns out to be false",
"This must be the opposite of your first idea in at least two dimensions",
"The solution must create a new problem worth solving",
"It must make the status quo impossible to return to",
"The byproduct must be more valuable than the main output",
"It must work for both the best-case and worst-case scenarios",
"The solution must be useful even if it completely fails",
"It must solve the problem by eliminating the need for it",
"The approach must come from combining two unrelated domains",
"It must work whether users cooperate or resist",
"The solution must make success and failure equally informative",
"It must be better for the person who currently opposes it",
"The implementation must improve something unrelated",
"It must work if you're completely wrong about the cause",
"The solution must be more valuable incomplete than complete",
"It must succeed by doing less than currently done",
"The approach must make competing solutions better too",
"It must work even if no one believes it will work",
"The solution must be strengthened by criticism",
"It must solve yesterday's problem and tomorrow's simultaneously",
"The mechanism must be visible to everyone involved",
"It must work if the timeline is cut in half or doubled",
"The approach must create options rather than commitment",
"It must benefit from being copied",
"The solution must make the problem more interesting to solve",
"It must work whether you have permission or forgiveness",
"The approach must be equally valid if you're the first or last",
"It must solve the problem while making you redundant"
],
"inversions": [
"What if failure was the explicit goal?",
"What if the audience was the performer?",
"What if the constraint was the feature?",
"What if the side effect was the main effect?",
"What if you couldn't measure success?",
"What if the problem was the solution?",
"What if you had to make it worse to make it better?",
"What if the bottleneck was the value?",
"What if friction was desirable?",
"What if everyone already had the solution?",
"What if the obstacle was the path?",
"What if doing nothing was the best action?",
"What if you optimized for the wrong thing on purpose?",
"What if success created a bigger problem?",
"What if the user's goal was to fail?",
"What if you had to explain why NOT to do this?",
"What if the process was more valuable than the outcome?",
"What if transparency was the competitive advantage?",
"What if you designed for the exception, not the rule?",
"What if you couldn't improve—only maintain?",
"What if adoption was the problem, not the solution?",
"What if complexity was the feature?",
"What if the person with the most to lose led the change?",
"What if you optimized for the last user, not the first?",
"What if you had to make it harder to use?",
"What if you could only subtract, never add?",
"What if the deadline was the starting point?",
"What if you designed for abandonment?",
"What if you assumed everyone was lying?",
"What if the incentives were reversed?",
"What if you had to sell the problem, not the solution?",
"What if quality was inversely related to effort?",
"What if you optimized for learning, not results?",
"What if the competitor's success was your success?",
"What if you designed it to be copied?"
],
"domains": [
"How would military logistics solve this?",
"How would a kindergarten teacher approach this?",
"How would a disease approach this? (spread, adapt, survive)",
"How would a farmer approach this? (seasons, cycles, patience)",
"How would a game designer approach this?",
"How would an archaeologist approach this? (evidence, reconstruction)",
"How would an emergency room triage this?",
"How would a chess grandmaster think about this?",
"How would an ecosystem solve this? (no central control)",
"How would a virus approach this? (minimal, self-replicating)",
"How would a jazz musician approach this? (improvisation, listening)",
"How would an insurance actuary approach this?",
"How would a hostage negotiator approach this?",
"How would a forest fire spread through this problem?",
"How would a standup comedian approach this?",
"How would airport security approach this?",
"How would a colony of ants solve this?",
"How would a con artist approach this? (trust, misdirection)",
"How would a librarian organize this?",
"How would evolution solve this? (variation, selection, time)",
"How would a therapist approach this?",
"How would a detective investigate this?",
"How would a chef approach this? (ingredients, timing, presentation)",
"How would a sculptor approach this? (removing, not adding)",
"How would a smuggler approach this?",
"How would a theater director approach this?",
"How would a gardener approach this? (nurturing, pruning, patience)",
"How would a virus hunter (epidemiologist) approach this?",
"How would an auctioneer approach this?",
"How would a sports coach approach this?",
"How would a pilot approach this? (checklists, redundancy)",
"How would a janitor approach this?",
"How would a diplomat approach this?",
"How would a street magician approach this? (misdirection, timing)",
"How would a midwife approach this?",
"How would a cartographer approach this?",
"How would a bouncer approach this?",
"How would a museum curator approach this?",
"How would a firefighter approach this? (triage, containment)",
"How would a translator approach this?",
"How would an improv actor approach this? (yes-and, building)",
"How would a referee approach this?",
"How would a sommelier approach this?",
"How would a survivalist approach this?",
"How would a wedding planner approach this?",
"How would a debt collector approach this?",
"How would a mountain guide approach this?",
"How would a matchmaker approach this?",
"How would a waste management engineer approach this?",
"How would a prison architect approach this?"
]
}
#!/usr/bin/env -S deno run --allow-read
/**
* Constraint Entropy Generator
*
* Randomly selects constraints from curated lists to force divergent thinking.
* Use when brainstorming converges to obvious solutions.
*
* Usage:
* deno run --allow-read constraint-entropy.ts actors # Random actor constraint
* deno run --allow-read constraint-entropy.ts domains --count 3 # Three domain prompts
* deno run --allow-read constraint-entropy.ts --list # Show categories
* deno run --allow-read constraint-entropy.ts --combo # One from each category
* deno run --allow-read constraint-entropy.ts --file data.json # Use external file
*/
// Built-in constraint lists
const CONSTRAINTS: Record<string, string[]> = {
// Actor constraints - WHO must use/benefit/implement
actors: [
"A 10-year-old must be able to use it",
"Someone actively hostile to the idea must still benefit",
"The implementer has never done anything like this before",
"The user has unlimited budget but only 5 minutes",
"The user has unlimited time but zero budget",
"Someone who doesn't want it must find it valuable anyway",
"A complete stranger must understand it in 30 seconds",
"Your harshest critic must admit it works",
"Someone from 1950 must be able to grasp the core concept",
"A competitor must be unable to easily copy it",
"The person who benefits is not the person who pays",
"It must work for someone with the opposite personality type",
"A non-native speaker must find it intuitive",
"Someone exhausted at 3 AM must be able to use it",
"The most junior person on the team must be able to maintain it",
"Someone who tried and failed before must succeed this time",
"A person who hates technology must prefer this over the alternative",
"The CEO and the intern must both find it useful",
"Someone with conflicting incentives must still participate honestly",
"A person who will only use it once must get value immediately",
"The user's boss must see clear value without explanation",
"Someone who has already given up must be re-engaged",
"A perfectionist must be satisfied with the output",
"Someone impatient must not abandon it halfway through",
"The person responsible for outcomes has no direct control",
"A skeptic must become an advocate",
"Someone who prefers the old way must choose this instead",
"The user has physical constraints (one hand, poor vision, etc.)",
"A person who lies about their usage must still be served",
"Someone who actively tries to break it must fail",
"The beneficiary is several steps removed from the user",
"A person in crisis must find it calming",
"Someone with analysis paralysis must be able to decide",
"The user has been burned by similar solutions before",
"A person who refuses to read instructions must succeed",
"Someone who will judge harshly in hindsight must approve",
"The most distracted person in the room must engage",
"A user who will never give feedback must be understood",
"Someone with exactly the wrong background must adapt quickly",
"The person implementing it will never meet the end user",
],
// Resource constraints
resources: [
"You have 1/10th the typical budget",
"You have 10x the budget but 1/10th the time",
"You cannot use the most obvious technology or approach",
"You can only use what's already owned or freely available",
"It must be completely reversible within 24 hours",
"You can only make changes that require no approval",
"It must work if the key person quits tomorrow",
"You cannot add anything—only remove or recombine",
"It must work during a complete infrastructure outage",
"You have one hour to implement the first version",
"The solution cannot require any training",
"You cannot hire anyone or buy anything",
"It must be maintainable by one person part-time",
"You must be able to explain it in one sentence",
"It cannot depend on any external service",
"The entire solution must fit on one page",
"You cannot use any solution that's been tried before",
"It must work at 100x the current scale",
"It must work at 1/100th the current scale",
"You cannot measure anything new",
"You must reuse at least 80% of existing work",
"It must be completely free to operate",
"You cannot add any ongoing obligations",
"The entire implementation must be deletable in one action",
"You cannot introduce any new concepts or vocabulary",
"It must work with zero network connectivity",
"You have infinite compute but zero storage",
"You cannot change anything that's already working",
"It must survive the departure of institutional knowledge",
"You can only use tools that existed 10 years ago",
"The solution cannot be longer than the problem statement",
"You must launch in public on day one",
"You cannot iterate—it must work first time",
"It must work even if everyone forgets it exists",
"You cannot create any new artifacts or documents",
"It must be explainable to an auditor",
"You have unlimited resources but can only keep one result",
"The solution must be portable to a completely different context",
"You cannot automate anything—all steps must be manual",
"It must continue working if you lose access to everything digital",
],
// Forced combinations
combinations: [
"This must simultaneously solve a completely unrelated problem",
"The solution must explicitly NOT do the most expected thing",
"It must work even if a core assumption turns out to be false",
"This must be the opposite of your first idea in at least two dimensions",
"The solution must create a new problem worth solving",
"It must make the status quo impossible to return to",
"The byproduct must be more valuable than the main output",
"It must work for both the best-case and worst-case scenarios",
"The solution must be useful even if it completely fails",
"It must solve the problem by eliminating the need for it",
"The approach must come from combining two unrelated domains",
"It must work whether users cooperate or resist",
"The solution must make success and failure equally informative",
"It must be better for the person who currently opposes it",
"The implementation must improve something unrelated",
"It must work if you're completely wrong about the cause",
"The solution must be more valuable incomplete than complete",
"It must succeed by doing less than currently done",
"The approach must make competing solutions better too",
"It must work even if no one believes it will work",
"The solution must be strengthened by criticism",
"It must solve yesterday's problem and tomorrow's simultaneously",
"The mechanism must be visible to everyone involved",
"It must work if the timeline is cut in half or doubled",
"The approach must create options rather than commitment",
"It must benefit from being copied",
"The solution must make the problem more interesting to solve",
"It must work whether you have permission or forgiveness",
"The approach must be equally valid if you're the first or last",
"It must solve the problem while making you redundant",
],
// Perspective inversions
inversions: [
"What if failure was the explicit goal?",
"What if the audience was the performer?",
"What if the constraint was the feature?",
"What if the side effect was the main effect?",
"What if you couldn't measure success?",
"What if the problem was the solution?",
"What if you had to make it worse to make it better?",
"What if the bottleneck was the value?",
"What if friction was desirable?",
"What if everyone already had the solution?",
"What if the obstacle was the path?",
"What if doing nothing was the best action?",
"What if you optimized for the wrong thing on purpose?",
"What if success created a bigger problem?",
"What if the user's goal was to fail?",
"What if you had to explain why NOT to do this?",
"What if the process was more valuable than the outcome?",
"What if transparency was the competitive advantage?",
"What if you designed for the exception, not the rule?",
"What if you couldn't improve—only maintain?",
"What if adoption was the problem, not the solution?",
"What if complexity was the feature?",
"What if the person with the most to lose led the change?",
"What if you optimized for the last user, not the first?",
"What if you had to make it harder to use?",
"What if you could only subtract, never add?",
"What if the deadline was the starting point?",
"What if you designed for abandonment?",
"What if you assumed everyone was lying?",
"What if the incentives were reversed?",
"What if you had to sell the problem, not the solution?",
"What if quality was inversely related to effort?",
"What if you optimized for learning, not results?",
"What if the competitor's success was your success?",
"What if you designed it to be copied?",
],
// Domain import prompts
domains: [
"How would military logistics solve this?",
"How would a kindergarten teacher approach this?",
"How would a disease approach this? (spread, adapt, survive)",
"How would a farmer approach this? (seasons, cycles, patience)",
"How would a game designer approach this?",
"How would an archaeologist approach this? (evidence, reconstruction)",
"How would an emergency room triage this?",
"How would a chess grandmaster think about this?",
"How would an ecosystem solve this? (no central control)",
"How would a virus approach this? (minimal, self-replicating)",
"How would a jazz musician approach this? (improvisation, listening)",
"How would an insurance actuary approach this?",
"How would a hostage negotiator approach this?",
"How would a forest fire spread through this problem?",
"How would a standup comedian approach this?",
"How would airport security approach this?",
"How would a colony of ants solve this?",
"How would a con artist approach this? (trust, misdirection)",
"How would a librarian organize this?",
"How would evolution solve this? (variation, selection, time)",
"How would a therapist approach this?",
"How would a detective investigate this?",
"How would a chef approach this? (ingredients, timing, presentation)",
"How would a sculptor approach this? (removing, not adding)",
"How would a smuggler approach this?",
"How would a theater director approach this?",
"How would a gardener approach this? (nurturing, pruning, patience)",
"How would a virus hunter (epidemiologist) approach this?",
"How would an auctioneer approach this?",
"How would a sports coach approach this?",
"How would a pilot approach this? (checklists, redundancy)",
"How would a janitor approach this?",
"How would a diplomat approach this?",
"How would a street magician approach this? (misdirection, timing)",
"How would a midwife approach this?",
"How would a cartographer approach this?",
"How would a bouncer approach this?",
"How would a museum curator approach this?",
"How would a firefighter approach this? (triage, containment)",
"How would a translator approach this?",
"How would an improv actor approach this? (yes-and, building)",
"How would a referee approach this?",
"How would a sommelier approach this?",
"How would a survivalist approach this?",
"How would a wedding planner approach this?",
"How would a debt collector approach this?",
"How would a mountain guide approach this?",
"How would a matchmaker approach this?",
"How would a waste management engineer approach this?",
"How would a prison architect approach this?",
],
};
function randomFrom<T>(arr: T[], count: number = 1): T[] {
const shuffled = [...arr].sort(() => Math.random() - 0.5);
return shuffled.slice(0, Math.min(count, arr.length));
}
function generateCombo(lists: Record<string, string[]>): Record<string, string> {
const combo: Record<string, string> = {};
for (const [name, items] of Object.entries(lists)) {
combo[name] = randomFrom(items, 1)[0];
}
return combo;
}
async function loadExternalLists(filepath: string): Promise<Record<string, string[]>> {
try {
const text = await Deno.readTextFile(filepath);
return JSON.parse(text);
} catch (e) {
console.error(`Error loading ${filepath}: ${e}`);
Deno.exit(1);
}
}
async function main(): Promise<void> {
const args = Deno.args;
if (args.includes("--help") || args.includes("-h")) {
console.log(`Constraint Entropy Generator - Random constraints for divergent thinking
Usage:
deno run --allow-read constraint-entropy.ts <category> # Random constraint
deno run --allow-read constraint-entropy.ts <category> --count N # N constraints
deno run --allow-read constraint-entropy.ts --list # Show categories
deno run --allow-read constraint-entropy.ts --combo # One from each
deno run --allow-read constraint-entropy.ts --file custom.json # Custom lists
Categories:
actors - Who constraints (40 items)
resources - Resource constraints (40 items)
combinations - Forced combinations (30 items)
inversions - Perspective flips (35 items)
domains - Domain import prompts (50 items)
Options:
--count N Return N random items
--json Output as JSON
--list Show all categories with counts
--combo Generate one item from each category
--file F Load additional lists from JSON file
`);
Deno.exit(0);
}
let lists = { ...CONSTRAINTS };
// Load external file if specified
const fileIndex = args.indexOf("--file");
if (fileIndex !== -1 && args[fileIndex + 1]) {
const external = await loadExternalLists(args[fileIndex + 1]);
lists = { ...lists, ...external };
}
const jsonOutput = args.includes("--json");
// Show available categories
if (args.includes("--list")) {
console.log("Available categories:\n");
for (const [name, items] of Object.entries(lists)) {
console.log(` ${name.padEnd(15)} (${items.length} items)`);
}
console.log(`\nTotal: ${Object.values(lists).reduce((sum, arr) => sum + arr.length, 0)} constraints`);
Deno.exit(0);
}
// Generate combo from all categories
if (args.includes("--combo")) {
const combo = generateCombo(lists);
if (jsonOutput) {
console.log(JSON.stringify(combo, null, 2));
} else {
console.log("Random constraint combo:\n");
for (const [name, value] of Object.entries(combo)) {
console.log(` ${name}:`);
console.log(` ${value}\n`);
}
}
Deno.exit(0);
}
// Get count (defaults to 1)
const countIndex = args.indexOf("--count");
const count = countIndex !== -1 ? parseInt(args[countIndex + 1]) || 1 : 1;
// Build set of arg indices to skip
const skipIndices = new Set<number>();
if (fileIndex !== -1) {
skipIndices.add(fileIndex);
skipIndices.add(fileIndex + 1);
}
if (countIndex !== -1) {
skipIndices.add(countIndex);
skipIndices.add(countIndex + 1);
}
// Get category (first arg that's not a flag or flag value)
let category: string | undefined;
for (let i = 0; i < args.length; i++) {
if (!args[i].startsWith("--") && !skipIndices.has(i)) {
category = args[i];
break;
}
}
if (!category) {
// Default: pick random from all categories combined
const allConstraints = Object.values(lists).flat();
const selected = randomFrom(allConstraints, count);
if (jsonOutput) {
console.log(JSON.stringify(selected, null, 2));
} else {
for (const item of selected) {
console.log(`${item}`);
if (count > 1) console.log();
}
}
Deno.exit(0);
}
if (!lists[category]) {
console.error(`Error: Unknown category "${category}". Use --list to see options.`);
Deno.exit(1);
}
const selected = randomFrom(lists[category], count);
if (jsonOutput) {
console.log(JSON.stringify(selected, null, 2));
} else {
if (count === 1) {
console.log(selected[0]);
} else {
for (const item of selected) {
console.log(`${item}`);
console.log();
}
}
}
}
main();
Related skills
How it compares
Choose brainstorming when ideation keeps converging on the same defaults and you need a phased audit with persisted markdown artifacts; use a lightweight chat prompt when you only need a quick unstructured idea list.
FAQ
What protocols does brainstorming use?
brainstorming provides two entry paths: the five-phase Escape Velocity Protocol for stuck sessions that recycle defaults, and the six-phase Seed Expansion Protocol (S1–S6) for growing a partial idea into adjacent concepts before evaluation.
What does constraint-entropy.ts do?
constraint-entropy.ts is a bundled Deno script in brainstorming that emits random constraints from five categories—actors, resources, combinations, inversions, and domains—via flags like --combo and --json to force exploration outside obvious patterns.
Where does brainstorming save session output?
brainstorming writes primary output to dated markdown files (pattern {topic}-{date}.md), typically under explorations/brainstorming/ or a path the user configures in context/output-config.md, including defaults, axis maps, and shortlisted ideas.