Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ The server advertises one MCP prompt named `plan`. It accepts one required `ARGU

## Submit command override

Any trailing args after plan flags are treated as an external submit command. When `submit_plan` is called, Aether appends the resolved absolute plan path as the final command argument and returns the command's stdout as feedback.
Any trailing args after plan flags are treated as an external submit command. When `submit_plan` is called, the plan server appends the resolved absolute plan path as the final command argument and returns the command's stdout as feedback.

```json title=".aether/mcp.json"
{
Expand Down Expand Up @@ -78,7 +78,7 @@ Without a submit command, `submit_plan` uses MCP elicitation and the client disp

| Field | Type | Description |
| ---------- | -------- | ------------------------------------------------------------------------ |
| `planName` | `string` | Stable plan identifier using only letters, numbers, dashes, underscores. |
| `planName` | `string` | Stable plan identifier using only letters, numbers, dashes, and underscores. Must be non-empty and must not start or end with a dash or underscore. |
| `content` | `string` | Markdown plan body. |

### Output
Expand Down Expand Up @@ -139,7 +139,7 @@ Each entry in `edits` is a `FileEdit`:
| Field | Type | Description |
| ---------- | --------- | ----------------------------------------------------------------------------------------------- |
| `approved` | `boolean` | `true` when the reviewer approved the plan. |
| `feedback` | `string` | Present when the reviewer requested changes or when an external submit command returned stdout. |
| `feedback` | `string` | Present when the reviewer denies with feedback or when an external submit command returned stdout. |

### Example request

Expand Down Expand Up @@ -168,5 +168,5 @@ Each entry in `edits` is a `FileEdit`:

1. The planner calls `write_plan` with a stable plan name, such as `feature`.
2. The planner calls `submit_plan` with the same `planName`.
3. The client shows an approve / request-changes review form with the rendered markdown.
3. The client shows an approve / deny review form with the rendered markdown.
4. If changes are requested, the planner calls `edit_plan` and then `submit_plan` again.
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ The `subagents` server lets one agent delegate work to other configured agents.
}
```

`--project-root` loads `.aether/settings.json` from that directory. `--dir` is accepted as an alias. When omitted, the server uses `.`.
`--project-root` sets the directory sub-agents resolve paths against. When run as a standalone stdio server, it loads `.aether/settings.json` from that directory to resolve agents. When wired in-memory (as above), agents come from Aether's injected agent registry instead. `--dir` is accepted as an alias. When omitted, the server uses `.`.

## Available sub-agents

Expand Down
8 changes: 4 additions & 4 deletions packages/website/src/content/docs/aether/introduction.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -38,13 +38,13 @@ aether headless "Explain the main function in this project"

##### Rust

Ather agents can be defined and controlled via a Rust crate:
Aether agents can be defined and controlled via a Rust crate:

<RustBasicAgent />

##### TypeScript

Aether agents can be programatically defined and controlled via a TypeScript SDK:
Aether agents can be programmatically defined and controlled via a TypeScript SDK:

<SdkBasicSession />

Expand All @@ -62,13 +62,13 @@ Some agents are minimal, others are "batteries-included". Aether is **modular**;

Minimal agents are great until you have to ["draw the rest of the f-ing owl"](https://knowyourmeme.com/memes/how-to-draw-an-owl). Batteries-included agents are great until you need _more control_ and end up fighting the prompts and tools that were hardcoded into the harness.

Aether gives you the best of both worlds. Your agent starts as a blank slate with no system prompt or tools. Then you add only what you need via 1st-party extentsions for fileystem tools, skills, sub-agents, [LSP](https://microsoft.github.io/language-server-protocol/) integration and more. You're not left to draw the "owl" by yourself.
Aether gives you the best of both worlds. Your agent starts as a blank slate with no system prompt or tools. Then you add only what you need via 1st-party extensions for filesystem tools, skills, sub-agents, [LSP](https://microsoft.github.io/language-server-protocol/) integration and more. You're not left to draw the "owl" by yourself.

#### MCP, done better

Aether agents get tools _exclusively_ via [MCP](https://modelcontextprotocol.io/docs/getting-started/intro) servers . This makes Aether easy to extend in _any_ language you want.

MCP has a bad rap for "wasting tokens" because many MCP clients dump tool definitions directly into context. Aether _doesn't_ do that. It has token-efficient progessive tool discovery built-in. So you don't need to worry about MCP vs CLIs.
MCP has a bad rap for "wasting tokens" because many MCP clients dump tool definitions directly into context. Aether _doesn't_ do that. It has token-efficient progressive tool discovery built-in. So you don't need to worry about MCP vs CLIs.

#### ACP-1st Architecture

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ aether headless [OPTIONS] [PROMPT]...
If prompt words are provided, Aether joins them with spaces. If no prompt is provided and stdin is not a TTY, Aether reads stdin, trims it, and uses that as the prompt.

```bash
git diff --staged | aether headless "Review these changes"
git diff --staged | aether headless
```

## Agent selection
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ Aether uses JSON for configuration. **Agents**, along with their **models** (LLM

Settings can be defined at the **user** level (`$HOME/.aether/settings.json`), the **project** level (`.aether/settings.json`), or passed inline to the CLI via `--settings-json`. User and project settings are merged, with project-level taking priority in the case of a collision.

You can boostrap user-level or project-level settings with a single command:
You can bootstrap user-level or project-level settings with a single command:

```bash
# Generate a user-level settings file
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@ aether headless \
"Say hello"
```

Inline settings are merged on top of file-based settings using the same rightmost-wins rules.
Inline settings replace file-based settings entirely. They use the same schema but are not merged with user or project settings files.

## Typical patterns

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,10 +81,11 @@ Open with `/settings`. The overlay shows all configurable options:
- **Model** — Override the model used by the currently active agent runtime
- **Reasoning effort** — Set thinking budget (also cyclable with `Tab`)
- **Mode** — Switch to a different user-invocable agent profile, including its prompts, MCP servers, tools, model, and provider settings (also cyclable with `Shift+Tab`)
- **Theme** — Switch the active `.tmTheme` from the themes directory
- **MCP servers** — View connected servers and their status
- **Provider logins** — Authenticate with providers that require it

These options are advertised by the agent — the terminal UI discovers them at session start. Different agents may expose different options.
All options except **Theme** are advertised by the agent — the terminal UI discovers them at session start. Different agents may expose different options. **Theme** is a local terminal option.

## How agent config works

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: TypeScript SDK
description: Run Aether from Node.js with the TypeScript SDK.
---

The TypeScript SDK allows you to programatically define agents, start sessions, send prompts, stream updates, and attach MCP tools.
The TypeScript SDK allows you to programmatically define agents, start sessions, send prompts, stream updates, and attach MCP tools.

## Install

Expand Down Expand Up @@ -135,7 +135,7 @@ Because `aether headless` exits non-zero on a failed turn, `runHeadless()` **rej
| `settingsFile` | Path to an alternate settings JSON file. |
| `systemPrompt` | Additional system prompt text. |
| `output` | `"text"`, `"pretty"`, or `"json"`. Defaults to `"text"`. See [output formats](/aether/running/headless/#output-formats). |
| `events` | Event kinds to emit (only meaningful with `output: "json"`). See [event filtering](/aether/running/headless/#event-filtering). |
| `events` | Event kinds to emit. See [event filtering](/aether/running/headless/#event-filtering). |
| `verbose` | Verbose diagnostic logging to stderr. |
| `providers` | Provider connection overrides, such as custom Bedrock endpoints or auth behavior. |
| `traceContext` | A remote W3C `traceparent` with optional `tracestate`, or a standalone `traceId`. See [Telemetry](/aether/settings/telemetry/#correlating-sdk-runs). |
Expand Down