From fslzrr
Manages GitHub issues for the software factory — creates, reads, updates, and lists PRD and TASK issues; transitions states via labels; shows a status dashboard; and recovers missing labels on demand during write operations. TRIGGER when: user says 'show status', 'list issues', `what's in progress`, 'what TASKs are under PRD #N', 'update issue #N', 'mark as blocked', 'create an issue', 'close this issue', or any other GitHub issue management request.
How this skill is triggered — by the user, by Claude, or both
Slash command
/fslzrr:issuesThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Manage GitHub issues for the software factory. You are the authoritative interface between the factory and GitHub — you understand what every label means, what transitions are valid, and what state each issue should be in.
Manage GitHub issues for the software factory. You are the authoritative interface between the factory and GitHub — you understand what every label means, what transitions are valid, and what state each issue should be in.
See reference/labels.md for the full catalog.
prd)Valid state labels and transitions:
needs-triage → in-backlog (after /interview + /prd complete the PRD)
needs-triage → [closed] (decided not viable — close with reason comment)
in-backlog → in-progress (after /decompose creates child TASKs)
in-progress → [closed] (auto: when all child TASKs are closed)
task)Valid state labels and transitions:
ai-ready → ai-in-progress (/implement picks it up)
human-ready → human-in-progress (human picks it up)
ai-in-progress → in-code-review (PR opened with "closes #N")
human-in-progress → in-code-review (PR opened with "closes #N")
in-code-review → [closed] (GitHub auto-closes on PR merge)
blocked: add/remove without changing the state label. Always record a reason comment when adding.cancelled: add before closing to distinguish abandonment from completion.Apply this procedure only when a write operation (create-prd, create-prd-stub, update-prd, create-task, update-state, add-blocked, remove-blocked) fails with a label-related error (e.g. label does not exist).
gh label list --limit 50 and collect the names of all existing labels.<name> is not a known factory label — cannot create it." Do not guess colors or descriptions.gh label create "<name>" --color "<color>" --description "<description>" using the name, color, and description values from the file.<name>."When invoked with no arguments, or with arguments that do not clearly map to a specific procedure, run status-dashboard without an explanatory preamble.
Create a PRD issue when body content is available (post-/interview + /prd):
gh issue create \
--title "<title>" \
--body "<PRD template content>" \
--label "prd,in-backlog"
Return the issue number and URL.
Trigger heuristic: use create-prd when body content is provided (after /interview + /prd have produced a full spec); use create-prd-stub when only a title is given.
Create a title-only PRD stub for an idea not yet ready for a full /interview session:
gh issue create \
--title "<title>" \
--label "prd,needs-triage"
No --body is passed. The stub lands in needs-triage awaiting a future /interview. Return the issue number and URL.
Update an existing PRD stub with the full title and body from a completed /interview + /prd session, then move it to in-backlog:
gh issue edit <number> --title "<title>" --body "<PRD template content>"
gh issue edit <number> --remove-label "needs-triage" --add-label "in-backlog"
The second command silently succeeds even if needs-triage is not present (GitHub ignores removing a label that isn't on the issue). Return the issue number and URL.
Create a TASK issue as a child of a PRD:
gh issue create \
--title "<title>" \
--body "<TASK template content>" \
--label "task,<ai-ready|human-ready>"
Return the issue number and URL.
Read an issue's full content:
gh issue view <number> --json title,body,labels,state,comments
Transition an issue to a new state. Remove the current state label and add the new one:
gh issue edit <number> --remove-label "<current-state>" --add-label "<new-state>"
Always verify the transition is valid per the state machines above before executing.
Close an issue with a reason:
gh issue comment <number> --body "<reason for closing>"
gh issue close <number>
Mark an issue as blocked:
gh issue comment <number> --body "Blocked: <reason>"
gh issue edit <number> --add-label "blocked"
Unblock an issue:
gh issue edit <number> --remove-label "blocked"
gh issue comment <number> --body "Unblocked: <reason>"
Check whether all TASKs under a PRD are closed, and close the PRD if so:
Show the current factory state by running scripts/status-dashboard.js.
Alongside the issue-state sections, the dashboard renders a Stale worktrees section: it lists every local git worktree whose <N>-<slug> branch has an <N> that is absent from the open-issue set (i.e. the issue it was created for has been closed or merged), each with a ready-to-paste git worktree remove <path> command. This is detect-and-surface only — the dashboard never removes a worktree. The section is omitted entirely when there are no stale worktrees.
Present the script's stdout to the user verbatim inside a fenced code block. Do not summarize, omit issue titles, drop sections, or reformat per-issue lines.
This skill owns the canonical issue body templates. To apply them:
npx claudepluginhub fslzrr/skills --plugin fslzrrCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.