Skip to content
cccskills
FreePublished on GitHubEnglish overview

ao-orchestrator

Use this skill to send a request or question to a project's AO orchestrator, wait for its response, and relay the answer. It routes project work, status catch-ups, planning, and requests about what to do next through the agent coordinating that project's workers.

OriginalShow the original description

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 ...".

OrchestratorInc/agent-orchestrator13,872 stars(GitHub 13,872 + cccskills 0)

Run score Not tested

See how to install

Good for

  • Starting work on a project through its orchestrator
  • Asking for a project catch-up or explanation
  • Requesting a plan or asking what should happen next
  • Sending a change request to the active orchestrator

Overview

What it does

This skill passes a user's request to the AO orchestrator for a project, checks for a reply, and relays the response. It routes requests that need project-level judgment, including starting or changing work, asking for a status summary or explanation, and discussing plans or next steps. If the orchestrator is busy, a request is queued for its next turn; a request to change current work is sent to the active turn. If the reply asks the user a question, the skill presents the available choices and collects the user's answer.

When it helps

Use it to start work on an AO-managed project or ask the agent coordinating the project for its status, reasoning, or next steps. It also helps when you want to convey your own preference to the orchestrator without adding a design decision of your own.

Example requests

  • “Start work on this project.”
  • “Summarize the project's current status for me.”
  • “Pass this change request to the orchestrator.”

Notes

If a project exists on multiple hosts, specify which host to use. The skill asks for clarification if it cannot find the project or there is no orchestrator. Sending a message is treated as a write operation.

This overview was written by AI (OpenAI Codex) from the public SKILL.md. Check the original below for the exact behavior.

Document check

AI checked the SKILL.md for operations that need care and for setup requirements. The score comes only from actually running the skill (hands-on test).

SafetyAre sending data, deleting files, and running commands disclosed?
BPartly lackingIt marks messages as writes and limits them to the current request; approval steps are not specified.
Easy setupDoes it need few tools or API keys, and are they documented?
BPartly lackingIt relies on the AO API and helper tools, while setup details reside in shared rules.

Not counted in the score. Rated by AI (OpenAI Codex) as of Oct 29, 2026. Treat it as a guide and read the original before installing.

Disagree? Request a re-evaluation

Tell us which point is wrong and why. No login needed. We will check it against the SKILL.md, redo the evaluation, and show the result here.

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

Files included (1)

  • SKILL.md6.0 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

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.

1. Pick the host and project

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.

2. Find the orchestrator

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
  • One line: that is the orchestrator. Its state tells you if it is busy (active).
  • exited: resume it first with aoapi POST "sessions/<id>/resume-agent" '{}', then go on.
  • Provision state 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.
  • No line: ask "There's no orchestrator in <project> on <host>. Start one with your request?" On yes, start it with the request as its first message (step 3's file and tag), then go to step 4. Its reply is its first turn:

Start an orchestrator

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.

3. Send

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.

4. Wait for the reply

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
  • A reply: relay it. Keep it faithful. Shorten only for a phone, and send a long reply as a file.
  • 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.
  • The orchestrator asks the user something back: show it as a card if it gives clear options, and send the pick as a new message (step 3).

5. After

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.

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

ao-actions

FreeSummary

Perform direct actions on AO sessions and pull requests, such as interrupting or resuming work, requesting reviews, and merging after confirmation. It can also capture a session’s browser, send its files, keep a host awake, and set up recurring work.

  • Stop or resume an AO session
  • Review or merge a session’s pull request
  • View a session’s browser or deliverables
OrchestratorInc/agent-orchestrator13.9KUpdated Oct 30, 2026

ao-answer

FreeSummary

Find AO sessions waiting for a user decision, present pending questions or approvals as answer choices, and send the selected response to the right session. It also follows AO decision rules for away mode and standing approvals.

  • Check what AO sessions need your response
  • Answer a question from a specific session
  • Approve a pending command or change
OrchestratorInc/agent-orchestrator13.9KUpdated Oct 30, 2026

ao-desktop-dev

FreeSummary

Launch and troubleshoot the actual AO desktop app to inspect interface changes with local data. Supports reviewing combined pull request branches and diagnosing lingering Electron processes, port conflicts, and mismatches in the app’s preload bridge.

  • Inspect interface changes in the actual AO desktop app
  • Test with isolated or existing local AO data
  • Review multiple pull request branches together
OrchestratorInc/agent-orchestrator13.9KUpdated Oct 30, 2026

ao-rules

FreeSummary

Use this reference to understand how AO skills identify local and remote hosts, connect to the AO API, route work through an orchestrator, handle approvals, and protect secrets. It provides shared operating rules for the other ao-* skills.

  • Checking host and session naming before using an AO skill
  • Reviewing how to connect to a local or remote AO host
  • Understanding approval and file change rules
OrchestratorInc/agent-orchestrator13.9KUpdated Oct 30, 2026

ao-setup

FreeSummary

Use this skill to find computers running AO, record them as hosts, and optionally connect a remote host without the Grok Bot desktop app. It can also set a default interaction mode and configure selected scheduled checks or a weekday digest.

  • Finding computers running AO during initial setup
  • Recording local AO hosts for later use
  • Connecting a remote AO host without the desktop app
OrchestratorInc/agent-orchestrator13.9KUpdated Oct 30, 2026

ao-status

FreeSummary

Review AO sessions across hosts, including which are running, waiting, idle, or exited. Check pull requests ready to merge and new review updates, inspect a session’s latest turn, or prepare a concise daily digest.

  • Check running and waiting AO sessions
  • Find pull requests ready to merge
  • Review new PR and review updates
OrchestratorInc/agent-orchestrator13.9KUpdated Oct 30, 2026

See all skills by OrchestratorInc

Report a problem with this skill