aster.ax / Docs

Install ax over SSH

Deployment uses your existing OpenSSH connection to install ax on the runner. It detects the remote platform, picks an artifact, and registers ax's execution-host service.

ax deploy ssh build-host --plan
ax deploy ssh user@host
ax deploy ssh user@host --system

Linux and macOS user installations include runner setup:

ax deploy ssh user@build-host --name build
ax exec run --node build -- /usr/bin/id -u

Deployment configures the service, authorizes the deploying caller, saves the runner name and defaults, and checks a diagnostic job.

Progress and output

Artifacts and verification

The source executable must match its own entry in that release's signed manifest. Unpublished versions and unsupported platforms require --bundle; deployment never substitutes the latest version.

To prepare an offline bundle, install ax on a machine matching the target platform and package that binary:

ax deploy bundle --out ./ax-linux-bundle
# Transfer this bundle to the deploying machine, then:
ax deploy ssh build-host --bundle ./ax-linux-bundle/manifest.json

Installation locations and upgrades

Scope/platform Launcher Versioned executable
User Linux/macOS ~/.local/bin/ax ~/.local/share/ax/versions/<SHA256>/ax
System Linux /usr/local/bin/ax /usr/local/share/ax/versions/<SHA256>/ax
User Windows %LOCALAPPDATA%\ax\bin\ax.cmd %LOCALAPPDATA%\ax\versions\<SHA256>\ax.exe

Linux boot services and readiness

Both modes register ax.service (ax serve --config <FILE>) — the execution host, not the caller connection broker. Its API, privileged helper and job-supervisor roles share the ax executable. Per-job transient units use the ax-job- prefix.

Mode Unit scope API configuration
User ~/.config/systemd/user/ax.service ~/.config/ax/server.json
System /etc/systemd/system/ax.service /etc/ax/server.json

Deployed runners also serve persistent agent invites; see runner invites. The open execution profile inherits the payload account's access and is not a filesystem/network sandbox.

macOS user service

Deployment installs ~/Library/LaunchAgents/dev.getaster.ax.host.plist and starts dev.getaster.ax.host in the user's launchd domain as a Background session — the SSH connection does not own the host process. Startup is per user login, not a pre-login root service. --system remains Linux-only.

launchctl print user/$(id -u)/dev.getaster.ax.host

Standalone trust, state and renewal

Deployment also provisions a bounded issuer delegation and observation-write access for the runner. Only the saved deploying caller can request an invite:

ax enroll invite --node build-host --format json

WSL runners

A WSL runner executes Linux commands. Native PowerShell execution requires a native Windows backend, which is not available yet.

For a Windows OpenSSH endpoint that dispatches commands into WSL Bash, select the transport explicitly:

ax deploy ssh wsl-host --wsl-dispatcher --name wsl-build --bundle ./ax-linux-bundle/manifest.json
ax undeploy ssh wsl-host --wsl-dispatcher --plan

Windows must also keep the distribution alive after SSH disconnects. Run the supplied script as the Windows user who owns the distribution, from an ax checkout:

powershell.exe -NoProfile -File .\scripts\wsl-runner.ps1 -Action Install -Distribution Ubuntu
powershell.exe -NoProfile -File .\scripts\wsl-runner.ps1 -Action Status -Distribution Ubuntu

After deployment, close the SSH session and verify with ax exec info wsl-build and an ordinary ax job. Linux service reports identify their boot scope as the Linux distribution and report when a Windows keepalive is required.

After undeploying the runner, remove its task on Windows:

powershell.exe -NoProfile -File .\scripts\wsl-runner.ps1 -Action Remove -Distribution Ubuntu

Removal stops only the managed keepalive task; it never terminates the WSL distribution or other jobs. Task installation and removal must use the same Windows account, distribution and task name.

Execution platforms

Local deployment history

Remove an installation

Inspect removal first, then remove the selected installation using the same SSH connection options as deployment:

ax undeploy ssh build-host --plan --format json
ax undeploy ssh build-host
ax undeploy ssh build-host --system --plan
ax undeploy ssh build-host --system --stop-services

Configuration, credentials, logs, state and retained job history are preserved by default. To delete standard ax data paths as well:

ax undeploy ssh build-host --purge --plan
ax undeploy ssh build-host --purge
Scope/platform Data paths deleted by --purge
User Linux/macOS ~/.ax, ~/.config/ax
System Linux /etc/ax, /var/lib/ax, /var/lib/ax-helper, /run/ax
User Windows %USERPROFILE%\.ax

Allow sudo in Linux jobs

Linux runners block privilege elevation by default. To let authorised jobs use an account's existing sudo permissions, the runner owner can set:

"allow_sudo": true

ax exec info <runner> advertises the sudo adapter when permitted. This reports runner policy; it does not promise that sudo is installed or that a particular command is allowed. Use sudo -n in jobs so a password requirement fails immediately. Ax does not change sudoers, supply passwords or open a terminal. The effective setting is retained in each sealed job specification.