Saved Fleets
Name an armed set so you can recall it later: frozen snapshots, Smart-Sets that re-evaluate a predicate on every recall, and the five built-in presets that use the same machinery.
What a Saved Fleet Is
A saved fleet is a named way of getting back to an armed set. Rebuilding the same selection by
hand every morning is the thing this removes. Saved fleets are stored in project settings
(fleetSavedScopes) and are scoped to the current project, so they travel with the
project rather than the machine.
They come in two flavors, and the difference is whether the fleet remembers which panes or what kind of panes:
- Snapshots store a frozen list of terminal IDs. They go stale as terminals come and go.
- Smart-Sets store a rule. They never go stale, because they are recomputed on every recall.
Both live in the arming ribbon's … selection menu, under a Snapshots heading and a Smart-Sets heading. Each row shows the
name and a live count with its flavor: 4 · Snapshot, 2 · Live.
Snapshots
A snapshot freezes the terminal IDs that were armed when you saved it. On recall, Daintree arms every stored ID that still exists and is still eligible, and drops the ones that are gone.
Terminals do not last forever, so snapshots decay. A snapshot whose stored IDs have all disappeared is stale: it is dimmed, moved into a separate sub-group below the usable ones, and will not recall. It stays visible rather than disappearing, because a stale fleet is something you want to notice and delete, not something that should quietly vanish.
The usable snapshots are ordered by frecency — recent use weighted against how often you use them, over a usage history capped at 20 entries. Ties break on last used, then created, then name. A freshly saved snapshot has no history yet and is seeded from its own creation so it does not sink below a fleet you recalled once a year ago.
Smart-Sets (Live Rules)
A Smart-Set stores a predicate instead of an ID list. The predicate has two fields:
| Field | Values | Means |
|---|---|---|
scope | current, all | This worktree only, or every worktree in the project |
stateFilter | all, working, waiting, finished | Which agent state to match, or every eligible terminal |
On recall the predicate re-evaluates against the panels that exist right now and arms whatever matches. Smart-Sets never auto-delete and never go stale, because the answer is recomputed every time. "Everything waiting for input, anywhere in this project" is a rule that stays true as the project changes; a snapshot of the same set stops being true within the hour.
The Built-In Presets
Five predicates ship with Daintree and appear at the top of the selection menu under Select by state, each with a live count of how many panes it would arm:
| Preset | Predicate |
|---|---|
| All waiting — this worktree | waiting / current |
| All waiting — all worktrees | waiting / all |
| All working — this worktree | working / current |
| All working — all worktrees | working / all |
| All in this worktree | all / current |
They are the same predicate machinery a Smart-Set uses, which is why Daintree filters them out of the Smart-Sets list: saving a Live rule that happens to match one of the five would otherwise show the same rule twice in the same menu.
Saving and Managing
The bottom of the selection menu holds an inline Save current as… form. Pick Snapshot or Live rule, and for a Live rule choose a scope (This worktree / All worktrees) and a state (All / Waiting / Working / Finished). Type a name and press Enter or click Save.
A snapshot needs something armed to snapshot — with nothing armed the name field reads Arm panes first… and Save stays disabled. A Live rule can be saved from an empty fleet, because it describes a rule rather than a selection.
Each row carries a trash button. Deleting is always confirmation-gated, and the confirmation is hoisted out of the dropdown so the dialog survives the menu closing.
Recalling Without the Ribbon
The ribbon does not appear until two terminals are armed, which is exactly the situation a saved
fleet is meant to fix. The action palette closes the loop: fleet.saveNamedFleet, fleet.recallNamedFleet, and fleet.deleteNamedFleet are all dispatchable
from it, so recalling a saved fleet from a cold start is a palette entry rather than a
chicken-and-egg problem.