Architecture: OpenCode runs its interface and its server in separate threads that can't share
memory, and neither survives a restart.
So processes live in a daemon — shared by every window, self-upgrading, reaps what a crash left
behind, exits when idle.