AOのセッションやPRに対して停止・再開・レビュー・マージなどを行い、ブラウザー画像や成果物の送信、ホスト維持、定期実行も扱います。
- AOのセッションを中断・再開したいとき
- PRのレビューやマージを進めたいとき
- セッションの画面や成果物を受け取りたいとき
AOボットのスキル更新状況を確認し、変更点を示したうえで、承認後に検証済みの最新版へ更新します。
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ボット自身のクラウド環境で行われ、ユーザーのコンピューターは変更しません。スキルを書き換える前にユーザーの承認が必要です。公開リポジトリから取得するためネットワーク接続が必要です。
この紹介文は、公開されている SKILL.md をもとに AI(OpenAI Codex)が作成しました。正確な仕様は下の原文を確認してください。
SKILL.md の記述から、注意が要る操作と導入の前提を AI が確認しました。点数は実際に動かした結果(実行検証)だけで付けています。
点数には入れていません。 2026年10月29日 時点で AI(OpenAI Codex)が判定しました。目安なので、入れる前に原文も確認してください。
インストールする前に、エージェントに与えられる指示の中身を確認できます。
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のセッションやPRに対して停止・再開・レビュー・マージなどを行い、ブラウザー画像や成果物の送信、ホスト維持、定期実行も扱います。
AO上でユーザーの返答を待つセッションを見つけ、質問や承認内容を選択肢で示して回答を返します。離席中の判断ルールにも沿って処理します。
AOの実際のデスクトップアプリを起動・再起動し、画面変更を確認するスキル。ローカルデータでの動作確認や、プロセス・ポート競合などの原因調査を支援します。
AOのプロジェクト担当オーケストレーターに依頼や質問を届け、返答を確認してユーザーに伝えます。
AOを使う各スキルに共通する接続方法やホストの扱い、判断・承認、書き込み、秘密情報のルールを確認できます。
AOが動くコンピューターを検出してホスト情報を記録し、必要に応じてリモート接続や定期確認の設定を進めます。