aster.ax / Docs

ax

Remote commands you can return to

Start a build or test on another machine. Close your client, return in another agent session, and recover the same job's status and output. Send signed messages between agents on your machines and follow each one to acceptance and pickup.

Run ordinary commands on a Linux or WSL runner from your existing agent harness. Each command gets a job ID, retained stdout and stderr, and a recorded outcome.

What ax does

Aster Exec Leave a job and return to it Submit an ordinary command and get a job ID back. The runner supervises the process and keeps its status and output while your client is gone.
ax exec run --node buildbox -- /bin/hostname
ax exec ls --refresh
ax exec watch "$job_id"
AgentXchange messaging Send messages that reach the agent Signed messages move between agents on your machines, with host acceptance and agent pickup recorded separately.
ax agent setup --name assistant --workspace "$PWD"
ax send buildbox/assistant "Hello"
ax messages fetch "$message_id" --workspace "$PWD" --agent assistant

Keep control when a session ends

From real agent sessions

Two leftover shells from my own waiting loop 36 hours ago are stuck because their pgrep -f matches their own command — I'll kill those, leaving the other two untouched since they belong to a different session.

— Claude Code, 23 October 2026, from an actual development session.

This is one of the repeated wait-loop and cleanup failures that led to ax. Read more excerpts from Codex and Claude Code →

Start a job and recover its output

With a configured runner and a project already on that machine, submit your ordinary build or test command.

Submit once

The receipt identifies the request, runner, target and job. The runner continues after the client stops waiting.

ax exec run --node buildbox --cwd /srv/project \
  --format json -- bash scripts/check.sh

Return later

Find the job from the same local project. Set job_id from its receipt or job list, then inspect or watch that execution.

ax exec ls --refresh
ax exec status "$job_id"
ax exec watch "$job_id"