Turn the worker binary into a fleet CLI over the same control protocol that
drives a GUI editor — any node, daemon or window, is reachable the same way.
- Subcommands: `serve` (the daemon, as before), `fleet` (every node on this
machine with a one-line state summary), `status` (one node's full snapshot),
`submit` (a coding task to a node's on-device agent), and `ctl` (the raw
control method escape hatch). All are thin clients over
joule_core::control::{run_client, run_client_tcp, list_peers} — no new wire.
- launchd install script generates a user agent in the GUI (Aqua) domain via
`launchctl bootstrap gui/$(id -u)`. The GUI domain (not nohup-over-SSH) is
required so the worker can initiate outbound local-network connections for
the federation transport — a macOS process-responsibility constraint we
root-caused (see lockstep-quic/MACOS_LAUNCH_CONTEXT.md). Generated plist
passes plutil -lint.
Live-verified: serve a daemon, then ctl/status/spawn_session/submit/fleet.
Co-Authored-By: Claude Opus 4.8 <[email protected]>