Modules
Stable named .localhost URLs for local dev servers, on the BEAM.
The cherrypicker command
The control API, served on the reserved cherrypicker.localhost host
The running proxy: routes table + Finch pool + Bandit listener, one supervision tree started by the CLI (or embedded by a host app).
The reverse proxy: Host: <name>.localhost → the registered loopback
port, streaming both directions so SSE and long-poll dev servers
(live reload included) work through it.
The route table: name → loopback port, held in ETS behind a GenServer so writes serialize and reads stay lock-free on the hot proxy path.
The daemon's discovery file: ~/.cherrypicker/daemon.json, holding
the bound proxy port. Written by the daemon on start, removed on
clean shutdown, read by every client that needs to find the control
API without being told where it is.