操作 AO 会话和拉取请求,包括中断或恢复工作、发起评审及经确认后合并。还可截取会话浏览器画面、发送指定文件、保持主机运行或安排定期任务。
- 中断或恢复 AO 会话
- 评审或合并拉取请求
- 接收会话截图或成果文件
检查 AO 机器人已安装的技能与公开版本之间的差异,并先展示变更。获得批准后,下载有变化的技能,按公开清单校验 SHA-256 哈希,再更新技能。
Update this bot's ao-* skills to the latest published version: check what changed, show it, and after the user's yes download each changed skill, verify its sha256 against the published manifest, and rewrite it. Use for "update Orchestrator Bot", "update the AO bot", "update my AO skills", "what's new in Orchestrator Bot".
实测评分 未实测
查看安装方法此技能会将 AO 机器人中已安装的 ao-* 技能与公开版本进行比对,并列出已安装版本、最新版本、有变化的技能,以及公开版本中已移除的技能。你批准更新后,它会下载有变化的技能,并根据公开清单中的 SHA-256 哈希逐一校验文件。校验通过后,它会创建或改写相应技能,并记录已安装的版本。对于公开版本中已移除的技能,它会另行询问是否删除。
想确认 AO 机器人的技能是否为最新版本、想在更新前了解变化,或想在应用文件前核实下载内容是否与公开清单一致时,可以使用此技能。
更新在 AO 机器人自己的云端环境中进行,不会更改你的电脑。改写技能前需要获得你的批准。文件从公开代码库下载,因此需要网络连接。
本介绍由 AI(OpenAI Codex)根据公开的 SKILL.md 撰写。准确的规格请查看下方原文。
AI 根据 SKILL.md 的内容检查了需要注意的操作和使用前提。评分只依据实际运行的结果(实测对比)。
不计入评分。 由 AI(OpenAI Codex)于 2026年10月29日 评估。仅供参考,安装前请同时查看原文。
安装前可以查看交给 AI 代理的指令内容。
Follow the ao-rules skill. This runs on the bot's own cloud computer (the box), not on the user's computers. It changes only this bot's ao-* skills, and only after the user's yes.
The skills are published in the public AO repository (OrchestratorInc/agent-orchestrator, folder integrations/grok-bot/) with a manifest.json that lists each skill's sha256. Every check reads the newest commit on main, then downloads the manifest and the skills from that exact commit, so the files always match each other.
Save it on the box if /workspace/ao-bot/fetch.py is missing or differs:
f(){ mkdir -p /workspace/ao-bot && cat > /workspace/ao-bot/fetch.py <<'PY'
import hashlib, json, os, re, subprocess, sys
REPO, DIR = "OrchestratorInc/agent-orchestrator", "integrations/grok-bot"
SRC = os.environ.get("AO_BOT_SOURCE") # a local folder instead of GitHub, for testing
STATE = os.environ.get("AO_BOT_STATE", "/workspace/ao-bot")
def get(url): # curl, so the system's certificates are used
r = subprocess.run(["curl", "-fsSL", "--max-time", "30", "-H", "User-Agent: ao-bot", url], capture_output=True)
if r.returncode: sys.exit(f"DOWNLOAD_FAILED {url} {r.stderr.decode().strip()}")
return r.stdout
def commit():
return "local" if SRC else json.loads(get(f"https://api.github.com/repos/{REPO}/commits/main"))["sha"]
def read(sha, path):
return open(os.path.join(SRC, path), "rb").read() if SRC else get(f"https://raw.githubusercontent.com/{REPO}/{sha}/{DIR}/{path}")
def installed():
p = os.path.join(STATE, "manifest.json")
return json.load(open(p)) if os.path.exists(p) else {"version": None, "skills": []}
def split(text): # frontmatter name and folded description, then the body
m = re.match(r"---\nname: (.+)\ndescription: >-\n((?: .*\n)+)---\n", text)
if not m: sys.exit("BAD_SKILL_FILE")
return m.group(1).strip(), " ".join(l.strip() for l in m.group(2).splitlines()), text[m.end():]
cmd = sys.argv[1] if len(sys.argv) > 1 else "check"
sha = commit(); new = json.loads(read(sha, "manifest.json")); old = installed()
was = {s["id"]: s["sha256"] for s in old["skills"]}; now = {s["id"]: s for s in new["skills"]}
changed = [i for i in now if was.get(i) != now[i]["sha256"]]
removed = [i for i in was if i not in now]
if cmd == "check":
print(json.dumps({"installed": old["version"], "latest": new["version"], "commit": sha[:12], "changed": changed, "removed": removed}))
elif cmd == "fetch":
out = os.path.join(STATE, "pending"); files = {}
for i in changed:
data = read(sha, now[i]["path"])
if hashlib.sha256(data).hexdigest() != now[i]["sha256"]: sys.exit(f"HASH_MISMATCH {i}")
files[i] = data.decode()
os.makedirs(out, exist_ok=True)
for f in os.listdir(out): os.remove(os.path.join(out, f))
order = sorted(files, key=lambda i: (i != "ao-rules", i == "ao-update", i))
for i in order:
name, desc, body = split(files[i])
json.dump({"name": name, "description": desc, "body": body}, open(os.path.join(out, i + ".json"), "w"))
json.dump({"version": new["version"], "commit": sha, "apply": order, "manifest": new}, open(os.path.join(out, "PLAN.json"), "w"))
print(json.dumps({"ready": order, "folder": out}))
elif cmd == "done":
plan = json.load(open(os.path.join(STATE, "pending", "PLAN.json")))
json.dump(plan["manifest"], open(os.path.join(STATE, "manifest.json"), "w")); print("INSTALLED", plan["version"])
PY
}; f
python3 /workspace/ao-bot/fetch.py check prints the installed and latest version, the changed skills and any removed ones. installed: null means this bot was never updated here: every skill counts as changed, which is fine. Nothing changed: say it's up to date and stop. DOWNLOAD_FAILED: GitHub or the network didn't answer (a 404 means the skills aren't published at that path yet). Say so and try again later.
One short message: installed and latest version, which skills changed, and any removed ones. Ask "Update to <latest>?".
python3 /workspace/ao-bot/fetch.py fetch. It downloads each changed skill, checks its sha256 against the manifest and, only if all match, writes one <id>.json per skill plus PLAN.json in /workspace/ao-bot/pending/. HASH_MISMATCH <id>: stop, change nothing, and tell the user.PLAN.json apply in order (ao-rules first, ao-update last). For each, call UpdateSkill with that json's name, description and body: rewrite the existing skill of that name, or create it if it doesn't exist. A subagent can't call UpdateSkill: the main agent does this step.python3 /workspace/ao-bot/fetch.py done records the new version as installed.还没有评价。欢迎分享你的使用感受。
无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。
还没有评论。来写第一条吧。
操作 AO 会话和拉取请求,包括中断或恢复工作、发起评审及经确认后合并。还可截取会话浏览器画面、发送指定文件、保持主机运行或安排定期任务。
查找 AO 中等待用户回复的会话,将待答问题和待审批事项整理成选项,并把所选答复直接发送到对应会话。离开模式下也会遵循 AO 的决策规则。
启动或重启真实的 AO 桌面应用,用本地数据查看界面改动;也可组合多个拉取请求分支进行本地评审,并排查 Electron 进程、端口冲突和 preload bridge 不匹配。
将项目请求或问题发送给 AO 协调器,等待回复并转达结果。可用于启动或调整工作、了解项目进展、询问原因,以及讨论计划和后续步骤。
查阅 AO 各技能共用的主机识别、连接、任务分派、审批和秘密信息处理规则,了解如何区分本地与远程主机及其会话。
此技能可查找运行 AO 的电脑并将其登记为主机,也可按需添加没有 Grok Bot 桌面应用的远程主机、记录默认交互模式,并设置定时检查或工作日摘要。