loopfleet

Self-hosted

Your loops run inside your own coding agent, on your machine, with your keys. We hold the configuration. We never hold the work.

The shape of it

Loop Fleet is a control plane. It stores what your loops are: their goal, their mission, what they own, how often they should run, and what is on their board. It does not run them.

Your director is the data plane. It is one agent, running wherever you already run a coding agent: Claude Code, Codex, Cursor, or anything else that can read a URL and run commands. It polls us to learn what exists, claims a loop, runs a cycle against your actual repository on your actual disk, and reports back what happened.

your machine                          loop fleet
─────────────                         ──────────
your agent   ──── polls config ────▶  loops, missions, boards
(your keys)  ◀─── what to run ─────   questions, answers
     │
     ├─ reads and writes your repos
     ├─ runs your tests
     └─ never sends us any of it

What actually crosses the wire

Stays on your machineComes to us
Source code, diffs, commits
Model API keys
Repository credentials
Environment variables and secrets
Test output, logs, build artifacts
Loop names, goals and missions
Board items you or the director write
Cycle results the director chooses to report
Questions and your answers
When the director last checked in

We never receive a repository credential. There is nothing to grant, revoke or rotate on our side, because the director authenticates to your code the same way you already do: as you, on your machine.

Connecting it

Generate a pairing link in the console. It looks like this:

https://relay-saas-web-production.up.railway.app/onboard/<token>

The Copy button puts a ready instruction on your clipboard, not a bare URL, so pasting it into your agent is the whole action:

Set yourself up as my Loop Fleet director using this page. Tell me what it
involves first, then go ahead once I say yes. Keep me posted briefly: a line
or two, not a report, unless something needs my decision.

https://…/onboard/<token>

That page is plain text on purpose. There is no SDK to install and no JSON to parse: the agent reads it the way a person would. It contains its identity, its token, and the whole protocol, with the token already filled into every example so nothing has to be assembled.

The link is a credential. It shows the token once. Anyone holding it can act as your director. Do not paste it into a shared channel or an issue. If it leaks, generate a new one, which rotates the token and kills the old link immediately.

Keeping it running

The director should keep polling on a schedule rather than running once. How you do that is yours to choose: a cron entry, a launch agent, a loop in a terminal you leave open. If it stops, nothing breaks, it simply stops picking up work, and the console shows it as offline within fifteen minutes.

Two directors, on purpose

You can connect more than one. Pairing again does not replace the first: it adds a second, on a laptop and a desktop, or a machine at home and one that stays on.

They will not collide. Before running a cycle a director claims the loop, and the claim is a lease with a deadline rather than a lock:

That is the entire redundancy story. Neither director needs to know the other exists.

When it needs you

A director decides for itself by default. For the things that are genuinely not its call, it asks: spending money, publishing, deleting what it did not create, anything irreversible that reaches outside your machine. The question appears in your console with a box to answer it, and the answer goes back as the next thing it acts on.

It is told to ask a decision rather than a situation, to say what it will do if you never reply, and to go work something else instead of blocking on you.

Fully hosted, later

We will run the director for you: nothing to install, loops running while your laptop is shut, usage billed as credits instead of your own model spend. It is not available yet.

A fleet you connect today moves across without reconfiguring anything, because the loops already live here. Only the thing running them would change.

← Back to the console