jtbd-interview-agent
π‘ Summary
An AI-powered agent that conducts JTBD interviews using Bob Moesta's methodology.
π― Target Audience
π€ AI Roast: βThe project requires an Anthropic API key, which poses a risk if exposed. Ensure the key is stored securely in environment variables or a .env file to mitigate unauthorized access.β
The project requires an Anthropic API key, which poses a risk if exposed. Ensure the key is stored securely in environment variables or a .env file to mitigate unauthorized access.
JTBD Interview Agent
An AI-powered interview agent that conducts Jobs to Be Done (JTBD) interviews following Bob Moesta's methodology. Built with the Claude Agent SDK and React, featuring Skills integration for Bob Moesta's interview techniques.
Features
- Bob Moesta Interview Style: Uses the five core techniques (Context, Contrast, Unpacking, Energy, Analogies)
- Timeline Building: Automatically tracks the decision journey from first thought to first use
- Forces of Progress: Maps push, pull, anxiety, and habit forces that drive decisions
- Diet/Lifestyle Inquiry: Captures media consumption, professional networks, and physical touchpoints
- Real-time Visualization: See timeline, forces diagram, and insights as they're captured
- Model Selection: Choose between Claude Sonnet, Opus, or Haiku for interviews
- Admin Panel: View, search, and manage past interviews
- Interview Reports: Generate formatted reports with job statements and key insights
- Export to JSON/Markdown: Save complete interview data for analysis
Project Structure
jtbd-interview-agent/
βββ .claude/
β βββ skills/
β βββ bob-moesta-advisor/ # Bob Moesta JTBD interview skill
β βββ SKILL.md # Skill definition and methodology
β βββ assets/ # Skill assets
β βββ references/ # Framework references
β
βββ packages/
β βββ agent/ # TypeScript agent using Claude Agent SDK
β β βββ src/
β β β βββ interviewer.ts # Main interview agent class
β β β βββ prompts/ # System prompts & interview scripts
β β β βββ tools/ # Custom interview tools
β β β βββ types/ # TypeScript type definitions
β β β βββ server.ts # HTTP API server
β β β βββ storage.ts # Interview persistence
β β β βββ cli.ts # Command-line interface
β β βββ package.json
β β
β βββ web/ # React frontend
β βββ src/
β β βββ components/ # UI components
β β β βββ admin/ # Admin panel components
β β βββ pages/ # Page components
β β βββ hooks/ # React hooks
β β βββ types/ # Frontend types
β βββ package.json
β
βββ data/ # Interview storage
β βββ interviews/ # Saved interview JSON files
β
βββ package.json # Monorepo root
βββ README.md
Skills Integration
This project uses the Claude Agent SDK (@anthropic-ai/claude-agent-sdk) with Skills support for Bob Moesta's JTBD interview methodology.
How It Works
The agent uses the SDK's query() function with Skills configuration:
import { query } from '@anthropic-ai/claude-agent-sdk'; for await (const message of query({ prompt, options: { model: 'claude-sonnet-4-20250514', cwd: PROJECT_ROOT, settingSources: ['user', 'project'], // Load Skills allowedTools: ['Skill', 'Read'], permissionMode: 'bypassPermissions' } }))
Configuration Options
| Option | Description |
|--------|-------------|
| settingSources | Where to load Skills from: user (~/.claude/skills/), project (.claude/skills/) |
| allowedTools | Tools the agent can use. Include Skill to enable Skills |
| permissionMode | Set to bypassPermissions for server/non-interactive use |
| cwd | Working directory for project Skills discovery |
The bob-moesta-advisor Skill
Located in .claude/skills/bob-moesta-advisor/, this skill provides:
- SKILL.md - Core skill definition with Bob Moesta's methodology
- references/frameworks.md - JTBD theory, Forces of Progress, Five Skills of Innovators
- references/interview-method.md - Interview techniques and timeline building
- references/mattress-interview.md - Example interview transcript
The skill teaches the agent to:
- Use the "empty vessel" interview approach
- Apply the five techniques: Context, Contrast, Unpacking, Energy, Analogies
- Build decision timelines backward from purchase
- Map Forces of Progress (push, pull, anxiety, habit)
- Capture the Information Diet for customer discovery
Getting Started
Prerequisites
- Node.js v18+ (Download)
- npm (included with Node.js)
- Anthropic API key (Get one here)
Installation
-
Clone the repository
git clone <repo-url> cd jtbd-interview-agent -
Install dependencies
npm install -
Set up environment
Create a
.envfile in the project root:echo "ANTHROPIC_API_KEY=your-api-key-here" > .envOr export directly (for current session only):
export ANTHROPIC_API_KEY=your-api-key-here -
Build the packages
npm run build -
Verify installation
# Check the build succeeded ls packages/agent/dist/ # Should see: cli.js, server.js, interviewer.js, etc.
Running the CLI
# Build the agent (if not already built) npm run build:agent # Run CLI interview node packages/agent/dist/cli.js
Running the Web Interface
Terminal 1: Start the API server
cd packages/agent npm run start # Server runs at http://localhost:3001
Terminal 2: Start the web frontend
cd packages/web npm run dev # Frontend runs at http://localhost:3000
Open http://localhost:3000 in your browser.
Troubleshooting
| Issue | Solution |
|-------|----------|
| ANTHROPIC_API_KEY not found | Ensure the API key is exported or in .env file |
| Skills not loading | Verify .claude/skills/ directory exists in project root |
| Port 3001 in use | Change port: PORT=3002 npm run start |
| TypeScript errors | Run npm run typecheck to see detailed errors |
| Module not found | Run npm install then npm run build |
Pages
Interview Page (/)
Conduct new JTBD interviews with the following features:
- Configure interview context and interviewee name
- Select Claude model (Sonnet, Opus, or Haiku)
- Real-time chat interface with the AI interviewer
- Live visualization of timeline, forces, and diet profile
- Export interview data
Admin Panel (/admin)
View and manage past interviews:
- Interview List: Browse all saved interviews with search and filters
- Interview Detail: View full conversation, timeline, forces, diet profile, and insights
- Reports: Generate formatted markdown reports with job statements and recommendations
- Delete interviews no longer needed
Model Selection
Choose the Claude model that best fits your needs:
| Model | Model ID | Best For |
|-------|----------|----------|
| Claude Sonnet 4 | claude-sonnet-4-20250514 | Most interviews (Recommended) |
| Claude Opus 4 | claude-opus-4-20250514 | Complex or sensitive interviews |
| Claude Haiku 3.5 | claude-3-5-haiku-20241022 | Quick interviews, testing |
Interview Flow
Phase 1: Warm-up
Build rapport and explain the interview purpose.
Phase 2: Decision Deep-Dive
Explore a recent purchase/decision with timeline questions:
- When did you first think about this?
- What triggered your search?
- How did you research options?
- What made you decide?
Phase 3: Forces Mapping
Identify the four forces of progress:
- Push: What wasn't working?
- Pull: What attracted you?
- Anxiety: What almost stopped you?
- Habit: What kept you comfortable?
Phase 4: Diet Inquiry
Capture information about how to reach similar customers:
- Media consumption (podcasts, newsletters, social)
- Professional networks (Slack, conferences, associations)
- Physical touchpoints (coffee shops, gyms, commute)
- Trusted sources and discovery channels
Phase 5: Synthesis
Generate job statement and validate understanding.
API Endpoints
Interview Endpoints
| Endpoint | Method | Description |
|----------|--------|-------------|
| /api/interview/start | POST | Start a new interview |
| /api/interview/message | POST | Send a message in an interview |
| /api/interview/end | POST | End and save interview |
| /api/interview/data/:sessionId | GET | Get interview data |
| /api/interview/export/:sessionId | GET | Export as JSON |
| /api/models | GET | Get available Claude models |
| /api/health | GET | Health check |
Admin Endpoints
| Endpoint | Method | Description |
|----------|--------|-------------|
| /api/admin/interviews | GET | List all saved interviews |
| /api/admin/interviews/:id | GET | Get interview details |
| /api/admin/interviews/:id | DELETE | Delete an interview |
| /api/admin/interviews/:id/report | GET | Generate interview report |
Output Format
The interview generates structured data:
{ "interviewee": { "name": "", "context": "" }, "timeline": [ { "phase": "first_thought", "date": "", "details": "" }, { "phase": "trigger", "trigger": "", "details": "" } ], "forces": { "push": [{ "description": "", "intensity": 8 }], "pull": [{ "description": "", "intensity": 7 }], "anxiety": [{ "description": "", "intensity": 5 }], "habit": [{ "description": "", "intensity": 4 }] }, "dietProfile": { "mediaConsumption": { "podcasts": [], "newsletters": [] }, "professionalNetworks": [], "physicalTouchpoints": [], "trustedSources": [] }, "jobStatement": "When I [situation], I want [motivation], so I can [outcome]", "insights": [], "verbatimQuotes": [] }
Report Format
Generated reports include:
- Interview metadata (date, interviewee, model used)
- Job statement
- Struggling moment
- Decision timeline with context
- Forces of progress analysis
- Information diet summary
- Key quotes and insights
- Conversation summary
Key Interview Questions
Struggling Moment
- "What wasn't working?"
- "What were you putting up with?"
- "What finally pushed you over the edge?"
Timeline Building
Pros
- Utilizes proven JTBD methodology.
- Real-time visualization of insights.
- Generates structured interview reports.
Cons
- Requires Anthropic API key.
- Setup can be complex for beginners.
- Dependent on external SDK.
Related Skills
agno
SβIt promises to be the Kubernetes for agents, but let's see if developers have the patience to learn yet another orchestration layer.β
mcp-builder
SβThis guide is so comprehensive it might just teach the AI to write its own MCP servers and put you out of a job.β
japanese-webdesign
AβPowerful, but the setup might scare off the impatient.β
Disclaimer: This content is sourced from GitHub open source projects for display and rating purposes only.
Copyright belongs to the original author tekelala.
