Use when defining project vision and strategic direction. Triggers: 'why this project', 'define vision', 'project goals', 'what are we building'.
Purpose: Create a strategic overview that answers: Who is this for? What problem does it solve? Where are we? Where are we going? How are we getting there? What are we NOT building?
What it does: Collects core vision inputs, generates .shipkit/why.json, provides strategic context for all future sessions.
Protocol: This skill follows the canonical elicitation protocol defined in install/shared/references/elicitation-protocol.md. The steps below are this skill's specific application of that protocol.
User triggers:
Auto-suggested: Session start if why.json doesn't exist (via shipkit-session-start.py)
None - This can be the first skill you run (even before shipkit-project-context)
Recommended order:
/shipkit-why-project - Define strategic vision/shipkit-stage - Set project stage, constraints, and business metrics/shipkit-product-discovery - Define personas & user needs/shipkit-product-definition - Design solution blueprint/shipkit-product-goals - Define user-outcome success criteria (P-*)Before checking elicitation state, attempt a context-based shortcut:
README.md, package.json (name, description, keywords), existing source files, any .shipkit/*.json files.why.json proposal based on what you found.stage.json (via /shipkit-stage)..shipkit/why.json directly and skip to Step 6 (confirm to user)..shipkit/why.json if it exists..shipkit/reviews/direction-assessment.json if present. If the latest review lists a gap against this artifact, archive the existing file to .shipkit/.archive/why.YYYY-MM-DD.json and regenerate addressing the gap. Otherwise, exit early with a "no changes needed" report — the reviewer already accepted it.Read .shipkit/elicitation/why-project/answers.md.
Classify each A: line as real or placeholder:
[awaiting answer], empty string, literal A: with nothing after.Then:
targetUsers, problem, currentState, vision, approach): synthesize .shipkit/why.json from those answers per the schema in Step 5. Update progress.json with status: complete, set completed_at and last_elicited_at to current ISO 8601 UTC timestamp. Skip to Step 6. Do NOT overwrite answers.md — the user's input is preserved as-is.answers.md — append a new turn header to the existing file for the unanswered questions only.answers.md in Step 4 since no real content exists.Produce questions for the current turn. Two-turn split (recommended):
Turn 1 — core foundation (Q1–Q3):
targetUsersproblemcurrentStateTurn 2 — direction + optional (Q4–Q5 + optional):
4. "What does success look like? What's the vision?" → vision
5. "What's the approach? How are we getting there?" → approach
6. (Optional) "What are the measurable success criteria? (or skip)" → successCriteria
7. (Optional) "Any enduring constraints? (e.g., must run on mobile, no paid APIs — or skip)" → constraints
8. (Optional) "What are we explicitly NOT building? (or skip)" → nonGoals
Note on constraints: Capture only enduring project-level constraints here. Stage-specific constraints like "AU curriculum only for POC" belong in
stage.json.
For optional fields (Q6–Q8): if the user skips, set the corresponding field to an empty array [].
One-turn mode is also acceptable for pilot: ask all 8 questions in a single turn if context suggests the user prefers a direct Q&A session.
Write the following files. All timestamps ISO 8601 UTC.
.shipkit/elicitation/why-project/questions.md — overwrite with current turn's questions using the schema from install/shared/references/elicitation-protocol.md:
---