Install
From nothing to a refused
command, in four minutes
This page is the minimum. It installs nanoinfra, answers the wizard, adds one server, and asks for something the gate refuses. You will have seen the boundary work before you trust it with anything.
uv tool install nanoinfra nanoinfra onboard --wizard
python -m pip install nanoinfra nanoinfra onboard --wizard
in a virtual environment, or pip reports externally-managed-environment
docker run --rm -it \ -v ~/.nanoinfra:/home/nanoinfra/.nanoinfra \ ghcr.io/nanoinfraorg/nanoinfra onboard --wizard docker run -d --name nanoinfra \ -v ~/.nanoinfra:/home/nanoinfra/.nanoinfra \ ghcr.io/nanoinfraorg/nanoinfra gateway
`gateway` is not optional: the default command is `status` · the WebUI binds 127.0.0.1 inside the container, so publishing 8765 needs channels.websocket.host = 0.0.0.0 and a token
git clone https://github.com/nanoinfraorg/nanoinfra.git cd nanoinfra && uv sync uv run nanoinfra onboard --wizard
uv reads the lockfile in the repo · bun or npm has to be present, because it builds the WebUI
python 3.11 or newer · nothing else
01 · install
One command. Nothing runs, and nothing reaches a host.
02 · answer the wizard
A provider, a key, a model, a channel. One config file.
03 · add a server
A host, a method, and a credential you paste once.
04 · meet the gate
The same command allowed, then refused, with the grant named.
And it tells you what to write, before 02:00 arrives
gates.standingGrants:
- contexts: ["unattended"]
hosts: ["web-01"]
commands: ["uptime"] A recording of a first run, replayed. The wizard's questions come from your config, so yours may name a different provider.
What you have
after those four steps
One package, one config file, one server, and a boundary you have watched refuse something. No account, no broker, no telemetry.
What to read next
The gate reference states every default. The deployment page states what makes the split kernel-enforced, which a single account does not.
Before production
Create the four accounts, or run the container that creates them. With one account the four processes share a uid, and nanoinfra says so at startup.
If something refuses and you disagree
The refusal names the grant that would permit it. Write the grant, or change the policy. Both live in config, and both are reviewable.
Four minutes, and
one refusal
The refusal is the part worth waiting for. Everything before it is setup, and setup is not evidence.