---
title: "Installation"
description: "Homebrew, Scoop, the install scripts, the AUR, mise, go install, or a prebuilt binary. macOS and Linux, amd64 and arm64. Windows natively on psmux, and inside WSL2."
canonical: "https://agent-manager.dev/docs/install/"
last-updated: "2026-10-23"
section: "Documentation"
source: "agent-manager"
---

# Installation

macOS and Linux, amd64 and arm64. You need **tmux 3.1+**, since the whole thing is built on it. Windows runs natively on **psmux 3.4+** with PowerShell 7.3 or newer as the pane shell, and it still runs inside WSL2.

## Dependencies

| Tool | What it powers | Comes with |
| --- | --- | --- |
| tmux 3.1+ | Every agent session on macOS, Linux and WSL2. | Homebrew, AUR, install script. |
| psmux 3.4+ | Every agent session on native Windows. | Scoop, the Windows install script, or `winget install --id marlocarlo.psmux -e`. |
| git | Diff review and worktree sessions. | Homebrew, AUR, install script. |
| wl-clipboard or xclip | Pasting images into a prompt on Linux. | The install script on a Linux desktop, or your package manager. |
| notify-send | Desktop notifications on Linux. | The install script on a Linux desktop (`libnotify-bin` with apt, `libnotify-tools` with zypper, `libnotify` with the others), or your package manager. |

The mise, `go install`, and prebuilt-binary routes install the binary alone, so install tmux and git with your package manager. When the manager starts without tmux, or the diff view cannot find git, it names the install command it detected.

The agent CLIs are yours to install, and the manager helps. A spawn on a CLI that is not on `PATH` opens a dialog with that CLI's installer: `i` runs it in a shell tab and `c` copies it. For the CLIs that install through npm, it installs Node LTS first when there is no usable npm, and installs under your home directory when the global npm prefix is not writable.

## Homebrew

macOS and Linux. Installs tmux with it if you do not have it, and Homebrew runs on git.

```bash
brew install agent-manager
```

## Homebrew cask

macOS and Linux. Installs the released binary rather than building it, and pulls in tmux. The formula above is in homebrew-core and builds from source; this cask is the prebuilt route, and `agent-manager update` knows which one it is running under.

```bash
brew install --cask yoanwai/tap/agent-manager
```

## Install script

macOS and Linux. Download the release's `install.sh`, read it, then run it. The file is attached to the release and listed in `checksums.txt`. `sh install.sh` runs only after that download succeeds.

```bash
curl -fsSL -o install.sh https://github.com/YoanWai/agent-manager/releases/latest/download/install.sh && sh install.sh
```

`gh attestation verify install.sh --repo YoanWai/agent-manager` checks that file's build provenance when `gh` is logged in. The same command checks `install.ps1` or a release archive.

The script downloads the release for your platform, verifies it against the published checksums, and installs it to `~/.local/bin`. Then it checks for tmux 3.1+ and git. On macOS it offers Homebrew, and installs Homebrew first when that is missing. On Linux it offers apt, dnf, pacman, zypper, apk or Homebrew, and on a desktop it adds the clipboard and notification packages. Under WSL it skips those, since paste and toasts go through Windows. It prints the command when you decline, and a run with no terminal skips the prompt and still installs the binary. `AGENT_MANAGER_VERIFY_ATTESTATION=1` refuses the install unless `gh attestation verify` accepts the downloaded archive. `y`, `yes` and `true` do the same, in any case. With the variable unset, the script installs without calling `gh`. `gh` uses one exit status for a rejected attestation, a missing login, and a network error, so a set variable treats any of those as a failed install.

The short form runs the copy on `main` without saving a file to read.

```bash
curl -fsSL https://raw.githubusercontent.com/YoanWai/agent-manager/main/install.sh | sh
```

| Variable | Effect |
| --- | --- |
| AGENT_MANAGER_INSTALL_DIR | Install somewhere other than `~/.local/bin`. |
| AGENT_MANAGER_VERSION | Pin a version instead of taking the latest. |
| AGENT_MANAGER_INSTALL_DEPS | `1` answers the dependency prompt up front, `0` skips it. |
| AGENT_MANAGER_VERIFY_ATTESTATION | `1`, `y`, `yes` or `true` checks the downloaded archive with `gh attestation verify`. |

## Arch Linux

[agent-manager-bin](https://aur.archlinux.org/packages/agent-manager-bin) installs the released binary and pulls in tmux and git.

```bash
yay -S agent-manager-bin
```

## mise

Reads the GitHub release directly, so it needs no registry entry. Install tmux and git with your package manager.

```bash
mise use -g ubi:YoanWai/agent-manager
```

## Go

Needs Go 1.27.3+, tmux 3.1+ (psmux 3.4+ on Windows), and git. Lands in `$(go env GOPATH)/bin`.

```bash
go install github.com/YoanWai/agent-manager@latest
```

## Prebuilt binary

macOS, Linux and Windows, amd64 and arm64, straight from [Releases](https://github.com/YoanWai/agent-manager/releases). On Windows, install psmux and git with your package manager. Each release publishes `checksums.txt` for the archives, `install.sh` and `install.ps1`. `gh attestation verify <file> --repo YoanWai/agent-manager` checks a downloaded file's build provenance when `gh` is logged in.

## Scoop

Windows. Installs the version published in the [yoanwai bucket](https://github.com/YoanWai/scoop-bucket), and Scoop installs psmux with it. The bucket is updated on its own, so it can lag the latest release. The Windows install script installs the current release. Install git and PowerShell 7 with `scoop install git pwsh` when they are missing.

`PowerShell`

```
scoop bucket add yoanwai https://github.com/YoanWai/scoop-bucket
scoop install yoanwai/agent-manager
```

## Windows

On native Windows the multiplexer is [psmux](https://github.com/psmux/psmux) 3.4.0 or newer and the pane shell is PowerShell. Download `install.ps1` from the release, read it, then run it. The file is attached to the release and listed in `checksums.txt`. Windows PowerShell 5.1 has no `&&`, so the guard is `if ($?)`.

`PowerShell`

```
irm https://github.com/YoanWai/agent-manager/releases/latest/download/install.ps1 -OutFile install.ps1
if ($?) {
  Get-Content .\install.ps1
  Unblock-File .\install.ps1
  powershell -NoProfile -ExecutionPolicy Bypass -File .\install.ps1
}
```

`gh attestation verify .\install.ps1 --repo YoanWai/agent-manager` checks that file's build provenance when `gh` is logged in. On a machine whose execution policy is Restricted, `-ExecutionPolicy Bypass` applies to that process only, after you have read the file.

The script installs `agent-manager.exe` to `%LOCALAPPDATA%\Programs\agent-manager`, or to `$env:AGENT_MANAGER_INSTALL_DIR` when that is set, and adds that directory to your user Path. It offers to install whatever is missing, and a dependency that fails does not fail the binary install. `AGENT_MANAGER_INSTALL_DEPS=1` answers yes, `0` skips the prompt, and a run with no terminal skips it too. `AGENT_MANAGER_VERIFY_ATTESTATION` behaves as it does on the shell script.

The short form runs the copy on `main` without saving a file to read.

`PowerShell`

```
irm https://raw.githubusercontent.com/YoanWai/agent-manager/main/install.ps1 | iex
```

| Tool | Install |
| --- | --- |
| psmux 3.4.0+ | `winget install --id marlocarlo.psmux -e`, or `cargo install psmux`. The manager refuses an older build. |
| git | `winget install --id Git.Git -e` |
| PowerShell 7.3+ (`pwsh`) | `winget install --id Microsoft.PowerShell -e`. Windows PowerShell 5.1 and PowerShell before 7.3 are refused. They split a prompt that contains `"` into several arguments. |

Each session runs on its own psmux server, and previews poll the pane. Command Code shares its name with `cmd.exe`, so the tool pickers leave it out and a session asking for it is refused. A CLI installed only as a `.cmd` or `.bat` file is refused for the same quote-splitting reason. An npm install is fine, because npm adds a `.ps1` beside each `.cmd`. A CLI the setup dialog installs with npm lands in `%APPDATA%\npm`. When that directory was not on Path before the manager started, start the manager again before spawning that CLI.

[WSL2](https://learn.microsoft.com/windows/wsl/install) still works. In a WSL shell, use the install script, Homebrew, or the Linux binary, on tmux. The agent CLIs belong in the distro. A spawn that finds only the Windows copy of a CLI stops and names the command that installs it inside WSL.

## Run it

No config to write first and no daemon to start.

```bash
agent-manager
```

A start with no arguments, when standard input or standard output is not a terminal, prints usage on standard output and exits 0. Standard error reads `agent-manager: no terminal attached; run it in a terminal to open the manager`.

| Key | What it does |
| --- | --- |
| space | Prompt the selected session without attaching, or spawn an agent on a group row. |
| ctrl+r | Review that session's changes. `c` comments a line, `C` sends every comment back. |
| v | Relaunch a dead session on its original conversation. |
| enter | Focus the session in place, so your keys reach the agent and the list stays. `A` attaches it full screen. |
| ? | The keys overlay, any time. |

## Updating

The manager checks GitHub Releases every ten minutes and shows a `↑ vX.Y.Z available` badge in the header when a newer version is out. With the header hidden, the same badge sits on the top edge of the frame. Press `u` on the update message, or `enter` on the version row in Settings, and what happens next follows the install. A Homebrew, mise or AUR install hands the terminal to that package manager's own upgrade command, so its progress and any password prompt behave as they would in a shell. An install-script, `go install` or manual download is updated in place, by downloading the release and swapping the binary. Either way the manager restarts into the new build with every session still running.

Scoop refuses to update an app while its binary is running. The manager shows the command and leaves the binary in place. Close agent-manager, run `scoop update agent-manager`, then start it again. A global install uses `scoop update agent-manager --global` in an elevated PowerShell. Agent sessions keep running while the manager is closed.

> **Two cases update by hand** A pacman-owned install needs an AUR helper, `yay` or `paru`, on `PATH`. Without one the manager runs nothing and prints the command to use instead: `yay -S agent-manager-bin`. A Nix install lives in the read-only store, so the manager points you at Nix, such as `nix profile upgrade agent-manager` or your flake or NixOS config.

From a shell, `agent-manager update` does the same thing without opening the manager. It hands a Homebrew, mise or AUR install to that package manager, and it swaps the binary for an install-script, `go install` or manual download. A Scoop install prints the command and leaves the binary in place. Add `--json` to get the result as a machine-readable record. The per-installer commands still work directly.

```bash
agent-manager update                                # any install
brew upgrade agent-manager                          # Homebrew formula
brew upgrade --cask yoanwai/tap/agent-manager       # Homebrew cask
scoop update agent-manager                          # Scoop, after closing agent-manager
curl -fsSL -o install.sh https://github.com/YoanWai/agent-manager/releases/latest/download/install.sh && sh install.sh  # install script
mise upgrade --bump ubi:YoanWai/agent-manager       # mise
go install github.com/YoanWai/agent-manager@latest  # Go
```
