A repo per agent session, and dormant repos are free.
Sessions that spin up and tear down in seconds should not leave infrastructure running up costs behind them. Create a repository per user or per session in under 100 ms, commit every action, undo with a single request — and when the session ends, what is left is a repository rather than an idle disk. Every one of them is still a real git remote.
Commit over REST, no checkout anywhere
POST /v1/orgs/acme/repos/session-1/commits
{
"branch": "main",
"expected_parent": "3f2a…", // 409 + current tip on conflict
"message": "agent step 12",
"context": { "run": "r-42" }, // your audit blob
"operations": [
{ "op": "put", "path": "src/app.js", "content": "…" },
{ "op": "delete", "path": "notes.txt" }
]
}Undo is a primitive, not a project
Branch, reset, and revert over REST. Reset the agent's branch back to commit A and its later commits stay reachable by SHA until garbage collection — undo without destroying the audit trail.
Reads are version-native: any file at any ref with content-addressed ETags, tree listings, diffs, and paginated history.
Still git, always
Every repo is clonable and pushable with stock git and a scoped token, over HTTPS or SSH. Export any repo — or the whole org — as standard bundles at any time. No lock-in is a stated product principle.
Fleet-scale by construction
Batch create and delete a thousand repos per call; list millions with keyset pagination. A dormant repo is a handful of cold objects —dormant repos are free.
A commit made here can run CI here
A .weft/*.yml file in the repository runs on our runners, and it starts from the commit route above just as it starts from agit push — so an agent that commits over REST gets the same checks a person pushing a branch gets. One throwaway container per job, a log you can read while it is still being written, and a verdict on the commit that the land queue waits for. What runs, and what is refused.