NixOS configuration for all my personal hosts.

feat(coral): split control plane (homura) from executor (reef) #32

targeting main from deleted fork:feat/control-executor-split
Merged opened by and assigned to callie.on-her.computer
targeting main from deleted fork:feat/control-executor-split

Companion to the harness split PR. Moves nano's brain to homura and her hands to reef.

what changes #

  • reef (hosts/reef/default.nix): services.coral → services.coral-executor. Runs tools only, sandboxed in the nspawn container, binds 10.233.1.2:4221 behind a shared bearer token. The control-plane config + its now-homura-side secrets are removed.
  • homura (hosts/homura/modules/coral-control.nix, new): runs services.coral — the LLM loop / session / memory / compaction. Agent client → http://10.233.1.2:4221, authenticated via executorTokenFile. Runs no tools by design (no local tool client = no ACE on homura).
  • flake: reef imports coral.nixosModules.coral-executor; homura imports coral.nixosModules.default.
  • secrets: coral-executor-token.age recipients (homura_pq + reef_pq).
  • shot-reminder now targets the homura control-plane worker webhook.
  • docs/coral-split-migration.md: prerequisites + cutover runbook.

resilience win #

reef can die/rebuild without killing nano — she keeps her session + memory and stays reachable over Discord, losing only tool execution until the executor reconnects (the HttpToolClient degrades gracefully).

verification #

Both nixosConfigurations.reef and .homura evaluate to buildable toplevel derivations with the coral input overridden to the harness branch. Confirmed via nix eval:

  • reef executor ExecStart: coral-executor --workspace /home/coral --host 10.233.1.2 --port 4221 --capabilities ... --token-file ... --hashline
  • homura control-plane env includes NIRI_EXECUTOR_TOKEN_FILE; agent client = http://10.233.1.2:4221.

depends on / sequencing #

Needs the harness PR merged + nix flake update coral first (the executor module ships from the coral flake). Full runbook — including the shared token secret and the manual state migration to homura — is in docs/coral-split-migration.md. Do not deploy before migrating nano's /home/coral state to homura, or she wakes up empty and handless.

Commits 0