/how

How yardr works

A workspace · yard routes issues · beads of work to whoever works them. One page, drawn from the starter pack.

As of yardr v0.7.0 (starter pack at commit 2919bce, glossary at 48f0c31), 10 Oct 2026.

01 / the pipeline · line

An issue follows its flow, stage by stage.

A route sends each stage to a group, and a session is one agent of that group working the issue. At approved, the merge queue · assembly tests and merges it. A person or an agent can move it by hand.

an issue · beadsolid: an outcome a session reportsdashed: a move a person or agent makes by handdecide is a siding: a person answers, then moves the issue. Swipe the drawing.

who works a step / a group's runner starts the work

herdr

Agents

An agent in herdr, in a copy of the repo of its own, with your own login.

exec

A script

A shell command. The merge queue is one: it tests and merges.

manual

People

Nobody runs: a human picks the issue up, or answers on the siding.

peer

Another workspace

An issue worked for a linked workspace, and handed back.

02 / the words

Every railway word, beside its plain one.

The workspace's own words, for what a person meets every day. yardmaster stays as it is. The rest are plain words, kept because they name general machinery.

The railway words

plainrailwaymeans
issuebeadone durable piece of work
repodepota git repository or a plain directory that issues are worked in
workspaceyardone installation of yardr: its store, its agents and its repos
hosted workspaceStationyour own workspace, hosted and run for you, with its own agents and repos
agents, agentcrew, crew memberthe always-on agents of the workspace, tied to no issue
merge queueassemblythe starter pack's group that tests an approved issue and merges it into the base
pipelinelinewhat an issue travels in a repo: its flow's stages, the groups the routes put at them, and the agents and people bound to those groups; a pack is a pipeline written down, bound to no one
grouped changetrainan issue whose children merge into its branch and reach the base as one, after one review of the whole
sub-issuewagona child of a grouped change on the fast lane: built in parallel, a quick run of the tests, no review of its own
mergeslandsan approved issue reaching the base branch
yardmasteryardmasterthe agent that coordinates: shapes issues, keeps the pipeline moving, answers people. It has no everyday word

The plain words

flow
the stages an issue of some type goes through, and the moves allowed between them
stage
one step of a flow: a status or column, in a tracker
route
which group takes the issues of a stage
group
who works a stage: a pool of agents, a script, people, or another workspace
runner
how a group's work starts: herdr, exec, manual or peer
session
one agent working one issue in one stage
outcome
how a session says its stage ended: done, changes, question, failed
hook, source, thread, link
a webhook endpoint; the outside system it receives from; a conversation there; an issue's tie to its tracker issue
peer
another workspace this one is linked with
pack
a way of working as one directory: flows, groups, roles, agents

03 / a pack

A way of working is one directory.

The flows, the groups that work them, the roles as prompt files, and the agents. It names no agent product, model, repo or person; those are asked for when a repo is set up from it.

packs/starter/
├── pack.yaml            the flows, the groups, the crew
├── flows/default/       one file per stage
│   ├── backlog.md
│   ├── new.md
│   ├── review.md
│   ├── approved.md
│   └── decide.md
├── roles/               the prompts
│   ├── builder.md
│   ├── reviewer.md
│   ├── merger.md
│   └── yardmaster.md
└── scripts/merge-local  what the assembly runs
flows:
  default:
    stages:
      backlog:  { group: backlog,   manual: [new, decide] }
      new:      { group: builders,  outcomes: { done: review, question: decide } }
      review:   { group: reviewers, outcomes: { done: approved, changes: new, question: decide } }
      approved: { group: assembly,  outcomes: { done: merged, failed: new, question: decide } }
      decide:   { group: decisions, manual: [backlog, new] }
      merged:   { end: true }

groups:
  builders:  { agent: roles/builder.md,  limit: 5 }
  reviewers: { agent: roles/reviewer.md, limit: 3 }
  assembly:  { run: scripts/merge-local, limit: 1 }
  backlog:   { people: true }
  decisions: { people: true }

yardr depot init <depot> sets a repo up from it: the import asks which agent and model each group of agents runs, and who is in each group of people. Every pack, with every file

04 / as it happened

Ten minutes, three groups, one person.

Issue yardr.dev-t7pr, which built the section below the fold of the front page on 9 October 2026, told from the workspace's event log. The site you are reading deployed from that push.

And issue yardr-zw3v, “Notice a dead daemon and offer to start it”, filed to merged on 25 October, 14:41 to 17:02, in four shots of its page in the web view.

The issue yardr-zw3v in the web view: titled 'Notice a dead daemon and offer to start it', stage merged, created Oct 25 14:41, closed Oct 25 17:02
14:41 The issue: opened 14:41, closed 17:02 the same day.
The builder's note on yardr-zw3v: done on its branch, a live check on a scratch yard, and the test line reading pass, 30 packages ok, 0 failed
build The builder's note: done on its branch, proved live, tests green.
The reviewer's note on yardr-zw3v: the diff reviewed against the goal, fixed forward in two commits, and the test line reading pass
review Fixed in two commits, tests passed, sent for security review.
The landing note on yardr-zw3v: merged 41a7754d, tested with the base’s copy of the tests
17:02 Merged, after the tests ran on exactly what merged.

05 / what yardr is not

Not a framework

where you program a group of agents · crew. yardr runs the agents you already have on your repos’ issues.

Not a company of agents

running a business on its own. yardr is a pipeline for one thing, changes to code, with your yes where you want it.

Not a hosted builder

where an AI builds the whole product for you. yardr works in your repository, on your machine, with your logins, and merges only what passed your review and your tests.

06 / principles

A design or a change to yardr is judged by three things.

01

Generalization

Few concepts, each carrying many cases. A group is the one answer to who works an issue, and a route names the group, never which runner it is.

02

Composability

The concepts combine without knowing each other. A flow names no group, so the same flow can be worked by agents in one repo and by people in another.

03

Simplicity

One store, one writer, events in order. The smaller mechanism is chosen and the special case is left out until use asks for it.

one at worksignalbox draws the workspace where yardr is built as a railway, live: each repo a station, each issue a wagon.signalbox.yardr.dev

Ask for an invite.

yardr is in preview. A mail to yardmaster@yardr.dev asks for yours.

Station

Your own hosted workspace, run for you at my.yardr.dev, with its own agents and repos.

Your own login

Agents run with your own login for claude, codex, grok, kimi, kiro, opencode or pi. Station keeps no AI key of its own.

footplate

The desktop app for macOS and Linux puts the questions waiting for you in one window.

Free on your machines

yardr is free to run on your own machines. Station is paid.