Skip to content

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.

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:

loops/start-dev.md
---
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: required
step: implement
agent: 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.