Skip to content

The fleet: standing agents with goals that live in ticks - #324

Merged
mattshax merged 1 commit into
mainfrom
fleet
Sep 7, 2026
Merged

The fleet: standing agents with goals that live in ticks#324
mattshax merged 1 commit into
mainfrom
fleet

Conversation

@mattshax

@mattshax mattshax commented Sep 7, 2026

Copy link
Copy Markdown
Member

The Agents tab gains a Fleet page, first among its three, as the operator base for long-running work.

A standing agent (server/src/fleet.ts) has a goal, a persona, a model, a placement (local beside the studio, or campaign as a workflow run on a system), triggers, and a budget. It lives in ticks: a tick is one bounded delegated task (the existing engine, one agent, depth 0) whose objective is the goal, the event that woke the agent, and the tail of its own journal, so its memory is the journal on disk under the index base rather than a process a rollout would kill. Triggers: a cadence (15m to 1d, or manual), a workflow run ending (fed from the run registry), new or changed files under a watched knowledge-base folder, and a message from a person, answered on a tick that starts at once. A result ending in NEEDS DECISION: parks the agent as input-required under a Needs you strip. Budgets in ticks and tokens pause an agent that has used them. Pause, resume, retire, tick-now, and message are routes under /api/fleet. Every agent reloads at startup; an interrupted tick leaves the agent idle for its next trigger. Token usage per tick comes from the task's agents.

Four starter goals ship as templates (/api/fleet/templates) for a demo on a small Slurm system: a nightly benchmark campaign (campaign_runner), a queue and run watcher (watcher), a results reviewer on a watched folder (reviewer), and a daily digest (reporter). The help guide describes the page. Five tests against a fake pw code cover the schedule tick with journal and tokens, the run-ended trigger and inbox, pause, tick budget, decision parking and messages, and reload after a restart. 148 server and 9 web tests pass.

The Agents tab gains a Fleet page, first among its three, and it is the
operator base for long-running work. A standing agent has a goal, a
persona, a model, a placement (beside the studio or as a workflow run
on a system), triggers, and a budget. It lives in ticks: a tick is one
bounded delegated task whose objective is the goal, the event that woke
the agent, and the tail of the agent's own journal, so the agent's
memory is the journal on disk under the index base and not a process a
rollout would kill. Ticks come from a schedule, from a workflow run
ending on the platform, from new files under a watched folder, or from
a person's message, which the agent answers on a tick that starts at
once. A result that ends with NEEDS DECISION parks the agent under
Needs you until it is answered. Budgets in ticks and tokens pause an
agent that has used them; pause, resume, retire, and tick-now are a
click each. Every agent is reloaded at startup, and a tick interrupted
by a restart leaves the agent idle for its next trigger.

Four starter goals ship as templates for a demo on a small Slurm
system: a nightly benchmark campaign, a queue and run watcher, a results
reviewer on a watched folder, and a daily digest, each bound to one of
the default personas. Five tests cover ticking, the run-ended trigger,
pause and budget and decision states, messages, and reload.
@mattshax
mattshax merged commit 30163e4 into main Sep 7, 2026
1 check passed
@mattshax
mattshax deleted the fleet branch September 7, 2026 13:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant