plugins/claude-ops/skills/ops-triage/SKILL.md
Cross-platform issue triage. Pulls from Sentry (MCP), Linear (MCP), GitHub Issues (gh). Cross-references against code to find already-fixed issues. Auto-resolves fixed ones. Dispatches agents for active issues.
npx skillsauth add davepoon/buildwithclaude ops-triageInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Before triaging, load:
cat ${CLAUDE_PLUGIN_DATA_DIR:-$HOME/.claude/plugins/data/ops-ops-marketplace}/preferences.json — read project registry for repo pathscat ${CLAUDE_PLUGIN_DATA_DIR}/daemon-health.json — ensure services healthymcp__doppler__*) → env → Doppler CLI fallback → password manager: SENTRY_AUTH_TOKEN, LINEAR_API_KEY, GITHUB_TOKEN${CLAUDE_PLUGIN_DATA_DIR}/memories/topics_active.md for issue context| Command | Usage | Output |
|---------|-------|--------|
| gh issue list --state open --json number,title,body,labels,assignees,createdAt,url --limit 50 | Open issues | JSON array |
| gh issue list --repo <owner/repo> --state open --json number,title,labels,createdAt --limit 20 | Repo issues | JSON array |
| gh pr list --state merged --search "#<N>" | PRs referencing issue | JSON array |
| gh issue close <N> --comment "<msg>" | Close issue | Confirmation |
| Command | Usage | Output |
|---------|-------|--------|
| sentry-cli issues list --project <slug> --status unresolved | Unresolved issues | Issue list |
| curl -H "Authorization: Bearer $SENTRY_AUTH_TOKEN" "https://sentry.io/api/0/projects/<org>/<proj>/issues/?query=is:unresolved" | API fallback when MCP unavailable | JSON array |
| Command | Usage | Output |
|---------|-------|--------|
| curl -X POST https://api.linear.app/graphql -H "Authorization: $LINEAR_API_KEY" -H "Content-Type: application/json" -d '{"query":"{ issues(filter: {state: {type: {in: [\"started\",\"unstarted\"]}}}) { nodes { id title state { name } priority assignee { name } } } }"}' | Active issues | JSON |
If CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 is set, use Agent Teams when dispatching fix agents for multiple issues. This enables:
Team setup (only when flag is enabled, Phase 4 dispatch):
TeamCreate("triage-fixers")
Agent(team_name="triage-fixers", name="fix-[issue-id]", subagent_type="ops:triage-agent", ...)
Use broadcast(content="Root cause found: missing index on users.email — check if your issue is related") to share discoveries.
If the flag is NOT set, fall back to standard parallel subagents.
Run all of these simultaneously:
gh issue list --state open --json number,title,body,labels,assignees,createdAt,url --limit 50 2>/dev/null
REGISTRY="${CLAUDE_PLUGIN_ROOT}/scripts/registry.json"
[ -f "$REGISTRY" ] || REGISTRY="${CLAUDE_PLUGIN_ROOT}/scripts/registry.example.json"
for repo in $(jq -r '.projects[] | select(.gsd == true) | .repos[]' "$REGISTRY" 2>/dev/null); do
echo "=== $repo ==="
gh issue list --repo "$repo" --state open --json number,title,labels,createdAt --limit 20 2>/dev/null
done
If Sentry MCP is connected, fetch unresolved issues for all projects.
Otherwise run: echo "Sentry MCP not available"
Use mcp__linear__list_teams to get team IDs, then mcp__linear__list_issues with filter: {state: {type: {in: ["unstarted", "started"]}}} for each team.
For each Sentry issue, check if it's already fixed:
grep for the relevant code in the affected repo.git log --oneline --all -- [file] 2>/dev/null | head -20For each GitHub Issue:
gh pr list --state merged --search "#[N]")For issues confirmed fixed in code AND deployed, show the full list and use AskUserQuestion:
Found N issues confirmed fixed and deployed:
[Sentry] [title] — fix in [commit], deployed [time ago]
[Linear] [title] — fix in [commit], deployed [time ago]
[GitHub] #[N] [title] — referenced in merged PR #[M]
[Resolve all N] [Review each one] [Skip — don't auto-resolve]
If user picks "Review each one", show each issue individually with [Resolve] / [Skip] via AskUserQuestion.
For confirmed issues:
mcp__linear__update_issue with state: "Done"gh issue close [N] --comment "Auto-closed: fix confirmed deployed"Log all resolutions.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
OPS ► TRIAGE — [date]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
AUTO-RESOLVED (already fixed)
✓ [Sentry] [title] — fix in [commit]
✓ [Linear] [title] — closed
✓ [GitHub] #[N] [title] — closed
ACTIVE ISSUES (needs work)
CRITICAL [source] [title] [age] [assigned?]
HIGH [source] [title] [age] [assigned?]
MEDIUM [source] [title] [age] [assigned?]
──────────────────────────────────────────────────────
Use batched AskUserQuestion calls (max 4 options each):
AskUserQuestion call 1:
[Dispatch agent for [top critical issue]]
[Dispatch agent for [second issue]]
[Assign issue to sprint (Linear)]
[More...]
AskUserQuestion call 2 (only if "More..."):
[Bulk-assign all HIGH to current sprint]
[Done]
When dispatching for an issue, spawn an Agent using agents/triage-agent.md with:
Filter to $ARGUMENTS project/source if specified.
Use TaskCreate for each issue being investigated. Update with TaskUpdate as issues are resolved/dispatched/skipped. Gives the user a live triage checklist.
When Sentry MCP hits quota limits, fall back to WebFetch with https://sentry.io/api/0/projects/<org>/<project>/issues/?query=is:unresolved (using SENTRY_AUTH_TOKEN header). Same for GitHub issue details when gh is slow.
Use WebSearch to find known solutions for recurring errors (e.g., "AWS RDS connection reset", "ECS task stopped reason"). Include findings in the triage board as context.
When dispatching fix agents, use LSP to find symbol definitions, references, and call hierarchies. This helps agents navigate unfamiliar codebases faster than grep.
tools
Assesses the current state of the startup project and recommends what to focus on next. Use when there is a need or a question from the user to understand what the next steps are or what to focus on next.
data-ai
Use at the start of any conversation about a startup idea, product validation, founder strategy, or work inside a `startup/` workspace. Establishes file conventions, voice-input handling, subagent dispatch rules, and how to update each artifact safely. Activate before invoking any other startup-superpowers skill.
tools
Manages the founder's survey-based validation — crafting the right questions, deploying a survey to the internet, and analyzing results against hypotheses. Use when the founder wants to run a survey, create survey questions, validate hypotheses at scale, check how a survey is going, understand whether a survey is the right tool right now, or deploy a question set to get quantitative signal. Also bring this up if you believe that creating a survey to collect quantitative evidence may be useful at this point.
development
Guides the founder through designing and optionally building the simplest MVP or prototype that validates their current hypotheses. Use when the founder wants to build something to test assumptions, discusses what to build next, wants to interpret results from a live MVP, or is deciding whether the current approach is still right. Also use when a founder proposes something to build — the skill will check whether the proposed form is the simplest thing that generates honest signal.