Repository navigation
Built-in hardware reservations and agent job log - #88
Merged
Merged
Conversation
Agents shared the Spark pair through a sideband mkdir lock (pair.sh) that suspended LLooM and rerouted aliases in separate steps, and the only way to learn how a job was going was to ask the agent. The schedule-owning gateway (normally the head) now does both. - Reservations are expiring leases on configured resources. Taking one runs the resource's actions (route aliases away, then drain and suspend models), locally or on another cluster node through its admin API. Release undoes them in reverse and reports success only after the resumed models pass their health check, so traffic never goes back to a suspended or unhealthy model. A failed restore, or a restart mid-action, leaves the lease `stuck` and the resource held until a release succeeds. - Each step records what it found: a route already on its target and a model already suspended are left as they were, and a route with no active profile is refused. Resources that control the same model or route are config errors. - Queues with renewal, TTLs with warnings and auto-restore on expiry, leases extended by their holder's job heartbeats, and indefinite leases where a resource allows them. Expiry and promotion pause during a deployment fence. - Jobs: notes, progress, metrics, receipts and heartbeats, with stalled/abandoned detection, an event feed (`/gateway/schedule?since=`) for boards such as Tessera, and a rotated NDJSON history. - CLI: `lloom schedule`, `reserve`, `renew`, `release`, `job`. They target a remote head with LLOOM_HEAD_URL/LLOOM_HEAD_API_KEY and never send the local key there. `reserve --wait` exits 0 only once active, rides out head blips, and gives its place back on Ctrl-C. - Schedule refusals reach the CLI as redacted, bounded messages, including redaction of the key just sent. An unreadable schedule.json disables only the schedule routes, never inference. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Ships in the npm package (skills/) beside docs/reservations.md. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
data-angel
force-pushed
the
fleet-reservations
branch
from
October 17, 2026 21:59
70a15ec to
518bed1
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Replaces the sideband pair lock (
pair.sh/pair-mac.sh) with a lease that LLooM itself manages, and adds a job log, so people stop asking agents "how's it going".Reservations. These are expiring leases on resources listed in
config.reservations.resources.stuck, and so does a restart mid-action. The resource stays held until a release succeeds.Jobs. Agents post notes, progress, metrics and receipts, and every update is a heartbeat. Jobs that go quiet are marked stalled, and after 24 hours abandoned. Boards follow an event feed at
/gateway/schedule?since=.CLI. Agents use
lloom schedule | reserve | renew | release | job. SetLLOOM_HEAD_URLandLLOOM_HEAD_API_KEYto target the head; the local key is never sent there. Seedocs/reservations.md.The Tessera side is Enntity/tessera#2: a Fleet band, with jobs as tiles.
Verification
test/schedule.test.mjs(15) andtest/schedule-integration.test.mjs(5). They cover HTTP, a remote node owner gateway, the CLI end to end,--wait, and redaction of an echoed key.npm run check:js,test:cluster,test:unit,lintandformat:checkall pass.--waitexit codes, boot on a bad state file, update atomicity, bounds, redaction, and fence interaction. All are fixed and have tests.pairresource config, and newpair-mac.shshims. That waits for your go-ahead.🤖 Generated with Claude Code