Installation
Pick one path. All four end with
dotagent --versionworking anddotagent doctorreporting "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:
macOS / Linux with Homebrew. The repo doubles as its own tap.
macOS, Linux (homebrew on linux)
You want a prebuilt binary today and don't have Rust toolchain.
macOS arm64/x86_64, Linux arm64/x86_64
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.
1. Homebrew (recommended)
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 / systemdThe URL is required because the tap repo isn't named
homebrew-dotagent. Runbrew taponce — afterwardsbrew install dotagentandbrew upgrade dotagentJust 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
betachannel tracks the tip ofmain, 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
dotagentor somewhere on$PATH— the CLI resolves them by name (dotagent-plugin-sink-roametc.) via standard$PATHlookup. Seereference/paths.mdfor 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:
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
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
Already have an agent? CLI reference and daemon lifecycle.
Last updated
Was this helpful?