kramme-cc-workflow/skills/kramme:discovery:interview/SKILL.md
Conduct an in-depth interview about a topic/proposal to uncover requirements, priorities, and non-goals, then create a comprehensive plan. Pass --ideate for divergent framing, --decision-tree / depth-first language to resolve tightly coupled decisions one question at a time, or --research to launch topic-specific research agents before the interview.
npx skillsauth add abildtoft/kramme-cc-workflow kramme:discovery:interviewInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
4 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Conduct a structured, in-depth interview about the presented topic, files, proposal, or feature. Use the AskUserQuestion tool throughout to gather decisions and uncover requirements. Conclude by writing a comprehensive plan.
When not to use: for standalone discovery that produces a one-off plan file, use this skill. For discovery inside a tracked SIW (Structured Implementation Workflow) initiative — where the output feeds siw/ planning documents — use kramme:siw:discovery instead.
--decision-tree, --research, or depth-first trigger phrases; read UBIQUITOUS_LANGUAGE.md and STRATEGY.md if present--ideate is set, treat that as an explicit request to run Phase 0 and proceed directly into the divergent pass.--research is set or the topic names external libraries, frameworks, or cross-cutting concerns, launch parallel research agents tailored to the confirmed topic classification, then run a brief check-in before the interview.Use these markers in user-facing output to keep downstream tooling parseable:
CONFUSION — when the working hypothesis doesn't fit the user's framing and you need to flag it before continuing.MISSING REQUIREMENT — when a question cannot be answered from the provided artifact and needs user input.UNVERIFIED — when you assert something you haven't confirmed (e.g., a feasibility guess during Phase 0 convergence).STALE — when repo-level product strategy exists but its last_updated value is old enough to deserve caution.MISSING PRODUCT CONTEXT — when strategy grounding would materially help but no STRATEGY.md exists.FRAMING — the label applied when Phase 0 converges on the concrete problem statement that will feed the interview.PLAN — the label applied to the synthesized plan document at hand-off.Parse $ARGUMENTS as shell-style arguments so quoted paths stay intact.
--ideate is present, set force_ideate=true and remove from argument list.--decision-tree is present, set decision_tree_requested=true and remove from argument list.--research is present, set research_requested=true and remove from argument list.decision_tree_requested=true without removing meaningful topic words unless the phrase is only an instruction.If UBIQUITOUS_LANGUAGE.md exists at the project root, read it before framing and use its canonical terms throughout the interview and plan. If the user uses a term that conflicts with the glossary, ask one targeted question to resolve the conflict. If the file does not exist, proceed silently.
If STRATEGY.md exists at the project root, read it before framing and extract:
Store this as STRATEGY_CONTEXT. If the file has last_updated frontmatter older than 90 days, mark it STALE: in the initial framing and treat it as context to verify, not a hard constraint. If no STRATEGY.md exists, proceed silently for narrow tasks. For repo-level product discovery or broad "what should we build" work, emit MISSING PRODUCT CONTEXT: once and suggest /kramme:product:strategy as an optional precursor without blocking the interview.
Use Decision-Tree mode when decision_tree_requested=true; otherwise use the default topic-classified coverage flow. Read references/decision-tree-mode.md only when Decision-Tree mode is active.
Before starting the interview, write down a working hypothesis for:
STRATEGY_CONTEXT, when presentTreat these as assumptions to validate, not excuses to ask generic setup questions.
Frame the underlying problem, not the proposed solution. When the input includes a proposed approach ("let's add X", "we should switch to Y"), separate the problem the proposal is meant to solve from the proposal itself. The proposal may be correct, but the framing — and any research in Phase R — must be about the problem so that alternatives stay visible.
If the topic conflicts with active tracks, target users, key metrics, or non-goals in STRATEGY_CONTEXT, state the conflict before asking interview questions. Surface it as context, not as a veto: the user may be intentionally changing direction.
If the hypothesis doesn't seem to match the user's framing, emit CONFUSION: and ask a clarifying question before continuing.
After drafting the working hypothesis, classify the topic into one of these categories:
| Type | Indicators | Focus Areas | | --- | --- | --- | | Software Feature | New functionality, UI changes, API additions | Architecture, data model, UX flows, integration | | Process/Workflow | Team processes, approval flows, automation | Steps, roles, triggers, exceptions, tooling | | Architecture Decision | Technology choice, pattern selection, migration | Options, tradeoffs, constraints, reversibility | | Documentation/Proposal | RFC, design doc, specification review | Gaps, clarity, feasibility, actionability |
Use AskUserQuestion to confirm the topic type if unclear.
Treat this classification as provisional whenever Phase 0 may still run. If Phase 0 changes the framing or turns a vague topic into a different kind of concrete ask, repeat Step 2 on the chosen framing before starting Step 3. The final topic type controls the interview dimensions, coverage labels, and template selection in Step 5.
Run Phase 0 only when one of the following is true:
--ideate in $ARGUMENTS.If the framing is concrete (e.g., "Add email-based 2FA to the login flow") and the user did not pass --ideate, skip Phase 0 and proceed to Step 3. If the user explicitly passed --ideate, treat that as an intentional request to explore alternatives first and run Phase 0 anyway.
When Phase 0 is triggered by auto-detection (not by --ideate), display a one-line notice and then pause for an explicit user choice before running it:
CONFUSION: The framing is broad. Running a short divergent pass (7 variation lenses, 3 stress-test axes) before the interview. Skip with "just interview me".
Immediately follow that notice with AskUserQuestion using two options:
Run divergent pass — continue with Phase 0Just interview me — skip Phase 0 and proceed with the current framingDo not start generating variations until the user has answered. If they pick "Just interview me" (or respond with equivalent free text), skip Phase 0 and proceed with the current framing.
Read references/variation-lenses.md and follow it to generate 5–8 candidate variations (4–7 lenses), converge with the three stress-test axes, and run the convergence protocol. When presenting the strongest variations via AskUserQuestion, reserve one option slot for None of these — let's iterate. and keep the total within AskUserQuestion's 2-4 option limit. Emit the FRAMING: marker on the chosen framing. If the user keeps rejecting candidates, fall back to the original framing and proceed.
Then feed the chosen framing into Step 2 and reclassify before Step 3. If the topic type changes, tell the user which type is now in force before you continue.
Run Phase R when either is true:
--research in $ARGUMENTS.If the framing is purely about priorities, ownership, or business context — answers only the user can give — skip Phase R. Research can't replace human input on those.
When Phase R is auto-triggered (not by --research), display a one-line notice and pause for an explicit choice via AskUserQuestion:
The framing names {library / framework / cross-cutting concern}. Running parallel research agents (codebase + docs) before the interview will let questions skip what's already answered. Skip with "just interview me".
Two options: Run research pre-pass or Just interview me. Do not launch agents until the user has answered.
Read references/research-agents.md for the per-classification agent prompt templates. Pick the agent set matching the topic type from Step 2:
Spawn them via the Task tool with subagent_type: Explore (or general-purpose when the agent needs WebSearch / WebFetch / Context7 MCP). Each agent's prompt comes from the reference file.
Research the problem, not the proposal. If the input includes a proposed solution, every agent should investigate the underlying problem independently before evaluating the proposal.
Each agent must return: what it found, where it found it (file paths or URLs), and key snippets.
After agents return, summarize the key finding in 2-3 sentences and surface anything that:
Use AskUserQuestion to present a specific choice about how to proceed — not a generic "does this make sense?". Examples:
useDebouncedSearch doing 80% of this. Do you want to extend it, or build separately?"If the research surfaces nothing surprising, name that briefly and proceed. If it changes the framing or classification, repeat Step 2 before Step 3.
If an agent fails or returns no usable findings, do not block the interview: name which coverage area is therefore still user-answered (rather than research-answered) and continue. Never present a failed agent's absence as a confirmed finding.
Carry research findings forward as context for Step 3. Apply the existing Codebase-as-Answer-Source Rule more aggressively now: any question whose answer is in the research output should be presented as "Research found {finding} at {path}. Confirm or correct?" instead of asked open-ended.
Craft questions that:
Avoid obvious questions. Never ask "What is the feature?" or "Why do you want this?" If the artifact or codebase already answers a question, do not ask it again. Explore first, present the inferred answer with the source, and ask only for confirmation or correction.
If a dimension requires information the artifact doesn't contain and the user hasn't provided, emit MISSING REQUIREMENT: before asking the user to fill the gap.
Before each question in either coverage or decision-tree mode, decide whether the workspace, provided files, or existing docs can answer it.
Before crafting the first interview round, read references/question-dimensions.md. It covers:
header/question/options/multiSelect fields.Use the default coverage rounds unless decision_tree_requested=true.
In Decision-Tree mode, read references/decision-tree-mode.md, identify the root decision for the topic type, map first-level dependencies, and resolve branches depth-first. Ask one question at a time by default; batch only routine independent sibling questions. When the active tree is resolved, return to coverage rounds for any remaining question dimensions that are independent of the decisions already settled.
Ask 1-4 questions per round using AskUserQuestion. Mix questions across different dimensions.
For high-stakes or dependency-shaping decisions, ask one question in the round. Apply the Codebase-as-Answer-Source Rule before every question.
After receiving answers, provide a brief synthesis before the next round:
"Based on your answers: [key insight]. This raises follow-up questions about [area]..."
After each round, analyze the answers and adapt your next questions:
Dig deeper when:
Pivot when:
Clarify when:
Don't just check boxes — the goal is understanding, not coverage. If the remaining gaps are low-value or implementation-level only, stop the interview and move to synthesis.
After each resolved decision, offer /kramme:docs:adr only when all three criteria are true:
Surface the offer via AskUserQuestion with this payload, replacing each {...} evidence placeholder with a concrete one-line reason from the interview:
AskUserQuestion
header: "ADR offer"
question: |
This decision looks ADR-worthy:
- Hard to reverse: {hard_to_reverse_evidence}
- Surprising without context: {surprising_without_context_evidence}
- Result of a real tradeoff: {real_tradeoff_evidence}
Record as an ADR?
options:
- label: "Author ADR"
description: "Invoke /kramme:docs:adr now"
- label: "Skip"
description: "Don't author, and don't ask again about this decision"
- label: "Defer"
description: "Don't author now; allow re-offer if the decision recurs"
multiSelect: false
Prompt at most once per decision: track which decisions have already been offered in the current session (by title or stable identifier) and do not re-offer them. Skip and Defer differ here — Skip suppresses re-offers of that decision for the lifetime of the session; Defer allows a re-offer only if the same decision resurfaces in a later workflow step.
On "Author ADR", hand off to /kramme:docs:adr (optionally pre-loading a decision title and short context summary as its arguments). Do not author the ADR inside this skill.
After each round, display coverage status using dimensions relevant to the topic type:
Software Feature:
Coverage: [Architecture: 70%] [Data Model: 60%] [API: 40%] [UX: 80%] [Integration: 20%]
Process/Workflow:
Coverage: [Triggers: 80%] [Steps: 60%] [Roles: 40%] [Exceptions: 20%] [Metrics: 0%]
Architecture Decision:
Coverage: [Options: 90%] [Tradeoffs: 70%] [Constraints: 50%] [Migration: 30%]
Documentation/Proposal:
Coverage: [Clarity: 80%] [Completeness: 60%] [Feasibility: 40%] [Actionability: 20%]
Adjust percentages based on how thoroughly each dimension has been explored.
Stop interviewing when:
Suggest a filename based on the topic, e.g., user-auth-redesign-plan.md or deployment-process-plan.md. Ask user for preferred location. Before writing, check whether the target path already exists; if it does, confirm overwrite or pick a new name via AskUserQuestion rather than clobbering a prior plan silently.
Pick the template matching the final topic type in force after Step 2 and any Phase 0 or Phase R reclassification:
| Topic Type | Template File |
| ---------------------- | --------------------------------- |
| Software Feature | assets/template-feature.md |
| Process/Workflow | assets/template-process.md |
| Architecture Decision | assets/template-architecture.md |
| Documentation/Proposal | assets/template-doc-review.md |
Read the matching template, fill in the interview findings, and write the populated result to the user-chosen location. Emit PLAN: as the hand-off label:
PLAN: Written to {path}. Ready for review.
If a required section cannot be filled because the interview didn't cover it, leave the placeholder in place and add MISSING REQUIREMENT: {dimension} above it so the gap is explicit.
When the host runtime supports it (Claude Code) and the user wants to move directly into implementation planning, offer to call EnterPlanMode so the synthesized plan becomes the seed of an interactive plan. Ask once via AskUserQuestion (Enter plan mode now / Stop here, I'll review first) — don't auto-trigger. If the runtime doesn't expose EnterPlanMode, skip this step silently.
CONFUSION: to surface mismatches early.--ideate was not requested. Skip it.MISSING REQUIREMENT: instead.Before writing the plan, confirm:
Sources section is populated with the file paths and URLs each agent returned.MISSING REQUIREMENT: marker.Risks & Mitigations (or equivalent) section, each risk is concrete (e.g., "this adds an N+1 query on every page load") rather than vague ("this could be slow").PLAN: marker is present at hand-off.development
Runs kramme:pr:code-review as a closeout review loop for local or PR branch changes before commit, ship, or final response. Use when the user asks for autoreview, second-model review, or a final code-review pass after non-trivial edits. Not for UX, visual, accessibility, or product review.
development
Guides topic-level understanding verification for a PR, branch, feature, document, spec, design decision, bug fix, or other concrete subject. Use when the user asks to confirm, quiz, drill, teach-and-check, or verify that they understand a topic. Maintains a topic-specific checklist artifact and requires demonstrated understanding before marking the topic complete. Not for ordinary explanations without verification, end-of-session summaries, or code/test correctness checks.
testing
Design a CI/CD pipeline with quality gates, a <10-minute budget, feature-flag lifecycle, and an exit checklist. Use when adding a new CI pipeline, changing gate configuration, or planning a rollout for a new service. Complementary to kramme:pr:fix-ci (which fixes failures in an existing pipeline). Covers gate ordering, secrets storage, branch protection, rollback mechanism, and staged-rollout guardrails — not a rollout-execution runbook.
tools
--- name: kramme:visual:demo-reel description: Capture local demo evidence for observable product behavior: screenshots, before/after image sets, browser reels, terminal recordings, and short GIF/video proof. Use when shipping UI changes, CLI features, or any change where PR reviewers would benefit from visual or behavioral evidence. argument-hint: "[what to capture] [--url <url>|auto] [--tier static|before-after|browser-reel|terminal-recording]" disable-model-invocation: true user-invocable: tr