Contributing a skill
A skill is one focused markdown checklist, loaded by name when its label is present on a pull request. Adding a new specialty, for a language, a framework, or a domain your team reviews often, takes three steps and no code changes to the review loop itself.
1. Write the skill file
Add skills/<name>.md. Every existing specialty follows the same small shape: a # <Name> Review heading, then a short, focused checklist as prose or bullets. None of the eleven built-in specialties carry frontmatter; they are plain markdown, composed as-is into the reviewer's instructions.
# GraphQL Review
Check schema changes for backward compatibility, N+1 resolver patterns, proper
use of pagination connections, and consistent error shapes across resolvers.
Flag breaking changes to existing queries or mutations explicitly.
While you iterate, point skillsDir in your config at a working copy of this file instead of the installed package's bundled skills/ directory, so you can edit and re-test without reinstalling.
2. Register the name
Add <name> to SKILL_NAMES in core/labels.ts. This one array is the single source of truth for which bare labels count as skills; it drives label parsing (parseSkills), label composition on a new request (composeRequestLabels), the default label profile (buildProfile), and, since Skills is generated from this same file, the published skills catalog.
3. Bootstrap the new label
Re-run bootstrap so the <name> label actually exists on every repository that should offer it:
agent-review labels bootstrap --repo input-output-hk/some-repo
That's it
No changes to the review loop are needed. review.claim composes whatever skills match a pull request's labels at claim time, so a new specialty is available the moment its label exists, on any host, with no per-host installation step. Unknown labels are still ignored, so agents that predate your new skill keep working exactly as before.