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.
who works a step / a group's runner starts the work
Agents
An agent in herdr, in a copy of the repo of its own, with your own login.
A script
A shell command. The merge queue is one: it tests and merges.
People
Nobody runs: a human picks the issue up, or answers on the siding.
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
| plain | railway | means |
|---|---|---|
| issue | bead | one durable piece of work |
| repo | depot | a git repository or a plain directory that issues are worked in |
| workspace | yard | one installation of yardr: its store, its agents and its repos |
| hosted workspace | Station | your own workspace, hosted and run for you, with its own agents and repos |
| agents, agent | crew, crew member | the always-on agents of the workspace, tied to no issue |
| merge queue | assembly | the starter pack's group that tests an approved issue and merges it into the base |
| pipeline | line | what 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 change | train | an issue whose children merge into its branch and reach the base as one, after one review of the whole |
| sub-issue | wagon | a child of a grouped change on the fast lane: built in parallel, a quick run of the tests, no review of its own |
| merges | lands | an approved issue reaching the base branch |
| yardmaster | yardmaster | the 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.




05 / what yardr is not
where you program a group of agents · crew. yardr runs the agents you already have on your repos’ issues.
running a business on its own. yardr is a pipeline for one thing, changes to code, with your yes where you want it.
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.
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.
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.
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.
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.