/triage-issues
Fetch recent GitHub issues from nimbalyst/nimbalyst and triage them by importance, duplicates, and already-fixed status — then optionally spawn /investigate sessions for the critical ones
$ npx -y skills add nimbalyst/nimbalyst --agent claude-codeHow it fires
How this command gets triggered: by you, by Claude, or both.
- Fires itselfClaude auto-loads it when your prompt matches the work.
- You can call itInvoke it directly when you want it.
- Slash command
/triage-issues
Context preview
What this command does when you run it.
Fetch recent GitHub issues from nimbalyst/nimbalyst and triage them by importance, duplicates, and already-fixed status — then optionally spawn /investigate sessions for the critical ones
Command definition
triage-issues.mdname: triage-issues
description: Fetch recent GitHub issues from nimbalyst/nimbalyst and triage them by importance, duplicates, and already-fixed status — then optionally spawn /investigate sessions for the critical ones
Triage Recent GitHub Issues
Pull the most recent GitHub issues from `nimbalyst/nimbalyst` and help me decide: 1. Is it a **bug** or a **feature**, and does it have the right **type** (not label — GitHub issue type)? 2. Is it a **duplicate** of an existing issue or tracker bug? 3. Has it **already been fixed** (recent PR / recent session)? 4. How urgent is it — **fix-now / fix-soon / fix-later / needs-info / not-a-bug**? 5. For the critical ones, let me pick a subset and spawn isolated Nimbalyst sessions that run `/investigate` against each.
**I do not care about labels.** Do not propose `area:*`, `status:needs-triage`, `status:accepted`, or any other label edits. If a label is obviously wrong and blocking triage clarity, mention it once — but don't make label management part of the action plan.
Usage
Arguments: `<time-period>` (optional, default `1d`)
- `1d` = last 24 hours
- `2d`, `3d`, `1w`, etc.
Steps
1. Fetch recent issues
Convert the time period to an ISO date and query GitHub. Open issues only.
SINCE=$(date -v-1d -u +"%Y-%m-%dT%H:%M:%SZ") # adjust -1d per argument
gh issue list \
--repo nimbalyst/nimbalyst \
--state open \
--limit 100 \
--search "created:>=${SINCE}" \
--json number,title,url,author,createdAt,labels,body,comments,issueTypeSort newest-first. If zero results, say so and stop.
2. Gather context for dedupe and already-fixed detection
Pull three sources in parallel:
**(a) Local bug backlog** — for internal awareness only:
tracker_list({ type: "bug", limit: 200 })The tracker is **private**. Use it to recognize that an issue is already known internally (and to inform severity/bucket), but **never** mark a public GitHub issue as a duplicate of a `NIM-#` tracker item — the reporter can't see it. A tracker match means the bucket is `fix-soon`/`fix-now` with a note that it's tracked internally, not `duplicate`. Only another **open public GitHub issue** is a valid duplicate target.
**(b) Recent AI sessions** — for already-investigated work:
mcp__nimbalyst-session-context__list_recent_sessions({ limit: 100 })Scan session names/tags/summaries for `#NNN` references, matching titles, or matching symptoms. If a session covers it, note that and don't propose new investigation. If a session looks plausibly related but it's not obvious, call `get_session_summary({ sessionId })` for a closer look.
**(c) Open + recently-merged PRs** — for already-fixed / in-flight work:
# Pull recent merged PRs once (last ~2 weeks) and grep locally:
gh pr list --repo nimbalyst/nimbalyst --state merged --limit 50 \
--json number,title,url,body,mergedAt,headRefName
# And open PRs:
gh pr list --repo nimbalyst/nimbalyst --state open --limit 50 \
--json number,title,url,body,isDraft,author,headRefName
For each candidate issue, match by `#NNN`, by title keywords, by referenced files in the PR body, and by symptom. If a PR is open/draft, the issue is **in-flight** — don't propose investigation. If a PR is merged, the issue is likely **already-fixed** — propose closing with a pointer to the PR.
3. Classify each issue
For every issue, decide:
- **Type correction** — what does GitHub's `issueType` currently say, and is it right? A bug filed as a Feature (or vice versa) gets flagged for type correction. The intake template gets this wrong constantly.
- **Bucket** — one of:
- `fix-now` — crash, data loss, regression, blocks core flow, broken on common platforms, or trivial-and-cheap
- `fix-soon` — meaningful bug or papercut, not blocking, fits current focus
- `fix-later` — nice-to-have, edge case, low-traffic surface
- `already-fixed` — a merged PR fixes this; just needs closing
- `in-flight` — an open/draft PR is fixing this; just needs review/landing
- `needs-info` — repro unclear, missing version/platform, or contradictory
- `duplicate` — matches **another open public GitHub issue** (never a private `NIM-#` tracker item)
- `feature-request` — not a bug; route to roadmap
- `not-a-bug` — out of scope, by-design, or contradicts a prior decision
- **Severity** — critical / high / medium / low. Use judgment — a low-severity bug can still be `fix-now` if it's a one-line change. A high-severity bug can still be `fix-later` if the area is frozen.
- **Why** — one short sentence on why this bucket. This is the line I'll read when deciding what to work on.
- **Linked PR** — if found in step 2, surface it: `PR #MMM (open/draft/merged) "<title>"`.
- **Linked session** — if found in step 2, surface it: `session "<name>" (sessionId)`.
- **Duplicate target** — if `duplicate`, name the canonical **public** issue: `duplicates #MMM`. Never close a public issue against a private `NIM-#` tracker item. If the only match is a private tracker item, the issue is **not** a duplicate — bucket it normally and add a `(tracked internally as NIM-XYZ)` note for your own reference only.
4. Output report
Print a single triage report. Group by bucket, newest first within each bucket. Lead each line with the issue number, title, current type, and severity:
## fix-now (N)
- #376 "ScheduleWakeup payload rendered as user message" [type: Bug] — high
Why: visible transcript corruption, affects every Claude Code session.
PR: #410 (open) "fix: render ScheduleWakeup as tool call" — review, don't reinvestigate.
Session: none.
## already-fixed (N)
- #371 "Sync hangs on large tracker bodies" [type: Bug] — high
Fixed by PR #408 (merged 2026-05-29). Close with pointer.
## in-flight (N)
- #374 "Respect CLAUDE_CODE_AUTO_COMPACT_WINDOW" [type: Feature → should be Bug]
PR: #412 (draft) — wait for landing. Also: type is wrong, propose correction.
## fix-soon (N)
- #380 "..." [type: BugRead more
name: triage-issues description: Fetch recent GitHub issues from nimbalyst/nimbalyst and triage them by importance, duplicates, and already-fixed status — then optionally spawn /investigate sessions for the critical ones
Triage Recent GitHub Issues
Pull the most recent GitHub issues from `nimbalyst/nimbalyst` and help me decide: 1. Is it a **bug** or a **feature**, and does it have the right **type** (not label — GitHub issue type)? 2. Is it a **duplicate** of an existing issue or tracker bug? 3. Has it **already been fixed** (recent PR / recent session)? 4. How urgent is it — **fix-now / fix-soon / fix-later / needs-info / not-a-bug**? 5. For the critical ones, let me pick a subset and spawn isolated Nimbalyst sessions that run `/investigate` against each.
**I do not care about labels.** Do not propose `area:*`, `status:needs-triage`, `status:accepted`, or any other label edits. If a label is obviously wrong and blocking triage clarity, mention it once — but don't make label management part of the action plan.
Usage
Arguments: `<time-period>` (optional, default `1d`)
- `1d` = last 24 hours
- `2d`, `3d`, `1w`, etc.
Steps
1. Fetch recent issues
Convert the time period to an ISO date and query GitHub. Open issues only.
SINCE=$(date -v-1d -u +"%Y-%m-%dT%H:%M:%SZ") # adjust -1d per argument
gh issue list \
--repo nimbalyst/nimbalyst \
--state open \
--limit 100 \
--search "created:>=${SINCE}" \
--json number,title,url,author,createdAt,labels,body,comments,issueTypeSort newest-first. If zero results, say so and stop.
2. Gather context for dedupe and already-fixed detection
Pull three sources in parallel:
**(a) Local bug backlog** — for internal awareness only:
tracker_list({ type: "bug", limit: 200 })The tracker is **private**. Use it to recognize that an issue is already known internally (and to inform severity/bucket), but **never** mark a public GitHub issue as a duplicate of a `NIM-#` tracker item — the reporter can't see it. A tracker match means the bucket is `fix-soon`/`fix-now` with a note that it's tracked internally, not `duplicate`. Only another **open public GitHub issue** is a valid duplicate target.
**(b) Recent AI sessions** — for already-investigated work:
mcp__nimbalyst-session-context__list_recent_sessions({ limit: 100 })Scan session names/tags/summaries for `#NNN` references, matching titles, or matching symptoms. If a session covers it, note that and don't propose new investigation. If a session looks plausibly related but it's not obvious, call `get_session_summary({ sessionId })` for a closer look.
**(c) Open + recently-merged PRs** — for already-fixed / in-flight work:
# Pull recent merged PRs once (last ~2 weeks) and grep locally: gh pr list --repo nimbalyst/nimbalyst --state merged --limit 50 \ --json number,title,url,body,mergedAt,headRefName # And open PRs: gh pr list --repo nimbalyst/nimbalyst --state open --limit 50 \ --json number,title,url,body,isDraft,author,headRefName
For each candidate issue, match by `#NNN`, by title keywords, by referenced files in the PR body, and by symptom. If a PR is open/draft, the issue is **in-flight** — don't propose investigation. If a PR is merged, the issue is likely **already-fixed** — propose closing with a pointer to the PR.
3. Classify each issue
For every issue, decide:
- **Type correction** — what does GitHub's `issueType` currently say, and is it right? A bug filed as a Feature (or vice versa) gets flagged for type correction. The intake template gets this wrong constantly.
- **Bucket** — one of:
- `fix-now` — crash, data loss, regression, blocks core flow, broken on common platforms, or trivial-and-cheap
- `fix-soon` — meaningful bug or papercut, not blocking, fits current focus
- `fix-later` — nice-to-have, edge case, low-traffic surface
- `already-fixed` — a merged PR fixes this; just needs closing
- `in-flight` — an open/draft PR is fixing this; just needs review/landing
- `needs-info` — repro unclear, missing version/platform, or contradictory
- `duplicate` — matches **another open public GitHub issue** (never a private `NIM-#` tracker item)
- `feature-request` — not a bug; route to roadmap
- `not-a-bug` — out of scope, by-design, or contradicts a prior decision
- **Severity** — critical / high / medium / low. Use judgment — a low-severity bug can still be `fix-now` if it's a one-line change. A high-severity bug can still be `fix-later` if the area is frozen.
- **Why** — one short sentence on why this bucket. This is the line I'll read when deciding what to work on.
- **Linked PR** — if found in step 2, surface it: `PR #MMM (open/draft/merged) "<title>"`.
- **Linked session** — if found in step 2, surface it: `session "<name>" (sessionId)`.
- **Duplicate target** — if `duplicate`, name the canonical **public** issue: `duplicates #MMM`. Never close a public issue against a private `NIM-#` tracker item. If the only match is a private tracker item, the issue is **not** a duplicate — bucket it normally and add a `(tracked internally as NIM-XYZ)` note for your own reference only.
4. Output report
Print a single triage report. Group by bucket, newest first within each bucket. Lead each line with the issue number, title, current type, and severity:
## fix-now (N)
- #376 "ScheduleWakeup payload rendered as user message" [type: Bug] — high
Why: visible transcript corruption, affects every Claude Code session.
PR: #410 (open) "fix: render ScheduleWakeup as tool call" — review, don't reinvestigate.
Session: none.
## already-fixed (N)
- #371 "Sync hangs on large tracker bodies" [type: Bug] — high
Fixed by PR #408 (merged 2026-05-29). Close with pointer.
## in-flight (N)
- #374 "Respect CLAUDE_CODE_AUTO_COMPACT_WINDOW" [type: Feature → should be Bug]
PR: #412 (draft) — wait for landing. Also: type is wrong, propose correction.
## fix-soon (N)
- #380 "..." [type: BugNimbalyst - The open-source visual workspace for Claude Code, Codex, and OpenCode. Run multiple coding agents in parallel, edit their work visually in markdown, mockups, and diagrams, and track tasks. Free, MIT-licensed desktop app for macOS, Windows, Linux, with mobile companion for iOS and Android.
Repo: nimbalyst/nimbalyst
Other commands on nimbalyst.
analyze-sessions
Audit recent AI coding sessions to find repeated mistakes, speed losses, and missed Nimbalyst tool usage — then propose harness improvements
audit-updates
Triage npm audit findings and produce a prioritized, supply-chain-cautious package-update plan, then apply approved batches
autofix-issues
Survey recently triaged GitHub issues, propose the ones safe to fix without a product decision, and fan the selected ones out to independent sessions.

