**What we actually tested**: a disposable machine, network cut (`--network none`), then the official installer rerun step by step, staging in advance whatever could reasonably be staged before disconnecting. Here's exactly where it blocks, and what's avoidable.
**Before you even start**: the standard install command (`curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash`) is itself a network request. With no connectivity at all, you can't even get the script — you need to download it at least once while connected, then run it offline later if needed.
**First real blocker: `uv`** (the Python manager Hermes Agent relies on). Exact message: `curl: (6) Could not resolve host: astral.sh`. Avoidable: download `uv` while connected (`curl -LsSf https://astral.sh/uv/install.sh | sh`), place the resulting binary in `~/.hermes/bin/`, and the installer detects it automatically without retrying the download.
**Second blocker: Python 3.11.** `uv` downloads it itself from GitHub. Also preparable: run `uv python install 3.11` while connected, and bring along the resulting folder (`/usr/local/share/uv/python` by default for a root install) — confirmed to skip the download entirely on rerun.
**Third blocker: Node.js.** Exact message: `curl: (6) Could not resolve host: nodejs.org`. Same pattern: download the Node tarball while connected, extract it somewhere on PATH before disconnecting — the version check passes and the installer skips straight past this step.
**A C++ compiler** (`build-essential`, needed for some native Node modules) also needs installing via `apt` while still connected — without it, those specific modules will fail later, without blocking the rest.
**Ripgrep and ffmpeg are NOT blockers**: if missing, the installer continues with a warning — file search falls back to plain `grep`, TTS voice messages are limited. Neither stops the agent from working.
**The real wall, the one that resists all preparation**: even with everything above already staged, the installer still needs to sync the Hermes Agent source code with GitHub. Pre-cloning the repo isn't enough — the installer detects the existing copy ("Existing installation found, updating...") but still runs a `git fetch` on every launch, which fails offline exactly the same way (`Could not resolve host: github.com`). No documented flag skips this check.
**And once the agent is running**, it calls your model provider (OpenRouter, OpenAI...) for every response it generates — that part is never pre-downloadable, no matter how much you prepare upfront.
**In practice**: prepare everything above (uv, Python, Node, compiler) during a normal connection, and keep one window of connectivity — even brief, a mobile hotspot is enough — for the initial clone and first run. Everything else can happen offline.
If you'd rather skip this preparation entirely, [we host your agent for you](https://hermesagentfrance.com/en/hermes-hosted): you keep your own API key, €12/month, nothing to install.