usine
A long-running orchestrator polls the repositories you register. When an issue or pull request matches one of your Loops, it opens a Run, and the Loop's Agent works on the Item in a checkout on a Worker, through Claude Code, Codex, or Pi.
Loop files
Section titled “Loop files”Loops and Agents are Markdown files in the operator’s instance folder; the engine has no built-in Loop. A Loop’s frontmatter sets which issues or pull requests open a Run, whether the operator approves each Run before it starts, and which Agent does the work. Its body is the task the Agent receives.
This is loops/start-dev.md from the dogfood instance, which runs usine on its own repository:
---trigger: on: issue if: >- item.state == "OPEN" && item.labels.nodes.exists(label, label.name == "ready-for-agent") && !item.closedByPullRequestsReferences.nodes.exists(pr, pr.state == "OPEN")selector: repos: [basaltbytes/usine]approval: requiredstep: implementagent: developer---
Use the repository's `tackle-issue` skill to complete issue #{{ item.number }}: {{ item.title }}.
Before editing, remove `ready-for-agent` from the issue and add `agent-in-progress`. Complete the issue through a non-draft pull request whose body closes the issue. Do not merge it. Once the pull request is ready, remove `agent-in-progress` from the issue and add `ready-for-review` to the pull request.
If work cannot continue, add a comment to the issue that states the exact blocker. Do not add a workaround that changes the issue's scope.The same process serves a web UI on 127.0.0.1, where the operator approves and steers the work and follows its progress.
Read next
Section titled “Read next”Run a factoryCreate an instance folder, connect a GitHub App, and start usine up.
Write a LoopChoose which issues or pull requests start work and what the Agent is asked to do.
Operate RunsApprove, steer, retry, and cancel Runs from the web UI.
Architecture overviewThe packages, processes, storage, and Workers, and the path of one change through them.