Configure an instance
Keep topology, setup inputs, and managed runtime state in their separate authorities.
Nautilo has three different configuration authorities. Treating them as one giant environment file is how secrets leak and instances become impossible to reason about.
| Authority | Owns | Must not own |
|---|---|---|
~/.nautilo/profiles/<name>.toml | Transport, lifecycle, instance identity, endpoint, SSH and TLS policy | Provider keys or owner passwords |
~/.config/nautilo/deploy.toml | First-owner inputs, selected provider secrets, optional initial Genie choices | Ports, Compose identity, database URLs, or generated runtime state |
Managed config/instance.env | Runtime configuration written by Nautilo deployment tooling | Hand-maintained setup templates or source-control defaults |
Profile first
Profiles are deliberately non-secret. Inspect the active one before every mutation:
nautilo profile current
nautilo statusprofile current identifies the selected topology and endpoint. status
reports Compose state and best-effort setup health. Neither command proves a
model-backed turn works.
Keep setup input outside Git
The setup file uses schema version 1, must be mode 0600, and must live
outside a Git worktree. Public examples should reference secrets from the
setup process environment rather than embedding their values.
schemaVersion = 1
[admin]
handle = "operator"
displayName = "Nautilo Operator"
password = { fromEnv = "NAUTILO_ADMIN_PASSWORD" }
pin = { fromEnv = "NAUTILO_ADMIN_PIN" }
forcePasswordChangeOnFirstSignIn = true
[[providers]]
key = "MODEL_PROVIDER_API_KEY"
value = { fromEnv = "MODEL_PROVIDER_API_KEY" }
[genie]
mode = "skip"install -d -m 700 "$HOME/.config/nautilo"
install -m 600 /path/to/reviewed-deploy.toml "$HOME/.config/nautilo/deploy.toml"The schema accepts zero providers, but features that call a model require a usable selected provider. Verify the capabilities you intend to use; do not infer them from a healthy container.
Verify the result
After a configuration change, prove the intended profile, setup state, owner
sign-in, and one model-backed turn. If only status succeeds, the operator
path is not yet accepted.