Roadmap create
Three goblins in a trenchcoat pretending to be a senior developer. Claude Code config shaped by ADHD, friction, and spite.
npx -y skills add JasonWarrenUK/goblin-mode --skill roadmap-createAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 5 stars5 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
{{ πππ }} Create a project roadmap in the rich phase-array format β roadmaps.json as source of truth plus a PHASE task list and prose overview
SKILL.md
9.0 KB, as published. Nobody here has run it
Create a roadmap as three synchronised artefacts:
.claude/roadmaps.jsonβ machine-readable source of truth, an array of phase objects each{name, path, archived?, externalGates, milestones}. The active phase is the entry withoutarchived: true; archived entries are retained as historical record.docs/roadmaps/{PHASE}.mdβ human-readable task list and dependency diagram (a projection).docs/reports/ROADMAP_OVERVIEW.mdβ prose overview (a projection).
When creating a new phase alongside existing ones, append a new element and mark the superseded phase "archived": true.
Shared conventions (status vocabulary, colour table, graph rules, formatting) live in ~/.claude/library/references/roadmap-conventions.md β read it before writing anything. The CLI is python3 "$HOME"/.claude/library/scripts/roadmap.py.
Behaviour
| Codebase Context | Arguments Passed | Action |
|---|---|---|
| No other roadmaps | 0 | Create the first project roadmap (default PHASE_1.md) |
| N/A | 1 | Create the roadmap/phase named in the argument |
| Roadmaps exist | 0 | Ask the user which phase to create or if starting a new phase |
Steps
1. Determine scope, context, and format
- Check if
docs/roadmaps/exists and contains roadmaps; check if.claude/roadmaps.jsonexists. - If
$ARGUMENTSis given, use it as the phase name (e.g.PHASE_2). If no arguments and no existing roadmap, default toPHASE_1. If no arguments but roadmaps exist, ask the user to clarify intent. - If a roadmap already exists, check its format first β run
python3 "$HOME"/.claude/library/scripts/roadmap.py detect. Exit 3 = old simple format: stop and tell the user to run theroadmap-migrateskill first, so the new phase is appended to a consistent phase array. Exit 2 = could not locate/parse: ask the user for the path. Only proceed on exit 0 (or when no roadmap exists yet).
2. Gather project context
Read what is available to understand the project: README.md, CLAUDE.md, docs/ (architecture, proposals, ADRs), and any existing roadmaps in docs/roadmaps/.
3. Elicit milestones, categories, and dependencies
Ask targeted questions before generating anything (2β3 per round, not a long form):
- Milestones: how many (typical 3β5)? Each milestone's goal and its completion criterion.
- Categories: the logical groupings within each milestone. Use 2β3 letter prefixes (e.g.
EV= evaluation,IN= ingestion,SR= search). - Dependencies: which milestones are sequential vs parallel; any known external blockers or prerequisites.
- Assignees (optional): if the user wants to attribute tasks to people up front, ask who owns what. Never infer an assignee from category, milestone, or anything else β leave it unset for any task the user doesn't name an owner for.
4. Assign task IDs
Format: {MilestoneNum}{Category}.{Seq} β e.g. 1EV.1, 3IN.6. Sub-tasks use an alpha suffix: 3IN.2a. Never reuse an ID; number sequentially within each category; new tasks append (never renumber).
5. Compute initial statuses (mechanical)
The mechanical status rule from the conventions reference applies: empty dependsOn β todo; any non-done dependency β blocked. No task starts done unless the user says the work is already complete. paused/deferred are only for tasks parked behind a gate or a later phase. softDependsOn never feeds this rule.
6. Generate .claude/roadmaps.json
The top level is an array of phase objects. Append + archive the superseded phase if others exist; otherwise write a one-element array. Tabs for indentation, British spelling.
[
{
"name": "{Phase Name}",
"path": "docs/roadmaps/{PHASE}.md",
"archived": false,
"externalGates": [],
"milestones": [
{
"id": "M{N}",
"name": "{Milestone Name}",
"goal": "{One-sentence objective}",
"tasks": [
{ "id": "{ID}", "description": "{Task description}", "status": "todo", "dependsOn": [] }
]
}
]
}
]
- Field order β tasks:
id, description, status, dependsOn, softDependsOn, iterative, notes, assignee; gates:id, name, status, imposes, blocks, notes. IncludesoftDependsOn/notes/iterative/assigneeonly when meaningful βassigneeis free-text with no roster, and must never be guessed. - External gates (
externalGates, per phase, besidemilestones) model things outside the team's control that block work:{id, name, status:"external", imposes?, blocks[], notes?}.imposes(defaultblocked; may bepausedordeferred) is the status the gate forces on its blocked children;blocks[]is the reverse edge β every task ID that lists this gate in itsdependsOn. A gate ID can appear in a task'sdependsOn. - A
dependsOnentry may be a milestone ID (M1,MPβ¦): it resolvesdoneonly when every task in that milestone isdone. - The
iterative: trueflag marks a task that loops to convergence β descriptive only, never a cyclicdependsOn. - A
softDependsOnentry authors an optional, best-effort link that renders dotted in the diagram (X -.-> Y) but imposes no status, no cycle constraint, and no sink effect (full semantics in the conventions reference). Use it for relationships worth showing but not worth blocking on β never hand-draw a dotted line into the generated diagram instead.
7. Generate docs/roadmaps/{PHASE}.md
# {Project Name} {Phase} Roadmap
{1β3 sentence intro.}
**Critical path:** `{key IDs in sequence}` β {brief explanation}.
---
## Milestone 1 β {Name}
**Goal:** {Milestone objective}
- [ ] **{ID}** β {description}
- [ ] **{ID}** β {description} _(depends on {ID})_
- [ ] **{ID}** β {description} _(blocked β depends on {ID}, {ID})_
- Note: {optional note}
---
## Dependency Diagram
```mermaid
{output of roadmap.py graph --mermaid}
```
Task line annotations follow the conventions reference (none / _(depends on {IDs})_ / _(blocked β depends on {IDs})_ / _(paused β reconvene {gateId})_ / _(deferred to a later phase)_).
The diagram is generated, never hand-written. Once the JSON is written, run:
python3 "$HOME"/.claude/library/scripts/roadmap.py graph --mermaid --direction LR
and paste the output verbatim into the fenced mermaid block. It emits the classDefs (canonical status colours), nodes, edges (terminal milestone convention) and class statements in the right order. Do not add, remove or recolour lines by hand.
8. Generate docs/reports/ROADMAP_OVERVIEW.md
# {Project} {Phase}: Roadmap Overview
**{N} tasks across {M} milestones.** Files: `.claude/roadmaps.json` (machine-readable), `docs/roadmaps/{PHASE}.md` (full task list with Mermaid dependency diagram).
> {Rescope/context note if relevant}
---
## What we're building
{2β3 paragraphs on the key deliverables and the reasoning behind the phase structure.}
## Milestone sequence and the reasoning behind it
{One paragraph per milestone.}
## Decisions that shaped the structure
{Key decisions that explain non-obvious choices.}
## External blockers (flag early)
{Dependencies on external parties, unconfirmed decisions, etc.}
The header task count must match roadmaps.json. Get it from python3 "$HOME"/.claude/library/scripts/roadmap.py stats rather than counting by hand.
9. Validate, confirm, and report
- Run
python3 "$HOME"/.claude/library/scripts/roadmap.py validateβ it must report clean (dependsOn/blocks parity, acyclicity, status recompute). Fix any discrepancy before finishing. - Report the three paths created, the milestone and task counts (from
roadmap.py stats), and the status breakdown. - Note any assumptions or areas needing user refinement.
Conventions
- ID format
{MilestoneNum}{Category}.{Seq}; never reuse IDs. - roadmaps.json is the source of truth; the PHASE file and overview are projections.
- Everything else (statuses, colours, graph rules, formatting):
~/.claude/library/references/roadmap-conventions.md.
These roadmaps are maintained by roadmap-maintain (status synchronisation) and roadmap-update-tasks (adding tasks). Old simple-format roadmaps are upgraded by roadmap-migrate; the HTML dashboard comes from artefact-roadmap (roadmap.py render).