From pm
Audit open GitHub issues for staleness, orphaned blockers, missing labels, codebase drift, and already-implemented features. Categorizes issues into close-candidates, update-needed, needs-triage, stale, and healthy. Supports bulk and individual remediation via interactive approval. Triggers: audit issues, clean up issues, update stale issues, issue hygiene, backlog cleanup, prune issues.
How this skill is triggered — by the user, by Claude, or both
Slash command
/pm:updateThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Audit open GitHub issues for staleness, drift, and hygiene problems. Categorize findings and execute approved remediations.
Audit open GitHub issues for staleness, drift, and hygiene problems. Categorize findings and execute approved remediations.
1. Auth Check → 2. Detect Repo → 3. Fetch Issues → 4. Pass 1: Metadata Audit
→ 5. Pass 2: Codebase-Aware Audit → 6. Categorize → 7. Present Report
→ 8. Interactive Remediation → 9. Execute Actions → 10. Summary
gh auth status
On failure: Stop and tell the user to run gh auth login.
gh repo view --json nameWithOwner -q .nameWithOwner
On failure: Ask the user for the target repository (owner/repo).
gh issue list --state open --limit 100 --json number,title,body,labels,assignees,milestone,createdAt,updatedAt,author
Edge case — no open issues: Report "No open issues to audit" and stop.
Edge case — 100+ issues: Warn the user that results are capped at 100. Suggest filtering by label or milestone for larger backlogs.
Check each issue for these problems:
| Check | Condition | Severity |
|---|---|---|
| Stale | No updates in 30+ days | Medium |
| Ancient | No updates in 90+ days | High |
| Orphaned blocker | References Blocked by: #<number> where the referenced issue is closed (see batch verification note below) | Medium |
| Completed sub-tasks | All - [x] checkboxes checked but issue still open | High |
| Missing labels | No type label (bug, enhancement, etc.) | Low |
| Missing priority | No priority label (P0-P3) | Low |
| Abandoned assignment | Assigned but no updates in 14+ days | Medium |
For each issue, collect all matching problems into a findings list.
Batch verification for orphaned blockers: Step 3 already fetches all open issues. Any blocker reference (Blocked by: #<number>) where the number is absent from the open set is treated as resolved — no extra API call needed. Only use gh issue view for edge cases where you need to distinguish "closed" from "never existed".
For issues that reference specific files or features, cross-check against the codebase:
For issues whose body contains file paths (e.g., src/auth/login.ts):
Glob to check if remaining paths still existFor feature requests and bug fixes:
Grep to search for those patterns in the codebasegh pr list --state all --search "ISSUE_NUMBER" --limit 5 --json number,title,state,mergedAt
Check if:
Sort issues into five categories based on findings:
| Category | Criteria | Suggested Action |
|---|---|---|
| Close Candidates | Has merged PR, all checkboxes done, or flagged as possibly-implemented | Close with comment |
| Update Needed | Orphaned blockers, file drift, stale assignment | Edit issue metadata |
| Needs Triage | Missing labels, missing priority, no clear scope | Add labels, clarify scope |
| Stale | 30-90 days inactive, no PR activity | Ping assignee or add stale label |
| Healthy | Recently active, properly labeled, has assignee or clear owner | No action needed |
Show a structured report by category:
## Issue Audit Report
### Close Candidates (3 issues)
| Issue | Title | Reason |
|-------|-------|--------|
| #12 | Add user avatars | Merged PR #45, all acceptance criteria met |
| #18 | Fix login redirect | Feature already implemented (found in src/auth/redirect.ts) |
| #23 | Update deps | Ancient (142 days), no activity |
### Update Needed (2 issues)
| Issue | Title | Problem | Fix |
|-------|-------|---------|-----|
| #31 | Refactor API layer | Blocked by #12 (closed) | Remove stale blocker reference |
| #35 | Add caching | References src/old/cache.ts (deleted) | Update file paths |
### Needs Triage (4 issues)
| Issue | Title | Missing |
|-------|-------|---------|
| #40 | Something about auth | No type label, no priority |
| #41 | Performance issue | No priority label |
| ... | ... | ... |
### Stale (2 issues)
| Issue | Title | Last Activity | Assignee |
|-------|-------|---------------|----------|
| #28 | Add dark mode | 45 days ago | @alice |
| #33 | Improve tests | 38 days ago | unassigned |
### Healthy (8 issues)
✓ 8 issues are properly maintained — no action needed.
### Summary
- 3 close candidates
- 2 issues need metadata updates
- 4 issues need triage
- 2 stale issues
- 8 healthy issues
For each non-healthy category, use AskUserQuestion to get approval:
Close Candidates:
Question: "How should I handle close candidates?"
Options:
- Close all 3 with a comment
- Let me review each one individually
- Skip — don't close any
Update Needed:
Question: "Should I fix the metadata issues?"
Options:
- Fix all automatically
- Let me review each fix
- Skip — I'll handle these manually
Needs Triage:
Question: "Should I add missing labels?"
Options:
- Add suggested labels to all
- Let me review each suggestion
- Skip
Stale Issues:
Question: "How should I handle stale issues?"
Options:
- Add 'stale' label to all
- Comment pinging assignees
- Skip
For "review each" options, iterate through issues one at a time with per-issue AskUserQuestion.
Run approved actions using gh CLI:
Closing issues:
gh issue close ISSUE_NUMBER --comment "Closing: [reason]. Identified by /pm:update audit."
Editing issue metadata:
gh issue edit ISSUE_NUMBER --add-label "label-name"
gh issue edit ISSUE_NUMBER --remove-assignee "username"
Removing stale blocker references:
gh issue comment ISSUE_NUMBER --body "Removed stale blocker reference to CLOSED_ISSUE_NUMBER (now closed). Issue is unblocked."
Pinging stale assignees:
gh issue comment ISSUE_NUMBER --body "@username — This issue hasn't been updated in [X] days. Are you still working on it? If not, I can unassign so someone else can pick it up."
After all actions complete, print a final summary:
## Audit Complete
| Action | Count | Issues |
|--------|-------|--------|
| Closed | 3 | #12, #18, #23 |
| Labels added | 4 | #40, #41, #42, #43 |
| Blockers cleaned | 1 | #31 |
| Stale pings sent | 2 | #28, #33 |
| Skipped | 0 | — |
Total: 10 actions taken across 10 issues.
Suggest: "Run /pm:next to see what to work on now that the backlog is cleaned up."
Guides collaborative design exploration before implementation: explores context, asks clarifying questions, proposes approaches, and writes a design doc for user approval.
Creates structured, bite-sized implementation plans from specs or requirements before writing code. Useful for breaking down multi-step tasks into testable steps with file structure and task boundaries.
Synthesizes the current conversation into a structured spec (PRD) and publishes it to the project issue tracker with a ready-for-agent label, without interviewing the user.
npx claudepluginhub rube-de/cc-skills --plugin pm