root | "." | Working directory for every recipe, relative to the repo root. Monorepo services point at their package; workspace-aware tools (pnpm) resolve upward from there. |
ports | required | Loopback ports the service binds. The first is primary: it’s what a bare dep binding reaches and what the health check probes. Services bind loopback only; boxd exposes declared ports on the private network. |
run.setup | required | Idempotent environment recipe. Runs at box birth, on ensure-running, and at dev attach — caller-triggered moments, never a background reconciler. |
run.dev | required | The run recipe. Dev instances run it against the synced worktree; pinned instances run it against an immutable checkout. |
health.path | TCP-listen check | HTTP path that must return 2xx on the primary port for the instance to count as up. Without it, “something listens on the primary port” is the readiness signal. |
health.timeout | "90s" | How long dev and rollovers wait for readiness before failing loudly (with the last log lines). |
[deps] | {} | localPort = "service" or "service:port". Each key becomes a loopback port on this service’s box (and on the laptop while this service is viewed) that reaches the named dep through the mesh. Deps drive ensure-on-use (starting this service ensures its deps first) and cohort auto-wiring. |
env.files | [] | Gitignored files that sync ships to dev instances anyway. |
env.required | [] | Env var names this service needs. Values are set per-service in the control plane (tesser env set); ensure-running fails loudly if any are unset. Values never appear in the manifest — it’s committed. |