.opencode/skill/pr-triage/SKILL.md
Context-efficient PR comment triage. Evaluate, decide, act. Fix important issues, resolve the rest silently.
npx skillsauth add joelhooks/swarm-tools pr-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.
Replies are SECONDARY to addressing concerns.
┌─────────────────────────────────────────────┐
│ EVALUATE → DECIDE → ACT │
├─────────────────────────────────────────────┤
│ │
│ 1. FETCH UNREPLIED (metadata only) │
│ → Get root comments without replies │
│ → ~100 bytes/comment, paginated │
│ │
│ 2. EVALUATE each comment │
│ → Fetch body only if path looks important│
│ → Skip: metadata files, style nits │
│ → Check: security, correctness, tests │
│ │
│ 3. DECIDE action │
│ → FIX: implement change, reply, resolve │
│ → RESOLVE: close silently, no reply │
│ → DEFER: create cell, resolve │
│ │
│ 4. ACT │
│ → Fix issues in code │
│ → Resolve threads (not reply) │
│ → Reply ONLY when you fixed something │
│ │
└─────────────────────────────────────────────┘
| Comment Type | Action | Reply? | |--------------|--------|--------| | Security/correctness bug | FIX → reply with commit | ✅ Yes | | Valid improvement, in scope | FIX → reply with commit | ✅ Yes | | Valid but out of scope | Create cell → resolve | ❌ No | | Style/formatting nit | Resolve silently | ❌ No | | Metadata file (.jsonl, etc) | Resolve silently | ❌ No | | Already fixed | Reply with commit → resolve | ✅ Yes | | Disagree with suggestion | Resolve silently | ❌ No |
# Get unreplied root comments (start here)
bun run scripts/pr-comments.ts unreplied owner/repo 42
# Evaluate: fetch body for specific comment
bun run scripts/pr-comments.ts expand owner/repo 123456
# Act: resolve without reply (preferred)
bun run scripts/pr-comments.ts resolve owner/repo 42 123456
# Act: reply then resolve (only when you fixed something)
bun run scripts/pr-comments.ts reply owner/repo 42 123456 "✅ Fixed in abc123"
# Helpers
bun run scripts/pr-comments.ts summary owner/repo 42 # File-level overview
bun run scripts/pr-comments.ts list owner/repo 42 # All metadata
import { fetchMetadata, fetchBody, resolveThread, reply, getThreadId } from "./scripts/pr-comments.ts";
const comments = await fetchMetadata("owner/repo", 42);
// Find unreplied root comments
const repliedTo = new Set(comments.filter(c => c.inReplyToId).map(c => c.inReplyToId));
const unreplied = comments.filter(c => !c.inReplyToId && !repliedTo.has(c.id));
for (const c of unreplied) {
// Skip metadata files - resolve silently
if (c.path.endsWith('.jsonl') || c.path.includes('.hive/')) {
const threadId = await getThreadId("owner/repo", 42, c.id);
if (threadId) await resolveThread("owner/repo", threadId);
continue;
}
// Evaluate important files
const full = await fetchBody("owner/repo", c.id);
if (full.body.includes('Critical') || full.body.includes('security')) {
// FIX IT, then reply
// ... implement fix ...
await reply("owner/repo", 42, c.id, "✅ Fixed in abc123");
}
// Resolve either way
const threadId = await getThreadId("owner/repo", 42, c.id);
if (threadId) await resolveThread("owner/repo", threadId);
}
.hive/issues.jsonl - auto-generated metadata.hive/memories.jsonl - auto-generated metadata| Action | Context Cost |
|--------|--------------|
| unreplied | ~100 bytes/comment |
| expand (1 comment) | ~5KB |
| resolve | 0 (GraphQL mutation) |
| reply | ~200 bytes |
Rule: Fetch <10 bodies per triage session.
scripts/pr-comments.ts - Full SDK with Zod schemasreferences/gh-api-patterns.md - Raw jq patterns, GraphQL, paginationdevelopment
Patterns for testing code effectively. Use when breaking dependencies for testability, adding tests to existing code, understanding unfamiliar code through characterization tests, or deciding how to structure tests. Covers seams, dependency injection, test doubles, and safe refactoring techniques from Michael Feathers.
tools
Principles for building reusable coding systems. Use when designing modules, APIs, CLIs, or any code meant to be used by others. Based on "A Philosophy of Software Design" by John Ousterhout. Covers deep modules, complexity management, and design red flags.
development
Multi-agent coordination patterns for OpenCode swarm workflows. Use when working on complex tasks that benefit from parallelization, when coordinating multiple agents, or when managing task decomposition. Do NOT use for simple single-agent tasks.
development
Meta-skill for generating new skills with proper format and structure. Use when creating new skills for the swarm system or when agents need to generate skill scaffolds. Ensures skills follow conventions (frontmatter format, directory structure, bundled resources).