Help us improve
Share bugs, ideas, or general feedback.
From dh
Captures backlog items via MCP server in guided, quick, or autonomous modes. Validates fields, detects duplicates, creates GitHub issues for P0/P1 priorities.
npx claudepluginhub jamie-bitflight/claude_skills --plugin dhHow this skill is triggered — by the user, by Claude, or both
Slash command
/dh:create-backlog-itemThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
<mode>$0</mode>
Manages backlog items through grooming, planning, and closure using GitHub Issues, Projects, Milestones. Interactive browser, auto-mode, resolve/close with evidence, SAM integration.
Guides users through interactively creating a structured work item (feature, bug, task, spike, or epic) with assumptions, open questions, and drafting notes for standalone clarity.
Creates and maintains product/project backlogs with prioritization, acceptance criteria, and estimates. Supports user stories, MoSCoW, grooming, and tracking.
Share bugs, ideas, or general feedback.
$0 <item_title>$1</item_title>
Capture a new backlog item via mcp__plugin_dh_backlog__backlog_add. The MCP server handles persistence and GitHub Issue creation.
See backlog lifecycle overview for the end-to-end flow.
NEVER include any of the following in a backlog item description:
WHY: Prescriptive fixes in backlog items bypass grooming, RT-ICA, and architecture review. They encode untested assumptions as requirements. This has caused hours of wasted work — a backlog item prescribed modifying project-level files that were out of scope, and agents followed those instructions.
A backlog item contains:
Solutions come from investigation during grooming and planning — not at creation time.
<mode/> selects the operating mode:
<mode/> value | Mode | Remaining args |
|---|---|---|
| (empty) | Guided intake via AskUserQuestion | — |
quick | Fast entry — skip title question | <item_title/>+ = title |
--auto | Fully autonomous — no interactive prompts | <item_title/>+ = title |
/create-backlog-item # guided intake
/create-backlog-item quick GitHub milestone skill # quick entry
/create-backlog-item --auto vercel skills npm package # autonomous (agent use)
If <mode/> is --auto:
Title = <item_title/> onward (all remaining words joined). Do not call AskUserQuestion. Instead:
research/ recursively for any file whose name or content matches the title (case-insensitive). Read the best match.mcp__plugin_dh_backlog__backlog_list() to search existing items for related titles and understand priority patterns.<item_title/> onwardcritical, required, must → P1; nice to have, optional → P2; default P2)
P1 requires either a matched urgency keyword or explicit --priority=P1 flag.
P0 is never assigned by auto-mode — P0 must be set manually.<item_title/> argument string, reproduced exactly — character for character, no trimming, no reformatting."Agent task — auto-derived from research/{filename}"install, integrate, add → Feature; default Feature)[AUTO] Title: {title} — from <item_title/> onward
[AUTO] Priority: P2 — inferred from description (no urgency keywords found, defaulting P2)
[AUTO] Description: derived from research/skill-generation-tools/vercel-labs-skills.md
[AUTO] Source: Agent task — auto-derived from research/skill-generation-tools/vercel-labs-skills.md
[AUTO] Type: Feature — inferred from "integrate" keyword
Proceed to Step 2 (validate).
If <mode/> is empty (guided intake):
Use AskUserQuestion with two questions:
Question 1: "What is the title of this backlog item?"
header: "Title"
options: (free text — no options; user will type)
Question 2: "What priority?"
header: "Priority"
options:
- label: "P0 — Must have"
- label: "P1 — Should have"
- label: "P2 — Nice to have"
- label: "Idea — Not yet sized"
Then ask:
Question 3: "Describe the item. Cover: (1) what the problem is and where it lives, (2) what success looks like when it's done, (3) how you'll know it's working. Do not describe the fix or implementation approach — those come later in planning."
header: "Description"
Capture the user's answer to Question 3 verbatim as the verbatim_user_report value before structuring it into a Description. The Description is your structured interpretation; the verbatim report is the user's exact words.
Then ask:
Question 4: "What is the source or trigger for this item? (e.g., code review, user request, session observation — or press Enter to skip)"
header: "Source"
options:
- label: "Code review"
- label: "User request"
- label: "Session observation"
- label: "Research finding"
- label: "Skip"
Then ask:
Question 5: "What type of work is this?"
header: "Type"
options:
- label: "Feature"
- label: "Bug"
- label: "Refactor"
- label: "Docs"
- label: "Chore"
Then ask:
Question 6: "Can you provide concrete reproduction steps? (specific commands, files, and exact error messages you observed — or press Enter to skip)"
header: "How to reproduce"
options:
- label: "Skip"
If the user provides steps, include them verbatim. If they press Enter or choose Skip, omit the field from the item block.
If <mode/> is quick:
Title = <item_title/> onward. Ask only:
verbatim_user_report = the full <item_title/> argument string, reproduced exactly. Source defaults to "Session observation". Type defaults to "Feature".
Required fields: title, priority, description.
title must be non-empty after trimming whitespace.description must be non-empty after trimming whitespace. If it contains implementation instructions (how to fix, what to change, which files to modify), remove them. Keep only: what is broken, where it was observed, what the impact is.Search syntax note: backlog_list(search=...) is a multi-keyword boolean substring search — NOT semantic and NOT fuzzy. Exact title strings miss semantically related items with different wording. Always search with OR-joined key concepts extracted from the title, not the full title string.
Extract 2–4 key concept words from the title and join with OR:
# Title: "Formalise IssueBackend Protocol and audit BacklogItem field portability"
# Key concepts: IssueBackend, backend protocol, backend abstraction, field portability
search = "IssueBackend OR backend protocol OR backend abstraction"
Call:
mcp__plugin_dh_backlog__backlog_list(search="{concept1} OR {concept2} OR {concept3}")
Also supports field:value syntax (title:auth, type:bug) and regex (/pattern/) for narrower checks.
If a match is found with overlapping concepts, report:
Possible duplicate: "{existing title}" already exists in {section}.
Proceed anyway? (y/n)
Use AskUserQuestion with Yes / No options. If No: stop.
In --auto mode: if a duplicate is found, log [AUTO] STOP — duplicate detected: "{existing title}" in {section} and stop without writing. Do not ask.
Format today's date as YYYY-MM-DD (use system date).
### {title}
**Source**: {source, or "Not specified" if skipped}
**Added**: {YYYY-MM-DD}
**Priority**: {P0|P1|P2|Idea}
**Type**: {type}
**Description**: {description}
**Verbatim user report**: {exact words from the user — argument string, Question 3 answer, or source text. Never paraphrased, never summarized, never reformatted.}
**How to reproduce**: {reproduction steps, or omit entirely if not provided}
"Verbatim user report" rules:
<item_title/> argument string, character for character.--auto mode: the full <item_title/> argument string, character for character."How to reproduce" rules:
If research questions were embedded in the description (lines starting with ? or Research:),
keep them in the description — the backlog_add MCP tool has no research_first parameter.
Prefix the questions with Research first: inside the description text so they remain visible.
Call the mcp__plugin_dh_backlog__backlog_add tool:
| Parameter | Value |
|---|---|
gate_token | "problems-not-solutions" |
title | "{title}" |
priority | "{priority}" |
description | "{description}" |
source | "{source}" |
type | "{type}" |
how_to_reproduce | "{reproduction steps}" if provided; omit parameter entirely if not |
verbatim_user_report | "{exact user words}" — always provide; never omit |
Check the returned dict for error key.
Note on research_first: The --research-first CLI flag has no MCP equivalent. The research_first parameter does not exist on backlog_add. Embed research questions directly in the description parameter instead.
The script outputs the confirmation. Report to user:
Backlog item created.
Title: {title}
Priority: {priority}
Section: {section heading}
Added: {date}
Next steps:
Groom: /dh:groom-backlog-item {title}
Work: /dh:work-backlog-item {title}
backlog_add MCP tool invoked successfully (no error key in response)NEXT: skill="groom-backlog-item" args="{item title}" condition="item created successfully AND metadata.status=needs-grooming"