Skip to content

Advanced install options

Who this is for
Administrators and Waired developers
You need
A terminal
Time
Look up the flag you need

The one-liners on the Install page are all a normal install needs. This page covers the extra installer knobs for non-default setups — self-hosted or staging control planes, pinned versions, and Waired development itself.

By default the client enrolls against the production control plane. To target a different one, pass its URL at install time:

Terminal window
curl -fsSL https://github.com/waired-ai/waired-agent/releases/latest/download/install.sh \
| sudo bash -s -- --control https://your-control-plane.example.com

The installer records the URL on the machine, so a later waired init on that machine enrolls against the same control plane without repeating the flag. Pass --control again only to change it.

You can also set the control plane for the first time with waired init --control <URL>. For per-org installer wrappers, the WAIRED_CONTROL_URL environment variable is a lower-priority fallback used when no --control / -Control flag is given.

WAIRED_VERSION pins the installer to an exact release instead of the latest stable (edge is also accepted — see Edge channel):

Terminal window
curl -fsSL https://github.com/waired-ai/waired-agent/releases/latest/download/install.sh \
| WAIRED_VERSION=1.2.3 sh

A fresh interactive install.ps1 run asks for the install location (Enter keeps the default C:\Program Files\Waired). To pin it non-interactively, pass -InstallDir <path> (script on disk) or set WAIRED_INSTALL_DIR for the piped one-liner:

Terminal window
$env:WAIRED_INSTALL_DIR = 'D:\Waired'
iwr -useb https://github.com/waired-ai/waired-agent/releases/latest/download/install.ps1 | iex

The resolved location is recorded in the registry (HKLM\SOFTWARE\Waired), so later updates, re-runs and uninstall.ps1 find a relocated install automatically. Linux (apt layout) and macOS (WAIRED_DARWIN_BINDIR) keep their existing conventions.

For Waired development and dogfooding only: --dev (Linux / macOS) or -Dev (Windows) pre-configures the install for the built-in development control plane, so the post-install waired init enrolls there without further flags. --control / -Control takes precedence when both are given.

Terminal window
curl -fsSL https://github.com/waired-ai/waired-agent/releases/latest/download/install.sh | sh -s -- --dev

Clean install (--clean / -Clean / WAIRED_CLEAN=1)

Section titled “Clean install (--clean / -Clean / WAIRED_CLEAN=1)”

Full wipe first, then a fresh install — the recipe lives on the Install page (Clean install). Two details worth knowing here: WAIRED_CLEAN=1 is the environment-variable form (it’s how the piped Windows iwr | iex one-liner opts in, and works on every OS), and --yes / -Yes skips the confirmation for unattended hosts — without it, a non-interactive run refuses to wipe.

Linux and macOS use install.sh; Windows uses install.ps1 with the PowerShell spelling of the same option. Both accept the environment-variable form, which is how the piped one-liner passes an option without writing the script to disk.

install.sh install.ps1 Environment variable What it does
--dry-run -DryRun Print every privileged command without running any of them.
--yes, -y -Yes Assume yes at every prompt, including the pre-install summary.
--no-init -SkipInit Do not run waired init after installing. Without this, installing signs you in and sets you up in one pass.
--skip-ollama -SkipOllama WAIRED_NO_OLLAMA=1 Do not install the AI software. Use it when you already run your own Ollama.
--skip-claude-proxy -SkipClaudeProxy WAIRED_NO_CLAUDE_PROXY=1 Leave Claude Code pointed at the Anthropic API instead of your own AI.
--mask-pii -MaskPII WAIRED_PII_MASK=1 Hide your home folder, username, machine name and account email in the output, for screenshots and bug reports. Best-effort.
--log-level <level> -LogLevel <level> WAIRED_LOG_LEVEL Start the agent at this log detail: debug, info (default), warn or error. Use debug for pre-release debugging. Change it later without reinstalling via waired config log-level.
--check -Check Report whether a newer version is available; change nothing.
--update -Update Update an existing install rather than installing fresh.
--edge, --latest -Edge, -Latest WAIRED_VERSION=edge Install or switch to the latest main build. Not a stable release — see What’s new.
--stable -Stable Install or switch to the latest stable release.
--clean -Clean WAIRED_CLEAN=1 Wipe everything first, then install fresh. Destructive; asks to confirm unless --yes.
--control <URL> -Control <URL> WAIRED_CONTROL_URL Enroll against a specific control plane.
--dev -Dev The built-in development control plane. For Waired development only.
-InstallDir <path> WAIRED_INSTALL_DIR Where to install (Windows).
--non-interactive -NonInteractive Never ask anything. Also signs in on a computer with no terminal, where the default is to skip sign-in — see below.
--inference-enabled true|false -InferenceEnabled Answer “run AI models on this computer?” without being asked.
--share-with-mesh true|false -ShareWithMesh Answer “let your other devices use this computer’s AI?” without being asked.
WAIRED_VERSION=1.2.3 $env:WAIRED_VERSION WAIRED_VERSION Pin an exact release.
WAIRED_STATE_DIR Where Waired keeps identity and settings. macOS and Windows only — see below.
WAIRED_OLLAMA_INSTALL_TIMEOUT How long the AI software’s one-time download may take before Waired gives up. Defaults to 60m — raise it (e.g. 3h) only on a very slow connection.

On a server, a CI runner or an image build there is nobody to sign in, and signing in needs a browser. So the installer installs Waired and starts it, then stops before sign-in and tells you to finish later:

Note: No terminal detected — sign-in skipped. To finish setup:
- run: sudo waired init

Add --non-interactive / -NonInteractive if you want it to try anyway — it takes the sensible answer to every setup question instead of asking. --yes is not the same thing: it answers the questions, but still stops before sign-in.

WAIRED_STATE_DIR moves identity, keys and settings somewhere other than the default.

It works on macOS and Windows, where the installer registers the background service and can point it wherever you like. On Linux it is ignored: the service definition ships inside the package with the standard location (/var/lib/waired) already written into it, so the installer has nothing to choose. Uninstalling with --clean removes a relocated folder as well.

Run the script with --help / -Help for the authoritative list, or read packaging/install/README.md in the repository.