axstream

Quickstart

Install the reference implementation, run the no-keys demo, then drive a live machine.

The repository ships a reference implementation in Python: the newline-committed stream compiler, the action catalog, an accessibility-tree observer, and a pipelined executor. You can see the core thesis with no API keys and no server first, then wire it up to a live macOS machine.

1. Get the reference implementation

Clone the repo and let uv manage the environment. The package lives at the repo root as axstream/.

git clone https://github.com/trycua/cua ../cua   # only needed for the live path

The reference impl has no required dependencies for the dry run beyond what uv resolves from pyproject.toml.

2. Run the dry demo (no keys, no server)

uv run --with pytest python demo_dry.py

This replays a canned LLM response at a realistic decode speed into the real compiler and executor, driving a MockComputer. It prints a timeline showing actions executing mid-stream, then compares the streamed total against a buffered baseline (wait for the full response, then act):

--- streamed vs buffered ---
decode time (full response):     ...s
pure execution time:             ...s
buffered baseline (decode+exec): ...s
streamed total (this run):       ...s
saved:                           ...s (…%)

No network, no keys, no permissions. It exists to prove that actions execute while the model is still "generating," and that the overlap is real.

3. Run live (macOS)

The live path drives cua's computer-server, which performs the actual clicks and exposes the accessibility tree.

Start cua's computer-server

Grant the terminal Accessibility and Screen Recording permissions first.

cd ../cua/libs/python/computer-server
uv run python -m computer_server   # ws://localhost:8000/ws

Run a task against it

In another terminal, set an API key and give it a task:

export ANTHROPIC_API_KEY=...
uv run python demo_live.py --task "open TextEdit and type hello world"

demo_live.py also accepts --provider (anthropic / openai / groq), --model, --max-bursts, and --no-risky to block actions marked risk:risky instead of executing them.

4. Run the tests

uv run pytest

Where to go next

On this page