Exploration skill. Assess the problem's shape, open with a technique matched to it, extend the chain only while the problem quotably demands more, and converge on a decision. The caller sees substance — questions, frames, maps, new angles. Technique names, shape labels, and chain mechanics stay hidden.
Phase 0: Assess
Detect the problem's shape from signals in "$ARGUMENTS" and the conversation.
| Shape | Signals |
|---|---|
| Vague | Cannot articulate the goal; shifting or absent target; hedging language; no clear problem boundary |
| Stuck | Clear problem but frustration; "already tried" language; enumerated failed approaches |
| Fork | Comparative language ("should I X or Y?"); identified alternatives; unclear criteria |
| Complex | Multiple interacting factors; "it depends"; competing constraints; many stakeholders |
| Blindspot | Meta-uncertainty ("what am I missing?"); new domain; sensing something is off without naming it |
Reach for Vague only when the goal itself remains unarticulated — its defining signal. When signals for several articulated shapes co-occur, pick the shape carrying the most specific signal: an enumerated failed approach → Stuck; named alternatives → Fork; an explicit "what am I missing" → Blindspot; many named interacting factors → Complex. A wrong pick costs little because the extension check in Phase 2 corrects it mid-course.
Proceed directly to Phase 1 without announcing the shape.
Phase 1: Open
A shape names what the thinking lacks. Five purposes name the cognitive moves that repair a lack:
- Discover — dig out what hides and constrains: assumptions, root causes, leverage points.
- Expand — diverge: generate candidate directions, explanations, or questions.
- Navigate — map the territory: locate the level to act at, what the problem serves, what class it belongs to, the knowns, and the real question.
- Explore — probe an articulated position at its edges and from other frames.
- Define — converge: carve the problem into parts you can act on, or join parts into a whole.
Each purpose draws from a pool of techniques:
| Purpose | Techniques |
|---|---|
| Discover | excavate-assumptions, first-principles, premortem, find-leverage |
| Expand | wonder, branch-out, consider-alternatives, connect-ideas, survey-peers |
| Navigate | assess-knowledge, select-level, situate, generalize, question-the-question |
| Explore | probe-boundaries, argue-opposite, invert, shift-perspective, instantiate |
| Define | decompose, compose |
Every chain runs at least two techniques: an opener whose purpose repairs the shape's deficit, and a closer that converges. The shape sets the opener:
| Shape | Deficit | Opening purpose |
|---|---|---|
| Vague | lacks a target | Expand — generate candidates to aim at |
| Stuck | has exhausted the obvious | Discover — dig out the hidden constraint |
| Fork | has options without criteria | Explore — probe the alternatives at their edges |
| Complex | has more factors than frame | Navigate — map the territory before judging it |
| Blindspot | suspects an unseen gap | Discover — surface what constrains unnoticed |
The closer comes from Define or Navigate — decompose, compose, assess-knowledge, or select-level — and must leave material Phase 3 can rank: named options, criteria, or a mapped constraint set.
Within a purpose, pick the technique that best fits the problem's content:
- Existing plan or proposal: premortem, argue-opposite, probe-boundaries
- Choosing between options: consider-alternatives, shift-perspective, select-level
- Understanding a system: find-leverage, decompose, situate
- Conceptually stuck: first-principles, invert, wonder
- Involves people or stakeholders: shift-perspective, excavate-assumptions, branch-out
- Lost in detail: situate, select-level
- An abstract claim or principle: instantiate, generalize
- Pieces in hand without a whole: compose, survey-peers
- Two ideas that may be related: connect-ideas
Phase 2: Apply and extend
Execute the opener: read its reference file from @./references/, follow its
numbered moves against the problem, and let each technique's output feed the
next.
After each technique, run the extension check against everything produced so far. Extend the chain when a row below fires; when none fires, run the closer and move to Phase 3.
| The output so far shows... | Extend with |
|---|---|
| The question itself has changed and the new one remains unexplored | Navigate |
| The emerging conclusion leans on an assumption no technique has tested | Discover |
| Fewer than two candidate options or directions have a name | Expand |
| Two techniques' outputs contradict each other | Explore |
Three rules bound the check:
- Quote to extend. To count a row as fired, quote the sentence from the output that fires it. A row you can only paraphrase has stayed silent.
- Stop at fixpoint. When the last technique added nothing you can quote as new, run the closer now, even if a row fires — the chain has stopped changing the picture.
- Cap at five. The chain holds at most five techniques, the closer included. At the cap, converge.
When several rows fire, repair the topmost: a re-aimed question invalidates dug assumptions, untested assumptions distort generated options, and options must exist before their edges get probed.
A misassessed shape corrects itself here: the problem's real deficit fires its row at the next check, and the chain repairs it.
Voice
Present the substance directly, and weave transitions between techniques into it. Headers announcing technique names, meta-commentary ("now I will explore from a different angle"), and chain mechanics stay out of the output — the caller reads natural, flowing exploration.
Four rules govern the prose:
- Clear. Plain declarative sentences a reader outside the domain can follow.
- Unopinionated. Tie each substantive claim to something in the problem material, or mark it as an assumption. Advocacy appears once, in Phase 3's ranking, and cites the rule it ranks by.
- Concise. Prefer the shortest phrasing that keeps a claim checkable.
- Affirmative. State what holds and what to do. Recast a failure or a thing to avoid as the condition that holds instead.
Phase 3: Converge
Close the exploration with:
- What the exploration revealed
- The options now on the table, the default of changing nothing included
- A ranking of the options, with the rule that ranks them stated
- The leading option and the concrete evidence that would flip it
- What remains genuinely open
When the evidence ranks several options equally, report the tie as the result, keep the ranking rule stated, and name the observation that would break the tie.
Context Loading
| Phase | Load |
|---|---|
| Assess + Open | Nothing from references — use the tables above |
| Apply + extend | Only the current technique's file from @./references/ |
| Converge | assets/playback.md |
Technique Reference Files
Each file in references/ holds a single technique's step-by-step
instructions:
| File | What it does |
|---|---|
wonder.md |
Opens possibility space through curiosity |
branch-out.md |
Generates distinct continuations from one point |
consider-alternatives.md |
Creates multiple explanations for the same observations |
connect-ideas.md |
Tests how two ideas relate, or finds a distant match for one |
survey-peers.md |
Maps what else fills the same role at the same level |
assess-knowledge.md |
Maps verified vs assumed vs unknown |
select-level.md |
Finds the level of abstraction to act at |
situate.md |
Places a thing in the system it serves |
generalize.md |
Finds the class a case belongs to and what holds for it |
question-the-question.md |
Examines whether the inquiry aims at the right target |
probe-boundaries.md |
Tests conclusions at edges and extremes |
argue-opposite.md |
Stress-tests by building the strongest counter-case |
invert.md |
Turns problems inside out |
shift-perspective.md |
Inhabits different frames |
instantiate.md |
Makes an abstraction concrete and surfaces its hidden conditions |
decompose.md |
Breaks wholes into parts at natural joints |
compose.md |
Joins parts into a whole and finds what it lacks |
excavate-assumptions.md |
Surfaces unstated assumptions at multiple levels |
first-principles.md |
Strips convention to find irreducible truths |
premortem.md |
Imagines failure and works backwards |
find-leverage.md |
Finds where small actions create outsized results |
Record
Records live in the store, ${CLAUDE_PLUGIN_DATA}/records/, with a copy in the mirror folder, ${user_config.records_mirror}.
- When the store path is not absolute, no store exists here. Build the record anyway, and end the reply with it in a
jsonlblock under its file name, for the user to keep. - When the mirror path is empty or still a placeholder, skip the mirror. Otherwise, after the run's last line, copy the record file into the mirror under the same name.
- Create either folder when it is missing.
Write each record in the form of the template at the end of this section: the file name as shown, then one JSON object per line, one line per event, in the order the events happen, with every bracketed value replaced. Write a kind as often as the run produces it, and leave out kinds it does not produce. Take times from the clock in UTC, for example date -u +%Y%m%dT%H%M%SZ for the file name. A topic is two to six lowercase words joined by hyphens. An answer's q names the question or open item it answers.
- Append lines; never change or remove one.
- Where lines share an id, the latest wins. A link's id is its from, to, and rel.
"retired": trueremoves the entry. - To resume a run, read its file, first copying it from the mirror when only the mirror holds it, and append a run line with
"resumed": true. - An agent answering a record's questions appends its answer, skip, and open lines to the same file and names itself in
by.
At the end of a run, play the record back in the form of assets/playback.md: the path it was saved to, then every part the reply has not already shown. Never show the raw lines.
Record the problem as the subject; each technique's main finding as a note, with no technique name in it; each item of the converge list as a result; and each thing left open as an open line.
File: ponder_[start time, UTC, YYYYMMDDTHHMMSSZ]_[topic].jsonl
{"kind": "run", "at": "[time, UTC, YYYY-MM-DDTHH:MM:SSZ]", "skill": "ponder", "topic": "[topic]", "subject": "[the problem]", "project": "[repository or project name, or empty]", "resumed": false}
{"kind": "note", "at": "[time]", "text": "[a main finding]", "context": "[the output line it extends]"}
{"kind": "result", "at": "[time]", "text": "[a converge item]"}
{"kind": "open", "at": "[time]", "id": "open-1", "text": "[what stays open]", "q": ""}