Skip to content
cccskills
FreePublished on GitHubEnglish overview

ao-answer

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.

OriginalShow the original description

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 session, following ao-rules "Decisions" (default, away mode, standing approvals). Use for "what's waiting on me", "answer <session>", "approve it", the AO waiting check routine, and away mode.

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

Run score Not tested

See how to install

Good for

  • Check what AO sessions need your response
  • Answer a question from a specific session
  • Approve a pending command or change
  • Handle the AO waiting check routine
  • Use configured decisions while away

Overview

What it does

This skill finds AO sessions waiting for a response and organizes pending questions, approvals, and ordinary requests. For approvals, it shows the proposed command or change, its risk, and the available choices. For questions, it presents the fields and their options, with typed answers when appropriate. Your selected response goes directly to the work session. When away mode is active, it handles decisions allowed by the “Decisions” section of ao-rules and reports them afterward.

When it helps

Use it to see what is waiting for your response in AO, answer a question in a particular session, or review and approve a pending command or file change. It can also help during routine checks for waiting work and when applying decision rules while you are away.

Example requests

  • “Show me what’s waiting for a reply in AO.”
  • “Answer this session’s question with ‘Tokyo’.”
  • “Approve the pending change.”

Notes

Answers are sent directly to the work session, not through the orchestrator. If a decision cannot be made under away mode, the skill presents it to you.

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 shows approval choices and away rules, but it makes and sends decisions while away.
Easy setupDoes it need few tools or API keys, and are they documented?
BPartly lackingIt depends on `aoapi`, `ao-rules`, and host access details; setup instructions are partial.

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.md5.5 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

Follow the ao-rules skill. Its "Decisions" section says who may answer. Answers go straight to the worker, not through the orchestrator: the user's pick must arrive exactly as given.

1. Find what's waiting

On every host, in parallel:

f(){ <aoapi helper>
  aoapi GET 'sessions?active=true' | python3 -c '
import json,sys,time,calendar
now=time.time()
for s in json.load(sys.stdin)["sessions"]:
    st=(s.get("activity") or {}).get("state"); t=(s.get("lastEventAt") or "")[:19]
    if st in ("waiting_input","blocked"): print("W", s["id"])
    elif st=="idle" and t and now-calendar.timegm(time.strptime(t,"%Y-%m-%dT%H:%M:%S"))<86400: print("I", s["id"], s.get("lastEventAt"))' |
  while read -r k id at; do
    if [ "$k" = W ]; then
      aoapi GET "sessions/$id/conversation" | python3 -c '
import json,sys
d=json.load(sys.stdin); found=False
for a in d.get("activities") or []:
    if a.get("activityKind") in ("approval","user_input") and a.get("status")=="pending":
        found=True; print(json.dumps({"session":sys.argv[1],"kind":a["activityKind"],"requestId":a.get("requestId"),
            "summary":a.get("summary"),"decisions":a.get("decisions") or (a.get("detail") or {}).get("decisions"),"detail":a.get("detail")}))
if not found: print(json.dumps({"session":sys.argv[1],"kind":"reply"}))' "$id" 2>/dev/null
    else
      aoapi GET "sessions/$id/history?offset=0&limit=1" | python3 -c '
import json,sys,re
t=(json.load(sys.stdin).get("turns") or [{}])[0]; r=(t.get("agentResponse") or "").strip()
if re.search(r"\?[\s*_`)\]]*$", r): print(json.dumps({"session":sys.argv[1],"kind":"reply","lastEventAt":sys.argv[2],"asked":r[-300:]}))' "$id" "$at" 2>/dev/null
    fi
  done; }; f

Each line is one thing waiting:

kindWhat it is
approvalPermission to run a command or change files. summary and detail.input say what; decisions are the options [{id, kind, label}]
user_inputA question. detail.message asks it; detail.schema.properties are the fields, with choices in enum or oneOf
replyThe agent asked in plain text: a session that waits with no request (or a terminal session), or an idle session from the last 24 hours whose last reply ends with a question (asked holds its end). Read its last reply (ao-status "One session in detail")

In the AO waiting check routine: keep what you already showed in ~/.ao-grok/shown.txt on via, one line per item (<host> <session> <requestId>, or <host> <session> reply <lastEventAt> for a reply), and message only about new items. Send nothing when nothing new is waiting.

2. Show it

Per session, one short briefing first: <host>/<session> and its name, what it is doing, and what it asks, in one or two sentences. Don't recommend anything. Then:

  • approval: the command or change verbatim, the risk you judge (ao-rules), and the decisions labels exactly as options in one card. Mark a decision whose kind is allow_always as "changes this agent's permissions for good".
  • user_input: one card with every question in it, in order (the card pages through them). A field with oneOf or enum is a question: use the oneOf titles or enum values as its options, exactly. A field whose _meta._askUserQuestionCustomAnswer.questionId names another field is that question's "Other" box: show it as a typed-answer option on that question, not as its own question. Any other free-text field is a question with a typed answer. detail.inputMode url can't be answered from chat: tell the user to open AO.
  • reply: the agent's question from its last reply, with options if it gave clear ones, else ask for a typed answer.

Several sessions at once: explain them together, then cards per session.

3. Answer

On the owner host, from its via computer:

  • Approval: aoapi POST "sessions/<id>/conversation/approvals/<requestId>/resolve" "$(python3 -c 'import json,sys; print(json.dumps({"decisionId":sys.argv[1]}))' '<decision id>')"
  • Question: content maps each field name to the pick. For a picked option use its oneOf const (or the enum value), not the title. For a typed "Other" answer, put the text under the "Other" field (for example question_0_custom) and leave its question out: aoapi POST "sessions/<id>/conversation/inputs/<requestId>/resolve" "$(python3 -c 'import json,sys; print(json.dumps({"action":"accept","content":json.loads(sys.argv[1])}))' '{"<field>":"<pick>"}')" The user says no or skip: {"action":"decline"}.
  • reply: send the answer as a message (ao-rules "Messages to agents"): aoapi POST "sessions/<id>/send" "$(python3 -c 'import json,sys; print(json.dumps({"message":"[via Grok Bot] "+sys.argv[1],"userAuthored":True}))' '<answer>')"

Confirm in one line. An error that says the request is not pending or not found means it was already answered or closed: say so. Then run step 1 for that session again, and deal with anything still open.

Away mode

When memory says away mode is on and its end time hasn't passed, answer as ao-rules "Decisions" allows instead of showing cards, and log each one. Tell the user afterwards in one line per answer: session, what it asked, what you picked, why. Anything you may not decide: show it as in step 2, and say away mode left it for them.

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-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-orchestrator

FreeSummary

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.

  • 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
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