to-roadmap
Prioritises settled features into a Now / Next / Later kanban board, rendered as a self-contained ./ideas/roadmap.html. Each card is a feature, not a ticket — one card later becomes several tickets via /to-prd -> /to-plan -> /to-tickets. Boards the features in ./docs/approach.md, or the "## Accepted ideas" in ./ideas/CONTEXT.md when there is no approach doc. The approach doc is settled truth: this assigns tiers and reasons about ordering, it never re-litigates what was decided.
- License 许可
- MIT
- 最近更新
- 2026-11-11
- Stars
- ★ 0
- Forks
- 0
01 前言 Front Matter
- name
- to-roadmap
- description
- Prioritises settled features into a Now / Next / Later kanban board, rendered as a self-contained ./ideas/roadmap.html. Each card is a feature, not a ticket — one card later becomes several tickets via /to-prd -> /to-plan -> /to-tickets. Boards the features in ./docs/approach.md, or the "## Accepted ideas" in ./ideas/CONTEXT.md when there is no approach doc. The approach doc is settled truth: this assigns tiers and reasons about ordering, it never re-litigates what was decided.
- disable-model-invocation
- true
02 资源文件 2
- 资产文件assets/roadmap-template.html3.6 KB
- 参考文档evals/evals.json5.1 KB
03 SKILL.md 正文
Overview
Turn the features you have settled on into a visual product roadmap: a standalone HTML kanban with three columns (Now / Next / Later) where each card is a feature, not a ticket — a thing to be built, which the spine later breaks down into several tickets.
Where this sits
PORTFOLIO — many features ideate or chat-to-approach
↓
./docs/approach.md → ./ideas/roadmap.html
^^^^^^^^^^^^ you are here
↓ pick ONE card
FEATURE — one feature per run to-prd → to-plan → to-tickets → ticket-tracker
non-code work: to-prd → to-tickets
Portfolio → feature is a fan-out, not a step. This skill is portfolio-level: it prioritises many
features at once. Crossing to the spine means picking one card — six cards means six independent
runs of to-prd → to-plan → to-tickets, each producing its own several tickets.
Never send the user backwards. A missing upstream artifact is written inline or offered, never a reason to stop and run another skill first. The one hard gate is an approved plan.
Board from ./docs/approach.md, from ## Accepted ideas in ./ideas/CONTEXT.md, or from a short
list the user gives you. The one thing this skill will not do
is build a roadmap by parsing a raw conversation — chat-to-approach owns that (see Phase 0).
Solo/indie-builder scale throughout: no assignees, no story points, no sprints, no stakeholder matrices.
Phase 0 — Load the source
Two sources, in priority order. Run artifact-scan as a preflight if it's installed rather than
reimplementing its file checks.
1. ./docs/approach.md — the alignment doc, and the richer source. Read it and extract,
treating every item as already agreed:
- All features (Name, Problem, Value, Dependencies) → cards
- Constraints → a note below the board, not cards
- Principles → use to inform tier suggestions (e.g. "ship weekly" → fewer Now items)
- Open questions → carry forward verbatim into the Open Questions section
2. ## Accepted ideas in ./ideas/CONTEXT.md — the ideas the user has decided to build,
whether ideate promoted them or they were hand-added. One line each, one card each. Accepting is
the selection, so board the whole section rather than asking which of them to include.
Do not modify either file.
If both exist, the approach doc wins: it has been grilled, and it carries the constraints, principles and open questions a bare idea list doesn't.
If neither exists, ask the user for the features to board — a short list, one line each — and
mention that ideate or chat-to-approach leaves a durable source next time. What you must not do
is build the board by parsing a pasted conversation: chat-to-approach owns conversation →
structure, including the grilling that resolves ambiguity before anything is committed. Two skills
parsing transcripts differently is how a board ends up built on ungrilled assumptions.
A feature too vague to tier is not a licence to re-litigate it. Say so, and either ask the user for a tier directly or point them back at the source to sharpen it.
Phase 1 — Prioritise
Assign each feature a tier. Offer a suggested tier per feature — biasing dependency-blocking features toward Now and anything speculative toward Later — and let the user confirm or override in one pass.
Now — Committed, ready to start, essential for current momentum. If the user isn't working on it this week or next, it's not Now.
Next — Decided but intentionally deferred. Depends on Now items finishing first, or deliberately held back to maintain focus.
Later — Someday / low urgency / speculative. Worth keeping visible so nothing falls through the cracks, but not near-term.
Why this ordering — the prioritisation lens. A tier is a decision, not a guess. When a feature's tier is unclear, reason it out against four levers:
- Value — how much user pain it removes or upside it unlocks. High value pulls toward Now.
- Effort — rough size. High value + low effort is the classic Now; high effort earns Next/Later unless it's blocking.
- Dependency — does other work need this first? A blocker for several features earns Now even if its own value is modest; something that depends on unfinished work can't be Now.
- Risk — uncertainty or the cost of getting it wrong. De-risk early when a wrong call is expensive to unwind; defer speculative bets to Later.
State the why in one clause when you suggest a tier (e.g. "Now — blocks capture and auth"), so the ordering is auditable rather than arbitrary.
Default to fewer Now items. A solo builder can realistically focus on 2–4 things at once. If everything looks like Now, something is wrong — push back and ask.
Phase 2 — Generate the board
Write a complete, self-contained HTML file to ./ideas/roadmap.html in the current working directory.
Run mkdir -p ./ideas first — the directory may not exist yet. It shares a home with the ideate
reports so a project only has one path to gitignore.
Always write the file. Other skills detect this stage with test -f ./ideas/roadmap.html, so a board
that only ever existed as a chat artifact leaves the repo looking like no roadmap was made. Render
it as an artifact too if the interface supports it, but the file is the deliverable, not the copy.
Use assets/roadmap-template.html as the starting point — inline CSS, no external dependencies, no
JavaScript. Replace its placeholder comments with the actual cards and questions.
Card format
Each card represents a feature and shows:
- A short noun-phrase title naming the feature (e.g. "User authentication", "Onboarding flow")
- One sentence describing the user problem it solves or the value it delivers
- A dependency line only if it blocks or is blocked by another feature on the board
Nothing else — no assignees, no tags, no dates, no story points, no implementation tasks.
Open questions format
Below the board, list each open question from the approach doc as a numbered item: the question concisely, plus a one-line note on why it matters or what's blocked on it.
Now (amber) | Next (blue) | Later (slate)
─────────────────────────────────────────────
[ Card ] [ Card ] [ Card ]
[ Card ] [ Card ]
[ Card ]
Open Questions
──────────────
1. Should auth use JWT or sessions? — blocks mobile client work.
2. Is the pricing page in scope for v1?
Finishing Up
After writing the file, a brief summary (3–5 lines max). It's a receipt, not a re-explanation — don't repeat the roadmap verbatim.
- How many features are on the board and how they're distributed (N Now / N Next / N Later)
- How many open questions were flagged
- Which source was used, left unmodified — to change what's on the board, edit the source
(
chat-to-approachfor the approach doc, or the## Accepted ideaslist directly) and re-run - The next step: pick one card and run
to-prdon it. Each card is its own pass down the spine.
When finished, ask: 'Would you like to log feedback? (yes/no)'. If yes, invoke skill-feedback-collector passing this skill's name and path.
04 同仓库更多 Skills
to-tickets
Breaks a source into independently-grabbable GitHub tickets. For a code feature the source is the plan (`docs/plans/<feature>.md`, from /to-plan) and every new or changed symbol lands in exactly one ticket, its signatures copied into the ticket body; a non-code feature is cut from the PRD's slices. Cuts tickets for one feature per run. If a code feature has no approved plan, offers /to-plan instead of cutting from prose. In a repo that runs command-centre, also emits `[[task]]` blocks into its config; in a plain treepad repo, emits a Batch Manifest instead so the tickets materialise as stacked worktrees.
to-seams
Records an agreed-but-unlanded cross-repo interface as a seam: the file a consumer's agent gets pasted into its prompt as ground truth, plus the `[[seam]]` block command-centre reads for the retirement pointer. Use when two repos need to build against an interface neither has landed yet — "record a seam for X", "we agreed on this schema, seam it", "add a seam so Y can build against Z's new field". Halts for approval before writing either file.
to-prd
Turns one feature idea into a PRD built on journeys: a one-line problem, journeys (each ending in an observable state) and delivery slices that say what is usable after each. Interviews, explores the codebase, and saves to docs/prds/<feature>.md. Covers exactly one feature: given a multi-feature source, ask which one. Reads any approach doc or ideate report as priors so it doesn't re-ask what's settled, but needs none. Starts the per-feature spine (/to-prd -> /to-plan -> /to-tickets).
to-plan
Turns one feature's PRD into a skimmable plan in docs/plans/<feature>.md: a short overview, then per phase a glossary, the journeys it satisfies, and its new and modified definitions (types, enums, ports, schema), with the project:<slug> label. No code, branch or PR; the user's review of the file is the gate. Use for "plan this feature", "write the contract", "what are the types". One feature per run. Slash-only.
ticket-tracker
Use when the request is about the *current state* of GitHub issues rather than creating new ones: "where are my tickets", "show the board", "what's in progress", "what's ready to pick up", "move issue N to in-review", "mark N done", "update the ticket status". Live triage board over GitHub issues via the gh CLI, moving each between backlog -> ready -> in-progress -> in-review -> done using status labels. This is the ticket-level board; ./ideas/roadmap.html is the feature-level one. To file new tickets, use /to-tickets, file-issue for a single ad-hoc one, or /sweep for a batch of small fixes.
sweep
Turn a pile of small fixes into a batch /fleet can dispatch. Takes the open `inbox` issues and any items pasted with the command, explores them in one pass, rejects anything too big for a small fix and takes it out of the inbox, merges items that touch the same files into one ticket, and files the tickets under one dated `sweep-YYYY-MM-DD` label. Use for "sweep the inbox", "batch these fixes", "turn these into tickets and fleet them". For one ad-hoc ticket, use file-issue; for a feature, use /to-tickets.