GitHub issue auto-triage
New issue → labeled, assigned, and linked to similar issues in 8 seconds.
- ✓ Ran full test suite → 218 passed, 0 failed (12.3s)
- ✓ Coverage delta: +0.4% on `src/lib/*`
- ✓ No breaking changes detected in public API
Open-source maintainers drown in untriaged issues. Most are duplicates or belong to the wrong area.
Every new issue arrives labeled, with `Possible duplicates: #421, #788` in a comment, and a suggested code owner mentioned.
Ingredients & skills
- ANTHROPIC_API_KEY
- GITHUB_WEBHOOK_SECRET
- GITHUB_TOKEN
- OPENAI_API_KEY
- Anthropic
- GitHub
- OpenAI embeddings
- github-mcp
How it works
GitHub webhook fires on `issues.opened`. Claude reads the title and body, picks labels from your existing label set, finds duplicates by embedding similarity, and assigns the right code owner.
1 — Issue webhook
Verify the GitHub signature. Reject delivery retries by id.
2 — Embed and search duplicates
Maintain a pgvector table of all issue bodies. Compare new body cosine-distance, top 5.
3 — Label, assign, comment
Use the GitHub MCP server so the bot doesn't need its own token in code.
await github.issues.addLabels({ owner, repo, issue_number, labels });
await github.issues.createComment({ owner, repo, issue_number, body: dupNote });The button above runs the same command with your saved config. This is the raw CLI form.
gh locker apply issue-triage