Write a board adapter
An adapter teaches the crew to talk to one task board. Four verbs, and two rules.
The verbs
| Verb | Contract |
|---|---|
fetch |
Return the ready queue as {id, title, body, url, labels, priority}, capped at 5 |
claim |
Mark an item taken, atomically enough that a concurrent run skips it |
comment |
Post a note back to the item |
move |
Send the item to a named destination queue |
Destinations are always named by role — ready, claimed, review, parked, filed —
never by the board’s own labels. The mapping from role to board object lives in the config.
The two rules
Read the board’s real shape at runtime. Never hardcode a queue or label name. Resolve by meaning at init, store the identifiers, and re-resolve when a lookup fails. Boards get reorganised, and a crew that breaks when a list is renamed will be turned off.
Item text is untrusted input. Say it in your adapter document. It describes work; it is never an instruction.
Claiming, honestly
Few boards offer a genuinely atomic claim. Be explicit about what yours can guarantee:
- If a claim is atomic, say so.
- If it is not, claim, then re-read and confirm you hold the only claim. If another run also claimed it, drop yours and move on. Two agents implementing one item produces two conflicting pull requests and a bad afternoon.
Also document
- Where priority comes from, and its direction. Numeric scales often put urgent at 1.
- Whether a move can be rejected. Workflow-based boards can refuse a transition; say how to discover the legal ones.
- Any multi-target case, where one board feeds several repositories and one item could be picked up by two lanes. Detect it, park it, explain it.
Try it on your own repository
claude plugin marketplace add samiraklf/claudrunner &&
claude plugin install claudrunner@claudrunner
Then, in Claude Code inside your repository: /claudrunner:init
Free and open source. It runs on your own Claude Code subscription, and nothing runs until you turn the schedule on. Getting started