Invoice total renders 100× too large 2 tests failing passing

Assign it to Michael

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.

Jira Asana Trello Monday GitHub

Runs

rodi-mac · 2 minutes ago
Invoice total renders 100× too large demo/web + demo/api · michael/fix-invoice-total-renders-100x Fixed pull request
Before the change 1 failed, 1 passed
After the change 2 passed

1 file changed · format.py   also cloned, unchanged: demo/api

The work loop

Four steps, and the only thing that reaches your repository at the end is a pull request someone still has to approve.

1

A task arrives

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.

2

Michael queues a job

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.

3

A runner takes it

Exactly one runner wins each job. It clones into a throwaway working copy and works on a branch named michael/<task>.

4

You get a pull request

The task lands on in review with a link to the PR — or on blocked, saying plainly what stopped it. No silent failures.

Runners are just machines you already trust

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.

Nothing to install

The snippet downloads the runner script from Michael itself, so the machine never needs a copy of the repository.

Scale by starting more

Each runner takes one job at a time. Want more throughput? Start another — a job is handed to exactly one of them.

Runs in the background

Ship it as a launchd service or a container behind --profile runner, and it restarts itself if it dies.

Built to be boring about access

An agent with commit rights is a security question first and a feature second.

Michael holds no API keys

Every sign-in lives on the runner machine. There is no key here to leak.

Never your default branch

Work happens on a task branch in a throwaway clone. The output is a PR.

Narrow tokens, shown once

A runner token reaches four endpoints and nothing else. Michael shows it once and stores it hashed — lose it and you rotate, not recover.

Point it at a repository and see

Sign in, write one task with a repo on it, and watch a pull request come back.