AO 세션과 풀 리퀘스트를 중단하거나 재개하고, 리뷰를 시작하거나 승인 후 병합합니다. 세션 브라우저 화면과 파일을 보내고, 호스트를 일정 시간 켜 두거나 에이전트 작업을 정기 실행할 수도 있습니다.
- AO 세션 중단 또는 재개하기
- 풀 리퀘스트 리뷰 또는 병합하기
- 세션 화면이나 결과 파일 받기
AO를 실행하는 컴퓨터를 찾아 호스트로 기록하고, 필요하면 Grok Bot 데스크톱 앱이 없는 원격 호스트도 추가합니다. 기본 상호 작용 모드를 저장하고 정기 확인이나 평일 요약을 설정할 수 있습니다.
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".
실행 점수 미검증
설치 방법 보기이 스킬은 AO를 처음 설정할 때 사용합니다. 연결된 데스크톱에서 AO가 실행 중인지 확인하고, 발견한 컴퓨터를 호스트로 기록합니다. AO는 실행되지만 Grok Bot 데스크톱 앱이 없는 컴퓨터는 연결 출처와 주소를 지정해 원격 호스트로 추가할 수 있습니다. 기본 상호 작용 모드를 기록하고, 원하는 경우 대기 중인 요청을 정기적으로 확인하는 루틴이나 평일 요약도 설정합니다.
AO를 처음 사용하거나 호스트를 추가할 때, 현재 연결 설정을 확인할 때 유용합니다. 로컬 환경과 원격 환경을 정리하고 필요한 정기 확인만 켜려는 경우에도 사용할 수 있습니다.
탐지는 읽기 전용으로 수행됩니다. 호스트 정보나 루틴을 저장하려면 사용자의 확인이 필요합니다. 지원 환경은 macOS와 Linux이며 Windows는 지원하지 않습니다. 원격 호스트에는 AO 네트워크 접근 설정과 주소가 필요합니다. 원격 환경에서는 절전 방지, 브라우저 스크린샷, 리뷰 시작 기능을 사용할 수 없습니다.
이 소개문은 공개된 SKILL.md를 바탕으로 AI(OpenAI Codex)가 작성했습니다. 정확한 사양은 아래 원문을 확인하세요.
AI가 SKILL.md의 내용에서 주의가 필요한 작업과 도입 전제를 확인했습니다. 점수는 실제로 실행한 결과(실행 검증)만으로 매깁니다.
점수에는 넣지 않았습니다. 2026년 10월 29일 기준으로 AI(OpenAI Codex)가 판정했습니다. 참고용이므로 설치 전에 원문도 확인해 주세요.
설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.
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."
aoapi helper from ao-rules: run "Probe" below.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.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
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, .deb or .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.
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 every 20 seconds, for up to 15 minutes:
| Last line | Next step |
|---|---|
downloading … | Still going |
INSTALLED <path> | Say "Orchestrator.inc is open on <computer>. I'll get it ready: a coding agent and your first project." Then "Wait for the app" and run "First run" |
INSTALLED_NOT_OPENED <path> | Open it with open "<path>", then as above |
DOWNLOAD_FAILED, BAD_SIGNATURE, INSTALL_FAILED, or no change after 15 minutes | Say what happened and give the user the download page instead. Never retry BAD_SIGNATURE |
Gets a computer ready for work once Orchestrator.inc is running there: a coding agent, a project, and the first orchestrator. Every change needs the user's yes. If Orchestrator.inc shows its own welcome steps and the user prefers them, let them finish there and say check again.
f(){ <aoapi helper>; aoapi POST agents/refresh '{}' >/dev/null; aoapi GET agents/readiness | python3 -c '
import json,sys
for a in json.load(sys.stdin).get("agents") or []:
inst=(a.get("installation") or {}).get("state",""); auth=(a.get("authentication") or {}).get("state","")
if inst!="not_installed" or a.get("id") in ("claude-code","codex"):
print("\t".join([a.get("id",""), a.get("label",""), a.get("effectiveReadiness",""), inst, auth]))'; }; f
Columns: id, name, readiness, installed, signed in.
ready: use it. If more than one is ready, ask which one should do the work. Don't pick for the user.aoapi POST "agents/<id>/auth" '{}' and relay its guidance. The sign-in runs in a terminal inside Orchestrator.inc; the user finishes it there (it may open their browser). When they say done, run this step again: it refreshes the checks.aoapi POST "agents/<id>/install" '{}', then check aoapi GET "agents/<id>/install" every 15 seconds. status succeeded: sign in as above. failed, unsupported or interrupted: relay it, and point the user to the agent settings in Orchestrator.inc.Suggest the git clones the user worked in most recently (read-only; worktrees are left out):
python3 -c '
import glob,os
home=os.path.expanduser("~"); found=set()
for r in ("Development","Projects","projects","code","Code","src","dev","GitHub","Documents/GitHub"):
for pat in ("*/.git","*/*/.git","*/*/*/.git"): found.update(os.path.dirname(g) for g in glob.glob(os.path.join(home,r,pat)) if os.path.isdir(g))
for p in sorted(found,key=lambda p:-os.path.getmtime(os.path.join(p,".git")))[:10]: print(p.replace(home,"~",1))'
Show them as one card, plus a typed option for another folder. On the pick, register it with the agent from step 1:
f(){ <aoapi helper>; aoapi POST projects "$(python3 -c 'import json,os,sys; print(json.dumps({"path":os.path.expanduser(sys.argv[1]),"config":{"worker":{"agent":sys.argv[2]},"orchestrator":{"agent":sys.argv[2]}}}))' '<repo path>' '<agent id>')" 2>/dev/null | python3 -c '
import json,sys
d=json.load(sys.stdin); p=d.get("project",d)
if p.get("id"): print("added", p["id"])
else: print(d.get("code","ERROR"), d.get("message",""), (d.get("details") or {}).get("existingProjectId",""))'; }; f
added <id>: done.NOT_A_GIT_REPO: the folder needs to be a git repository with at least one commit. Ask for another folder.PATH_ALREADY_REGISTERED <id>: it is already a project; use that id.Ask: "Want me to start the orchestrator for <project>? Tell me what you'd like done first, or I'll ask it to look around the repo and suggest a first task." On yes, run ao-orchestrator "Start an orchestrator" with that request.
Then continue with section 2.
One message, at most 6 lines: per computer, AO found or not, its projects, and how many sessions are live. For a computer without a working AO, add the one next step from "Missing pieces". Then: "Reply yes and I'll save these as your AO hosts. Is AO also running on a computer without the Grok Bot desktop app? Say add remote host and I'll connect to it from one of these."
On yes, save the AO hosts note (ao-rules "AO hosts") with reach: local and via = the same computer. Name each host with its short name (ao-rules name) and say the names in one line: "I'll call them Pro and Air. Say if you want other names."
Use this when AO runs on a computer that has no Grok Bot desktop app, for example a Mac mini host that a laptop's AO app already connects to.
-) and which connected computer to use as via. Default: the one the user's message came from.ao remote-host enable turns on the same network access, and ao remote-host status shows the address and the password.http://<ip or name>:<port>. Then, on via, write a one-time password window and open it. Replace <name> with the host name you checked: run "Password window" below.
Tell the user: "A Terminal window opened on <via>. Type the password there and press Return."
On Linux, open doesn't run .command files: write the same lines to ~/.ao-grok/add-<name>.sh and ask the user to run zsh ~/.ao-grok/add-<name>.sh in a terminal on via.via: run "Connection test" below.
HTTP 401 means a wrong password: open the window again. A timeout means the host is not reachable from via (another network, asleep, or access off).reach: remote, via, base and header.f(){ mkdir -p ~/.ao-grok/out && cat > ~/.ao-grok/add-<name>.command <<'EOF'
#!/bin/zsh
umask 077
read -rs "p?AO password for <name>: "; echo
printf 'Authorization: Bearer %s\n' "$p" > ~/.ao-grok/<name>.header
echo "Saved. You can close this window."; rm -- "$0"
EOF
chmod +x ~/.ao-grok/add-<name>.command && open ~/.ao-grok/add-<name>.command; }; f
f(){ <aoapi helper>; AO_REMOTE_BASE='<address>' AO_REMOTE_HEADER="$HOME/.ao-grok/<name>.header" aoapi GET 'sessions?active=true' | python3 -c 'import json,sys; print("live_sessions=%d" % len(json.load(sys.stdin)["sessions"]))'; }; f
Limits of a remote host, said once: keep-awake, browser screenshots and starting a review work only on local hosts. For those, ask the host's orchestrator (ao-orchestrator). Quick-tunnel addresses change when the tunnel restarts, so prefer the LAN address or a named tunnel. If the user presses Regenerate in AO, run this section again.
One line: the hosts saved (local and remote), the mode and the routines on. Then run ao-status as a first look, then:
Things to try:
아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.
로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.
아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.
AO 세션과 풀 리퀘스트를 중단하거나 재개하고, 리뷰를 시작하거나 승인 후 병합합니다. 세션 브라우저 화면과 파일을 보내고, 호스트를 일정 시간 켜 두거나 에이전트 작업을 정기 실행할 수도 있습니다.
AO에서 사용자 답변을 기다리는 세션을 찾아 질문과 승인 요청을 선택지로 정리하고, 선택한 답을 해당 작업 세션에 직접 보냅니다. 자리 비움 모드에서는 AO 결정 규칙에 따라 처리합니다.
실제 AO 데스크톱 앱을 실행하거나 다시 시작해 로컬 데이터로 화면 변경을 확인합니다. 여러 풀 리퀘스트 브랜치를 결합해 검토하고, 남아 있는 Electron 프로세스와 포트 충돌, preload bridge 불일치를 조사할 수 있습니다.
프로젝트의 AO 오케스트레이터에게 요청이나 질문을 전달하고 답변을 기다린 뒤 알려 줍니다. 작업 시작과 변경, 진행 상황 확인, 계획 및 다음 단계 논의를 담당 조정자에게 연결합니다.
AO를 사용하는 여러 `ao-*` 스킬의 공통 규칙을 안내합니다. 로컬·원격 호스트와 세션을 구분하는 법, 연결 방법, 오케스트레이터를 통한 작업 전달, 승인과 비밀 정보 처리 방식을 확인할 수 있습니다.
여러 호스트의 AO 세션 상태를 모아 실행 중, 대기, 유휴, 종료 상태를 확인합니다. 병합 가능한 PR과 새 리뷰 알림을 살펴보고, 세션의 최근 작업을 요약하거나 일일 요약을 만들 수 있습니다.