Air traffic control for AI coding

Nool 7.16: Fleets That Span Your Laptop and the Cloud

A fleet of coding agents can now spread across your machine and cloud sandboxes, be steered while it runs, and land on the branch your team's conventions name.

  • Pools of agents on this machine, Daytona and Modal.
  • A model gateway: cloud agents never hold your provider key.
  • nool fleet status and nool fleet ctl steer a running fleet.
  • Branch conventions, branch-aware leases and nool pr merge.

Until now, a Nool fleet was as wide as the machine it ran on. Five agents on a laptop meant five agents competing for the same cores, the same memory and the same patience. And once a fleet started, you could watch it, but the only control you had was stopping all of it.

Nool 7.16 changes both. A fleet can now spread across your machine and cloud sandboxes, you can steer it while it runs, and it can land on the branch your team's Git Flow says it should.

Agents on your machine and in the cloud

nool code --fleet splits a goal into tasks and runs each one as its own agent. With --pool, those agents no longer have to share your laptop:

nool code --fleet "add search to the docs site" \
  --pool local:2 --pool daytona:8 --pool modal:4

Pools fill in the order you list them, and the fleet is as wide as all of them together. Each cloud agent gets its own machine: Nool installed, your branch cloned into it, its own session. When it finishes, its work and its history come back and merge into your branch, and the sandbox is deleted.

We ran this on Modal end to end before shipping: an agent in a gVisor sandbox fixed a bug, its change came back, and the fleet's integrated test check passed on the combined result.

Your API key never leaves your machine

The obvious way to run agents in the cloud is to copy your model provider key into every sandbox. We didn't want that. Instead, the fleet runs a small model gateway on your machine. Each cloud agent gets its own token and its own spending cap; past the cap, the gateway refuses its calls, and the token is revoked when the agent finishes.

Cloud agents reach the gateway through an outbound-only Cloudflare tunnel by default, so nothing on your network listens for connections. If you run the Nool hub, model=hub relays the calls through it instead.

Steer a fleet while it runs

nool fleet status shows every task: where it runs, what it has spent, and why it stopped if it did. nool fleet ctl changes the fleet without restarting it:

nool fleet ctl task retry search-index     # restart one agent from scratch
nool fleet ctl task route docs-copy local  # move a waiting task to your machine
nool fleet ctl pool add modal:4            # more capacity, used at once
nool fleet ctl pool drain daytona          # finish what's running, start nothing new

The same commands work inside nool code as /fleet …, and the fleet strip at the bottom of the TUI shows each pool's load and which pool each agent runs in. If some work has to stay on your machine, --route "ui/**=local" pins it there.

Branches that follow your conventions

Teams that use Git Flow name branches by convention: feature/DOC-142-search, hotfix/7.16.1. Nool now knows those conventions. Put them in nool.toml:

[branches]
feature = { pattern = "feature/{ticket}-{slug}", base = "develop" }
hotfix  = { pattern = "hotfix/{version}", base = "main" }

nool branch new feature "docs search" --ticket DOC-142 creates the right branch from the right base, agents read the conventions at the start of every session, and nool code --fleet … --into <branch> lands a whole fleet's work there.

Leases now know their branch too. Two agents changing the same file on different branches no longer block each other; Nool grants the second lease and warns that the changes will meet in a merge. And because GitHub's merge button cannot merge Nool's history file when both branches moved, nool pr merge merges a pull request through Nool, with a merge-queue workflow that runs it when an approved pull request is labelled nool-merge.

A stricter, fairer goal review

Headless nool code now lists a goal's requirements once, at the start, and every review judges the work against exactly that list, so the target no longer moves between rounds. The reviewer sees what your checks printed, not only that they passed, and [code] review_model lets a different model do the reviewing so an agent doesn't grade its own work.

What it doesn't do yet

Two limits worth knowing. On Daytona's lower tiers, sandboxes can only reach an allowlist of hosts, which excludes both Cloudflare tunnels and the hub, so Daytona agents need a Tier 3 account or a gateway URL on an allowed host. And on Modal, agents' shell commands run without Nool's own jail, because Modal's gVisor sandboxes refuse a nested one; the sandbox itself is the boundary, and the fleet tells you so when it starts.

Try it

curl -fsSL https://www.nool.dev/nool-install.sh | bash

Already installed? nool upgrade. Then read Multi-agent orchestration, Fleets across machines and Branches and merging, or the full changelog for everything in 7.16.