At 6.14.2, Nool coordinated agents the way a shared office coordinates people: everyone worked at the same desk, and "announce intent" was a sticky note asking others not to touch your papers. Nothing stopped them from touching them anyway. A collision was something you discovered after the fact, in `discover conflicts`, once two agents had already written over each other.
Nool 7.0 changes the enforcement model. Every agent now gets its own room, with a lock that other agents actually have to check.
## Every agent gets its own worktree
`nool try new --worktree` checks out a branch into its own directory under `.nool/try/<name>/` instead of the working tree every agent used to share. `propose` and `try` commands run from inside it automatically. Two agents editing the same file no longer means one of them silently loses their work — they're editing different copies, on different branches, and reconciling only happens at `try promote`.
That reconciliation is now a real merge, not a replay. `try promote` computes the drift on main since the branch's recorded base, three-way merges it path by path, and — if two agents genuinely changed the same symbol — stops with `diff3` conflict markers in your worktree and a non-zero exit code, instead of guessing.
## A lease you can actually trust
The old `announce intent` was advisory: a TTL that nothing rechecked, and nothing stopped a second agent from claiming the same files anyway. Leases in 7.0 carry a fencing number (`grant_seq`) that's assigned when the lease is granted and checked again at the moment the work is sealed. If your lease expired, or got superseded, the seal refuses it — even if it looked fine when you started. A foreign hold on the files you want now means your `try new --nodes` command exits immediately, before it writes anything, rather than after.
If you're waiting on another agent, `nool announce wait` blocks until the lease frees instead of making you poll or message them directly, and `nool announce status --follow` streams every grant and release as it happens.
## Fleets stop sharing a writable path
`nool fleet plan --run --isolation worktree` and `nool fleet start --isolation worktree` give every task, or every quorum builder, its own branch, its own agent identity, and its own lease — with the sandbox's write whitelist rooted at that worktree instead of the shared one. A fleet of parallel builders is no longer a fleet of agents trusting each other not to step on the same files; it's a fleet of agents that structurally can't.
## Coordination beyond one machine
Nool now has a server side. A `nool-hub-server` grants atomic, expiring leases over an authenticated API, with OIDC principals and org/repo access control, so agents on different machines can hold the same kind of fenced lease agents on one machine already had. Git-only teams get the same guarantee without a server: leases replicate as commit-backed refs that only ever accept a compare-and-swap write, never a clobber.
## A second human gate, for the changes that need one
Nool already asked an architect to sign off before solidifying a change that raised coupling. 7.0 adds a matching gate before push: a knot touching `auth`, `crypto`, `identity`, or `billing` paths now holds for a named CISO role to attest before it reaches `origin`. Sensitive code no longer leaves the building with the same scrutiny as a typo fix.
## And the fine print
One incidental fix is worth knowing about if you've hit it: lift knots that recorded a full identity list inside every generated mint were quadratic in the number of entities. A lift of a few thousand entities could produce a single knot approaching a gigabyte — unpushable, and slow to even read back. That payload is now linear, so the same lift is now megabytes, not hundreds of them.
Install or upgrade with the same one-liner as always:
```bash curl -fsSL https://www.nool.dev/nool-install.sh | bash ```
Already have it installed? `nool upgrade` runs the same installer for you. See the [full command reference](/docs) for everything `try --worktree`, leases, and fleet isolation can do, or the [changelog](/changelog) for the complete list of what shipped.