CLI

March 13, 2026 ยท View on GitHub

The CLI is used for debugging and admin: start services, submit/inspect runtime workloads, and troubleshoot jobs and traces. The binary is aetheris.

Runtime-first note: canonical APIs are /api/runs/* and /api/jobs/*. Agent-centric commands (agent create, chat) are compatibility facades for migration.

Install and run

From the repo root:

go build -o bin/aetheris ./cmd/cli

bin/aetheris (and any root-level ./cli executable) is a build artifact and should not be committed to git.

Put bin/aetheris in your PATH to run it directly. Or run without building:

go run ./cmd/cli <command> [args]

Release build (example)

Build reproducible release artifacts to artifacts/:

mkdir -p artifacts
GOOS=darwin GOARCH=arm64 go build -trimpath -ldflags "-s -w" -o artifacts/aetheris-darwin-arm64 ./cmd/cli
GOOS=linux  GOARCH=amd64 go build -trimpath -ldflags "-s -w" -o artifacts/aetheris-linux-amd64 ./cmd/cli
shasum -a 256 artifacts/aetheris-* > artifacts/aetheris-checksums.txt

This repo stores source and build scripts only. Publish binaries via release assets, not as tracked files in the repository.

API base URL

The CLI uses the AETHERIS_API_URL environment variable for the API base URL; default is http://localhost:8080. Set it for remote or custom deployment.

Subcommands

CommandDescription
versionPrint version (e.g. aetheris cli 2.2.0)
healthHealth check (prints ok)
configShow config summary (e.g. api.port, api.host)
server startStart API (runs go run ./cmd/api)
worker startStart Worker (runs go run ./cmd/worker)
agent create [name][legacy facade] Create agent, print agent_id; default name "default" if omitted
agent listList all agents
agent state <agent_id>Get agent state
chat [agent_id][legacy facade] Interactive chat: send messages, get job_id, poll status; uses AETHERIS_AGENT_ID if agent_id not passed
jobs <agent_id>List jobs for this agent
job <job_id>Get job details
trace <job_id>Print job execution timeline (trace JSON) and Trace page URL
workersList active workers (Postgres mode)
replay <job_id>Print job event stream (for replay) and Trace page URL
monitor [--watch] [--interval N]Print observability summary; optional watch mode
stuckShow stuck jobs
migrate m1-sqlPrint M1 incremental migration SQL (job_events hash fields)
migrate backfill-hashes --input events.ndjson --output out.ndjsonBackfill prev_hash/hash for NDJSON event exports
cancel <job_id>Request cancel of a running job
signal <job_id>Send signal to a job
debug <job_id> [--compare-replay]Agent debugger: timeline + evidence + replay verification
verify <job_id>Execution verification: execution_hash, event_chain_root_hash, ledger proof, replay proof
verify <evidence.zip>Offline evidence package verification
evidence-graph <job_id>Get job evidence graph
export <job_id>Export job forensics data
tool listList available tools
tool get <name>Get tool definition

Mapping to REST API

CLI commandREST API
agent create [name]POST /api/agents (legacy facade)
agent listGET /api/agents
agent state <agent_id>GET /api/agents/:id/state
chatPOST /api/agents/:id/message (legacy facade); poll GET /api/agents/:id/jobs/:job_id
jobs <agent_id>GET /api/agents/:id/jobs (legacy facade)
job <job_id>GET /api/jobs/:id
trace <job_id>GET /api/jobs/:id/trace
replay <job_id>GET /api/jobs/:id/events
workersGET /api/system/workers
monitorGET /api/observability/summary
stuckGET /api/observability/stuck
cancel <job_id>POST /api/jobs/:id/stop
signal <job_id>POST /api/jobs/:id/signal
evidence-graph <job_id>GET /api/jobs/:id/evidence-graph
export <job_id>POST /api/jobs/:id/export
verify <job_id>GET /api/jobs/:id/verify
tool listGET /api/tools
tool get <name>GET /api/tools/:name

For more endpoints and flows see usage.md "API endpoint summary" and "Typical flows".