Skip to main content

quick-elicit

Guided specification through 4 focused question rounds in ~3 minutes. Round 0 challenges problem framing before solutioning. Produces framing, intent, boundaries, and acceptance criteria. Use when the user wants to add a feature, build something new, implement functionality, create a component, or says "add", "build", "create", "implement". Do not use when a detailed spec already exists.

Jump to install

Source facts

Repository
xoai/sage
Last source activity
March 31, 2026 at 07:42
Detected SKILL.md language
English
Stars
26
Forks
7

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
quick-elicit
description
Guided specification through 4 focused question rounds in ~3 minutes. Round 0 challenges problem framing before solutioning. Produces framing, intent, boundaries, and acceptance criteria. Use when the user wants to add a feature, build something new, implement functionality, create a component, or says "add", "build", "create", "implement". Do not use when a detailed spec already exists.
version
1.1.0
modes
["build"]
<!-- sage-metadata cost-tier: sonnet activation: auto tags: [elicitation, specification, planning, requirements, framing] inputs: [codebase] outputs: [spec] requires: [] --> # Quick Elicit Guide the human to articulate a high-quality specification through 4 focused rounds of questions. Takes ~3 minutes, not 20. **Core Principle:** The quality of output is determined by the quality of input. The most expensive failure is building the wrong thing correctly. Round 0 challenges the framing BEFORE the other rounds capture requirements. ## When to Use BUILD mode, before planning. When the human describes something they want to build, add, or change — and no specification exists yet. Do NOT use when: - A spec already exists in `.sage/work/` (skip to planning) - The human has provided a detailed written spec (accept it, don't re-elicit) - FIX mode (the bug report IS the spec) - The human says "just do it" (respect their autonomy, note the risk) ## Process ### Pre-Elicit: Infer What You Can Before asking anything, scan the relevant codebase area to understand: - What tech stack is in use? - What patterns exist in the codebase? - What does the area being changed look like? - What conventions are established? If a `codebase-scan` has been run previously, use its output. Otherwise, scan the relevant files directly (read project config, entry points, and the area being changed). Also scan `.sage/docs/` for existing research artifacts (jtbd-*, ux-audit-*, opportunity-*, user-interview-*). If research exists, note the known pain for use in Round 0. This determines WHAT TO ASK. Don't ask about things you can already see. ### Round 0: Framing (30 seconds) **PURPOSE:** Challenge whether the request is framed around the right problem BEFORE committing to a specification direction. Ask ONE question: **"What goes wrong today without this?"** This is not "what does this feature do?" It's "what specific frustration, failure, or friction makes this worth building?" The answer should be a concrete struggling moment, not an abstract category. - Good answer: "Sellers upload dark, cluttered photos and their listings don't sell. They blame the platform." - Thin answer: "Users need to upload photos." (restates the request, not pain) - Acceptable: "There's no way to add images right now." (genuine gap) **If research context exists:** Reference the known pain instead of asking open-ended: "Research identified [pain]. Is that still the driver, or has something changed?" **If the answer restates the feature instead of the pain**, probe once: "Got it — but what's the actual problem that causes? What goes wrong for the user?" Do NOT probe more than once. If the pain remains unclear after one follow-up, note it and proceed. **The challenge:** Based on the pain + codebase scan, surface one or two implicit premises the user is making: ``` Before we lock this in — I notice two assumptions worth checking: 1. [Premise]: [one sentence stating the assumption] → [one sentence describing why it might be wrong] 2. [Premise]: [one sentence stating the assumption] → [one sentence describing why it might be wrong] Does the original framing still feel right, or should we adjust? ``` **What counts as an implicit premise:** - "This needs a new screen" (maybe the existing screen can be extended) - "This is a frontend problem" (maybe it's a data problem) - "This is one feature" (maybe it's three, and only one matters now) - "Users want this" (maybe they want something adjacent) - "This needs to be built" (maybe it can be configured) **What does NOT count** (don't waste time on these): - Technical implementation choices (that's for planning) - Architecture decisions (that's for spec or architect) - Obvious facts about the codebase (already visible from scan) **User responds in one of three ways:** **"Framing is right."** → Proceed to Round 1 with the original request. Note: `Framing: Original request confirmed. Pain: [stated pain].` **"Let's adjust."** → User provides adjusted framing. Round 1 uses the adjusted framing, not the original request. Note: `Framing: Adjusted from [original] to [adjusted]. Pain: [pain].` **"I don't know / let me think."** → Note uncertainty. Proceed with original framing but flag it: `Framing: Original request (low confidence). Pain: unclear. Consider /research or /jtbd before building.` **At Round 0 completion:** Prepend framing decision to `.sage/decisions.md` BEFORE proceeding to Round 1: ``` ### YYYY-MM-DD — Framing: [initiative] [Chose framing]. Pain: [pain]. Challenged: [premise names]. (quick-elicit Round 0) ``` ### Round 0 bypass conditions Round 0 is skipped in exactly these cases: 1. **Lightweight scope** — Task classified as Lightweight. One component, no design decisions. Framing adds no value to "fix the typo." 2. **Spec already exists** — Framing was already considered. 3. **User says "just do it"** — Agent notes: "Skipping framing challenge. Spec inherits original request without challenge." 4. **FIX mode** — The bug report IS the spec. Pain is self-evident. No other bypass conditions. Standard and Comprehensive ALWAYS get Round 0. **Anti-rationalization contract for Round 0 skip:** Do NOT skip Round 0 because: - "The request is clear enough" — clarity of request ≠ correctness of framing - "This is a small change" — Standard classification means framing matters - "The user already explained the pain" — restate and verify, don't assume - "We discussed this in a previous session" — disk is truth, not memory ### Round 1: Intent (30 seconds) Ask TWO questions: 1. **"What should this do when it's working perfectly?"** Get the happy path. What does success look like from the user's perspective? 2. **"Who uses this, and when?"** Get the actor and trigger. This prevents building features nobody uses. Wait for answers. Then draft a 3-5 sentence **intent statement** and show it: ``` INTENT: [feature name] Framing: [original | adjusted | original (low confidence)] Pain: [the struggling moment, from Round 0] When [actor] does [trigger], the system [behavior]. This enables [value/outcome]. ``` Ask: "Does this capture what you mean? Anything to adjust?" **Note:** If Round 0 adjusted the framing, Round 1's questions are asked about the ADJUSTED framing, not the original request. ### Round 2: Boundaries (60 seconds) Ask up to THREE questions, adapting based on what you inferred from the codebase: 1. **"What should this explicitly NOT do?"** Boundaries prevent scope creep and gold-plating. 2. **"What existing code does this touch? Any concerns?"** Skip if the codebase scan already identified the impact area clearly. 3. **"Any security, performance, or compatibility constraints?"** Skip if the change is purely internal with no user-facing impact. Draft **boundary conditions** and show them: ``` BOUNDARIES: - This feature WILL: [list] - This feature WILL NOT: [list] - Constraints: [any non-functional requirements] - Affected areas: [files/modules identified] ``` Ask: "Anything missing or wrong here?" ### Round 3: Verification (30 seconds) Ask ONE question: **"How will we know this works? What would you test manually?"** The answer becomes acceptance criteria. Draft them and show: ``` ACCEPTANCE CRITERIA: 1. [testable criterion] 2. [testable criterion] 3. [testable criterion] ``` Each criterion MUST be testable — not "works well" but "returns 200 OK with user.id in response body." If the human gives vague criteria, make them specific. ### Output: Feature Spec Combine all four rounds into a spec document saved to `.sage/work/<YYYYMMDD>-<slug>/spec.md` using the minimal spec template. The spec includes a `## Framing` section at the top (from Round 0), followed by Intent, Boundaries, and Acceptance Criteria. Show the complete spec. Ask: "Ready to plan implementation, or anything to adjust?" ## Compression Behavior If the user is visibly impatient, compress to 1 round. The compressed version merges pain + intent into one message: "Before we spec this — what's the actual pain this solves? And then: what should it do when working perfectly?" One message, two questions. Infer boundaries and criteria from context. Show the complete spec with a Framing section for validation. **Even compressed, the framing question survives.** Round 0 can be compressed but NEVER eliminated. A compressed Round 0 still produces a Framing section in the spec. ## Rules **MUST (violation = bad spec or lost trust):** - MUST NOT ask more than 8 questions total across all rounds. - MUST NOT ask about things the codebase scan already revealed. - MUST NOT ask technical implementation questions (that's for planning, not spec). - MUST show the drafted output after each round for validation. - MUST make acceptance criteria testable and specific. - MUST execute Round 0 for Standard+ tasks (see bypass conditions). - MUST prepend framing decision to decisions.md before Round 1. - MUST include a non-empty Framing section in spec output. **SHOULD (violation = suboptimal experience):** - SHOULD respect one-word answers — work with what you have, don't interrogate. - SHOULD make a reasonable choice when the human says "you decide," and state it explicitly so they can override if it's wrong. - SHOULD compress to 1 round if the human is visibly impatient. - SHOULD reference existing research context in Round 0 if available. **MAY (context-dependent):** - MAY skip elicitation entirely if the human provides a detailed written spec. - MAY recommend ARCHITECT mode if requirements are genuinely complex. ## Failure Modes - **Human is impatient:** Compress to 1 round — merge pain + intent question, infer boundaries and criteria from context, show complete spec with Framing. - **Human has already thought deeply:** Skip elicitation, help them write their thoughts into the spec template structure, then validate. - **Requirements are genuinely complex:** Recommend switching to ARCHITECT mode for full elicitation with deep-elicit skill. - **Conflicting requirements surface:** Don't resolve them yourself. Present the conflict clearly and ask the human to decide. - **Low-confidence framing:** Include "Consider /research or /jtbd before building" in the Framing section. Surface at the checkpoint: "The pain behind this isn't fully clear. Want to proceed, or run research first?" This is advisory — do NOT block the user from proceeding.
View on GitHub