aether-agent-cli
The Aether CLI ships as a single binary, aether, with subcommands for each mode of use:
aether— interactive TUI (default when run with no args)aether headless— single-prompt headless run for scripting/CIaether acp— Agent Client Protocol (ACP) server for editor/IDE integration (e.g. Zed)aether settings init --user|--project— initialize user or project settingsaether show-prompt— print the fully-assembled system prompt (debugging)
Table of Contents
- Install
- Quick Start
- Choosing a Model
- Editor Integration (ACP)
- MCP Configuration
- Slash Commands
- Settings
- Logs
Install
Pick whichever fits your workflow:
# npm (cross-platform)
# Homebrew (macOS / Linux)
# Shell installer (macOS / Linux)
|
# From source
To build from a workspace checkout:
# binary lands at target/release/aether
Quick Start
Interactive TUI
If neither user settings nor project settings exist, the binary launches user-level onboarding before starting the TUI. To initialize explicitly, run aether settings init --user for personal defaults or aether settings init --project from a repository root for project-local agents.
Headless
Useful flags: -a/--agent (named agent from settings), -C/--cwd, --system-prompt, --output text|json, --events tool_call,tool_result,..., --mcp-config <path>, --settings-file <path> / --settings-json <json>. Pass the prompt as positional args, or pipe it on stdin.
ACP server
Flags: --agent <name> (mutually exclusive with --model), --reasoning-effort low|medium|high|xhigh, --log-dir <path>, plus the same --settings-file / --settings-json options.
Choosing a Model
Aether supports multiple LLM providers using a provider:model string format:
| Provider | Example | Env var required |
|---|---|---|
| Anthropic | anthropic:claude-sonnet-4-5-20250929 |
ANTHROPIC_API_KEY |
OpenRouter |
openrouter:moonshotai/kimi-k2-thinking |
OPENROUTER_API_KEY |
| ZAI | zai:GLM-4.6 |
ZAI_API_KEY |
| Ollama | ollama:llama3.2 |
None (local) |
| Llama.cpp | llamacpp |
None (local) |
Editor Integration (ACP)
Zed
Add to your Zed settings.json (Main Menu → "Open Settings File"):
Then open the Agent Panel and select "New Aether Agent Thread".
Important: Update the paths and configuration:
command: Full path to theaetherbinary (e.g. the result ofwhich aetherortarget/release/aether)--mcp-config: Path to your MCP configuration file- Set the appropriate API key env var for your model provider
MCP Configuration
The mcp.json file configures MCP tool servers:
- coding — Filesystem tools (read, write, bash, etc.) plus optional auto-read rules from configured
--rules-dirpaths - skills — Slash commands and reusable prompts loaded from the configured
--dirpaths
Slash Commands
Slash commands are markdown files served by the skills MCP server from any directory passed via --dir. Each entry is either a single .md file or a directory containing SKILL.md (plus optional supporting files). To make a prompt appear as a /slash-command in the TUI / ACP client, set userInvocable: true in its frontmatter.
Example .aether/skills/plan.md:
description: Create a detailed implementation spec for a task
argumentHint: <task description>
userInvocable: true
You are an expert software architect. Create a comprehensive technical specification.
$ARGUMENTS
Frontmatter fields:
description— shown in command pickersargumentHint— optional hint string for the argumentuserInvocable— exposes the prompt as a/slash-commandagentInvocable— exposes the prompt as a skill that other agents canget_skillsagainsttags— used by thesearch_notes/list_skillsdiscovery surface
Parameter syntax in the body:
$ARGUMENTS— full argument string (e.g./plan add user auth→add user auth)$1,$2,$3— positional arguments
Settings
User-level settings live in $AETHER_HOME/settings.json or ~/.aether/settings.json. Project-level agent configuration lives in .aether/settings.json at your project root. Aether loads user settings first, then project settings; project agents with matching names override user agents. Settings define agents (modes and sub-agents), default prompts, and default MCP server configuration.
Agents (Modes and Sub-agents)
Define agents with specific model, prompts, and tool configurations:
agent— Optional default user-invocable agent name.- Top-level
prompts— Ordered default prompt sources used by agents that do not define their ownprompts. File paths can be written as strings; typed objects support{ "type": "text", "text": "..." },{ "type": "file", "path": "..." }, and{ "type": "glob", "pattern": "..." }. - Top-level
mcps— Ordered default MCP config sources used by agents that do not define their ownmcps. File paths can be written as strings; typed objects support{ "type": "file", "path": "...", "proxy": false }and inline{ "type": "inline", "servers": { ... } }entries. - Agent
prompts— Optional ordered prompt sources that override top-levelpromptsfor that agent. Supports the same string shorthand and typed objects as top-levelprompts. - Agent
mcps— Optional ordered MCP config sources that override top-levelmcpsfor that agent. Supports the same string shorthand and typed objects as top-levelmcps. userInvocable: true— Agent appears as a mode option in ACP clients (e.g., Wisp's Shift+Tab)agentInvocable: true— Agent can be spawned as a sub-agenttools— Filter which MCP tools the agent can use (optional). Supportsallow(allowlist) anddeny(blocklist) with trailing*wildcards. If both are set,allowis applied first, thendenyremoves from the result. Omit or leave empty to allow all tools.
You can scaffold settings interactively via aether settings init --user or aether settings init --project. Edit the generated settings JSON directly to customize agents.
Logs
ACP runs write logs to --log-dir (default: /tmp/aether-acp-logs/). Control verbosity with the RUST_LOG environment variable.