Skip to content
Agent Orchestration
Skill

/ao-setup

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 desktop app, and turn on optional routines. On a computer without Orchestrator.inc it helps install it and get it ready: a coding agent, a first

BOOST
From plugin
orchestratorinc-agent-orchestrator
14k9 skills19 commands
Install
$ npx -y skills add OrchestratorInc/agent-orchestrator --skill ao-setup --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/ao-setup

Context preview

The summary Claude sees to decide when to auto-load this skill.

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 desktop app, and turn on optional routines. On a computer without Orchestrator.inc it helps install it and get it ready: a coding agent, a first

SKILL.md

ao-setup.SKILL.md
name: ao-setup
description: >-
  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 desktop app, and turn on
  optional routines. On a computer without Orchestrator.inc it helps install it
  and get it ready: a coding agent, a first project and the first orchestrator.
  Use on the first chat, when memory has no "AO hosts" note, or when the user
  says "set up AO", "add a host", "add remote host", "check my AO setup" or
  "install Orchestrator".

Follow the ao-rules skill. Detection is read-only. Nothing is written until the user says yes.

Open with one line: "Give me a few seconds to look for AO on your computers."

1. Detect

1. ListMachines. Use desktops only. If none is connected, say: "Install the Grok Bot desktop app on the computer where you run Orchestrator.inc (or want to), sign in, and tell me when it shows up," then stop. 2. On each connected desktop, in parallel, run this read-only probe with the `aoapi` helper from ao-rules: run "Probe" below. 3. Each desktop where the probe prints a `projects=` line is a **local** AO host; an empty list means it still needs "First run". For any other result, see "Missing pieces". On a Windows desktop, don't run the probe: say once "These skills need macOS or Linux; Windows isn't supported yet," and skip it.

Probe

f(){ <aoapi helper>; echo "ao=$(command -v ao >/dev/null && ao version 2>/dev/null | head -1 || echo missing)"
  if [ "$(uname -s)" = Darwin ] && [ "$(command -v python3)" = /usr/bin/python3 ] && ! xcode-select -p >/dev/null 2>&1; then echo "python=missing"
  else echo "python=$(command -v python3 >/dev/null && python3 -c 'import sys;print("%d.%d"%sys.version_info[:2])' || echo missing)"; fi
  [ "$(uname -s)" = Darwin ] && A=$(find /Applications "$HOME/Applications" -maxdepth 1 -name '*Orchestrator*.app' 2>/dev/null | head -1) && echo "app=${A:-missing}"
  if P=$(aoapi GET projects 2>/dev/null); then
    echo "$P" | python3 -c 'import json,sys; d=json.load(sys.stdin); p=d.get("projects",d) if isinstance(d,dict) else d; print("projects=" + ", ".join(x.get("id","?") for x in p))'
    aoapi GET 'sessions?active=true' | python3 -c 'import json,sys; print("live_sessions=%d" % len(json.load(sys.stdin)["sessions"]))'
  else echo "daemon=not running"; fi; }; f

Missing pieces

Use the probe result for each computer. Install or open anything only after the user's yes.

| Probe shows | Next step | |---|---| | `python=missing` | Fix this first: every step needs it. macOS: `xcode-select --install` (the user confirms the system dialog). Linux: give the package manager line for python3 | | `daemon=not running` and `app=missing` (macOS) | Say: "Orchestrator.inc isn't installed on <computer>. Want me to install it? It's about a 300 MB download." On yes, run "Install on a Mac" | | `daemon=not running` and `app=<path>` | On yes, open it with `open "<path>"`, then "Wait for the app" | | `daemon=not running` on Linux | If Orchestrator.inc is installed, ask the user to open it and say **check again**. Otherwise give the download for the user's distribution: [AppImage](https://github.com/OrchestratorInc/agent-orchestrator/releases/latest/download/agent-orchestrator-linux-x64.AppImage), [.deb](https://github.com/OrchestratorInc/agent-orchestrator/releases/latest/download/agent-orchestrator-linux-x64.deb) or [.rpm](https://github.com/OrchestratorInc/agent-orchestrator/releases/latest/download/agent-orchestrator-linux-x64.rpm). The user installs and opens it, then says **check again** | | `projects=` with nothing after it | Run "First run" | | `ao=missing` with projects listed | Everything works except starting a review, screenshots and automations, which use the `ao` CLI. Say so once |

**check again** runs the probe on that computer again and goes on from its result.

**Wait for the app:** run the probe every 15 seconds, for up to 2 minutes, until it prints a `projects=` line. Still `daemon=not running` after that: ask the user to look at the Orchestrator.inc window and say **check again** when it's open.

Install on a Mac

After a yes, on that computer. The download takes a few minutes, so the install runs in the background, in its own session so it keeps going after this command returns, and writes its progress to `~/.ao-grok/install.log`. It picks the build for the Mac's chip, checks the app's code signature (Orchestrator.inc's Developer ID team `X9LNSP8MC2`), copies it to Applications (or `~/Applications` if that isn't writable) and opens it:

f(){ mkdir -p ~/.ao-grok && cat > ~/.ao-grok/install-orchestrator.sh <<'EOF'
a=$([ "$(sysctl -n hw.optional.arm64 2>/dev/null)" = 1 ] && echo arm64 || echo x64); d=$(mktemp -d)
echo "downloading the $a build"
curl -fsSL -o "$d/o.dmg" "https://github.com/OrchestratorInc/agent-orchestrator/releases/latest/download/agent-orchestrator-darwin-$a.dmg" || { echo DOWNLOAD_FAILED; rm -rf "$d"; exit 1; }
m=$(hdiutil attach -nobrowse -readonly "$d/o.dmg" | awk -F'\t' '/\/Volumes\//{print $NF}' | tail -1)
[ -n "$m" ] || { echo INSTALL_FAILED; rm -rf "$d"; exit 1; }
app=$(find "$m" -maxdepth 1 -name '*.app' 2>/dev/null | head -1)
done_(){ [ -n "$m" ] && hdiutil detach -quiet "$m"; rm -rf "$d"; }
if [ -z "$app" ] || ! codesign --verify --deep --strict "$app" 2>/dev/null || ! codesign -dv "$app" 2>&1 | grep -q 'TeamIdentifier=X9LNSP8MC2'; then echo BAD_SIGNATURE; done_; exit 1; fi
dest=/Applications
cp -R "$app" "$dest/" 2>/dev/null || { dest="$HOME/Applications"; mkdir -p "$dest" && cp -R "$app" "$dest/"; } || { echo INSTALL_FAILED; done_; exit 1; }
done_
open "$dest/${app##*/}" && echo "INSTALLED $dest/${app##*/}" || echo "INSTALLED_NOT_OPENED $dest/${app##*/}"
EOF
nohup python3 -c 'import os,sys; os.setsid(); os.execvp("sh", ["sh", sys.argv[1]])' ~/.ao-grok/install-orchestrator.sh > ~/.ao-grok/install.log 2>&1 & echo STARTED; }; f

Tell the user it has started. Then check `tail -1 ~/.ao-grok/install.log` ev

Read more
Ships withorchestratorinc-agent-orchestrator

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.

Get the whole plugin