jtbd/SKILL.md
Terminal-first JTBD engine for founders and product people. Interview fast, kill jargon, capture real switching forces (Push/Pull/Habit/Anxiety), score opportunities, and export structured artifacts (JSON + one-pager + messaging angles + GTM brief). Use when the user says "help me figure out what to build", "analyze these customer reviews", "what are people actually hiring this for", "I need messaging for my product", "turn this interview into insights", "what should I prioritize", or any variation of articulating what a project does, why it matters, who it's for, or converting interview/review/transcript signal into a decision-grade brief. Also triggers on "describe my project", "JTBD", "jobs to be done", "switching forces", or "mine these reviews".
npx skillsauth add glebis/claude-skills jtbdInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Conduct a focused Jobs-to-Be-Done interview for one project and emit a decision-grade artifact bundle. The bundle contains a machine-readable jtbd.json, a shareable one-pager.md, and a messaging-angles.md derived from Switch forces. Ingest voice transcripts or review exports when available.
If the user wants a full design spec (what to build, scope, components), prefer skill-studio — it's the heavier tool. jtbd is the quick, rigorous record.
Pick one at the start. Ask the user only if ambiguous.
| Mode | Input | Output |
|---|---|---|
| Interview (default) | live conversation | full artifact bundle |
| Transcript ingest | path to a voice interview transcript | full artifact bundle + confidence flags |
| Review mining | path to reviews (CSV/JSON) | review-brief.md pre-seed → then Interview |
| Update | path to existing ~/jtbd/<slug>/jtbd.json | updated artifact bundle |
One project per session. If the user starts describing a second project, stop them: "That sounds like a separate project — let's finish this one first, then run /jtbd again for the next."
If the user drifts into implementation details, features, or tech stack: "Interesting, but let's stay at the job level — what is the person trying to accomplish?"
Stop when the core schema is confidently fillable.
The four forces are the single highest-leverage JTBD artifact. Do not skip this pass. See references/switch_forces.md for the question bank.
Before diving into individual forces, reconstruct the Switch Timeline (see references/switch_forces.md): "Walk me through the decision — when did it start?" Map the 6 moments (first thought → passive looking → active looking → deciding → consuming → ongoing use).
Probe briefly for each:
Do not fabricate. If the user genuinely doesn't know a force, mark it "unknown" and note the follow-up question in open_questions[].
Trigger when the user asks "what should I build?" or when ODI scoring is active and you need candidate outcomes.
references/job_map.md).references/odi.md.Skip this pass for quick interviews. Use it when the user needs prioritization or roadmap input.
Before drafting the JSON, score the interview output 0–2 on five dimensions. Any score <1 blocks save. Use references/granularity_fixes.md for rewrite prompts.
| Dimension | 0 (fail) | 1 (ok) | 2 (strong) | |---|---|---|---| | Actor specificity | "users" / "people" | a role | a named actor with context | | Context / trigger | "always" / none | a situation | a specific moment | | Current workaround | "nothing" / "various" | named alternative | described attempt + why it fails | | Measurable outcome | "better" / "improved" | directional metric | quantified target | | Evidence quote | none | paraphrase | verbatim quote |
If any dimension scores 0, ask one targeted follow-up question and re-score. Don't interrogate — one rewrite pass, then accept what you have and flag the weak dimensions in evidence.weaknesses[].
For deterministic scoring on ingest paths, call scripts/validate_granularity.py with the draft JSON.
Every major claim must tie to one of:
See references/jargon_blacklist.md for banned phrases and replacements. When the user or transcript says a banned phrase, reply with an evidence-demand: "What does that look like in practice?" / "Show me the last time that happened."
Do not put banned phrases in the output. If one slips through, replace with the concrete substitute from the blacklist.
{
"name": "project-slug",
"hook": "One sentence: what this is for whom, concretely.",
"jtbd": {
"situation": "When [specific context/trigger]...",
"motivation": "I want to [action/goal]...",
"outcome": "So I can [measurable result]..."
},
"problem": {
"what_hurts": "Specific pain point with evidence."
},
"needs": {
"functional": ["what it must do"],
"emotional": ["how user wants to feel"]
},
"switch_forces": {
"push": "What's frustrating about today.",
"pull": "What's attractive about the new.",
"habit": "What keeps them stuck.",
"anxiety": "What they fear about switching."
},
"outputs": ["what the project produces/delivers"],
"evidence": {
"source": "interview | voice_transcript | reviews",
"quotes": ["verbatim quotes if available"],
"weaknesses": ["dimensions that scored 0 or 1 in granularity gate"]
}
}
{
"problem": { "cost_today": "What the pain costs (time, money, stress)." },
"needs": { "social": ["relational/status needs"] },
"before_after": {
"before": "Visible + felt state before.",
"after": "Visible + felt state after."
},
"scenarios": [{ "title": "Short label", "vignette": "1-2 sentence day-in-the-life story" }],
"trigger": { "type": "manual | scheduled | event", "detail": "e.g. after every client call" },
"version": 1,
"guardrails": ["what it must NOT do"],
"odi": {
"outcomes": [
{ "statement": "Minimize the time it takes to...", "importance": 8.5, "satisfaction": 3.2, "opportunity_score": 13.8 }
]
},
"open_questions": ["follow-ups the interviewer didn't resolve"]
}
See references/odi.md for the importance/satisfaction/opportunity formula and when ODI is worth adding.
When the user provides a transcript path:
scripts/ingest_transcript.py <path> — it proposes schema field mappings with confidence flags.evidence.source = "voice_transcript" and preserve verbatim quotes in evidence.quotes.When the user provides a reviews export:
scripts/mine_reviews.py <path> — clusters reviews by pain, outcome, and workaround.review-brief.md in the output folder using templates/review-brief.md as a pre-seed.evidence.source = "reviews".See references/review_taxonomy.md for the clustering taxonomy.
When the user provides a path to an existing jtbd.json:
version field if present).Trigger when the user asks for prioritization, "what to build next," or roadmap input. Add the odi extended block.
scripts/odi_score.py to compute opportunity scores.odi.outcomes[].Only add ODI when the user has 3+ candidate outcomes — below that, skip it.
jtbd.json and show it to the user for review.~/jtbd/<project-slug>/. If it exists, ask overwrite or rename.jtbd.json — source of truth.one-pager.md — stakeholder-shareable summary (from templates/one-pager.md).messaging-angles.md — copy angles derived from Switch forces (from templates/messaging-angles.md).gtm-brief.md — positioning, channels, experiments (from templates/gtm-brief.md). Only generated when switch forces are fully captured (no "unknown" values).The jtbd.json is a contract between /jtbd and downstream agents. See references/superpowers_handoff.md for the full field mapping.
Short version: when brainstorming starts and a jtbd.json exists, it should skip the questions the JSON already answers (who, what, why, constraints) and focus on the questions it doesn't (how, architecture, scope, technical choices). Switch forces inform approach selection. Open questions become brainstorming priorities.
Chain: /jtbd → jtbd.json → brainstorm → writing-plans → implementation
After the interview, suggest: "Want to brainstorm approaches? I can feed this into superpowers with your job, forces, and needs as context."
project-slug = lowercase, hyphens, no spaces. Derive from the project name. Max 40 chars.
Direct, curious, slightly challenging. You are a product thinker helping someone sharpen their thinking — not a form to fill out. Push back on fuzzy language: "What do you mean by 'better'?" / "Better for whom?" / "Show me the last time this happened."
Never let jargon ("seamless," "delightful," "drive engagement," "empower users") into the output. Every claim must have an evidence hook.
development
Create Tufte-inspired data reports and infographic dashboards as standalone HTML files. Uses EB Garamond for text, Monaspace Argon for numbers, Chart.js for interactive charts, and inline SVG sparklines. Produces publication-quality reports with 2-column narrative+data layouts, status dashboards, scroll animations, and responsive mobile support. Use this skill whenever the user wants to create a data report, activity dashboard, infographic, personal analytics page, health tracker visualization, or any document that combines narrative text with interactive charts and tables. Also triggers for "make a report like Tufte", "create an infographic", "build a dashboard", "visualize my data", or requests for beautiful data-driven documents.
documentation
Cut a software release and maintain a tiered compatibility policy. Use when the user wants to release, ship a version, bump the version, tag a release, write a changelog, or update COMPATIBILITY. Config-driven via release.config.json; bumps version files, runs a readiness gate, updates COMPATIBILITY.md tiers and deprecations, tags (→ release workflow), and reports closed issues. Teaches the underlying standards as it runs.
development
Sync and manage bilingual (EN/RU) library content for agency-docs. Use when adding, updating, or reviewing library articles. Handles translation, sync checks, and Russian stylistic review.
development
This skill should be used to watch a long-running background job (ffmpeg/media encode, qmd or other embedding/vector-DB run, batch agent/LLM pipeline, or a real-browser/agent-browser daemon) until it finishes or wedges, then deliver a verdict (done, needs-attention, or blocked) plus the exact next command, without burning dozens of manual poll commands. Triggers on "babysit this job", "watch this until it's done", "ping me when the encode/embed/batch finishes", "is this background process stuck", "monitor this ffmpeg/qmd run", or any request to wait on a long-running process and be told when it's complete or hung.