Drive macOS
from natural
language.
axion wires an LLM into the macOS Accessibility APIs. You write a prompt — the model proposes a plan, axion executes it, and verifies the result. Expect rough edges.
$ brew install terryso/tap/axionrequires macOS + accessibility permission · readme →

Plan.
Execute.
Verify.
- ● the plan is generated and printed
- ● each step runs against AX APIs
- ● outcomes are checked, not assumed
- ● on failure, the plan replans itself
Default to --dryrun while you build trust.
What it does.
Axion is a thin shell around two things: an LLM that turns prompts into plans, and a runner that executes those plans through the macOS Accessibility tree. Nothing more.
Plan, execute, verify, replan.
The engine runs a four-phase loop. On verification failure it regenerates the plan automatically — up to three retries before giving up.
It learns each app.
After every run, Axion extracts menu paths, control positions and operation sequences for that app, and feeds them back to the planner next time.
Hand control back to you.
When automation gets stuck, Axion pauses. Do the click yourself, press Enter, and it picks up from there. Imperfect automation beats no automation.
CLI, HTTP, MCP, menubar.
Use it from your shell, expose it as an HTTP server with SSE events, plug it into Claude Code as an MCP server, or run AxionBar in the menu bar.
Record once, replay forever.
Record a workflow, compile it into a deterministic skill, and replay it without any LLM calls. Parameterize with --param.
Plug it into your agents.
Axion speaks MCP, exposes an HTTP API, and ships as an SDK reference implementation.
MCP server
Run axion mcp and plug into Claude Code, Cursor, or any MCP client as desktop tools.
HTTP + SSE
axion server --port 4242. POST /v1/runs to submit, stream /v1/runs/{id}/events for live progress.
OpenAgentSDK
Axion is the flagship reference impl. Use the @Tool macro and ship your own desktop agent on the same stack.