For the complete documentation index, see llms.txt. This page is also available as Markdown.

Installation

Pick one path. All four end with dotagent --version working and dotagent doctor reporting "no agents discovered" (which is the healthy state before you write your first agent).

dotagent ships as a single Rust binary plus five first-party plugin binaries. There's nothing to compile at runtime, nothing to install in a language ecosystem (no node_modules, no pip, no pyenv). Pick:

Path
When to use
Platforms

Homebrew

macOS / Linux with Homebrew. The repo doubles as its own tap.

macOS, Linux (homebrew on linux)

GitHub Release binaries

You want a prebuilt binary today and don't have Rust toolchain.

macOS arm64/x86_64, Linux arm64/x86_64

cargo install

You have Rust stable and want the latest from main.

macOS, Linux

Build from source

You want to hack on dotagent itself.

macOS, Linux

Windows is not supported. dotagent uses kill(2), osascript, launchd, systemd — all Unix-shaped. Linux + WSL works; native Windows doesn't.

After whichever path you pick, jump to Verify the install.


The repo doubles as its own Homebrew tap — the formula lives at Formula/dotagent.rb in the default branch, and the release workflow rewrites it with fresh sha256 values on every tagged release. No separate homebrew-dotagent repo to chase.

brew tap avelino/dotagent https://github.com/avelino/dotagent
brew install dotagent
brew services start dotagent     # runs `dotagent daemon` via launchd / systemd

The URL is required because the tap repo isn't named homebrew-dotagent. Run brew tap once — afterwards brew install dotagent and brew upgrade dotagent Just Work.

brew install dotagent drops dotagent plus every first-party plugin (dotagent-plugin-preflight-warp, dotagent-plugin-sink-roam, etc.) into the same bin/, so plugin discovery via $PATH works with zero config.

brew services start registers the daemon via launchctl bootstrap (macOS) / systemctl --user enable --now (Linux). Skip this step if you'd rather manage the daemon yourself — see guides/daemon-lifecycle.md.

1a. Beta channel (dotagent@beta)

Every push to main republishes a rolling beta GitHub release and rewrites Formula/[email protected] with fresh sha256 values. The formula version is 0.0.1-beta.<commit-count>, monotonic so brew upgrade dotagent@beta detects every new build.

dotagent@beta is keg_only (Homebrew convention for versioned formulae), so brew link --overwrite is required to put dotagent on $PATH. To switch back to stable:

Beta caveats: builds may break — the beta channel tracks the tip of main, including in-flight refactors. For production use, stick with stable.

The beta tag on GitHub Releases is rolling: it's deleted and recreated on every push, so the URL releases/download/beta/... always serves the latest build. Use stable (v0.0.1, v0.0.2, …) when you need a pinned version.


2. GitHub Release binaries

Each tagged release publishes signed archives for macOS arm64, macOS x86_64, Linux arm64, and Linux x86_64.

Install the binaries somewhere on $PATH:

Plugins must live next to dotagent or somewhere on $PATH — the CLI resolves them by name (dotagent-plugin-sink-roam etc.) via standard $PATH lookup. See reference/paths.md for the full discovery order.


3. cargo install

If you already have a Rust toolchain (stable, 1.75+ recommended):

The binaries land in ~/.cargo/bin/, which most installers add to $PATH automatically. Verify:

Don't forget the plugins — cargo install --path crates/dotagent alone does NOT pull them in. dotagent doctor will tell you which ones are referenced by your manifests but missing on $PATH.


4. Build from source

For contributors and anyone wanting to vendor dotagent into a custom distribution.

Self-verification (matches the CI matrix — never report "done" without these three passing):

A faster sanity check that exercises the discovery + run path:

If both succeed, the workspace is healthy.


Verify the install

Whichever path you picked, run:

If all three work, you're done. Skip ahead to first-agent.md.

If dotagent --help works but dotagent doctor fails, see the CLI reference and the troubleshooting guide.


Shell completion (optional)

Tab-completion of subcommands, flags, and agent names (dynamic — runs against your live manifests, not a baked-in list).

After install, dotagent run hel<TAB> expands to hello-fish hello-go hello-python hello-rust. See reference/cli.md#completions.


What got installed where

After install you should find:

What
Path

dotagent binary

depends on path — ~/.cargo/bin/, ~/.local/bin/, /opt/homebrew/bin/

Plugin binaries

same directory as dotagent (or anywhere on $PATH)

Default home

~/.config/dotagent/ (created lazily on first run)

Default agents directory

~/.config/dotagent/agents/

launchd plist (after install)

~/Library/LaunchAgents/run.avelino.dotagent.plist (macOS)

systemd unit (after install)

~/.config/systemd/user/run.avelino.dotagent.service (Linux)

The full disk layout is documented in reference/paths.md.


Upgrading

Path
How to upgrade

Homebrew (stable)

brew update && brew upgrade dotagent

Homebrew (@beta)

brew update && brew upgrade dotagent@beta (new build on every push to main)

GitHub Release

Download the new archive, overwrite binaries in ~/.local/bin/ (or /usr/local/bin/)

cargo install

cargo install --path crates/dotagent --force (and same for each plugin)

Source build

git pull && cargo build --release --workspace then re-copy

After upgrading:

reload sends SIGHUP — it doesn't restart the binary. If you swapped the dotagent binary itself, restart the daemon instead:


Uninstall

dotagent does not delete ~/.config/dotagent/ on uninstall — your manifests, heartbeats, audit log, and config stay put.


Next

Last updated

Was this helpful?