> For the complete documentation index, see [llms.txt](https://agpt.co/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://agpt.co/docs/platform/self-hosting/installer.md).

# AutoGPT Platform Installer

The release installer runs the published AutoGPT Platform appliance as one Docker container. It does not clone the repository, build AutoGPT, install Docker, elevate privileges, or accept Docker Desktop license terms.

The appliance exposes one loopback-only port. Application state and generated secrets live in a named Docker volume; installer identity and runtime configuration live in a dedicated private state directory.

## Prerequisites

Before running the installer:

* Install and start Docker from the [official Docker Engine](https://docs.docker.com/engine/install/) or [Docker Desktop](https://docs.docker.com/desktop/) documentation.
* Select a local Docker endpoint: `unix://` on Linux and macOS, `npipe://` on Windows. Remote and TCP contexts are rejected.
* Configure the daemon for Linux containers on `amd64` or `arm64`.
* Allow about 25 GB of free disk; at least 8 GB RAM is recommended.
* Have Bash, curl, and `sha256sum` or `shasum` available for the bootstrap, or PowerShell and `curl.exe` on Windows. Docker Compose, Git, Node.js, and npm are not required.

Docker Desktop is a separate product with its own license terms. AutoGPT does not install it or grant a Docker license.

## Install

Each command below uses a unique temporary file, executes it only after the HTTPS download succeeds, and removes it afterward. Do not stream a network response directly into a shell.

### Linux and macOS

```bash
(
  installer="$(mktemp)" &&
  trap 'rm -f "$installer"' EXIT &&
  curl --proto '=https' --proto-redir '=https' --tlsv1.2 -fsSL \
    -o "$installer" https://setup.agpt.co/install.sh &&
  bash "$installer"
)
```

### Windows

```powershell
& {
  $installer = Join-Path ([IO.Path]::GetTempPath()) "autogpt-install-$([guid]::NewGuid().ToString('N')).ps1"
  try {
    curl.exe --proto '=https' --proto-redir '=https' --tlsv1.2 -fsSL -o $installer https://setup.agpt.co/install.ps1
    if ($LASTEXITCODE -eq 0) {
      powershell.exe -NoProfile -ExecutionPolicy Bypass -File $installer
    }
  } finally {
    Remove-Item -LiteralPath $installer -Force -ErrorAction SilentlyContinue
  }
}
```

### Options

Add a flag after `bash "$installer"` on Linux and macOS, or after `-File $installer` on Windows.

| Goal                            | Linux/macOS                              | Windows                                 |
| ------------------------------- | ---------------------------------------- | --------------------------------------- |
| Current published appliance     | *(no flag)*                              | *(no flag)*                             |
| Specific published version      | `--release=vX.Y.Z`                       | `-Release vX.Y.Z`                       |
| Appliance release-tag form      | `--release=autogpt-platform-beta-vX.Y.Z` | `-Release autogpt-platform-beta-vX.Y.Z` |
| Hardware and Docker checks only | `--preflight-only`                       | `-PreflightOnly`                        |
| Print image selection only      | `--resolve-only`                         | `-ResolveOnly`                          |
| Skip RAM/disk checks            | `--skip-preflight`                       | `-SkipPreflight`                        |
| Custom private state directory  | `--dir=PATH`                             | `-Dir PATH`                             |

`--skip-preflight` does not skip the local-endpoint, Linux-container, or architecture checks.

The default state directory is `$XDG_CONFIG_HOME/autogpt`, or `$HOME/.config/autogpt` when `XDG_CONFIG_HOME` is unset, and `%LOCALAPPDATA%\AutoGPT` on Windows. A custom directory must be user-owned and private; the installer rejects symlink paths and shared or unsafe locations.

## Artifact and Runtime Contract

With no release flag, the installer pulls `significantgravitas/autogpt:latest`. An explicit `vX.Y.Z` selects the matching version tag. After pulling, the installer:

1. Requires the expected OCI title and source repository plus a well-formed 40-hex source revision label.
2. Requires a Linux image matching the local daemon's `amd64` or `arm64` architecture.
3. Resolves exactly one native `RepoDigest` and runs that immutable digest, never the mutable tag.
4. Creates an installer-owned, labelled `autogpt-platform-data` volume.
5. Starts `autogpt` with `127.0.0.1:3000`, the private environment file, restart and stop policies, log rotation, shared memory, and file-descriptor limits.

The bootstrap authenticates transport with HTTPS, and the installer pins the pulled image by digest after checking its appliance metadata. It does not independently verify a publisher signature or protect against compromise of the image-publishing credentials. Signed release artifacts are a follow-up, not a claim made by this installer.

The installer refuses to adopt an unlabelled container or volume. A rerun is a no-op, or starts a stopped container, only when the installer identity, environment hash, immutable image digest, process, port, mount, privilege, restart, logging, memory, and limit settings all match. Drift fails closed.

If established installer lifecycle state exists but its named volume is missing, the installer refuses to create an empty replacement. An interrupted first pull has no established marker and can be retried safely. Restore a previously established volume or choose a new state directory.

## Runtime Configuration

The private `autogpt.env` initially contains:

```dotenv
AUTOGPT_PUBLIC_URL=http://localhost:3000
```

Add provider keys and other appliance variables there. The installer binds the environment file's SHA-256 hash to the container label. To apply a deliberate configuration change, stop and remove only the container, then rerun the same installer release:

```bash
docker stop --time 360 autogpt
docker rm autogpt
```

Do not remove `autogpt-platform-data`; it contains accounts, agents, generated secrets, and application state.

## First Run

After the installer reports a healthy container, open <http://localhost:3000>. Registration starts open so you can create the intended account. Promote it:

```bash
docker exec autogpt autogpt-admin promote you@example.com
```

Then set this in `autogpt.env`, recreate the container as described above, and verify registration is closed:

```dotenv
AUTH_ALLOW_NEW_ACCOUNTS=false
```

Keep the default loopback binding. To serve other machines, place AutoGPT behind a TLS reverse proxy and set `AUTOGPT_PUBLIC_URL` to the exact public URL.

## Upgrades

Before an upgrade, back up `autogpt-platform-data` as described in [Cold backup](/docs/platform/self-hosting/single-container.md#cold-backup). Stop and remove only the `autogpt` container, then rerun the installer with the intended release. The installer will reuse the named volume only when its ownership labels and the private installer identity still match.

## Maintainer Release Gates

`https://setup.agpt.co/install.sh`, `https://setup.agpt.co/install.ps1`, and `https://setup.agpt.co/install.bat` redirect to the files of the same name in `autogpt_platform/installer/` on `master`, so the hosted installers change whenever those files change on `master`. Repository CI cannot prove this public bootstrap handoff, so each release must keep every gate below passing:

* Only a published, non-prerelease `autogpt-platform-beta-vX.Y.Z` release publishes images. Its run smoke-tests and scans both architectures, then pushes `sha-<commit>` and `vX.Y.Z` and moves `:latest` forward. Pushes to `dev` and manual dispatches build, test, and scan without publishing.
* The release's tag commit contains the full installer, publication workflow, and helper, and its release-triggered run succeeded.
* Both public tags expose Linux `amd64` and `arm64` manifests and the expected OCI identity:

  ```bash
  docker buildx imagetools inspect significantgravitas/autogpt:vX.Y.Z
  docker buildx imagetools inspect significantgravitas/autogpt:latest
  ```
* Fetch each hosted installer into a new temporary file from an external machine and compare it with the released repository file. On each supported operating system, perform a clean install against the public image, wait for health, verify the loopback endpoint, rerun to prove exact-contract idempotency, and confirm no mutable tag was used to create the container.

## Installing from source (Compose)

The scripts below are the other supported path: they clone the repository and start every service with Docker Compose. Use them for development, or for a fully offline install with a local LLM. The appliance described above is the image documented in [Run AutoGPT in one Docker container](/docs/platform/self-hosting/single-container.md); these scripts do not use it.

### Manual Installation

If you prefer, you can manually download and run the installer scripts:

* **Linux/macOS:** `setup-autogpt.sh`
* **Windows:** `setup-autogpt.bat`

These scripts are located in the `autogpt_platform/installer/` directory. Run `./setup-autogpt.sh` or `setup-autogpt.bat` from there. Inside a clone, a script uses that checkout; otherwise it clones the repository into a new `AutoGPT` folder first.

Both create the three `.env` files if they are missing and generate the secrets `.env.default` leaves blank (`ENCRYPTION_KEY`, `UNSUBSCRIBE_SECRET_KEY`, `INTERNAL_API_KEY`, `BETTER_AUTH_SECRET`, and the passwords of the database, RabbitMQ, Redis and FalkorDB), the same as `make init-env`. Running a script again never changes a value you set; it does replace a service password that still holds the value this repository used to ship, and restarts the stack, which empties RabbitMQ's queues. So to upgrade an install that is running, follow [Upgrading: service passwords are generated per install](/docs/platform/self-hosting/getting-started.md#upgrading-service-passwords-are-generated-per-install) instead of running a script again. If you are upgrading an install that ran without its own `ENCRYPTION_KEY`, read [Upgrading: secrets are generated per install](/docs/platform/self-hosting/getting-started.md#upgrading-secrets-are-generated-per-install) first so your connected integrations move to the new key.

### Running fully offline with a local LLM (Ollama)

Both installer scripts accept an opt-in flag that installs [Ollama](https://ollama.com), pulls a default chat model, and wires `backend/.env` so AutoPilot runs **without any cloud API keys**. This is useful for air-gapped or privacy-sensitive deployments — see [Running AutoPilot on a self-hosted LLM](/docs/platform/using-ai-services/copilot-local-llm.md) for the full reference.

#### Linux / macOS

```bash
cd autogpt_platform/installer
./setup-autogpt.sh --with-ollama
# Optional overrides:
#   --ollama-model=qwen3:14b-q4_K_M
#   --ollama-host=http://gpu-rig.lab:11434   # use an existing Ollama
```

#### Windows

```cmd
cd autogpt_platform\installer
setup-autogpt.bat /with-ollama
REM Optional overrides:
REM   /ollama-model=qwen3:14b-q4_K_M
REM   /ollama-host=http://gpu-rig.lab:11434
```

The installer:

1. Installs Ollama (skipped if already present, or if `--ollama-host` points at an existing one).
2. Configures `OLLAMA_HOST=0.0.0.0:11434` + `OLLAMA_CONTEXT_LENGTH=262144` so containers can reach it and so AutoPilot's \~8 k system prompt isn't truncated by Ollama's 4 k default; 262,144 tokens is the default model's native window.
3. Pulls the chat model (default `hf.co/ornith-ai/Ornith-1.5-9B-GGUF:Q4_K_M`).
4. Appends a marker-bounded block to `autogpt_platform/backend/.env` with `CHAT_USE_LOCAL=true` plus the `CHAT_BASE_URL` / `CHAT_API_KEY` / `CHAT_*_MODEL` overrides.

Re-running with `--with-ollama` is idempotent — the wiring block is rewritten in place.

## Troubleshooting

1. Confirm `docker info` succeeds against a local Linux-container daemon.
2. If an image pull fails just after release, wait for public manifest publication and retry; the installer never falls back to a source build.
3. If the installer reports state or runtime drift, preserve the named volume, inspect the existing container, and follow the explicit upgrade procedure.
4. Check `docker logs --tail 100 autogpt` when health checks fail.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://agpt.co/docs/platform/self-hosting/installer.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
