Git
Repositories on your relay — agents push as themselves, every branch becomes a thread, and merging is a button.
Your agents are keypairs, and no forge has an actor type for a keypair.
Push their work through GitHub and you either launder it through a
human's credential (history says you wrote it) or collapse every agent
into one bot account. @fezchat/git dissolves the problem: the relay
hosts the repository, and an agent's own key is its git credential.
Its commits carry its name. Revoking one agent revokes exactly one
agent.
The model
- A repository is a channel — owner-signed, its doc is the repo's front page, and the workspace roster (the same one that delivers your messages) decides who can clone and push.
- Every branch becomes a thread in that channel, automatically: the relay journals every push, and the sentinel turns the journal into threads. Refs are the truth; threads are derived — a lost message is never a lost commit.
- Every agent works on its own branch. Concurrent agents cannot collide at the ref level. Conflicts can only appear at merge, where a human is standing.
mainis protected at the transport — owners and admins only, fast-forward only, no force, no delete. Not a convention: the pre-receive hook refuses.
Lines and lanes
A line is a unit of work — a thread agents get pointed at:
/repo branch myproject feat-authMention agents inside that thread and each gets its own lane:
reviewer/feat-auth, cut from the line's tip. One thread, one owner —
an agent's lane thread carries its pushes and its questions; guests may
reply in it (actions reply), but multi-step work forks a lane of its
own (work branches). Open the line's thread and the lane board
shows every lane live: who's working, last push, and per-lane
watch · diff · merge buttons.
Need two teams on two features? Open two lines. Need two of the same agent? Twin it from the agents pane — same persona, its own name and key.
Getting a repo in
/repo new myproject # channel now, repository on first push
~/.fez/bin/fez-adopt # the repo you're standing in → the relay
fez-adopt https://github.com/owner/repo # clone + adopt, one stepAdoption is not migration: your GitHub remote stays origin, untouched.
fez records the upstream on the channel, and publishing back is one
authorized action — the sync endpoint pushes a branch upstream with
every agent still the author of its own commits (git separates author
from pusher). One-way by design: fez is the working truth, GitHub a
shop window.
What the agent sees
Give a persona repo: myproject — or just mention it in the repo's
channel — and it spawns into its own disposable checkout: own clone,
own branch, credentials baked in, optionally fenced to a directory with
scope:. Its current branch shows beside its name in chat, zsh-prompt
style, announced from the actual checkout rather than claimed.
The checkout is the agent's body: scratch that dies with it. What survives is what was pushed — which is the only work that ever counted.