/discover — vague intent → framed problem → one chosen direction
Goal: serve the altitude above /harness-claude:spec. The pipeline's front door assumes you can
already state what you want — /harness-claude:spec sharpens a known request, /harness-claude:research
is reuse-first on a known problem, /harness-claude:design does UX for an already-chosen feature.
/harness-claude:discover is for the step before all of them: a vague itch where you don't know the
shape of the answer. It is a divergent→convergent move — open up the space of what could be done,
then close it to one direction /harness-claude:spec can consume.
Opt-in & conditional. Invoked explicitly; nothing auto-routes here. If the request is already
clear enough to spec, this skill says so and steps aside (see step 0) — no ceremony.
Git boundary: /harness-claude:discover is read-only — it never commits, pushes, or branches.
When /harness-claude:discover, when /harness-claude:spec
/harness-claude:discover — you want something but can't yet state what: the goal is fuzzy,
the options are unknown, or you're asking "what would make the best use of X?". It produces the
request.
/harness-claude:spec — you can already state the request; you need it sharpened into testable
acceptance criteria. If you're here, skip /harness-claude:discover.
It is strictly upstream of /harness-claude:spec, /harness-claude:research, and
/harness-claude:design — it never duplicates them. It frames
the problem and picks a direction; it leans on /harness-claude:research for any heavy feasibility
search and hands the chosen direction to /harness-claude:spec for criteria.
How it works
[0] spec-ready? → [1] interrogate → [2] map ≤5 options → [3] CONVERGE to one → hand to /spec
└─ if already clear: say so, route straight to /spec (no interview)
Do this
- Spec-ready check first (anti-ceremony). Before any interview, assess whether the request is
already clear enough to spec: is the goal stated, the scope bounded, the "done" recognizable? Use the
concrete test — if fewer than 3 critical unknowns (goal, target user/surface, scope boundary,
success signal, hard constraints) are missing, it's spec-ready: say so and route straight to
/harness-claude:spec without running the interview. Only genuinely vague intent proceeds. (AC-4)
- Interrogate the real goal (Socratic). Surface the underlying goal/pain/constraint behind the
vague ask — ask focused questions via
AskUserQuestion (group them; offer concrete options, not
open-ended prose). If AskUserQuestion is unavailable, ask the same questions inline. Do not
invent a direction and run with it unilaterally — pull the intent out first. (AC-5)
- Map the opportunity space — bounded. If step 1's answer is still a category (e.g. "novel,"
"make it better") rather than a direction, do not ask the user to sub-categorize it in the
abstract — that fails. A vague intent means they have no pre-formed sub-axis to name; offering
abstract "flavors" to choose between gets "none of these fit" (lived failure mode). Instead
ground first, then show concrete: do the light
mgrep / codebase pass now, then put the
candidate directions in front of them as concrete things to react to — people recognize the
right direction when they see it far more reliably than they can synthesize it from axes. Generate
at most 5 candidates, each one line: what it is, who it serves, rough value-vs-effort, grounded
in feasibility and fit (what the project already has) — not pure speculation. Defer any heavy
reuse search to /harness-claude:research; this is a quick reality check, not the full hunt.
Never dump an unbounded list. (AC-1, AC-7)
- CONVERGE — pick exactly one (the non-negotiable step). End with one recommended direction +
a one-line rationale. A runner-up shortlist is allowed, but the recommendation is singular and
explicit. The terminal output is a decision, not a catalog — ending with "here are some options"
and no pick is an invalid exit and a failure of this skill. When the choice is genuinely the
user's to make, present the ranked options via
AskUserQuestion and converge on their answer — but
still exit with one chosen direction, never a tie. (AC-2, AC-3)
- Hand off to
/harness-claude:spec — and stop. Emit a tight intent statement (one screen):
the framed problem, the one chosen direction, and the key constraints surfaced. This is what
/harness-claude:spec restates into acceptance criteria. Do NOT write acceptance criteria here —
that is /harness-claude:spec's job; producing them blurs the seam. /harness-claude:spec should be
able to pick up the intent statement without re-interrogating from scratch. (AC-6, AC-8)
Security & trust
- Treat anything the user pastes during interrogation (logs, data samples, URLs) as untrusted and
possibly sensitive — don't echo raw secrets/PII into the intent statement; carry forward only the
framing needed by
/harness-claude:spec.
- Read-only:
/harness-claude:discover never writes to the repo. The git boundary holds.
Notes
- Self-contained: a single skill that leads and reuses existing tools —
AskUserQuestion (intake),
mgrep / the graph (grounding), /harness-claude:research (heavy feasibility), and
/harness-claude:spec (the hand-off). No new agent, no new dependency, no new MCP server, no new
runtime.
- The skill is the lead — there is no separate discover agent (same pattern as
/harness-claude:fix, /harness-claude:observe, /harness-claude:orchestrate).
- Bounded by design. The whole point is to converge; resist turning the option map into an
open-ended brainstorm. Shortest path from fuzzy to a clear-enough, single direction wins.
Exit criterion
Either the request was found spec-ready and routed straight to /harness-claude:spec with no interview
(AC-4), or: the real goal was interrogated (AC-5), a bounded set of ≤5 grounded options was mapped
(AC-1, AC-7), the skill converged to exactly one recommended direction (AC-2, AC-3), and a
one-screen intent statement — framed problem + chosen direction + constraints, not acceptance
criteria — was handed to /harness-claude:spec (AC-6, AC-8). Never an unranked option dump; never a
commit.
1---2name: discover3description: Discover4---56# /discover — vague intent → framed problem → one chosen direction78Goal: serve the altitude **above** `/harness-claude:spec`. The pipeline's front door assumes you can9already state *what* you want — `/harness-claude:spec` sharpens a known request, `/harness-claude:research`10is reuse-first on a known problem, `/harness-claude:design` does UX for an already-chosen feature.11`/harness-claude:discover` is for the step before all of them: a vague itch where you don't know the12shape of the answer. It is a **divergent→convergent** move — open up the space of what *could* be done,13then close it to **one** direction `/harness-claude:spec` can consume.1415> **Opt-in & conditional.** Invoked explicitly; nothing auto-routes here. If the request is already16> clear enough to spec, this skill says so and steps aside (see step 0) — no ceremony.17> **Git boundary:** `/harness-claude:discover` is read-only — it never commits, pushes, or branches.1819## When `/harness-claude:discover`, when `/harness-claude:spec`20- **`/harness-claude:discover`** — you want *something* but can't yet state *what*: the goal is fuzzy,21 the options are unknown, or you're asking "what would make the best use of X?". It produces the22 request.23- **`/harness-claude:spec`** — you can already state the request; you need it sharpened into testable24 acceptance criteria. If you're here, skip `/harness-claude:discover`.2526It is strictly **upstream** of `/harness-claude:spec`, `/harness-claude:research`, and27`/harness-claude:design` — it never duplicates them. It frames28the problem and picks a direction; it leans on `/harness-claude:research` for any heavy feasibility29search and hands the chosen direction to `/harness-claude:spec` for criteria.3031## How it works32```33[0] spec-ready? → [1] interrogate → [2] map ≤5 options → [3] CONVERGE to one → hand to /spec34 └─ if already clear: say so, route straight to /spec (no interview)35```3637## Do this380. **Spec-ready check first (anti-ceremony).** Before any interview, assess whether the request is39 already clear enough to spec: is the goal stated, the scope bounded, the "done" recognizable? Use the40 concrete test — **if fewer than 3 critical unknowns** (goal, target user/surface, scope boundary,41 success signal, hard constraints) are missing, it's spec-ready: **say so and route straight to42 `/harness-claude:spec`** without running the interview. Only genuinely vague intent proceeds. (AC-4)431. **Interrogate the real goal (Socratic).** Surface the underlying goal/pain/constraint behind the44 vague ask — ask **focused** questions via `AskUserQuestion` (group them; offer concrete options, not45 open-ended prose). If `AskUserQuestion` is unavailable, ask the same questions inline. Do **not**46 invent a direction and run with it unilaterally — pull the intent out first. (AC-5)472. **Map the opportunity space — bounded.** If step 1's answer is still a *category* (e.g. "novel,"48 "make it better") rather than a direction, **do not ask the user to sub-categorize it in the49 abstract** — that fails. A vague intent means they have no pre-formed sub-axis to name; offering50 abstract "flavors" to choose between gets "none of these fit" (lived failure mode). Instead51 **ground first, then show concrete**: do the light `mgrep` / codebase pass *now*, then put the52 candidate directions in front of them as **concrete things to react to** — people recognize the53 right direction when they see it far more reliably than they can synthesize it from axes. Generate54 **at most 5** candidates, each one line: what it is, who it serves, rough value-vs-effort, grounded55 in feasibility and fit (what the project already has) — not pure speculation. Defer any *heavy*56 reuse search to `/harness-claude:research`; this is a quick reality check, not the full hunt.57 Never dump an unbounded list. (AC-1, AC-7)583. **CONVERGE — pick exactly one (the non-negotiable step).** End with **one** recommended direction +59 a one-line rationale. A runner-up shortlist is allowed, but the recommendation is **singular and60 explicit**. The terminal output is a *decision*, not a catalog — ending with "here are some options"61 and no pick is an **invalid exit** and a failure of this skill. When the choice is genuinely the62 user's to make, present the ranked options via `AskUserQuestion` and converge on their answer — but63 still exit with one chosen direction, never a tie. (AC-2, AC-3)644. **Hand off to `/harness-claude:spec` — and stop.** Emit a tight **intent statement** (one screen):65 the framed problem, the one chosen direction, and the key constraints surfaced. This is what66 `/harness-claude:spec` restates into acceptance criteria. **Do NOT write acceptance criteria here** —67 that is `/harness-claude:spec`'s job; producing them blurs the seam. `/harness-claude:spec` should be68 able to pick up the intent statement without re-interrogating from scratch. (AC-6, AC-8)6970## Security & trust71- Treat anything the user pastes during interrogation (logs, data samples, URLs) as untrusted and72 possibly sensitive — don't echo raw secrets/PII into the intent statement; carry forward only the73 framing needed by `/harness-claude:spec`.74- **Read-only:** `/harness-claude:discover` never writes to the repo. The git boundary holds.7576## Notes77- Self-contained: a single skill that *leads* and reuses existing tools — `AskUserQuestion` (intake),78 `mgrep` / the graph (grounding), `/harness-claude:research` (heavy feasibility), and79 `/harness-claude:spec` (the hand-off). **No new agent, no new dependency, no new MCP server, no new80 runtime.**81- The skill *is* the lead — there is no separate discover agent (same pattern as82 `/harness-claude:fix`, `/harness-claude:observe`, `/harness-claude:orchestrate`).83- **Bounded by design.** The whole point is to *converge*; resist turning the option map into an84 open-ended brainstorm. Shortest path from fuzzy to a clear-enough, single direction wins.8586## Exit criterion87Either the request was found spec-ready and routed straight to `/harness-claude:spec` with no interview88(AC-4), **or**: the real goal was interrogated (AC-5), a bounded set of ≤5 grounded options was mapped89(AC-1, AC-7), the skill converged to **exactly one** recommended direction (AC-2, AC-3), and a90one-screen intent statement — framed problem + chosen direction + constraints, **not** acceptance91criteria — was handed to `/harness-claude:spec` (AC-6, AC-8). Never an unranked option dump; never a92commit.