Skip to content
Productivity
Command

/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

From plugin
nimbalyst
1.7k49 skills3 agents49 commands
Install
$ npx -y skills add nimbalyst/nimbalyst --agent claude-code

How 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.md
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,issueType

Sort 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: Bug
Read more
Ships withnimbalyst

Nimbalyst - 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.

Get the whole plugin

Other commands on nimbalyst.