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.

A pipeline of five stacked planes: inputs gathered, a plan, checks passing, a review, and a finished, approved result.
  • 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.

1

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.

2

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.

3

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.

4

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 outcomeTask status
The build failsFailed with the log tail on the timeline
The build passesCompleted
A build command is set but can’t runBlocked verification was asked for and couldn’t happen
No command, or no changed filesUnchanged 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.

Your machine
Desktop appThe interface. It never runs a shell command itself.
Voice layerCapture, transcribe, interpret, read back.
PhoneThe same app over your tailnet, opt-in.
Local orchestratorREST and WebSocket on 127.0.0.1:4319. Tasks, sessions, approvals, recovery. SQLite on disk.
Policy engineAllow, audit, require approval or deny.
Process managerClaude Code workers in managed terminals.
Git managerCheckpoints, branches, worktrees, diffs.
KeychainmacOS Keychain or Windows Credential Manager.
GitHubDraft pull requests, opened for your review.
CapabilitiesImage, video, speech and chat tools, per project.
TailscaleRemote access, only when you turn it on.

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.

Queued Preparing Running Waiting for approval Testing Completed
Or, when it needs you:Paused Blocked Failed Recovering

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.