A set of AI-assistant skills for product discovery, combining User Story Mapping (Patton), Opportunity Solution Trees (Torres), and Hypothesis-Driven Development (Klein).
No Python dependency — jeff is a collection of skill files that plug directly into Claude Code, Cursor, or any AI assistant that reads markdown context.
git clone https://github.com/BJClark/jeff ~/tools/jeff
claude --plugin-dir ~/tools/jeffThis loads jeff as a plugin — all /jeff:* commands are available immediately.
git clone https://github.com/BJClark/jeff ~/tools/jeff
cd ~/tools/jeff && ./install.sh --claude --globalThis copies skill files to ~/.claude/commands/ so they're available in every Claude Code session.
# Claude Code (local to this project)
~/tools/jeff/install.sh --claude --local
# Cursor (local to this project)
~/tools/jeff/install.sh --cursor --local
# Both
~/tools/jeff/install.sh --all --local~/tools/jeff/install.sh --cursor --globalThis creates ~/.cursor/rules/jeff.mdc so jeff context is available in every Cursor project.
./install.sh --uninstall --claude --global
./install.sh --uninstall --cursor --global| Command | What it does |
|---|---|
/jeff:init |
Scaffold .jeff/ directory with artifact templates |
/jeff:map |
Create or update the user story map (backbone, skeleton, ribs) |
/jeff:opportunity |
Build an Opportunity Solution Tree |
/jeff:hypothesis |
Create and track testable hypotheses |
/jeff:research interview |
Capture a user interview |
/jeff:research insight |
Synthesize insights across research |
/jeff:bdd |
Generate BDD-style tasks with acceptance criteria |
/jeff:issues |
Generate GitHub issues from artifacts |
/jeff:help |
Show the command reference and workflow overview |
┌─────────────────────────────────────────────────────────────────────────┐
│ PRODUCT DISCOVERY │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ 1. INITIALIZE │
│ /jeff:init │
│ └── Creates .jeff/ directory with artifact templates │
│ │
│ 2. MAP THE USER JOURNEY │
│ /jeff:map │
│ └── Build the story map: backbone → walking skeleton → ribs │
│ Output: .jeff/STORY_MAP.md │
│ │
│ 3. IDENTIFY OPPORTUNITIES │
│ /jeff:opportunity │
│ └── Create Opportunity Solution Tree from research │
│ outcome → opportunities → solutions → experiments │
│ Output: .jeff/OPPORTUNITIES.md │
│ │
│ 4. FORM HYPOTHESES │
│ /jeff:hypothesis │
│ └── Convert risky assumptions into testable hypotheses │
│ Output: .jeff/HYPOTHESES.md │
│ │
│ 5. CAPTURE RESEARCH (ongoing) │
│ /jeff:research interview → Document user interviews │
│ /jeff:research insight → Extract patterns into insights │
│ Output: .jeff/research/ │
│ │
│ 6. GENERATE IMPLEMENTATION TASKS │
│ /jeff:issues → GitHub issues from artifacts │
│ /jeff:bdd → BDD-style tasks with acceptance criteria│
│ Output: .jeff/issues/ or .jeff/TASKS.md │
│ │
└─────────────────────────────────────────────────────────────────────────┘
- Start a new project:
/jeff:initscaffolds.jeff/with templates - Define the user journey:
/jeff:mapwalks you through backbone, walking skeleton, ribs - Dig into opportunities:
/jeff:researchto capture interviews, then/jeff:opportunityto build the OST - Identify risks:
/jeff:hypothesisto surface and plan validation for assumptions - Build: When ready to implement,
/jeff:issuesfor GitHub issues or/jeff:bddfor tasks with acceptance criteria
Each artifact builds on the previous ones — the story map informs opportunities, opportunities inform hypotheses, and all three feed into issue generation.
After /jeff:init, your project will have:
.jeff/
├── config.yaml # Project settings
├── STORY_MAP.md # Backbone, walking skeleton, ribs
├── OPPORTUNITIES.md # OST: outcome → opportunities → solutions
├── HYPOTHESES.md # Assumptions, metrics, validation plans
├── TASKS.md # BDD tasks with acceptance criteria
├── research/
│ ├── USER_INTERVIEWS.md # Individual interview notes
│ ├── INSIGHTS.md # Synthesized patterns
│ └── VALIDATION_RESULTS.md # Experiment outcomes
└── issues/ # Generated issue drafts