# Safely Reconcile and Control a Local Fleet Agent Use the canonical local roster-v2 command surface: ```sh mosaic fleet apply --expected-generation --dry-run mosaic fleet apply --expected-generation mosaic fleet reconcile --expected-generation mosaic fleet start --expected-generation mosaic fleet stop --expected-generation mosaic fleet restart --expected-generation mosaic fleet status [name] mosaic fleet verify mosaic fleet doctor ``` Start with `--dry-run`. It validates roster semantics, deterministic projections, private managed paths, exact holder ownership, and named-socket state without changing files or lifecycle state. `apply` and `reconcile` rebuild derived projections and enforce only persisted roster state: enabled `running` agents may start, while stopped or disabled agents are not started. `start`, `stop`, and `restart` are explicit one-shot exact-service actions. They do not persist a lifecycle change. Roster CRUD is the only way to change persisted desired state. Every command prints JSON. Observation commands report drift without mutation; `verify` exits non-zero on ownership mismatch, unmanaged sessions, or drift. A failed apply that wrote some derived projections reports `projections: "incomplete"` with bounded recovery to regenerate from the roster. A lifecycle failure after projections reports incomplete lifecycle work; it is never represented as a rollback or no-op. These commands are local only. Remote/SSH/connector entries are inventory/validation-only. Commands do not accept arbitrary runtime commands, channels, secrets, generated-file desired state, or arbitrary tmux sockets.