ao-desktop-dev
Launch, restart, or troubleshoot the real AO Electron desktop app from this repository; run a checkout against isolated or real…
Shared rules and the connection helper for every ao-* skill (run Orchestrator from chat). Read before running any ao-* skill.
$ npx -y skills add OrchestratorInc/agent-orchestrator --skill ao-rules --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/ao-rulesContext preview
The summary Claude sees to decide when to auto-load this skill.
Shared rules and the connection helper for every ao-* skill (run Orchestrator from chat). Read before running any ao-* skill.
name: ao-rules description: >- Shared rules and the connection helper for every ao-* skill (run Orchestrator from chat). Read before running any ao-* skill.
Every ao-* skill follows these rules. Other skills link here instead of repeating them.
An **AO host** is one computer that runs the AO daemon. Each host has its own projects, sessions and orchestrators, and AO never links them: a repo cloned on two hosts is two separate projects. AO names a project after its folder, so both can still get the same id, and then the same session id (for example `agent-orchestrator-1-12`) can exist on both. Always name a session as `<host>/<session id>`, and act only on the host that owns it.
Memory keeps one note named **AO hosts**, with one line per host:
| Field | Example | Meaning | |---|---|---| | `name` | `Pro` | A short name: the user's pick, else the model word of the ListMachines label (`Pro`, `Air`, `mini`). Never the network hostname such as `MacBookAir.lan` | | `reach` | `local` or `remote` | How you get to its AO | | `via` | `laptop` | The ListMachines label of the computer whose shell you use | | `base` | `http://192.168.1.20:7444` | Remote only. The host's LAN address from AO's remote access settings | | `header` | `~/.ao-grok/studio.header` | Remote only. File on `via` that holds the host's password |
One computer can be `via` for itself (local) and for other hosts (remote) at the same time.
Every run: call ListMachines, then use every host whose `via` computer is connected, in parallel, labelled by host name. Say once which hosts you could not reach. Never hard-code machine ids or home paths.
Start every shell command that calls AO with this helper. It works in zsh and bash:
aoapi(){ # aoapi METHOD PATH [JSON]
local base hdr=() data=() f="${AO_RUN_FILE:-$HOME/.ao/running.json}"
if [ -n "$AO_REMOTE_BASE" ]; then base="$AO_REMOTE_BASE"; hdr=(-H @"$AO_REMOTE_HEADER")
else [ -f "$f" ] || { echo "AO_NOT_RUNNING" >&2; return 3; }
base="http://127.0.0.1:$(grep -o '"port": *[0-9]*' "$f" | grep -o '[0-9]*$')"; fi
[ -n "$3" ] && data=(--data "$3")
curl -sS --fail-with-body --max-time 30 -X "$1" "${hdr[@]}" -H 'Content-Type: application/json' "${data[@]}" "$base/api/v1/$2"
}| You see | Meaning and next step | |---|---| | `AO_NOT_RUNNING`, or connection refused on a local host | AO is not running there. Ask the user to open AO | | Connection refused or timeout on a remote host | The host is asleep, off this network, or remote access is off. Ask the user to check AO's remote access settings on the host | | HTTP 401 or 403 on a remote host | The host's password changed. Run ao-setup "Remote host" again | | HTTP 404 on a session path | No such session on that host. Check the host name | | Any other error | AO returns JSON with `message`. Relay it in plain words |
Each project on a host has at most one live **orchestrator**: an agent that plans the project's work, starts and steers workers, and gets their reports. It has more context than you do. You are the user's phone line to it.
A worker asks for two kinds of decision. A **question** (`user_input`) asks what to build. An **approval** asks permission to run a command or change files. Who decides depends on the mode, saved in memory:
1. **Default mode**: show each question or approval to the user as a card with the exact options. Answer only with their pick for that request. Never reuse a pick for a new request. 2. **Away mode** starts when the user says something like "I'm away", "decide for me" or "keep it moving". Save the scope and the end time in memory. Then:
3. **Standing approvals**: the user may list kinds of approvals to always accept. Follow the list exactly.
AO gives no risk level, so you judge it. Treat these as a floor. If a command looks riskier, call it high.
| Risk | Examples | |---|---| | high | Deletes outside the session's worktree, `rm -rf`, `git
Plan, run and supervise fleets of agents from task to merged PR. Desktop (macOS, Windows, Linux) + iPhone & Android apps. Supports Claude Code, Codex & 35+ coding agents.
Launch, restart, or troubleshoot the real AO Electron desktop app from this repository; run a checkout against isolated or real…
Help clarify human bug reports, search for duplicates, and gather diagnostic evidence separately from a concise issue draft.
Direct actions on one AO session or PR: stop or interrupt, resume, merge a PR, start a review, screenshot a session's browser,…
Find AO sessions that wait on the user, show each question or approval as tap-to-answer options, and send the answer back to that…
Talk to a project's AO orchestrator: pass the user's request to it, wait for its reply and relay it. The default route for…
First run of Orchestrator Bot: find every computer that runs AO, save them as AO hosts, add a remote AO host that has no Grok Bot…