origin remote.
Before you start
- The repository you work in is connected to an Aether project with a cloud agent provider connected. A repository is connected once per organization.
- Claude Code 2.1.280 or newer, or Codex CLI 0.154.0 or newer, and the Aether CLI 0.2.21 or newer on
PATH. Both clients start the CLI’saether mcp serveas their Aether MCP server.
Connect your client
1
Run setup
aether mcp serve as the Aether MCP server in each, replaces the connection Claude Code used before CLI 0.2.21 and removes its two hooks, and signs the bridge in once through your browser. Run it again after installing a client; steps already done are skipped.aether mcp serve for each session and stops it when the session ends. The command forwards Aether’s tools to the hosted endpoint, knows which conversation it serves (Claude Code’s session registry, Codex’s thread id), and wakes that conversation when a delegated task reports back. aether mcp login stores the credential in ~/.aether/mcp-oauth/ (readable only by you), shared by every Claude Code and Codex session on the machine; a session that finds no credential opens the browser itself, which takes longer than either client allows a server to start. Codex users may add required = true to the [mcp_servers.aether] table in ~/.codex/config.toml so a turn waits for Aether instead of starting without it.
Delegate your first task
From a checkout of the connected repository, paste this into your conversation:aether_spawn_task and gets a task link. The cloud agent sends its report with aether_respond_to_parent, exactly as a child of a cloud task does, so the prompt should say what to report. The task starts from pushed repository state: your local uncommitted changes and conversation transcript are not uploaded. Push a branch first if the cloud agent needs your latest code, and name it in the request.
A successful first run leaves you with a task link and the cloud agent’s report in your conversation.
How results reach your conversation
The cloud task reports back throughaether_wait_for_tasks, which returns each report, question, and failure framed as a message from that task.
- Claude Code:
aether mcp servewatches the conversation and sends it a message when a report arrives (it appears as a message from another Claude session), asking Claude to callaether_wait_for_tasks./clear,/resumeand reopening a closed session are followed: a report that arrived while a conversation was not showing is announced as soon as it shows again. - Codex:
aether mcp servewatches the conversation and queues a message into the thread when a report arrives, asking Codex to callaether_wait_for_tasks. - When the task needs input: the report is a question. Your agent answers it with
aether_respond_to_task. - When the task’s pull request is ready: a report says it is clean and mergeable at its current head, with no failing or pending external check runs recorded (Aether’s own checks are not counted). Readiness is a snapshot: inspect the pull request before acting, and whether to merge is your call.
- When your client is closed: cloud work continues. Reports wait; reopen the conversation and Claude Code is woken for them, Codex after its first Aether tool call in the resumed thread. Either way
aether_wait_for_tasksreturns everything the conversation has not acknowledged yet. - Acknowledging: after reading, your agent calls
aether_wait_for_tasksagain withacknowledgeset to the ids it received. An update stays unacknowledged, and is announced again, until it does. The acknowledging call returns at once, with anything still unread, even while other children run; only a call withoutacknowledgewaits. - When a task’s run ends: every run ends with one
endedupdate, finished or stopped, whatever the task reported along the way, so a task that stops working without reporting still wakes your conversation. A stop your own conversation made is not reported back. Your agent reads a task that ended without a report withaether_read_task_messages.
Useful ways to split the work
Include the branch, scope, and completion criteria in the request. Configure required dependencies and secrets in the project environment. Cloud changes stay on the task’s branch: ask for a PR, review it, and decide how to bring it into your work. A report does not merge or apply anything to your local checkout.
Delegation, Teleport, or a CLI task?
Connection and permissions
The server ishttps://api.runaether.dev/mcp. Its credential permits delegation, including billable task creation, and excludes account settings, billing details, and direct database access.
Only what your agent explicitly puts in a task or a reply is sent to Aether. The bridge sends the conversation’s id with each call and asks the server which of that conversation’s reports are unread; it does not upload prompt text, transcripts, local files, or tool output.
Other MCP clients can add the hosted server directly at https://api.runaether.dev/mcp. Without the bridge, a conversation lasts as long as the client’s connection: reconnecting starts a new one, and its earlier tasks no longer report to it.
Troubleshooting
Remove an older install
Before CLI 0.2.21, Claude Code connected to the hosted server directly and needed two hooks.aether setup replaces the connection and removes the hooks; by hand, run claude mcp remove --scope user aether and delete the UserPromptSubmit and Stop entries that call aether_hook in ~/.claude/settings.json. The tool those hooks call has been removed, so a leftover hook reports an error on every prompt and at the end of every turn until it is deleted; it does not block the turn.
Earlier still, Aether CLI releases installed delegation per checkout with aether setup. Those files are no longer used; delete them from each checkout:
.aether/delegation-*.jsonand.aether/delegation-setup.lock- Claude Code: the
aether_delegationentry in.mcp.json, theaetherhooks in.claude/settings.local.json, and.claude/skills/aether-delegate/ - Codex: the
aether_delegationentry in.codex/config.toml,.codex/hooks.json, and.agents/skills/aether-delegate/