操作 AO 会话和拉取请求,包括中断或恢复工作、发起评审及经确认后合并。还可截取会话浏览器画面、发送指定文件、保持主机运行或安排定期任务。
- 中断或恢复 AO 会话
- 评审或合并拉取请求
- 接收会话截图或成果文件
查找 AO 中等待用户回复的会话,将待答问题和待审批事项整理成选项,并把所选答复直接发送到对应会话。离开模式下也会遵循 AO 的决策规则。
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.
实测评分 未实测
查看安装方法此技能会查找 AO 中等待用户回复的会话,并整理其中待回答的问题、待审批事项和普通提问。对于审批事项,它会展示要执行的命令或要进行的变更、风险判断以及可选项。对于问题,它会按顺序列出各项内容和选项,并在适用时提供填写文字答案的方式。你选定的答复会直接发送到对应的工作会话。启用离开模式时,它会按照 ao-rules 的“Decisions”部分处理允许自行判断的事项,并在之后汇报。
想查看 AO 中有哪些事项等待回复、回答某个会话的问题,或检查并批准待执行的命令和文件变更时,可以使用此技能。它也适用于定期检查等待事项,以及在离开时按决策规则处理待办事项。
答复会直接发送到工作会话,不会经过编排器。离开模式下无法按规则判断的事项会展示给你处理。
本介绍由 AI(OpenAI Codex)根据公开的 SKILL.md 撰写。准确的规格请查看下方原文。
AI 根据 SKILL.md 的内容检查了需要注意的操作和使用前提。评分只依据实际运行的结果(实测对比)。
不计入评分。 由 AI(OpenAI Codex)于 2026年10月29日 评估。仅供参考,安装前请同时查看原文。
安装前可以查看交给 AI 代理的指令内容。
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.
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:
kind | What it is |
|---|---|
approval | Permission to run a command or change files. summary and detail.input say what; decisions are the options [{id, kind, label}] |
user_input | A question. detail.message asks it; detail.schema.properties are the fields, with choices in enum or oneOf |
reply | The 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.
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.
On the owner host, from its via computer:
aoapi POST "sessions/<id>/conversation/approvals/<requestId>/resolve" "$(python3 -c 'import json,sys; print(json.dumps({"decisionId":sys.argv[1]}))' '<decision id>')"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"}.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.
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.
还没有评价。欢迎分享你的使用感受。
无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。
还没有评论。来写第一条吧。
操作 AO 会话和拉取请求,包括中断或恢复工作、发起评审及经确认后合并。还可截取会话浏览器画面、发送指定文件、保持主机运行或安排定期任务。
启动或重启真实的 AO 桌面应用,用本地数据查看界面改动;也可组合多个拉取请求分支进行本地评审,并排查 Electron 进程、端口冲突和 preload bridge 不匹配。
将项目请求或问题发送给 AO 协调器,等待回复并转达结果。可用于启动或调整工作、了解项目进展、询问原因,以及讨论计划和后续步骤。
查阅 AO 各技能共用的主机识别、连接、任务分派、审批和秘密信息处理规则,了解如何区分本地与远程主机及其会话。
此技能可查找运行 AO 的电脑并将其登记为主机,也可按需添加没有 Grok Bot 桌面应用的远程主机、记录默认交互模式,并设置定时检查或工作日摘要。
汇总多个 AO 主机上的会话状态,查看可合并的拉取请求和新的评审通知,也可检查会话最近的请求与回复,生成简要的每日摘要。