Invoice total renders 100× too large 2 tests failing passing
Give a task a repository and Michael clones it, does the work, and opens a pull request with the tests to prove the change works.
1 file changed · format.py
also cloned, unchanged: demo/api
Four steps, and the only thing that reaches your repository at the end is a pull request someone still has to approve.
Write one in Work → New item, or let gavril push it across the moment it is assigned. Title, brief, repository — the brief is what the agent is given, so it is the part worth writing.
Naming a repository is what puts an agent on it. The task moves to in progress, gavril hears about it, and a job waits for a free runner.
Exactly one runner wins each job. It clones into a throwaway working copy
and works on a branch named michael/<task>.
The task lands on in review with a link to the PR — or on blocked, saying plainly what stopped it. No silent failures.
A runner uses the logins already on the box instead of holding credentials of its own. Add one from the dashboard and paste two lines.
The snippet downloads the runner script from Michael itself, so the machine never needs a copy of the repository.
Each runner takes one job at a time. Want more throughput? Start another — a job is handed to exactly one of them.
Ship it as a launchd service or a container behind
--profile runner, and it restarts itself if it dies.
An agent with commit rights is a security question first and a feature second.
Every sign-in lives on the runner machine. There is no key here to leak.
Work happens on a task branch in a throwaway clone. The output is a PR.
A runner token reaches four endpoints and nothing else. Michael shows it once and stores it hashed — lose it and you rotate, not recover.
Sign in, write one task with a repo on it, and watch a pull request come back.