Explore options
Skill eugenelim/agent-ready-repo/packs/product-engineering/.apm/skills/explore-options
Use to generate multiple candidate product shapes before the discovery loop converges on one — the divergence stage that guards against myopic-greedy commitment. Triggers on "give me candidate product shapes", "diverge on the product shape", "what are the options before we commit", "explore alternatives for X", "don't converge yet". Generates N candidates across altitude × mechanic, each with its riskiest assumption, then frames an explicit compare-and-choose. Do NOT use to break down a chosen approach (use `decompose-intent`), to critique one produced artifact (use `devils-advocate`), or to converge (that is the discovery loop's job).From its SKILL.md
npx -y skills add eugenelim/agent-ready-repo --skill explore-optionsAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 15 stars15 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
5.4 KB, ~1.2k tokens by cl100k_base, as published. Nobody here has run it
Skill: explore-options
Generate multiple candidate product shapes before the loop commits to one. This is the discovery loop's divergence stage (pre-G1.5), and it exists because every other phase of the gate ladder is convergent — left alone the loop locks onto the first coherent framing and commits early (myopic-greedy commitment, the loop's headline risk). The Double Diamond and Design Sprint treat forced divergence as non-optional; this skill is that forcing function.
It is prompt-only (CHARTER Principle 3): no engine, no scorer, no candidate generator script — the agent following this body writes the candidates as blackboard slots. No new agent, no new reviewer.
When to invoke
- There is a framed intent to diverge on (from
frame-intent) — you are generating solution shapes for a stated outcome, not shaping the outcome itself. - The loop has not yet converged — divergence runs before G1.5. If the team
already committed and wants to re-open, that is the
explore-alternativesverdict routing back here. - You want breadth, not a single answer. If the shape is genuinely obvious and the appetite is tiny, say so — manufacturing five candidates for a one-shape problem is waste.
The two axes
Generate N candidate shapes (4–5 is the useful range) across two axes — this is what stops the candidates from being trivial variations of one idea:
- Altitude — narrow-slice ↔ whole-domain. The myopic default picks the narrow slice (a kitchen "draft-and-approve" assistant); force the higher altitude (the whole household — calendar, travel, vendors, budget) and the deeper sub-domain (meal → recipe → ingredient → store sourcing).
- Mechanic — the interaction model:
draft-and-approve/coordination-layer/knowledge-graph-first/ambient-capture(illustrative, not closed). The same outcome under a different mechanic is a different product.
Procedure
- Generate the candidate set. For each candidate, write a blackboard
intent-variant slot under thedivergingparent (the plan-tree'scandidatesarray — see the discovery-loop asset). Each candidate carries:altitudeandmechanic(where it sits on the two axes);- a one-line shape (what the product is under this framing);
- its riskiest assumption — the one that, if wrong, sinks it (front it with what would have to be true).
- Reuse, don't reinvent. Pressure and rank with the skills that already exist —
you are generating; they select and stress:
compare-hypotheses' ACH matrix to select among the shapes;devils-advocateto pressure each candidate;de-risk-intentto risk the chosen one (and to seed each candidate's riskiest assumption);- the discovery loop's scenario-variation self-coverage module to widen the set along persona / state / scale / adversarial edges.
- Frame an explicit compare-and-choose. Divergence ends in a selection, not a
pile. Recommend one shape and say why, but retain the not-chosen as
rejected/parkedwith rationale — never deleted, so they stay revivable (the loop's persistence +decision-archaeology's revival check). The altitude bet is a value/scope call — surface it at G1.5, do not resolve it silently.
What you write
The candidate set + the selection on the plan-tree node (the discovery loop's
plan-tree asset candidates +
selection). A candidate slot:
- id: cand.<slug>
altitude: narrow-slice | whole-domain | <a point between>
mechanic: draft-and-approve | coordination-layer | knowledge-graph-first | ambient-capture | <other>
shape: <one line — what the product is under this framing>
riskiest_assumption: <what would have to be true>
status: selected | rejected | parked
rationale: <why selected / retained-not-chosen>
Anti-patterns to refuse
- Generating trivial variations of one idea. If every candidate sits at the same altitude with the same mechanic, you diverged on the label, not the shape. Span both axes.
- Deleting the not-chosen. Retain rejected/parked candidates with rationale — they are revivable, and deleting them re-creates the myopic commitment divergence exists to prevent.
- Resolving the altitude bet silently. Altitude is a value/scope call — surface it at G1.5, with the candidates as the referent.
- Re-implementing selection or critique. Reuse
compare-hypotheses/devils-advocate/de-risk-intent; this skill generates. - Building a generator engine. Prompt-only — the agent writes the candidates; there is no scorer or candidate-synthesis script.
What ships with it: 1 file
1.4 KB alongside SKILL.md
evals/
- eval_queries.json1.4 KB