Install Axon
Axon runs locally on your computer and gives an agent access to the accessibility layer already built into macOS, Windows, and Linux. The service is visible, inspectable, and communicates with agent clients over a local socket.
On macOS, the install includes:
Axon.app, the menu bar service that owns accessibility access.Axon Editor.app, for opening and editing.axnfiles.axon, the command-line and MCP entrypoint.
Install
macOS or Linux
curl -fsSL https://axn.dev/install.sh | sh
Windows
Open PowerShell with Run as administrator, then run:
irm https://axn.dev/install.ps1 | iex
Administrator access is required because the installer registers the Axon daemon with Windows Task Scheduler.
The installers verify the release checksum, install into a permanent versioned directory, register the daemon from that location, and put its CLI on PATH. Pin a release with AXON_VERSION=0.3.1 on macOS or Linux. In PowerShell, set $env:AXON_VERSION = '0.3.1' before running the installer.
Homebrew on macOS
brew install --cask bleugreen/tap/axon
axon
The direct installer refuses to create a second installation when the Homebrew cask is already installed. Upgrade a Homebrew-managed machine with brew upgrade --cask bleugreen/tap/axon.
Running axon with no arguments launches the service, checks its local connection, and requests Accessibility permission only when it is missing. Once setup is healthy, continue to Connect your agent.
Runtime Commands
For a person setting Axon up on their own Mac:
axon # launch Axon.app and request permissions when needed
axon start # launch the installed Axon.app menu bar service
axon status # describe the daemon, permissions, and capabilities
axon mcp # the stdio MCP entrypoint clients run
axon setup remains an explicit alias for no-arg axon for scripts that prefer named commands.
Developers bundling Axon into another product should use the managed lifecycle described in Embedding Axon.
Permissions
macOS Accessibility approval cannot be automated. The app can only request the prompt and report status.
Normal first run:
axon
If Accessibility is denied, approve Axon.app in System Settings > Privacy & Security > Accessibility, then run:
axon status
ScreenCaptureKit may also prompt when screenshot capture is first used.
Troubleshooting
axon status names what is wrong, and axon status --json gives the same answer with stable
reason codes. Both exit 0 whatever they find, because describing a broken machine correctly is a
success.
Daemon: not running means nothing answered on /tmp/axon.sock. Run axon start for the menu
bar app, or axon daemon restart for the CLI-managed daemon.
Daemon: running, not ready (version-skew) means a daemon is serving but is a different version
from the CLI asking it. That is what an upgrade in place looks like before a restart; run
axon daemon restart.
accessibility: not granted means macOS has not approved the com.bleugreen.axon app identity.
Approve it in System Settings > Privacy & Security > Accessibility. screenRecording: not granted
costs screenshots and nothing else.
Removing a duplicate server
Before ownership was enforced, two servers could hold the socket at once and clients reached whichever bound last. Check for that with:
lsof /tmp/axon.sock
More than one holder means an older install is still running alongside Axon.app, usually a
dev.axon.daemon LaunchAgent from when the CLI installed a copied daemon bundle into Application
Support. That workflow is gone — daemon install now registers a daemon inside the install you
invoke it from, never a copy — so remove the leftover once:
launchctl bootout gui/$(id -u)/dev.axon.daemon
rm -f ~/Library/LaunchAgents/dev.axon.daemon.plist
rm -rf ~/Library/"Application Support"/Axon/"Axon Daemon.app"
axon start
Do this before upgrading. A current Axon refuses to displace a server that is still answering, including one old enough to predate the lock, so a leftover daemon keeps the new one from serving instead of being silently replaced by it.