| name | user-spec-planning |
| description | Creates user-spec.md through adaptive interview, codebase research, and three-lane validation.
Use when: "сделай юзер спек", "проведи интервью для юзер спека",
"создай юзерспек", "user spec", "detailed planning", "хочу продумать фичу",
"опиши требования к фиче", "сделай описание фичи", "/new-user-spec"
|
User Spec Planning
Thorough adaptive interview → codebase research → completeness review → user-spec.md → three-lane
validation → user approval. Output: work/{feature}/user-spec.md with status approved.
Interview Style
Conduct the interview in the language the user writes in. Be an engaged co-thinker: propose
solutions, challenge weak answers with concrete examples or code evidence, and keep interviewing
until the applicable requirements are understood.
- Ask 3–4 questions per batch and run as many batches as needed.
- Save every question and answer verbatim after each user response.
- Give one substantive challenge to a weak or unclear answer, then accept a supported answer and
move to the next gap.
- When the user does not know, offer concrete options or break a required question down. An
optional detail may remain an acknowledged limitation; a required detail may not remain TBD.
- Record material choices, rejected alternatives, and reasons in the relevant topic summary so
they survive into
Accepted Decisions.
When Project Knowledge exists, read its SKILL.md as the router and load only the references
relevant to the task. Missing Project Knowledge does not block planning.
Workflow
1. Start or Resume
If the user explicitly asks to continue an existing user spec and provides its feature folder or
slug:
-
Use that exact work/{feature} directory. Do not search for other interviews.
-
Read logs/userspec/interview.yml and the existing feature artifacts. Treat any additions or
changes in the current request as interview input.
-
Derive the next action from the interview and artifacts:
- continue with the earliest required topic below 85% or with an unresolved gap;
- once the general task is understood, create
code-research.md if it does not exist, then use
it for the remaining questions;
- when all required topics are complete and no substantive draft exists, run the completeness
review;
- when a filled draft already exists, validate it again with fresh reviewers rather than trying
to restore old reviewer responses.
Otherwise start a new spec:
- Use the current request as the initial task description. If the intended work is not described,
ask the user what they want to plan. Infer
feature, bug, or refactoring.
- Choose a kebab-case slug and tell the user which
work/{slug} folder will be used. Do not pause
only to confirm the slug.
- If that exact folder already contains prior user-spec work, ask whether to continue that work in
the same folder or create the new spec under another slug. If the user chooses the existing
folder, follow the resume path above. Never overwrite prior work implicitly.
- Resolve the directory of this loaded
user-spec-planning skill, then from the target project
root run its scripts/init-feature-folder.sh with {slug}. Initialize the interview metadata
with the start time, last-update time, and in_progress status, then begin the interview.
If at any point the request appears to contain several independently valuable outcomes, explain
the proposed split and ask the user whether to separate them. Only after the user agrees, read and
apply splitting-user-specs.md. Otherwise do not read that
reference and continue the normal workflow.
2. Interview and Research
- Score the initial description against every interview topic.
- Complete the general-understanding topics using the interview loop below.
- Once the intended outcome is clear enough to research, launch
code-researcher with the
feature path and description. Read code-research.md and use its evidence in later questions.
- Complete user-flow and integration topics, including applicable failures, edge cases,
constraints, deployment, manual user actions, and verification.
- Make a final pass over every remaining required gap. If a later answer exposes a factual code
gap, run focused code research again.
Testing depth follows behavior and risk. Record concrete observable checks and the smallest
reliable unit, integration, E2E, build, lint, render, smoke, or manual boundary that can reproduce
each applicable risk.
Do not survey hypothetical edge cases. When research or review establishes one concrete rare or
unagreed scenario, ask whether the feature should support it before adding requirements. Record the
question and answer in conversation_history and update the relevant topic's score, value, and
gaps. If accepted, add the behavior to the requirements and acceptance criteria; if declined,
record it as an explicit limitation or out-of-scope decision.
3. Check Interview Completeness
Launch a fresh interview-completeness-checker with the feature path and intended scope. It reads
the interview, code research, and relevant Project Knowledge and returns the common reviewer JSON
directly.
Review findings are diagnoses, not a work queue. Check the evidence and exact response. Apply only
an authorized local correction to agreed requirements. For user_decision_required: true, ask one
concrete question and record the answer through the existing interview loop before changing
artifacts or adding requirements. A false value does not replace this check.
Use supported findings to ask targeted questions for gaps inside the agreed task. Run a fresh
checker after the answers are recorded, and draft only after it returns clean.
4. Draft the User Spec
Fill the initialized work/{feature}/user-spec.md in place without replacing a substantive
existing document. Preserve its executor instruction and replace every placeholder.
Keep the template-provided scaffold in English; write the specification content in the user's
language.
What We Are Building is self-contained without the interview.
Why states concrete user value.
- Acceptance criteria describe observable, testable results.
- Include agreed outcomes, constraints, material decisions, testing, and acknowledged
limitations; omit exploratory tangents that do not clarify a decision.
Commit: draft(userspec): create user-spec for {feature}.
5. Validate the User Spec
For every validation round, launch all three fresh reviewers in parallel:
userspec-quality-validator — document completeness, clarity, acceptance criteria,
contradictions, and template compliance;
userspec-adequacy-validator — feasibility, proportionality, architecture fit, insufficient or
unnecessary complexity, and demonstrably simpler existing approaches;
skeptic — factual claims about current files, symbols, dependencies, integrations, and
behavior.
Supply the complete inputs required by each agent. All reviewers may inspect code; overlap is
acceptable when independently supported evidence falls within more than one lane.
Deduplicate overlapping supported findings and apply accepted corrections. User-spec decisions
remain with the user. For a demonstrated finding with user_decision_required: true, ask the user
and record the answer through the existing interview loop before changing the specification.
- If all three results are
clean, validation ends immediately.
- If accepted findings were fixed after rounds 1 or 2, commit
chore(userspec): validation round {N} — {summary} and launch the next full round.
- After round 3, stop and show any remaining findings. Do not launch round 4 without a new explicit
user request.
If a session ends after drafting, a later run starts a new validation from round 1; old reviewer
responses are not persisted or reconstructed.
6. Obtain Approval
Show the user the spec path and validation summary. A requested content change returns the document
to validation; immediate approval is valid only when the validated content did not change.
After explicit approval:
- Set the user-spec frontmatter status to
approved.
- Set
interview_metadata.status to completed.
- Commit
chore(userspec): approve user-spec for {feature}.
- Return the absolute user-spec path and tell the user it can be implemented in a new chat.
Interview Loop
Repeat inside the current topic group:
- Find required topics below 85% or with a missing substantive answer or unresolved gap.
- Ask 3–4 questions about different gaps, using Project Knowledge and code evidence when
available.
- After the user responds, append the full question batch and answer to
conversation_history.
- Update each affected topic's
score, value, and gaps, plus
interview_metadata.last_updated, and save immediately.
- Continue until every required topic in scope has score ≥85%, a substantive value, no TBD, and
no unresolved gap except an explicitly accepted limitation.
Use scores as a compact completeness signal: detailed 80–95%, brief 50–70%, vague 20–40%, and not
mentioned 0%. Optional topics are covered when the task makes them relevant.
For bugs, emphasize reproduction, expected versus actual behavior, severity, root cause, and
regression risk. For refactoring, emphasize the current problem, target structure, compatibility,
migration, and stability guarantees.