Complete reference for every command, flag, slash command, and environment variable. For a quick tour, see the README.
The complete manifest-derived reference is docs/generated/commands.md. Regenerate it with npm run docs:generate; verify drift with npm run docs:check.
aether [global flags] <command> [args]
aether [global flags] "<prompt>" # bare prompt = one-shot chat
aether # no args = interactive REPL
help, agent, chat, resume, run, models, agents, auth, github, vault, workflow, memory,
skills, capabilities, image, video, output, pc, audit, receipt, support-bundle, mcp, config, exec,
setup, local, preview, doctor, sessions, review, ship, settings, voice
help, models, model, agent, agents, tier, effort, audit, doctor, settings, voice, preview,
clear, exit, mcp, autonomous-execution, subagent-driven-execution, self-review, recon, plan, research, project-review, code-review, writing-skills,
writing-plans, shell-result, shell-reset, terminal, terminal-attach, terminal-stop, terminal-status, queue, steer, btw, pin, drop,
snapshot, limit, audit-receipt, rollback, logs-view, goal, goals, memory, workflow, workflow-templates, workflow-template, vault,
vault-context, vault-search, vault-recent, vault-project, vault-tag, vault-tree, delegate, tree, broadcast, gather, scaffold, port,
test-drive, bench, purge, stage-diff, review, ship, revert, photogen, frame, re-frame, videogen, sequence,
animate, re-cut, output, storyboard, add, hud, agent-create, browser, ats
These identifiers are the public capability requirements referenced by command metadata. Their release treatment is recorded independently in the release notes.
aether.catalogue— live model and agent catalogue access.aether.hosted— an authenticated hosted Aether runtime.aether.hosted-or-local— either the hosted runtime or the packaged local fallback.aether.local-child— local child-process brain authority; never a remote shell.aether.headless.v1— versionedaether.exec/1JSONL events and controls.aether.headless.v2— durable, repository-bound headless sessions with acknowledged controls.aether.local-preview— consent-gated local dev-server supervision and loopback opening.ollama.local— a user-operated Ollama endpoint and optional local CLI binary.
These apply to any command (parsed anywhere on the line).
| Flag | Type | Meaning |
|---|---|---|
--model <id> |
string | Force a model for this run (e.g. --model opus). |
--agent <id> |
string | Force an orchestrator (neo, kronus). |
--cwd <dir> |
string | Workspace directory for file context + edits (default: current dir). |
--json |
bool | Emit raw stream frames as JSON lines (machine mode). |
--audit |
bool | Print the chain-of-custody id inline after a turn. |
-y, --yes |
bool | Auto-confirm prompts (non-interactive). |
-h, --help |
bool | Print help and exit. |
-v, --version |
bool | Print version and exit. |
Opens a session. Type a prompt to chat; type / commands to control it (see
Slash commands). Up-arrow recalls prompts across sessions
(history lives at ~/.aether-agent/history); Tab completes slash commands.
Ctrl-C mid-answer cancels the turn and keeps the session; Ctrl-C at an
empty prompt (or /exit) leaves.
Runs a single turn against your default (or --model) and streams the answer.
aether chat "<prompt>" is the explicit form — it bypasses command matching,
so a prompt that happens to look like a command still chats.
aether "explain what src/router.ts does"
aether --model opus "rewrite this function to be O(n)"A lone near-miss token is treated as a typo, not a prompt.
Expected typo example: aether auht suggests aether auth and exits 2 before any hosted request.
Use aether chat auht to send that exact text as a prompt intentionally.
One host loop drives a pluggable brain: cloud (UVT-metered) by default,
--local for the built-in Ollama brain. The host renders every event, executes
every tool call locally, and verifies the result itself — the final status is
derived from your test command's exit code, never the brain's self-report.
Every run ends with a verdict line: ✓ ok · 4 files changed · tests green · 3m12s.
| Flag | Meaning |
|---|---|
--local |
Use the built-in offline Ollama brain instead of the cloud. |
--resume <id|file> |
Continue a prior session id, or a handoff file from another machine. |
--pool <gb> |
Context pool size in GB (status-bar reach = pool × 233M tokens). |
--effort <t> |
Effort tier: LOW | MED | HIGH | MAX | ULTRA | CODEPRO (overrides the saved /effort dial). |
--test-cmd <c> |
Command the verification gate runs (unverified without it). |
--quiet |
Plain output (strip the personality frames). |
--interactive |
Pause at each stage boundary to type a steer (TTY only). |
--no-log |
Disable the local session log (~/.aether-agent/logs). |
--swarm <N> |
N-agent swarm (gated; local-only; refuses at runtime — see commands/code.ts). |
--skill <id> |
Load this skill for the run (id, short name, or command alias) and apply its tool policy — the host refuses any tool the skill does not declare. |
--no-skills |
Load no skill. The project's own AGENTS.md still applies — it is not a skill. |
Before the run starts, the agent prints what it loaded and what it will enforce:
Project my-service
Rules src/AGENTS.md + AGENTS.md
Skills aether/fix-ci@1.0.0 (explicit · builtin · trust builtin · sha256:8efbda8eb35b)
Context 706 tokens (measured, not estimated from a manifest)
Policy read_file · run_tests · repo_search — 3 of 8 host tools, enforced for every tool this host executes
Conflict test command — effective "pytest -q" (nested src/AGENTS.md has higher precedence)
also declared: "npm test" (AGENTS.md)
A skill can only ever narrow what a run may do; nothing in a skill manifest
or an instruction file can grant authority the session did not already hold, and
the operator permission gate still runs on everything the narrowing leaves. A
skill matched automatically from a trigger phrase contributes its instructions
but never its policy — only a skill you name with --skill narrows.
Both flags work on aether chat and the REPL too.
Runs the packaged Ollama child by default, or an authenticated hosted Cloud text-model dev session with
--exec-driver cloud. The cloud path keeps tool authority in this host and refuses any
legacy server-executed downgrade; it requires explicit --model <id> so resumable authority
cannot drift with a changed server default, plus --max-uvt <positive-integer> as a per-session
hosted spend ceiling. Both bindings are persisted for v2 resume. Neo/Kronus aether-* orchestrator IDs are rejected
because this endpoint cannot preserve their router identity. Stdout contains only versioned JSONL protocol frames;
diagnostics use stderr. Protocol v1 remains
the default. Select --exec-protocol 2 for repository-bound checkpoints, pause/resume/steer,
bounded idempotent controls, and confined reusable agent definitions. The default tool envelope
is read-only. Agent shell, Git, and network tools are disabled in both versions. A successful
model completion exits non-zero unless the host-run --test-cmd also passes; v2 additionally
requires the verification result to remain bound to the same commit and workspace bytes.
| Flag | Meaning |
|---|---|
--exec-protocol <1|2> |
Select the headless protocol; v1 remains the compatibility default. |
--exec-driver <ollama|cloud|selftest> |
Use the local model child, local-authority hosted text-model dev session (with explicit --model), or model-free installation selftest. |
--max-uvt <positive-integer> |
Required cloud-driver per-session hosted spend ceiling; unavailable to local drivers and immutable on v2 resume. |
--permission <deny|read-only|workspace-write> |
Set the host-enforced permission ceiling. |
--allow-tool <name> |
Declare a safe file/search tool; repeat to declare more than one. |
--capability-pack <id> |
Record a bounded capability-pack identifier; repeatable. |
--agent-definition <path> |
Load an aether.exec.agent/1 definition confined to the workspace (v2 only). |
--authority-ttl-ms <ms> |
Bound v2 checkpoint authority to 1 second–4 hours. |
--resume <session-id> |
Resume a non-terminal v2 checkpoint without replacing its authority. |
--timeout-ms <ms> |
Bound the run to 100 ms–1 hour. |
--test-cmd <command> |
Run the authoritative final verification gate. |
See docs/HEADLESS_PROTOCOL.md for framing, structured stdin
controls, checkpoint and agent-definition contracts, payload bounds, and stable exit codes.
Hands a multi-step task to an orchestrator, which plans, fans out sub-agents, and synthesizes. Streams task-level progress.
aether run neo "add pagination to the users endpoint and write tests"
aether run kronus "audit this service for race conditions and fix them"Orchestrators are gated to paid tiers. Neo is available on Solo+; Kronus on Pro+.
aether setup --local and aether local doctor perform the same bounded,
read-only diagnosis: Ollama binary, normalized endpoint, server response,
installed tags, selected local model, backend setting, and hosted sign-in state.
No token value is printed and no hosted API is called.
| Command | Effect |
|---|---|
aether local doctor |
Diagnose Ollama without changing anything. |
aether local models |
List installed tags as ollama:<tag> ids. |
aether local use <model> |
Plan and, after confirmation or --yes, save a namespaced local default. Does not switch the backend. |
aether local pull <model> |
Plan and, after confirmation or --yes, run ollama pull with argv-only process launch. Does not select it. |
Stable local setup exit codes are 21 binary absent, 22 server down, 23
no installed models, 24 selected model missing, 25 timeout, 26 malformed
host/response, 27 failed Ollama operation, and 28 failed configuration
mutation. Usage remains 2; declining a shown plan is 20, and a cancelled
pull follows the conventional 130. These values do
not collide with the hosted routing-refusal code 3.
A bare --model <tag> is accepted for backward compatibility only when
--local explicitly selects Ollama. Auto-local fallback requires the
ollama:<tag> namespace, so a hosted model id cannot silently become an Ollama
pull/chat tag. Conversely, an ollama: id is rejected before any hosted
request.
preview start accepts an argv-only command (--command plus repeatable
--arg) or the versioned project declaration .aether/preview.json. Before it
starts anything it prints the exact argv, working directory, inherited
permissions, and network implications, then requires confirmation or --yes.
The supervisor accepts readiness only from reachable loopback HTTP(S) URLs.
An explicitly declared readiness URL must be unreachable before launch and
then become reachable while the child remains stable; this prevents an
unrelated listener from authenticating the child. A URL discovered from child
output is observational convenience, not proof that the child owns the port.
The supervisor stores sanitized bounded logs under .aether/preview/ and owns
the complete process tree. status, logs, and stop use an owner-private, one-use
loopback challenge
instead of trusting a PID file; an unverifiable stale PID is never signalled.
{
"version": 1,
"command": "npm",
"args": ["run", "dev"],
"cwd": ".",
"readyUrl": "http://127.0.0.1:5173"
}Use --no-open in automation. A headless machine always receives the URL and
an honest “not opened” result. /preview start|open|logs|status|stop uses the
same project declaration and lifecycle inside the REPL. This local opener is
separate from web fetching; it does not change the SSRF policy.
Replays a prior local coding session's transcript from ~/.aether-agent/logs/.
With no id, uses the most recent session in this workspace.
aether resume # replay the latest session
aether resume <session-id> # replay a specific one
aether resume export # write ./aether-handoff.json
aether resume export <id> --out h.json # …from a specific session, to a pathexport writes a handoff: one portable JSON file carrying the task, the
model that ran it, the verify gate's verdict, the failing-test count, the files
the run changed, the verification command, and the repository identity (origin
remote, branch, HEAD). It carries no file contents, no shell commands, and no
absolute paths, so it can be copied to another checkout, machine, or OS.
Continue from either form:
aether agent --resume <session-id> "<what to do next>" # same machine
aether agent --resume ./handoff.json # anywhere else
aether agent --resume ./handoff.json --model <other> # …on another modelWith no new task, the run continues the original task. Either way the prior
context is summarized into a continuation brief that the brain reads before its
instruction — you never re-paste the conversation. See
docs/demo/handoff.md for a runnable end-to-end proof.
Local-first: sessions are read from disk, so resume works offline. When you stop a coding run with Ctrl-C, the exact
aether agent --resume <id>command is printed. A session id is workspace-scoped; a handoff file deliberately is not.
Everything the agent has done in this project, and what can still be done with it. Reads a small index beside the session logs, so listing costs one file read however long your history is — it never opens a transcript.
aether sessions # this project's sessions, newest first
aether sessions --all # every project on this machine
aether sessions --json # machine-readable rows + continuity state
aether sessions inspect <id> # one session in full
aether sessions continue <id> # what it was, and the exact next command
aether sessions export <id> # write the portable handoff
aether sessions archive <id> # hide it from the default list
aether sessions archive <id> --undo # bring it back
aether sessions clean # drop index rows whose session is gone
aether resume list # the same listing, from the older command
aether resume <file.json> # show an imported handoff, not a local sessionOn a terminal, aether sessions opens an arrow-key picker (/ filters, Enter
inspects, Esc/q leaves); --no-select gives the flat table instead, and a pipe
or --json always does. Piped output is tab-separated with a fixed field order
(SESSION STARTED STATUS STATE BRAIN MODEL FILES_WRITTEN BRANCH TASK); a TTY gets a
padded table.
Where a session can be continued is computed, not assumed. A session id is
scoped to the absolute working directory it ran in, so the listing labels each
row: ready, stale-branch (this checkout moved to another branch),
moved (same repository, different checkout), elsewhere (another project),
missing (the directory is not on this disk), archived. A session that
cannot be continued here is refused with the reason and pointed at
aether sessions export, which is the form that crosses machines.
Unknown is never rendered as zero. A file count nobody recorded prints as
unknown, not 0. A run whose manifest never closed prints as never
finished — running or interrupted, unknown which, because nothing on this
machine can tell those apart. A branch the record does not name is not assumed
to be the branch you are on now. Pull-request state is not recorded by this
build at all, and says so rather than reading as "no PR".
Nothing here deletes your work. archive sets a flag; the session log,
worktree and branch are untouched, and --undo reverses it. Archiving a
session whose record never closed says so before asking. clean removes only
index rows that point at sessions already gone from disk, after printing every
row it will remove, and it is refusable. Neither command touches a worktree, a
branch, or a file a run wrote.
aether models— list every model and orchestrator visible to your tier.*= your current default,🔒= locked on your plan,cap N= monthly UVT ceiling for that model on your tier.aether models use <id>— set your local default model/orchestrator.
aether models
aether models use sonnetLists only the orchestrators (Neo / Kronus), filtered from the same catalog.
Modeled on GitHub's gh auth. One credential for the CLI, desktop, and web.
aether login / aether logout are aliases for auth login / auth logout.
| Subcommand | Does |
|---|---|
aether auth login |
Default: open aethersystems.net/platform, paste the CLI token. |
aether auth logout |
Clear the stored credential (best-effort server notify). |
aether auth status |
Show login state: token type (API token aek_ vs session), masked token, base URL, tier. |
aether auth token |
Print the stored token (for scripts / CI). |
aether auth refresh |
Refresh a session token (API tokens don't expire). |
auth login flags:
| Flag | Meaning |
|---|---|
| (none) | Browser OAuth: open the platform, paste the token. |
--with-token |
Read the token from stdin (aether auth login --with-token < token.txt). |
--token <t> |
Store a token directly. |
--username <u> --password <p> |
Headless credential login. |
--license-key <k> |
Supply a license key alongside credentials. |
--no-browser |
Print the URL instead of opening a browser. |
Lists recent chain-of-custody entries for your account (default 50). Each row:
timestamp · event · commitment_hash · order_id.
aether audit 20Exports the cryptographic proof package for one audit entry. Find ids with
aether audit.
aether receipt chat_8f3a...Every check answers three questions separately, so "configured" is never mistaken for "working":
Agent transport
configured yes
reachable yes
verified now yes · 15:42:08
A check nobody exercised reports not checked — never a pass. A surface this
build genuinely does not have reports n/a with the reason. Exits 1 if any
check is an error, so it is safe to gate scripts on.
aether doctor — fast and strictly read-only. No network call, no model
call, no session, no opener launch, no credential refresh, no write. Covers
runtime, workspace, git, transport config, auth config, tools, memory, MCP
registry, persistence, the media output index, the opener, GitHub, and
Protocol-C receipt storage.
aether doctor --live — proves the paths end to end, right now:
authenticated catalog fetch, a dev session, sequence-numbered frames,
pause/resume/steer acknowledgement, a sandboxed tool write/read/compare/delete
round trip, clean session close, a real browser open confirmed by a loopback
callback, GitHub identity, branch freshness compared without fetching, the
MCP broker, and a Protocol-C receipt round trip. Billing is accounted across
the run and reported as spend.none; the agent loop runs only when the server
confirms a non-billable doctor session, and is reported as unproven otherwise.
--no-ui skips the browser proof on a headless box (reported as skipped, not
passed).
aether doctor --fix — a closed allowlist of local repairs, never a repair
agent. Prints the exact scope, action, risk, reversibility and backup of every
planned repair and changes nothing without --yes. It will not rotate
credentials, spend UVT, invoke a model, edit source, mutate a git ref, dispatch
Actions, run Predator, or call an MCP write tool.
aether doctor # fast, read-only
aether doctor --live # end-to-end proof, no spend
aether doctor --live --no-ui # same, on a headless box
aether doctor --fix --dry-run # show the repair plan, change nothing
aether doctor --fix --yes # apply the plan
aether doctor --fix --only media.rebuild --yes
aether doctor --json # schema-versioned report for automation--deep still means the read-only report it always meant; it now points at
--live for the end-to-end proof.
Skills are packaged instructions the agent can load. Built-in skills ship with the package; user skills live under your config directory; project skills live in the repository you are working in.
aether skills list # every discovered skill, with scope and trust
aether skills show <id> # one skill: manifest, declared tools, digest
aether skills check [--all] # validate manifests and report index errors
aether skills trust <id> # approve a project skill at its current digest
aether skills lock # pin discovered project skills to a lockfileProject skills are untrusted until you approve them. Trust is bound to the skill's content digest, so editing a trusted skill revokes that trust until you approve the new digest. A skill declaration narrows what the agent may do — it never grants a tool the host would otherwise refuse.
Prints the capability contract: tools, their side-effect class, and the
permission each requires. --available additionally reports what is usable in
your current session rather than what exists in principle.
The command prefers the server manifest and falls back to a packaged snapshot when the server cannot be reached. It says which one it used, and why, rather than presenting stale data as live.
Writes a .tar of metadata-only diagnostics for troubleshooting: a fast doctor
report, runtime facts, sanitized config, and skill and instruction inventories.
It carries counts, ids and digests — never prompts, file contents, tokens, environment values or raw command text. Every entry is scanned before the archive is finalized; if a secret is detected the bundle is refused rather than written, and an interrupted run leaves no partial file behind.
Like aether doctor, it makes no network call and spends nothing.
With no subcommand (in a TTY), opens the same interactive MCP manager as the
/mcp slash command: an arrow-key menu over backend connections (OAuth/PAT
providers) and local custom servers (mcp.json), with authenticate / test /
disconnect actions per entry.
| Subcommand | Does |
|---|---|
aether mcp list |
Print a diagnostics report (providers, connections, tool counts). |
aether mcp doctor |
Same report; exits 1 if any check fails (scriptable health gate). |
aether mcp repair |
Back up and reset a corrupted local MCP registry (confirms first). |
aether mcp drive login [--no-browser] |
Open GitHub sign-in on this computer, bind a separate Cloud session only after the staff route accepts it. Existing aek_ device API keys remain separate. |
aether mcp drive logout |
Revoke and clear the dedicated Drive staff session. |
aether mcp drive preview <intake.json> |
Read-only Cloud staff preflight. At G0, returns blockers and creates no mission or spend. |
aether mcp drive status <lane-id> |
Read shared C1 mission metadata visible to the bound staff session. |
aether mcp drive events <lane-id> [after-cursor] [limit] |
Page shared C1 control events visible to the bound staff session. |
Drive reads require an existing bound Cloud staff session (for example a desktop-injected session). The ordinary aether auth login device flow issues an aek_ API key, which the Drive client refuses before sending a staff request. The Cloud independently checks staff role and lane visibility. These read commands do not start or control a mission.
Local settings, stored at ~/.config/aether/config.json.
aether config # show all
aether config get defaultModel
aether config set defaultModel opus
aether config set permissionMode ask # ask | auto | skip
aether config set autoApply true| Key | Type | Meaning |
|---|---|---|
baseUrl |
string | Aether API base URL. |
defaultModel |
string | Model used when --model is omitted. |
defaultEffort |
string | Effort tier for aether code when --effort is omitted (LOW|MED|HIGH|MAX|ULTRA|CODEPRO, "" = server default). Same dial as /effort. |
permissionMode |
ask|auto|skip |
Gate edits/commands: prompt every time, auto with confirm, or fully autonomous. |
autoApply |
bool | Apply streamed edits without a per-edit prompt. |
telemetry |
bool | Anonymous usage telemetry opt-in. |
Type a prompt to chat; type / to drive the session. /help renders this same
set, grouped, inside the REPL. This table is the single source of truth — it
mirrors the live registry in src/commands/slash_registry.ts.
| Command | Action |
|---|---|
/help |
Show the grouped command menu. |
/models |
List chat models (numbered; › current, 🔒 locked). |
/model <n|id> |
Switch model — opens the picker with no arg. Restarts the session. |
/agents |
View active agent sessions (name, status, time, UVT, task). |
/agent <n|id> |
Switch orchestrator (Neo / Kronus) — opens the picker with no arg. |
/tier |
Show your plan tier, default, and available counts. |
/effort [tier|1-6] |
Show or set the effort dial (LOW→CODEPRO). The dial moves phases, sub-agent fan-out, repair passes and the UVT ceiling; CODEPRO additionally enables System-2 review and unlimited context, and gets the banner. Persists to your Aether config and drives aether code. |
/audit [n] |
Recent chain-of-custody receipts. |
/doctor [deep] |
Run ordered diagnostics; deep adds bounded checks. |
/clear |
Clear the screen. |
| `/mcp [list | doctor |
/exit, /quit |
Leave the REPL. |
Typos get a nudge: /modle answers did you mean /model?. Tab completes any
of the above.
Each starts an agent loop in the REPL.
| Command | Action |
|---|---|
/autonomous-execution <task> |
Execute a task end-to-end without per-step prompts. |
/subagent-driven-execution <task> |
Decompose a task and delegate to sub-agents. |
/self-review |
Review your own recent work. |
/recon <topic> |
Deep reconnaissance pass over the codebase. |
/plan <topic> |
Write an implementation plan. |
/writing-plans <topic> |
Write a plan to .hermes/plans/. |
/research <topic> |
Research → gather → summarize. |
/project-review |
Full project review + summary. (Was /review; that name is now the change-review rail below.) |
/code-review |
Sweep: clean up + simplify. |
/writing-skills |
Author reusable skills. |
| Command | Action |
|---|---|
/queue <task> |
Queue a task to run when the current one finishes. |
/steer <guidance> |
Mid-task steering applied on the next turn. |
/btw <note> |
Contextual side note (accumulates into context). |
| Command | Action |
|---|---|
/pin <path> [reason] |
Force a file into persistent context across loops. |
/pin list |
List pinned files. |
/drop <path> |
Evict a file from context. |
/snapshot |
Save session state to disk. |
/snapshot resume [id] |
Reload a snapshot (cloud first, else local; lists with no id). |
/snapshot list |
List saved snapshots. |
/limit <uvt> |
Cap UVT spend for the session (/limit off to remove). |
/audit-receipt [n] |
Verified log of tool calls + UVT (local custody + server). |
/rollback |
Discard uncommitted changes to tracked files (git-backed). Restores from the index, so files with staged changes come back to their staged state, not to the last commit. Untracked files are never touched. |
/logs-view, /logs |
Interactive session log browser. |
| Command | Action |
|---|---|
/goal <desc> |
Create a goal; the agent plans phases. |
/goal view [id] |
Show the goal chain + detail. |
/goal start|pause|resume|cancel|complete|note |
Drive a goal's lifecycle. |
/goals [id] |
List goals, or view one by id. |
| `/memory [status | inspect |
/workflow |
Workflow status. |
/workflow-templates |
List workflow templates. |
/workflow-template <n> |
Load a template. |
| Command | Action |
|---|---|
/vault |
Vault status (note count). |
/vault-context |
Load vault context into the next agent turn. |
/vault-search <q> |
Search notes. |
/vault-recent [n] |
Most recent notes. |
/vault-project <name> |
Notes for a project. |
/vault-tag <tag> |
Notes by tag. |
/vault-tree |
Vault folder tree. |
Requires an active orchestrator — switch with /agent neo or /agent kronus first.
| Command | Action |
|---|---|
/delegate <model> <task> |
Delegate a sub-task to a worker model. |
/tree |
Live orchestration hierarchy (workers, step, tokens, UVT). |
/broadcast "<msg>" |
Inject a directive to all sub-agents. |
/gather <id|all> |
Merge completed sub-agent work to staging. |
| Command | Action |
|---|---|
/scaffold <type> <name> |
Generate boilerplate: component, route, or module. |
/port <file|dir> <lang> |
Translate code to another language. |
/test-drive "<target>" |
Generate a test matrix for a route/function, run it, and iterate until green (requires an active orchestrator). |
/bench <target> |
Profile a function/endpoint and suggest optimizations (requires an active orchestrator). |
/purge |
Flush pinned files, temp files, and the UVT cap back to a lean baseline. |
/stage-diff |
Unified diff of uncommitted changes + a suggested commit message. |
| `/review [stage | unstage |
/ship |
Publish the reviewed branch and open a pull request. |
/revert <file|step> |
Surgical rollback of a single file (git-backed). |
| Command | Action |
|---|---|
/photogen <prompt> [--model --aspect --count --4k --vector] |
Generate image(s). |
/frame <prompt> |
Generate a single styled frame. |
/re-frame <edit> |
Re-run the last image with an edit description. |
/videogen <prompt> [--model --duration --1080p --audio] |
Generate video. |
/sequence <prompt> |
Cinematic multi-shot video (routes to a cinematic model by default). |
/animate <image_url|file|#n> [motion] |
Animate a still image into video. |
/re-cut <edit> |
Re-edit the last generated video. |
/output [open <ref>|clean] |
List, open, or clear recent generations. <ref> is a sequence number, a full artifact ID, or a unique ID prefix; an ambiguous reference lists its candidates instead of guessing. |
/storyboard <prompt|file> [--scenes --style] |
Multi-scene storyboard: parse → preview → --generate/--animate/--render. |
| Command | Action |
|---|---|
/add <element>, /add list |
Add a HUD overlay element (context-bar, timer, tools, help, health, status), or list what's available. |
/hud remove <element> |
Remove one active HUD element. |
/hud list, /hud |
List active HUD elements. |
/hud clear |
Remove all active HUD elements. |
| Var | Default | Meaning |
|---|---|---|
AETHER_BASE_URL |
https://api.aethersystems.net/cloud |
Overrides the config baseUrl. |
AETHER_LOGIN_URL |
https://aethersystems.net/platform |
Page aether auth login opens. |
AETHER_TOKEN |
(unset) | Inject a session token (CI / headless / embedding). |
AETHER_CONFIG_DIR |
~/.config/aether |
Config + token + REPL-history directory. |
AETHER_LOG_DIR |
~/.aether-agent/logs |
Where session logs (and therefore aether resume) live. |
AETHER_BACKEND |
auto |
local | cloud | auto — overrides the config backend. |
AETHER_LOCAL_BRAIN |
(unset) | python runs the separately-installed Unlimited-Context brain instead of the built-in Ollama one. |
OLLAMA_HOST |
http://localhost:11434 |
Where the offline brain looks for Ollama. Accepts Ollama's own scheme-less form (127.0.0.1:11434) as well as a full URL — see below. |
AETHER_STREAM_TIMEOUT_MS |
120000 |
Stream open/idle timeout (ms). 0 disables it. |
AETHER_NO_ANIM |
(unset) | 1 disables all animated status lines and the thinking pulse. |
NO_COLOR |
(unset) | Any value disables ANSI colors (https://no-color.org). |
See .env.example.
ollama serve prints and binds a scheme-less host:port, and that is what most
people paste into OLLAMA_HOST. Every accepted form below is normalized to a full
base URL before any request is built:
| You set | Aether uses | Note |
|---|---|---|
| (unset or empty) | http://localhost:11434 |
The default. |
127.0.0.1:11434 |
http://127.0.0.1:11434 |
Scheme-less — http:// is added. |
localhost:11434 |
http://localhost:11434 |
Scheme-less. |
0.0.0.0:11434 |
http://127.0.0.1:11434 |
0.0.0.0 is a bind address, not a connect address. |
http://localhost:11434/ |
http://localhost:11434 |
Trailing slashes are stripped. |
https://ollama.example.com |
https://ollama.example.com |
A remote/proxied Ollama. |
Anything that still will not parse as an http/https URL is rejected up front with
an error naming the bad value, instead of failing later as "cannot reach Ollama".
| Code | Meaning |
|---|---|
0 |
Success. |
1 |
Runtime error (network, server error, etc.). |
2 |
Usage error (bad/missing arguments). |
3 |
Routing refused. aether agent needs a transport with local authority (the dev-session protocol, where tools run in this checkout). When the server refuses it — 403 agent dev sessions disabled, or 404 on an older server — the run prints a ROUTING_DRIFT line and stops rather than degrading to the one-way chat stream, whose tools run server-side and would change nothing on disk. Ask the operator to set AETHER_AGENT_DEV_ENABLED=1, or run aether agent --local. |
import { createClient } from "aether-agents";
const aether = createClient({ baseUrl, token });
aether.chatStream(prompt, { model?, agent?, manualModel? }) // AsyncIterable<StreamFrame>
aether.catalog() // { models, tier, default }
aether.login(username, password, licenseKey?)
aether.http // raw authed HTTP on the same routeStream frames: open · ping · reasoning · delta · usage · done ·
error, plus orchestrator frames task_start · task_progress · task_done ·
task_failed · task_blocked · project_done. Unknown frame types are ignored.