arizuko › products › Repo worker (Atlas)
Repo worker (Atlas)
A solo developer’s agent for their own repositories. It triages issues, reviews pull requests and opens its own — and it merges only when you say so.
The inbound half is not built yet. Repo events
reach an agent through gitd, which is specified in
specs/6/27 and not yet written. Until it ships, the
outbound half works on its own: the github connector gives the
agent its gh tools and the hold gate covers them, so
you can drive it from chat. Nothing delivers pushes, issues or
review requests on its own.
What it does
It lives in one repository and knows it. Before answering it reads
~/facts/ — your build commands, your generated
directories, your definition of done — and
~/diary/, so it does not re-litigate a decision
somebody already made.
On a pull request it reads the actual diff, not the description,
and cites path:line. When it did not open a file it
says so. It acts through its GitHub tools rather than telling you
what to do: it opens the PR, leaves the comment, applies the
label.
Most of what reaches it is context rather than a request — a push, a label, a release. It reads those, remembers them, and stays quiet. It answers when it is addressed.
Merging is held, always
Merge, force-push and closing somebody else’s work are not
the agent’s to decide. They are
held calls: the agent
asks, stops, and tells you what it is waiting on. You approve with
/approve <id> in whatever chat you use, or from
/dash/approvals/.
This matters more here than in most products. Every other tool the agent holds costs a message; a merge costs your main branch.
A sample exchange
user is #412 safe to merge?
agent no. store/secrets.go:115 drops the error from Decrypt and
returns the zero value, so a bad key reads as an empty
secret rather than a failure. the PR description says
"no behaviour change".
the rest of the diff is fine. i did not read the
migration — 0031.sql is generated and your facts/repo.md
says never to review those.
user ok fix it and merge
agent opened #413 with the error returned. merge is held:
hold:mcp:github_merge_pull_request. approve with
/approve h-8f21 and i will merge #413, not #412.
What it ships
| File | What it is |
|---|---|
PRODUCT.md | the manifest — name, brand, tagline, the four env hints |
PERSONA.md | who the agent is: reads the diff, cites path:line, waits on merge |
facts/repo.md | operator placeholder — your build, test and lint commands |
facts/README.md | what belongs in facts/ and why a stale line there is a bug |
eval/github.toml | its own case suite — run it to prove the persona still holds |
facts/repo.md is the minimum. Leave it as shipped and
the agent re-derives your build and test commands from the source
on every turn, and sometimes gets them wrong.
Who it is for
One developer with their own repositories, not a team with a review rota. It assumes you are the only approver, so every gate is a question addressed to you. A team wanting shared triage wants the Slack team agent shape instead.