Agents propose. You approve.
One loop, enforced everywhere. Here is what happens between the instruction and the merge, and what Foreman will not do on the way.

- Step 1Assign a taskType it or say it.
- Step 2The agent worksIn its own worktree.
- Step 3Tests, then a draft PRVerified, then pushed.
- Step 4You review and mergeThe button is yours.
The loop, step by step.
Assign a task
Register a repository as a project, then give Foreman a task: a title and an objective, typed or spoken. Pick the autonomy level and the capabilities the agent may use.
Choose Plan for a read-only pass that proposes an approach, or Build to let the agent edit inside its worktree.
The agent works
Foreman starts a real Claude Code worker in a managed terminal session, on its own branch, in its own git worktree. Your checkout is never touched.
Output streams to the app as it happens. Commands the policy engine marks as risky pause for your approval. Files the agent produces are captured into the Library.
Tests, then a draft PR
When the worker exits, Foreman runs the project’s build command in the task’s worktree. The exit code, not the agent’s opinion, decides whether the task is complete.
A verified branch is pushed and opened as a draft pull request, with the diff, the checks and the task’s history.
You review and merge
You read the diff and decide. Foreman never merges its own pull requests and never marks a draft ready for review. The merge button belongs to you.
Complete means verified.
“The worker stopped” is not the same as “the work is done.” After a clean exit, Foreman runs the build in the worktree and records exactly what happened, including when it could not check.
| Build outcome | Task status |
|---|---|
| The build fails | Failed with the log tail on the timeline |
| The build passes | Completed |
| A build command is set but can’t run | Blocked verification was asked for and couldn’t happen |
| No command, or no changed files | Unchanged recorded as “not run”, so nothing implies it was verified |
What runs where.
Everything that matters runs on your machine. The interface talks to a local orchestrator; the orchestrator talks to everything else.
Every session has a state you can name.
No spinners that mean “something”. A session is always in exactly one of these states, and a restart puts it back where it was.
Stop babysitting. Start supervising.
Put every AI agent you run behind one review loop.
Thanks. You are on the list for an invitation.
This is a Lacoura portfolio website: the form does not send anywhere.