experimentalmacOS · v0.1 ·source

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/axion

requires macOS + accessibility permission · readme →

Hand-drawn sketch of three macOS windows connected by dashed lines and a mouse cursor

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.

~/Projects — axion — 86×20
$ axion run "Open Calculator and compute 123 + 456"

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.

01 loop

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.

02 memory

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.

03 takeover

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.

04 shape

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.

05 skills

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.

interface

MCP server

Run axion mcp and plug into Claude Code, Cursor, or any MCP client as desktop tools.

interface

HTTP + SSE

axion server --port 4242. POST /v1/runs to submit, stream /v1/runs/{id}/events for live progress.

interface

OpenAgentSDK

Axion is the flagship reference impl. Use the @Tool macro and ship your own desktop agent on the same stack.

Stop scripting.
Start prompting.