The /yarnt agent skill
The MCP server gives an agent the tools to work your board. It does not
tell the agent what to do with them — an agent handed fourteen tools and no shape will
cherry-pick, re-litigate, and stop early. /yarnt is that missing half: a skill for
Claude Code that turns "you have tools" into "work your queue until it is empty, ship it, and
halt."
What it does, once you invoke it:
- Reads the repo's
.yarntfile to learn which Yarnt project this checkout is. - Pulls every ticket in that project assigned to its own robot — never yours, never unassigned ones.
- Reads each description and its comments as the spec, then does the work or dispatches it to subagents.
- Tests, commits, merges, deploys, and finishes the ticket.
- Hands back anything it is genuinely blocked on: a comment saying why,
unstart_ticket, reassigned to you. - Re-checks for work assigned while it was busy, then halts. No polling, no timers.
Setup
1. Connect the MCP server
In Claude Code, add the server and authorize it. Full details on the MCP page.
claude mcp add --transport http yarnt https://mcp.getyarnt.com
The consent screen asks you to pick or create a robot — a least-privilege workspace member the agent acts as. Create one named for the agent (“Claude” does nicely). Robots are exempt from the in-flight cap and are not paid seats.
2. Install the skill
mkdir -p ~/.claude/skills/yarnt
curl -o ~/.claude/skills/yarnt/SKILL.md https://getyarnt.com/docs/yarnt-skill.md
Or read it first: yarnt-skill.md. It is a plain Markdown file — edit it to match how your team ships. The deploy step in particular is a placeholder for your own runbook.
3. Tell the repo which project it is
Commit a .yarnt file at the repo root naming its Yarnt project:
project: Tell Me a Penguin
Which project a repo belongs to is a fact about the repo, like its remote — so it belongs in
the repo. Without the file the agent guesses from the directory name and asks you when the
guess is ambiguous, then writes the file itself. Committing it also gives a human somewhere to
override a bad guess, and lets a coordinator map projects to checkouts by globbing
*/.yarnt.
4. Assign it work
The agent only ever picks up tickets assigned to its robot. Assign them in the app, or over the tools:
whoami -> 470ed8e7-... Claude (integration)
update_ticket id=<ticket> assignee=470ed8e7-...
5. Run it
/yarnt
With an empty queue it says so and stops. That is the whole contract: it ends because there is no work left, not because a timer said so.
The robot works only its own queue. Tickets on your plate, or on nobody's, are never picked up — no matter how relevant they look. Assigning is the handoff.
Why it is shaped this way
| Rule | Why |
|---|---|
| Work the whole batch before re-checking | Left free to choose, an agent takes the easy tickets and leaves the queue's real work untouched. |
| Read the body, not the title | list_tickets shows one line. The spec is in the description and comments; designing from a title invents a different feature. |
| Blocked work escalates, never lingers | A ticket left in doing burns a WIP slot and makes every later run re-dispatch an agent onto the same dead ticket. Comment, unstart_ticket, reassign — and it is off the robot's queue by construction. |
| Comment before unstarting | unstart_ticket clears the blocked flag and its reason, so the comment is the only durable record of why the agent gave up. |
| Halt, don't poll | An agent that waits for work burns tokens watching an empty queue. Re-invoke it when you have assigned something. |
Other agents
The skill is written for Claude Code, whose skills are Markdown files with a name and a description. Nothing in the loop is Claude-specific — any agent that can call the MCP tools can follow the same instructions as a system prompt.
Questions about agents on Yarnt: help@getyarnt.com.