Ase meta brainstorm
Collaboratively brainstorm a topic by diverging on ideas, converging through clustering and scoring, and distilling a shortlist with a recommended direction. Use when the user wants to brainstorm, explore ideas, ideate, or figure out *what* to build before *how* to build it.From its SKILL.md
npx -y skills add rse/ase --skill ase-meta-brainstormAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
SKILL.md
11.3 KB, ~2.7k tokens by cl100k_base, as published. Nobody here has run it
@${CLAUDE_SKILL_DIR}/../../meta/ase-control.md @${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md @${CLAUDE_SKILL_DIR}/../../meta/ase-dialog.md @${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
<purpose name="ase-meta-brainstorm"> Collaboratively Brainstorm a Topic </purpose><expand name="getopt" arg1="ase-meta-brainstorm" arg2="--max-clarify|-c=3 --min-ideas|-i=12 --min-rank|-r=7 --max-shortlist|-s=4"> $ARGUMENTS </expand>
<objective> Collaboratively brainstorm the topic <topic><getopt-arguments/></topic> by first *diverging* into a broad space of candidate ideas, then *converging* through clustering and scoring, and finally distilling a *shortlist* with a single recommended direction. </objective>Guiding Tenets
Honor the following tenets throughout the brainstorming:
-
No Assumption of Simplicity: Every topic goes through the full process - a one-line config change as much as a new subsystem - because the simplest-looking topics often hide the most harmful assumptions.
-
Explore Intent First: Understand the purpose, constraints, and success criteria behind the topic before generating ideas, because ideas that optimize the wrong goal are worse than no ideas.
-
Diverge Before Converge: Generate many candidate ideas without judging them first, because premature evaluation collapses the space before the good ideas have a chance to surface.
-
One Question at a Time: Ask a single, preferably multiple-choice question per dialog round, because a wall of open questions overwhelms and yields shallow answers.
-
YAGNI Ruthlessly: Actively prune ideas that serve speculative future needs rather than the stated purpose, because unbuilt features still cost clarity now.
-
Ground in Reality: Cross-check ideas against the existing code base, documented context, and your world knowledge, because an idea that contradicts what already exists is a defect, not an option.
-
Incremental Validation: Seek the user's confirmation at each phase boundary before advancing, because converging on a misunderstanding wastes the entire downstream effort.
-
<step id="STEP 1: Restate Topic">
Restate the topic to be brainstormed by outputting the following <template/>:
<template> <ase-tpl-bullet-secondary/> **TOPIC**: <topic/> </template> </step> -
<step id="STEP 2: Clarify Intent">
Before generating any ideas, explore the project context (review relevant existing files, documentation, and recent changes) and determine the <m/> (<m/> = 1..<getopt-option-max-clarify/>) essential unknowns about the topic - the purpose, constraints, scope boundaries, and success criteria that must be pinned down for the brainstorming to be reasonably grounded.
Notice: you are intentionally constrained to just 1..<getopt-option-max-clarify/> unknowns, as too much upfront intent clarification kills the brainstorming of ideas later. So, you MUST reduce the clarifications of the unknowns to the absolute minimum in general and cap it at <getopt-option-max-clarify/>!
For each essential unknown to clarify, derive a short 1-3 word facet <facet-M/> and a corresponding question <question-M/> whose answer materially changes which ideas make sense at all.
-
For each <question-M/> in the iteration cycle <M/> (<M/>=1...<m/>):
-
Output the following <template/>:
<template> <ase-tpl-bullet-signal/> FACET <M/>/<m/>: **<facet-M/>**, QUESTION: **<question-M/>** </template> -
Determine 2 to 4 grounded candidate answers <answer-M-K/> (K={1,2,3,4}) from the code base, the documented context, and your world knowledge.
-
In the following, you MUST NOT use your built-in <user-dialog-tool/> tool! Instead, you MUST just show a custom dialog according to the expanded
custom-dialogdefinition. You MUST closely follow this definition.For this interactive dialog, use header <facet-M/> and question <question-M/>, and let the user select the <answer-M/> out of the candidate answers <answer-M-K/> (leave out the answer lines of those candidate answers you have not determined):
<expand name="custom-dialog" arg1="--other"> <facet-M/>: <question-M/> <answer-M-1/>: (grounded candidate answer 1) <answer-M-2/>: (grounded candidate answer 2) [...] </expand> -
Dispatch on the dialog <result/>:
-
If <result/> is
CANCEL: Skip the remaining sub-steps of this iteration cycle, break out of the iteration cycle entirely, and continue directly with the outer item2.(cancellation handling) that immediately follows this iteration cycle1.within this STEP 2. -
If <result/> starts with
ERROR:: Ask the user interactively, without a special tool, the question <question-M/> directly and set <answer-M/> to the response of the user. -
If <result/> matches
OTHER: <text/>: Set <answer-M><text/></answer-M> (take the user's free-text answer). -
Otherwise: Set <answer-M><result/></answer-M> (take the selected candidate answer).
Do not output anything in this sub-step.
-
-
Output the following <template/>:
<template> <ase-tpl-bullet-normal/> FACET <M/>/<m/>: **<facet-M/>**, ANSWER: **<answer-M/>** </template>
-
-
If at any point <result/> is
<template> ⧉ **ASE**: ✪ skill: **ase-meta-brainstorm**, ▶ status: **brainstorm cancelled** </template>CANCEL: Only output the following <template/> and then immediately STOP processing the entire current skill:
-
-
<step id="STEP 3: Diverge Idea Space">
Generate a broad space of candidate ideas that address the <topic/> within the constraints established by the answers <answer-M/>.
Deliberately pursue diverse angles - e.g. the minimal/MVP-first angle, the robustness/risk-first angle, the user-experience-first angle, the reuse-existing-machinery angle, the coolness angle, and the unconventional/wildcard angle - because variety in origin yields variety in outcome.
Do still not judge, rank, or prune ideas in this step. Generate ideas until you either reach at least <getopt-option-min-ideas/> distinct candidate ideas or have clearly exhausted the meaningfully distinct space.
Store each candidate idea in <idea-N/> with the format
<template> <ase-tpl-bullet-normal/> **IDEA <N/>**: <idea-N/> </template> </step>**<idea-name-N/>**: <idea-statement-N/>(where <idea-name-N/> is a short 1-4 word summary and <idea-statement-N/> is a single-sentence statement of not more than 40 words), and output the following <template/>: -
<step id="STEP 4: Converge Idea Space">
Converge the candidate ideas <idea-N/> into a smaller, structured set and finally into a recommendation.
-
Cluster: group the candidate ideas into <c/> coherent clusters <cluster-C/> (a short 1-4 word label, C=1...<c/>), collapsing near-duplicates and discarding ideas pruned by You Aren't Gonna Need It (YAGNI) (speculative, out-of-scope, or contradicting documented context).
For each cluster and its contained retained ideas, output the following <template/> (<cluster-summary-C/> is a single-sentence statement of not more than 40 words):
<template> <ase-tpl-bullet-secondary/> **IDEA CLUSTER <C/>/<c/>**: <cluster-C/> - <cluster-summary-C/>, **IDEAS**: <idea-index-C/> </template>Here, <idea-index-C/> is the comma-separated list of the indices <N/> of those retained ideas <idea-N/> that belong to cluster <cluster-C/> (e.g.
2, 5, 9). -
Score: for each retained idea <idea-N/> in the clusters, rank its fit against the purpose and constraints on a Likert scale of 0 (poor) to 10 (excellent), considering value, uniqueness, risk, and alignment with the existing code base. Keep only ideas in the clusters with a rank of at least <getopt-option-min-rank/>.
If no idea meets the <getopt-option-min-rank/> floor, the floor filter would empty the set and leave the downstream steps without any options. In this case, disregard the floor and instead keep the up-to-<getopt-option-max-shortlist/> highest-ranked ideas, and output the following <template/> to flag that even the strongest ideas fall below the bar:
<template> <ase-tpl-bullet-signal/> **NOTICE**: no idea reached the minimum rank of <getopt-option-min-rank/>/10 - shortlisting the highest-ranked ideas regardless. </template> -
From the scored ideas <idea-N/>, distill a shortlist of the top <getopt-option-max-shortlist/> options, sorted by rank from highest to lowest.
For this, draw the shortlist from distinct clusters <cluster-C/> wherever possible - prefer a diverse shortlist spanning different clusters over several high-ranked variations of the same cluster, unless one cluster clearly dominates on rank.
Store each distilled option in <option-N/> with the format
<template> <ase-tpl-bullet-normal/> **DISTILLED IDEA**: <option-N/> </template>**<option-name-N/>** (rank: <option-rank-N/>/10, cluster: <option-cluster-N/>): <option-statement-N/>(where the statement is a single sentence of not more than 40 words capturing the direction and its primary trade-off), and output the following <template/>: -
Finally, derive a single recommended idea - the highest-ranked option, or a principled synthesis of the option shortlist that preserves what is strongest in each - store its one-sentence rationale (not more than 40 words) in <recommendation/>, and output the following <template/>:
<template> <ase-tpl-bullet-signal/> **RECOMMENDED IDEA**: <recommendation/> </template> -
Finally, give the closing hint by expanding the following (which, depending on the configured <ase-guidance-level/>, may expand into nothing and hence emit no output at all):
<ase-tpl-hint level="normal"> To turn the recommended idea into a plan, use `/ase-task-edit`; to turn it directly into code, use `/ase-code-craft`. </ase-tpl-hint>
-
What ships with it: 1 file
2.9 KB alongside SKILL.md
- help.md2.9 KB