Shipkit product definition
Skill stefan-stepzero/shipkit/install/skills/shipkit-product-definition
Shipkit — AI-assisted product development framework for Claude Code. Skills, agents, and workflows for shipping MVPs fast.
npx -y skills add stefan-stepzero/shipkit --skill shipkit-product-definitionAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Define what to build — features, UX patterns, and differentiators that solve discovered user needs. Triggers: 'product definition', 'what to build', 'features', 'solution design'.
SKILL.md
18.0 KB, as published. Nobody here has run it
shipkit-product-definition — Product Blueprint
Defines WHAT we build to solve discovered user needs. Reads product-discovery.json (pain points, personas, opportunities) and produces a product blueprint: features, UX patterns, differentiators, and the app's essence — its non-negotiable differentiators and interaction/quality bar captured as testable assertions a later eval can score a build against.
This is the product blueprint — it defines the user-facing solution. The technical approach (mechanisms, design decisions, stack) is handled by /shipkit-engineering-definition. Feature phasing (what to build now vs. later) is handled by /shipkit-product-goals through stage gates.
When to Invoke
User triggers:
- "What should we build?", "Define features", "Product definition"
- "UX patterns", "Differentiators", "What to build"
- "Solution design", "Product blueprint"
Workflow position:
- After
/shipkit-product-discovery(needs discovered user needs) - Before
/shipkit-engineering-definition(engineering designs mechanisms for these features) - Before
/shipkit-product-goals(goals derive criteria from features and mechanisms)
Prerequisites
Required (fail gracefully if missing):
.shipkit/product-discovery.json— who the users are and what they need
Recommended (enrich the proposal):
.shipkit/why.json— project purpose and vision.shipkit/goals/strategic.json— project stage and constraints
Optional (for existing projects):
.shipkit/stack.json— technology constraints (informs feasibility).shipkit/codebase-index.json— what already exists
If product-discovery.json is missing, tell the user: "Run /shipkit-product-discovery first — I need to understand user needs before designing a solution." and stop.
Process
Completion Tracking
After reading context, create tasks:
TaskCreate: "Define features mapped to pain points"TaskCreate: "Define 2-4 UX patterns with rationale"TaskCreate: "Capture essence — 3-5 non-negotiable differentiators as testable assertions"TaskCreate: "Capture the interaction/quality bar as testable assertions"TaskCreate: "Write product-definition.json"
TaskUpdate each task to in_progress when starting it, completed when done.
In propose mode (Step 0c), still verify all sections are populated — features, patterns, differentiators, AND the essence block (differentiator assertions + quality bar). A file with only features is incomplete.
Step 0: Check for Existing File
Fork context — no user prompts. You are dispatched in a fork and have no user channel. Skip the file-exists menu entirely.
- Check if
.shipkit/product-definition.jsonexists - If exists: read
.shipkit/reviews/direction-assessment.jsonif present. If the latest review lists a gap against this artifact, archive the existing file to.shipkit/.archive/product-definition.YYYY-MM-DD.jsonand regenerate addressing the gap. Otherwise, read the existing file and exit early with a "no changes needed" report — the reviewer already accepted it. - If no file exists: proceed to Step 0c (propose mode).
Step 0c: Propose Mode (Context-Driven)
If .shipkit/product-discovery.json exists, attempt to propose a solution without asking:
- Read
.shipkit/product-discovery.json(pain points, personas, opportunities) - Read
.shipkit/why.jsonif exists (vision, constraints) 2b. Read.shipkit/goals/strategic.jsonif exists (stage) - For each major pain point, propose features that address it
- For each feature, identify UX patterns that support it
- Present the proposal as a Problem → Feature → UX flow:
Based on discovered user needs, here's a proposed product:
Pain: [pain point from discovery]
→ Feature: [what users interact with]
→ UX: [how they experience it]
Pain: [another pain point]
→ Feature: [user-facing capability]
→ UX: [interaction pattern]
Differentiators: [what makes this unique]
- Write
product-definition.jsondirectly and present a summary - The orchestrator's review cycle will catch issues — no confirmation needed
If .shipkit/product-discovery.json does NOT exist → fail with message to run discovery first.
Step 1: Gather Context
Read these files:
.shipkit/product-discovery.json → pain points, personas, opportunities (REQUIRED)
.shipkit/why.json → vision, stage, constraints (RECOMMENDED)
.shipkit/stack.json → tech capabilities (OPTIONAL — feasibility check)
Multi-user detection: If discovery has 2+ personas with distinct primaryIntent values, this is a multi-user product. Flag this upfront and ensure each feature explicitly maps to the persona(s) it serves via addressesNeeds tracing back through pain points.
Step 2: Define Features
For each major user need/pain point from discovery, define features:
Fork context — no user prompts. If upstream context is insufficient to propose features for a pain point, return a gaps_found status pointing at the missing input (product-discovery.json, why.json, etc.) and exit. The orchestrator reviewer will trigger a re-dispatch after upstream is fixed.
For each feature:
- Name — concise feature name
- Description — 1-2 sentences on what it does from the user's perspective
- Addresses needs — which pain point IDs from discovery
- Dependencies — which other feature IDs must exist first
Feature count guidance:
- POC: 2-3 features
- MVP: 3-6 features
- Growth: 5-10 features
Note: Feature phasing (now/next/later) is handled by /shipkit-product-goals through stage gates. This skill defines WHAT exists, not WHEN it ships.
Step 3: Define UX Patterns
Based on the features, identify the key interaction patterns:
header: "UX Patterns"
question: "How should users interact with [feature]?"
options:
- label: "[Proposed pattern]"
description: "[Why this pattern fits]"
- label: "Different pattern"
description: "I have another UX approach in mind"
For each pattern, capture:
- Name — pattern name (e.g., "wizard flow", "live preview", "progressive disclosure")
- Description — how users experience it
- Used in — which features will use this pattern
- Rationale — why this pattern over alternatives
Aim for 2-4 patterns. Patterns can be shared across features.
Step 4: Capture Essence — Differentiators as Testable Assertions
This is the part a downstream eval scores. A built app is faithful when it ships this product's essence — its differentiators and quality bar — not the training-median generic. So capture the essence as checkable criteria, not prose: each item must be a statement an evaluator could hold a built screen or behaviour to and answer yes / no / partially.
Based on features and UX patterns, articulate what makes this product unique:
- What do competitors do differently?
- What combination of features/patterns creates unique value?
- What would be hard to replicate?
Capture 3-5 non-negotiable differentiators. For each, write BOTH:
statement— the human claim (what makes this unique).assertion— the testable form: a concrete, checkable claim about the built product. Mark the essence-floor onesnonNegotiable: true.
Making an assertion checkable — the assertion must name an observable fact, not a feeling. Transform vague → checkable:
| Vague (not scorable) | Checkable assertion (scorable) |
|---|---|
| "Adaptive difficulty is our edge" | "One creation flow produces exactly three difficulty variants (below-level / on-level / advanced) of the same worksheet without re-entering the topic — countable from a single flow." |
| "Standards alignment sets us apart" | "Every generated worksheet displays the specific curriculum standard IDs it targets; no worksheet ships with an empty or generic standards field." |
Tie each differentiator to the features/patterns that enabledBy it, as before.
Step 4b: Capture the Interaction / Quality Bar
The quality bar is the taste half of essence — the interaction and product-quality standard this
app holds itself to, phrased so a reviewer can score any screen against it. Capture 3-6 quality-bar
assertions, each with a dimension (e.g. interaction, feedback, empty-state, error,
performance, accessibility, content) and the surfaces it appliesTo.
Reference, don't duplicate, the design system. /shipkit-design-system owns aesthetic direction
(tokens, colour, type, principles). The quality bar here is the product/interaction standard a build
is scored against — behavioural, not palette. If a design principle implies a checkable behaviour,
restate it as an assertion (don't re-list tokens).
Worked examples (note the shape — observable, binary-checkable, no "feels good"):
interaction: "Every list/table view supports keyboard-only navigation — tab to move, enter to open; no primary action requires a mouse."empty-state: "Every empty state names the next action and links to it — no screen renders blank or a bare 'No data'."performance: "Preview streams its first content within 2s of any parameter change; the user never sees a blank spinner for longer than 2s."
Avoid unscorable words ("clean", "modern", "intuitive", "seamless") unless paired with a measurable spec — same discipline as the design system's banned-words rule.
Step 5: Present Blueprint and Confirm
Present the full product blueprint:
View 1: Product Design
## Product Blueprint: [Product Name]
### Problem Space
[Summary from discovery — key pain points and personas]
### Features (ordered by dependency)
1. F-001: [Name] — [description]
Addresses: [pain points]
2. F-002: [Name] — [description]
### UX Patterns
1. P-001: [Name] — [description]
2. P-002: [Name] — [description]
### Essence — Differentiators (non-negotiable, testable)
- D-001: [statement] (enabled by F-001 + P-002)
assertion: [checkable form an eval scores the build against]
### Essence — Quality Bar
- Q-001 [dimension]: [testable assertion] (applies to F-001)
View 2: Feature Map
### Feature → UX Pattern Map
F-001: [Name] — patterns: P-001 | deps: none | addresses: pain-1
F-002: [Name] — patterns: P-001, P-002 | deps: F-001 | addresses: pain-2
F-003: [Name] — patterns: P-003 | deps: F-002 | addresses: pain-1, pain-3
Fork context — do not prompt for confirmation. Write the blueprint directly. The direction reviewer will flag any misalignment on the next review cycle.
Step 6: Write Product Definition
After confirmation, write .shipkit/product-definition.json.
See Product Definition JSON Schema below.
Step 7: Suggest Next Steps
Product blueprint written to .shipkit/product-definition.json
Features: {N} | Patterns: {N} | Differentiators: {N} | Quality-bar assertions: {N}
Next:
1. /shipkit-engineering-definition — Design the technical approach for these features
2. /shipkit-product-goals — Define success criteria (after engineering definition)
3. /shipkit-spec — Create specs for features (after goals)
Ready to design the engineering approach?
Product Definition JSON Schema (Quick Reference)
{
"$schema": "shipkit-artifact",
"type": "product-definition",
"version": "3.0",
"lastUpdated": "ISO timestamp",
"source": "shipkit-product-definition",
"product": {
"name": "Product name",
"vision": "One-line from why.json",
"stage": "poc|mvp|production|scale"
},
"problemSpace": {
"summary": "Brief summary of discovered user needs",
"keyPainPoints": ["pain-1"],
"primaryPersona": "persona-1",
"personaIntents": {
"persona-1": "Their primaryIntent from discovery",
"persona-2": "Their primaryIntent (multi-user apps only)"
}
},
"solutionApproach": "High-level product approach to addressing discovered needs",
"features": [
{
"id": "F-001",
"name": "Feature name",
"description": "What it does from user's perspective",
"addressesNeeds": ["pain-1"],
"patterns": ["P-001"],
"dependencies": []
}
],
"uxPatterns": [
{
"id": "P-001",
"name": "Pattern name",
"description": "How users interact with this",
"usedIn": ["F-001"],
"rationale": "Why this pattern"
}
],
"differentiators": [
{
"id": "D-001",
"statement": "What makes this unique",
"assertion": "The testable form — a checkable claim about the built product",
"nonNegotiable": true,
"enabledBy": ["F-001", "P-001"]
}
],
"qualityBar": [
{
"id": "Q-001",
"dimension": "interaction|feedback|empty-state|error|performance|accessibility|content",
"assertion": "Testable interaction/quality standard the build is scored against",
"appliesTo": ["F-001"]
}
],
"summary": {
"totalFeatures": 0,
"totalPatterns": 0,
"totalDifferentiators": 0,
"totalQualityBar": 0
}
}
The essence block an eval scores (Phase 3 fidelity) = the differentiators[] items marked
nonNegotiable: true (via each assertion) + every qualityBar[] assertion.
Full schema reference: See references/output-schema.md
Realistic example: See references/example.json
Graph Relationships
The ID-based cross-references enable these graph traversals:
- Feature -> Pain Points:
features[].addressesNeedsreferencespainPoints[].idfrom product-discovery.json - Feature -> Patterns:
features[].patternsreferencesuxPatterns[].id - UX Pattern -> Features:
uxPatterns[].usedInreferencesfeatures[].id - Differentiator -> Features/Patterns:
differentiators[].enabledByreferences feature and pattern IDs - Quality Bar -> Features:
qualityBar[].appliesToreferencesfeatures[].id(or is empty for app-wide bars)
When $ARGUMENTS is Provided
If $ARGUMENTS contains text:
- Product name/description: Use as seed for product name and to focus the proposal
--refresh: Start fresh even if product-definition.json exists
When This Skill Integrates with Others
Before This Skill
| Skill | Why |
|---|---|
shipkit-why-project | Produces why.json — project purpose and stage |
shipkit-product-discovery | Produces product-discovery.json — required input (user needs) |
After This Skill
| Skill | How |
|---|---|
shipkit-engineering-definition | Reads product-definition.json features — designs mechanisms for each feature |
shipkit-product-goals | Reads product-definition.json to derive criteria from features and patterns |
shipkit-spec | Reads product-definition.json features — one spec per feature |
shipkit-plan | Indirectly — plans derive from specs which come from product-definition |
Context Files This Skill Reads
| File | Purpose | If Missing |
|---|---|---|
.shipkit/product-discovery.json | User needs, pain points, personas | Route to /shipkit-product-discovery |
.shipkit/why.json | Project purpose and stage | Proceed without |
.shipkit/stack.json | Tech capabilities (feasibility check) | Proceed without |
.shipkit/codebase-index.json | Existing code for existing projects | Skip |
.shipkit/product-definition.json | Previous definition (for update mode) | Generate new |
Context Files This Skill Writes
Artifact strategy: replace — Overwrites the existing artifact file. Previous content is not preserved.
Write Strategy: OVERWRITE
| File | When |
|---|---|
.shipkit/product-definition.json | Created on first run, updated on subsequent runs |
Archive location (if replacing):
.shipkit/archive/product-definition/product-definition.[timestamp].json
<!-- SECTION:after-completion -->
After Completion
Guardrails Check: Before moving to next task, verify:
- Persistence - Has important context been saved to
.shipkit/? - Prerequisites - Does the next action need engineering definition or goals first?
- Session length - Long session? Consider
/shipkit-work-memoryfor continuity.
Natural capabilities (no skill needed): Implementation, debugging, testing, refactoring, code documentation.
Suggest skill when: User needs to define technical approach (/shipkit-engineering-definition), define success criteria (/shipkit-product-goals), or create detailed specs (/shipkit-spec).
Success Criteria
Product blueprint is complete when:
- Product-discovery.json read and problem space summarized
- Features defined, each addressing at least one pain point
- Every major pain point addressed by at least one feature
- 2-4 UX patterns defined with rationale
- 3-5 non-negotiable differentiators tied to features/patterns
- Every differentiator has a testable
assertion(checkable, not prose); essence-floor ones markednonNegotiable: true - 3-6 quality-bar assertions, each with a
dimensionand testableassertion(no unscorable "feels good" language) - Features reference patterns by ID
- All cross-references use stable IDs (F-001, P-001, D-001, Q-001)
- Summary counts match actual array lengths
- File saved to
.shipkit/product-definition.json
Remember: This skill captures the product design — WHAT you build to solve discovered needs. The technical approach (mechanisms, components, stack) is handled by /shipkit-engineering-definition. Feature phasing (now/next/later) is handled by /shipkit-product-goals. Update the blueprint as the product evolves.