skills/roadmap-create-interview/SKILL.md
{{ 𝛀𝛀𝛀 }} Run a structured interview to discover new features and produce a batch roadmap proposal. Produces a structured proposal for review — nothing is written to the roadmap until the user approves.
npx skillsauth add jasonwarrenuk/goblin-mode Roadmap: InterviewInstall 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.
A structured interview that turns half-formed ideas into a coherent batch of roadmap-ready tasks. The goal is to make the user think clearly about what they want to build, then produce a proposal they can review before anything touches the roadmap.
Good features don't usually arrive fully formed. They start as vague intentions ("we need better search", "users keep asking for X") and need interrogation to become tasks. This skill does that interrogation: it asks focused questions in small batches, listens for dependencies and scope, and organises the output into something the roadmap can absorb cleanly.
The interview is a thinking tool as much as a discovery one. Sometimes the most valuable outcome is realising a "feature" is actually three separate concerns, or that what feels new is actually an extension of something already tracked.
This is a read-only skill — it writes nothing; it produces a proposal that roadmap-update-tasks later writes.
Locate and read the rich-format roadmap: user-specified path → .claude/roadmaps.json (the source of truth, an array of phase objects; the active phase is the non-archived entry) → docs/roadmaps/ scan. Check the format with python3 "$HOME"/.claude/library/scripts/roadmap.py detect; exit 3 (old simple format) — tell the user to run roadmap-migrate first, since the proposal must speak the rich vocabulary; exit 2 — ask for the path.
From the active phase, extract:
python3 "$HOME"/.claude/library/scripts/roadmap.py stats gives these)python3 "$HOME"/.claude/library/scripts/roadmap.py ready lists the unblocked todo tasks with leverage signals — what the project can start now shapes what is worth proposing nextblocked/paused/deferred tasks (potential unlock targets)Shared conventions (status vocabulary, graph rules): ~/.claude/library/references/roadmap-conventions.md — there is no in-progress state. This context informs the interview — connect what the user describes to what's already tracked, and avoid proposing duplicates.
Before asking anything about features, clarify:
Keep this brief — one or two questions at most. If the user's opening message already answers these, skip straight to Step 3.
Ask 2–4 questions per round. Never dump a long list of questions at once — it reads as homework. The questions should feel like a conversation, not a form.
Discovery questions — what does the user want to build?
Clarification questions — sharpen something vague
Dependency questions — surface connections
todo or blocked on the roadmap?"Scope questions — keep things honest
After each round of answers:
Continue until the user says they're done or stops introducing new ideas.
Once the interview is complete, synthesise everything into a structured proposal. Do not write to the roadmap yet.
Assign:
{Milestone}{Category}.{Seq} convention. Use ? for the seq number if the milestone/category is new and you can't determine the next number without the user confirming placement (e.g. 2TI.?)todo if it has no incomplete dependencies, blocked if it depends on anything not yet done, paused/deferred if it sits behind a gate that imposes thoseIf proposed tasks depend on each other, make that explicit. Show the internal dependency chain.
Apply the same checks as roadmap-update-tasks:
Format the proposal clearly. Group tasks by milestone. For each task:
{ID}. {Description}
Milestone: {N} — {Name}
Status: {todo / blocked / paused / deferred}
Assignee: {name, or "unassigned"}
Depends on: {task/milestone/gate IDs or "nothing"}
Enables: {IDs — existing or new — or "nothing yet"}
[⚠ Orphan — no connections found] (if applicable)
[+ Placeholder child proposed: {ID}. {Description}] (if applicable)
After the full list, include a Dependency map — a compact text representation of how the batch connects internally and to existing tasks:
Existing task A → New task B → New task C
↘ Existing task D (now unblocked)
New task E (standalone — orphan warning)
Then ask: "Does this look right? Any tasks to cut, rename, or move? Once you're happy I'll hand this to the task adder."
Once the user approves (or approves with amendments), this skill's job is done. The output is a clean batch specification ready for roadmap-update-tasks to process — one task at a time, in dependency order (add a task before the tasks that depend on it).
Tell the user: "Approved. Use roadmap-update-tasks to write these to the roadmap, passing the proposal above as context — adding them in dependency order."
tools
{{ 𝚫𝚫𝚫 }} Rebuild roadmap-system.zip, the distributable snapshot of the roadmap tooling (scripts, HTML template, conventions reference, and every roadmap-touching skill, including this one).
tools
--- name: "Suggest: Task" description: "{{ 𝚫𝚫𝚫 }} Suggest the next logical task — grounded in the roadmap's pre-vetted ready-set when one exists, codebase analysis otherwise" when_to_use: "When you don't know what to work on next and want a grounded recommendation rather than picking arbitrarily." model: haiku effort: low disable-model-invocation: true allowed-tools: ["Read", "Glob", "Grep", "Bash(python3:*)", "Bash(npm:*)", "Bash(bun:*)", "Bash(pnpm:*)", "Bash(deno:*)"] argument-hint: [named
development
{{ 𝛀𝛀𝛀 }} Convert an old simple-style roadmap (single Markdown, four statuses, <a name> anchors, roadmaps.json pointer registry) into the rich phase-array format (roadmaps.json source of truth + PHASE task list + prose overview).
data-ai
{{ ƔƔƔ }} Create a pull request to main — wordy or shiny (with screenshots), ready-for-review or draft