Switch agent profiles
without breaking your flow.
agents-cli replaces manual ln -sfn ~/.agents-beta ~/.agents with explicit commands, atomic symlink swaps, and a JSONL audit log. Linux and macOS, single static binary, no Go or Git required to install.
Install in one line
The installer downloads the latest signed release, verifies a SHA-256 checksum, and drops the binary into /usr/local/bin or ~/.local/bin.
$ curl -fsSL https://acli.chagbrasil.com/install/install.sh | shAlready installed? Re-run the same line — the script is idempotent and upgrades in place. Pin a version with --version vX.Y.Z.
Why agents-cli?
Multiple agent profiles in your home directory — one per client, one per project, one for experiments — usually share a single active slot at ~/.agents. Swapping between them with a raw ln -sfn works, but:
No record of what changed
Manual symlink swaps leave no trail. Which profile was active yesterday? Last week? You don't know.
No safety net
A typo silently points
~/.agentsat the wrong place. The shell happily returns 0 and you only notice mid-task.No discovery
There is no canonical list of registered profiles. New machines and new teammates have nothing to start from.
agents-cli adds an explicit registry (~/.config/agents-cli/profiles.yaml), an atomic use <name> swap, and a JSONL audit log at ~/.local/state/agents-cli/audit.log. Every transition is recoverable, inspectable, and scriptable.
Nine commands. That's the surface area.
Each subcommand has a single, narrow purpose. Run with --help for the full flag list — or read the Usage guide.
install <url>Clone a profile repo over SSH and register it.add <name> <path>Register an existing directory as a profile.listList registered profiles; the active one is marked.currentShow the active profile name, path and git state.use <name>Atomically repoint~/.agentsat a profile.show <name>Inspect one profile in detail.remove <name>Unregister a profile (the directory stays).doctorValidate symlink, registry, and repo state.update profile [name]Fast-forward a profile viagit pull— never resets, merges, or rebases.
Every swap is logged. As JSONL.
Each use, install, add, and update appends a line to ~/.local/state/agents-cli/audit.log:
{"ts":"2026-06-09T10:21:33Z","event":"use","from":"alpha","to":"beta","actor":"lucas","cwd":"/Users/lucas/work","exit":0}
{"ts":"2026-06-09T10:21:38Z","event":"update_profile","profile":"beta","from":"7f3a8c1","to":"9e2b441","ff":true,"exit":0}Grep, pipe into jq, ship to your log aggregator, or just read it. Nothing fancy — newline-delimited JSON in a stable schema.
Open source. Tagged releases. Signed artefacts.
SemVer + Conventional Commits
Every release is a SemVer tag with a Keep-a-Changelog entry and SHA-256 checksums. See the release process.
Built in CI
Binaries for
linux/amd64,linux/arm64,darwin/amd64anddarwin/arm64on every tagged release.Documented
A complete reference of every flag and environment variable, plus how-to guides for the common workflows.