AO 세션과 풀 리퀘스트를 중단하거나 재개하고, 리뷰를 시작하거나 승인 후 병합합니다. 세션 브라우저 화면과 파일을 보내고, 호스트를 일정 시간 켜 두거나 에이전트 작업을 정기 실행할 수도 있습니다.
- AO 세션 중단 또는 재개하기
- 풀 리퀘스트 리뷰 또는 병합하기
- 세션 화면이나 결과 파일 받기
프로젝트의 AO 오케스트레이터에게 요청이나 질문을 전달하고 답변을 기다린 뒤 알려 줍니다. 작업 시작과 변경, 진행 상황 확인, 계획 및 다음 단계 논의를 담당 조정자에게 연결합니다.
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 starting or changing work, "catch me up", "why", "what next" and plans. Use for "in <project>: <ask>", "tell the orchestrator ...", "catch me up on <project>", "start work on ...".
실행 점수 미검증
설치 방법 보기이 스킬은 사용자의 요청을 프로젝트의 AO 오케스트레이터에게 전달하고, 답변을 확인해 사용자에게 알려 줍니다. 작업 시작이나 변경, 진행 상황 요약, 이유 확인, 계획 및 다음 단계 논의처럼 프로젝트 차원의 판단이 필요한 요청을 오케스트레이터에게 연결합니다. 오케스트레이터가 바쁘면 요청을 다음 차례에 대기시키며, 현재 진행 중인 작업을 바꾸려는 요청은 활성 차례에 보냅니다. 답변에 사용자에게 묻는 내용이 있으면 선택지를 제시하고 답을 받습니다.
AO로 관리하는 프로젝트의 작업을 시작하거나, 프로젝트를 조정하는 에이전트에게 진행 상황과 이유, 다음 단계를 물을 때 사용할 수 있습니다. 별도의 설계 판단을 덧붙이지 않고 자신의 요청이나 선호를 오케스트레이터에게 전하고 싶을 때도 적합합니다.
프로젝트가 여러 호스트에 있으면 대상 호스트를 지정해야 합니다. 프로젝트를 찾지 못하거나 오케스트레이터가 없으면 확인을 요청합니다. 메시지 전송은 쓰기 작업으로 취급됩니다.
이 소개문은 공개된 SKILL.md를 바탕으로 AI(OpenAI Codex)가 작성했습니다. 정확한 사양은 아래 원문을 확인하세요.
AI가 SKILL.md의 내용에서 주의가 필요한 작업과 도입 전제를 확인했습니다. 점수는 실제로 실행한 결과(실행 검증)만으로 매깁니다.
점수에는 넣지 않았습니다. 2026년 10월 29일 기준으로 AI(OpenAI Codex)가 판정했습니다. 참고용이므로 설치 전에 원문도 확인해 주세요.
설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.
Follow the ao-rules skill ("Who does what: orchestrator first"). Sending a message is a write: do it only for what the user asked in this turn.
Match the user's words against project ids on every host (aoapi GET projects). One match: use it. The same project id on two hosts (two separate projects that share a folder name): ask which host, unless the user named one or memory has a default for that project. No match: list the projects and ask.
f(){ <aoapi helper>; aoapi GET "sessions?orchestratorOnly=true&active=true&project=<project>" | python3 -c '
import json,sys
for s in json.load(sys.stdin)["sessions"]: print(s["id"], (s.get("activity") or {}).get("state",""), s.get("provisionState",""))'; }; f
active).exited: resume it first with aoapi POST "sessions/<id>/resume-agent" '{}', then go on.failed: AO could not create its workspace, and messages to it fail. Read the reason with aoapi GET "sessions/<id>" (field provisionError), tell the user in plain words, and ask them to fix it in AO. Stop here.f(){ <aoapi helper>; P='<project>'; TAG="[via Grok Bot #$(date +%H%M%S)]"; F=~/.ao-grok/out/$(date +%F)-<short name>.md
mkdir -p ~/.ao-grok/out; { printf '%s ' "$TAG"; cat <<'EOF'
<message>
EOF
} > "$F"
H=$(aoapi GET "projects/$P" | python3 -c 'import json,sys; d=json.load(sys.stdin); c=(d.get("project",d).get("config") or {}); print((c.get("orchestrator") or {}).get("agent") or (c.get("worker") or {}).get("agent") or "")')
aoapi POST sessions "$(python3 -c 'import json,sys; b={"projectId":sys.argv[1],"kind":"orchestrator","mode":"chat","displayName":"Orchestrator","prompt":open(sys.argv[2]).read()}; b.update({"harness":sys.argv[3]} if sys.argv[3] else {}); print(json.dumps(b))' "$P" "$F" "$H")" | python3 -c 'import json,sys; d=json.load(sys.stdin); d=d.get("session",d); print("started", d["id"])' && echo "TAG=$TAG"; }; f
After about 10 seconds, check provisionState with aoapi GET "sessions/<new id>". If it is failed, handle it as above.
Write the message to a file on via, then send it. The message is the user's request in their words, plus only the context from this chat the orchestrator needs. Don't add your own design choices. Start it with a tag so you can find the reply:
f(){ <aoapi helper>; O='<orchestrator id>'; TAG="[via Grok Bot #$(date +%H%M%S)]"; F=~/.ao-grok/out/$(date +%F)-<short name>.md
mkdir -p ~/.ao-grok/out; { printf '%s ' "$TAG"; cat <<'EOF'
<message>
EOF
} > "$F"
B=$(python3 -c 'import json,sys; print(json.dumps({"message":open(sys.argv[1]).read(),"userAuthored":True}))' "$F")
if aoapi POST "sessions/$O/send" "$B" >/dev/null; then echo "sent TAG=$TAG F=$F"; return 0; fi
echo "SEND_FAILED: resuming the agent and trying once more"
aoapi POST "sessions/$O/resume-agent" '{}' >/dev/null; sleep 5
aoapi POST "sessions/$O/send" "$B" >/dev/null && echo "sent TAG=$TAG F=$F"; }; f
A failed send prints AO's error. If it still fails after the retry, tell the user the orchestrator isn't accepting messages and to open it in AO.
If the orchestrator was active in step 2, the message waits and runs as its own turn after the current one. Tell the user right away, in one line: "The orchestrator is busy with <what its last turn is about>. Your question is queued and runs next." Then go on to step 4.
If the user wants to change what it is doing right now ("stop that", "use X instead"), steer instead. Write the file and tag as above, then:
f(){ <aoapi helper>; O='<orchestrator id>'; F='<message file>'
aoapi POST "sessions/$O/conversation/steer-or-send" "$(python3 -c 'import json,sys,uuid; print(json.dumps({"text":open(sys.argv[1]).read(),"clientMessageId":str(uuid.uuid4())}))' "$F")"; }; f
"outcome":"sent" means it arrived (in the running turn, or as a new turn if the orchestrator was idle). Then go to step 4.
Check every 10 seconds for up to 5 minutes. Done when the orchestrator is no longer active and a turn that starts with your tag has a reply:
f(){ <aoapi helper>; O='<orchestrator id>'; TAG='<tag>'
for i in $(seq 30); do sleep 10
st=$(aoapi GET "sessions/$O" | python3 -c 'import json,sys; d=json.load(sys.stdin); d=d.get("session",d); print((d.get("activity") or {}).get("state",""))')
[ "$st" = active ] && continue
aoapi GET "sessions/$O/history?offset=0&limit=5" | python3 -c '
import json,sys
for t in json.load(sys.stdin).get("turns") or []:
if (t.get("userRequest") or "").startswith(sys.argv[1]) and t.get("agentResponse"):
print(t["agentResponse"]); raise SystemExit(0)
raise SystemExit(1)' "$TAG" && return 0
done; echo STILL_WORKING; }; f
STILL_WORKING: tell the user the orchestrator is still on it, and offer: "I'll message you when it replies." On yes, create a routine that runs step 4 once every 5 minutes for that tag, reports the reply, then deletes itself.If the orchestrator started workers, list them in one line (ao-status "Sessions" for that project). Don't watch them unless the user asks. Their questions reach the user through ao-answer.
아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.
로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.
아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.
AO 세션과 풀 리퀘스트를 중단하거나 재개하고, 리뷰를 시작하거나 승인 후 병합합니다. 세션 브라우저 화면과 파일을 보내고, 호스트를 일정 시간 켜 두거나 에이전트 작업을 정기 실행할 수도 있습니다.
AO에서 사용자 답변을 기다리는 세션을 찾아 질문과 승인 요청을 선택지로 정리하고, 선택한 답을 해당 작업 세션에 직접 보냅니다. 자리 비움 모드에서는 AO 결정 규칙에 따라 처리합니다.
실제 AO 데스크톱 앱을 실행하거나 다시 시작해 로컬 데이터로 화면 변경을 확인합니다. 여러 풀 리퀘스트 브랜치를 결합해 검토하고, 남아 있는 Electron 프로세스와 포트 충돌, preload bridge 불일치를 조사할 수 있습니다.
AO를 사용하는 여러 `ao-*` 스킬의 공통 규칙을 안내합니다. 로컬·원격 호스트와 세션을 구분하는 법, 연결 방법, 오케스트레이터를 통한 작업 전달, 승인과 비밀 정보 처리 방식을 확인할 수 있습니다.
AO를 실행하는 컴퓨터를 찾아 호스트로 기록하고, 필요하면 Grok Bot 데스크톱 앱이 없는 원격 호스트도 추가합니다. 기본 상호 작용 모드를 저장하고 정기 확인이나 평일 요약을 설정할 수 있습니다.
여러 호스트의 AO 세션 상태를 모아 실행 중, 대기, 유휴, 종료 상태를 확인합니다. 병합 가능한 PR과 새 리뷰 알림을 살펴보고, 세션의 최근 작업을 요약하거나 일일 요약을 만들 수 있습니다.