Before you start
A terminal, and nothing else
pip and npm install the same client.A role that can deploy
Install
Three ways in. They install the same client, so pick whichever matches the machine you are standing on.- No Node, no Python
- Python
- Node
The happy path
Connect the terminal
Approve it in your browser
user@host), the code you typed, and the single thing it grants:
downloading optimized model packages the workspace already owns.Press Approve. The browser confirms, and the terminal continues on its
own:Pull the package
MODEL=$(runinfra pull qwen3-6-27b) captures the path and nothing else.Fetch the weights when the package is a recipe
--weights before you
serve it. If you have not pulled the kit yet, the second form below downloads
the kit first and then the weights. Replace <slug> with the exact slug from
your model page before you run either command.runinfra pull without --weights always downloads only the kit. For a
recipe package, that is the fast path when you are inspecting it or wiring
CI, and it avoids silently starting an additional multi-gigabyte weights
transfer. When you add --weights, the CLI fetches the files from the exact
pinned revision, places them in the kit’s weights directory, and verifies
the signed weights-tree digest.If the kit is already on disk, the CLI verifies it before fetching the
weights. On an optimized-weights package, the weights are already inside the
kit, so --weights explains that nothing else was downloaded and exits
successfully.--concurrency N (1 to 16, default 8) to tune parallel connections, and
--out DIR to choose the destination. Without --out the file lands in the
current directory.
On a headless GPU host
Nothing changes. The CLI does not try to open a browser over SSH, in CI, or on a machine with no graphical display, so it goes straight to the code and tells you why:runinfra login --device forces this path from any machine.
Check what a machine is holding
Verify the CLI you downloaded
The installers already do this for you and refuse to install anything that does not check out. This section is for when you want to confirm it yourself, or when your policy requires a signature on anything that reaches a production host. Every release publishesSHA256SUMS alongside the executables, and
SHA256SUMS.sig, an Ed25519 signature over those checksums.
install.sh and published on the
npm page, neither of which
serves the binaries./usr/bin/openssl is LibreSSL and has no -rawin, so the command
above needs a real OpenSSL, for example brew install openssl@3. Windows
PowerShell has no built-in Ed25519 at all, so install.ps1 verifies the
checksum and tells you the signature was not checked rather than pretending
otherwise.
Revoke a terminal
Two different actions, and it matters which one you need.End a terminal's access for good
End a terminal's access for good
RunInfra CLI: user@host, with when it was created and when it
was last used. Revoke the row.The next command that terminal runs is refused:Sign out of the machine in front of you
Sign out of the machine in front of you
When a download is interrupted
Run the same command again. That is the whole procedure. The CLI keeps the bytes it already has and continues from there.<name>.part holds the bytes, and <name>.part.json records which parts are
safely written. Both disappear when the download finishes. The finished file only
ever appears under its real name once the bytes are complete and verified, so
anything watching that directory can never pick up a half-downloaded package.
It says it is starting over instead of resuming
It says it is starting over instead of resuming
- The resume record is missing or unreadable. The partial file is preallocated to the full size, so its length says nothing about which bytes are real. Guessing would produce a file that fails its checksum hours later.
- The package was republished while you were downloading. Continuing would mix two versions into one file.
- A file with the final name already exists at a different size. Nothing is
overwritten. Move it, or pass a different
--out.
The checksum did not match
The checksum did not match
.part file and pull again. If
it happens twice on the same package, contact support with the slug.Hugging Face refused access to a gated repository
Hugging Face refused access to a gated repository
HF_TOKEN in the environment to a Hugging Face read
token for that account, and run the same runinfra pull ... --weights
command again.Hugging Face served a different revision than the package pinned
Hugging Face served a different revision than the package pinned
The fetched weights tree did not match the signed digest
The fetched weights tree did not match the signed digest
weights directory, then run the same
runinfra pull ... --weights command again.It stopped before downloading anything
It stopped before downloading anything
--out at a larger volume. Anything already downloaded
is still there.It says the workspace does not own the package
It says the workspace does not own the package
runinfra whoami prints the workspace id.It says access expired
It says access expired
runinfra login again to reconnect
it. Downloads you already completed are unaffected.