2026年9月3〜5日の実験を整理

Grok BotでAIチームを動かす

Grok Botは、複数のAIに同じ作業環境で仕事を任せられるアプリ。実験の結果と、動かす手順をまとめた。

Grok Botを外部のプログラムから操作し、3体のAIが分担して成果物を作るところまで確認できた。

  • できたこと:指示の受け付けから、3体の分担、7ファイルの作成まで。
  • 人の関わり:最初に役割と仕事を与えた後、この実験では承認操作を挟まなかった。
  • まだ分からないこと:追加の指示なしで仕事を続けられるか、使用量を管理できるか、人数を増やしても安定するか。
01 / まず分かること

3体が分担して、7ファイルを残した

最初の仕事は「計算機の余力と、AIをあとどれだけ使えるかを調べ、次に何をするか決める」。まとめ役が、技術担当と費用担当に調査を依頼した。

  • 技術担当CTO

    計算機の余力を測った計算の処理能力と、作業・保存に使える容量を調べた。結果を記録し、自動で更新するプログラムも作った。

  • 費用担当CFO

    残りの利用量は「確認できない」と報告したAIをあとどれだけ使えるか調べようとしたが、ログインが必要だった。数字を作らず、取得できない理由と運用のルールを残した。

  • まとめ役CEO

    2人の報告から、次の仕事を決めた残りの利用量が分かるまでは大きな仕事を増やさず、チームの状態を共有する記録を作る方針にした。

残った成果

方針、使用量のルール、状態の記録など7ファイル。外部から取得できることも確認した。

残った7ファイル

ファイル役割
DECISION-001.md
DECISION-002.md
調査結果を受けた方針と、その後の判断
SPEND-RULES.md利用枠が不明な間の使用ルール
STATUS.mdチームや計算機の状態の記録
update-status.sh状態を自動で更新するプログラム
vm-last.json計算機の測定結果
weekly-quota-2026-09-04.md利用枠を調べた結果と、確認できない理由

保存先は実行環境内の /home/box/share(~/share)。このページは当時の記録を整理したもので、成果物の現在の内容は原資料とは別に確認する必要があります。

最初に与えた役割・指示と、計算機の測定値

3体に共通で「迷ったら自分で決めて理由を残す」「推測ではなく測定する」「成果物は共有先へ置く」と指示。連絡には SendToAgent を使った。

まとめ役への指示は、技術担当に計算機の資源、費用担当に今週の利用枠を調べてもらい、両者の報告を統合して最初に取り組む仕事を1つ決める、という内容。

技術担当の記録:8コア、メモリ15.64 GiB(利用可能9.41 GiB)、Swap 16 GiB、ディスク125.85 GiB中22.71 GiBを使用。これらはその時点の値。

02 / 動かし方

作る → 指示する → 返事を読む

外部のプログラムから、受付のAPIを呼び出して操作する。AIを作る操作と、仕事を始めさせる操作は分かれている。

  1. 1外から接続認証してAPIへ
  2. 2AIを作る名前と役割を設定
  3. 3指示を出すAIが仕事を進める
  4. 4返事を読む会話の記録を取得
  5. 5成果を受け取るファイルと画面
外部からの操作と、AI同士の分担は別の経路。AI同士は内部の連絡機能でやり取りした。
  1. 名前と役割を決めてAIを作る

    createAgent で作成する。作っただけでは仕事は始まらず、専用の画面も増えない。

  2. 指示を送り、受け付けを確認する

    sendPrompt の返答は「受け付けた」という通知。仕事の完了や、AIの返事ではない。

  3. 会話とファイルを読んで、結果を確認する

    getAgentTranscriptTail で返事を取得する。完了したという報告に加え、成果物そのものを確認する。

実装で使う呼び出し方・引数の注意

外部の接続先は POST https://cursor-gw.masao.ai/api/<コマンド名>。認証には外部接続用の2ヘッダと、受付APIのBearerトークンを使う。

CF-Access-Client-Id: <外部接続用のID>
CF-Access-Client-Secret: <外部接続用の秘密情報>
authorization: Bearer <受付APIのトークン>
Content-Type: application/json

以下は送信するデータの例。実際のIDや認証情報は、このページに含めていない。

// AIの作成
createAgent {"name":"技術担当","description":"資源を測り、結果を報告する"}

// 指示の送信
sendPrompt {"agentId":"<AIのID>","prompt":"計算機の資源を調べて報告して","clientNonce":"<一意な値>"}

// 返事の取得
getAgentTranscriptTail {"id":"<AIのID>","limit":20}
  • createAgent の名前と説明は空にできない。origin は省略、または "user"。
  • updateAgent は {id, profile:{name, description}} の形。
  • sendPrompt の戻り値は {"accepted":true}。返事は別途取得する。
  • getAgentTranscriptTail の配列は entries に入る。
  • broadcastToAgents の本文キーは message。
03 / 画面の仕組みと注意

画面は、使い始めてから増える

AIを作った直後は、設定などのファイルが増えた。専用の画面や、それを動かすプログラムは増えなかった。ブラウザを使う指示を出すと、画面が準備され、その後にブラウザが起動した。

AIの作成直後ファイルが増える

この測定では約2秒。画面用プログラムの増加はなし。

ブラウザを使う専用画面を準備

画面番号の割り当てから、画面の対応表への追加まで約2秒。ブラウザ起動は割り当てから約14秒後。

観覧への反映表示にも待ち時間

表示する画面を決める対応表の更新から、配信の仲介プログラムの再起動まで約39秒。

いずれも2026年9月5日の1回の測定。処理時間の保証や平均値ではありません。作成に伴う負荷がゼロだと測定したわけでもありません。

3体の分担は確認済み。長期間の継続は未検証。

この実験では、最初の指示の後に承認操作を求められなかった。ただし、どんな仕事でも人の確認が不要と確かめたわけではない。費用の上限、仕事を止める条件、外部サービスで許可する操作を決めた運用は、まだ試していない。

当時の観覧画面

3体の画面を1ページに表示。左上の費用担当の画面には、調査で行き止まったログイン画面が映っていた。

2026年9月4日の観覧画面。3体の画面が並び、左上にはCursorのサインイン画面、他の2つにはデスクトップが表示されている。

原資料のスクリーンショット。現在の稼働状態を示すものではありません。

画面が起動する順番と、AIとの対応

AIと画面番号の対応は /home/box/.sand-window-assignments.json で確認できた。実験時は費用担当が :2、技術担当が :3、まとめ役が :4。

時刻(UTC)起きたこと
10:55:32ブラウザでexample.comを開く指示を送信
10:55:38.391新しいAIに画面番号5を割り当て
10:55:40.311表示する画面を決める対応表に5を追加
10:55:52Chromeが起動
10:56:04AIが「Example Domain」と返答
10:56:19画面中継のwebsockifyが再起動

画面番号は、実行用プログラムや配信先を結び付ける。観覧用の番号と、画面操作を許可する秘密情報は別物。後者を観覧ページへ埋め込まない。

約39秒は表示する画面を決める対応表の追加から再起動までの差。観覧側の接続成功時間を毎回測定した値ではない。表への登録だけで、接続の成功を保証できるわけではない。

認証・削除・データ保存で分かったこと

認証情報を、AIごとに隔離できているとは言えない

原調査では、AIを操作するための秘密情報が、プログラムを起動したときの命令文に含まれていた。同じ計算機でその情報を読めるAIが、他のAIを作成・削除・操作できる可能性がある。

観覧は、画面の配信を仲介する計算機に、接続用の秘密情報を持たせる形へ変更した。人のブラウザで別のログイン画面を開かずに観覧でき、その秘密情報をブラウザへ渡さない構成を確認した。

AIの削除と、記録の全消去は違う

試験用のAIを削除すると、画面と実行用プログラムは消えた。一方、ブラウザの設定やログイン情報を保存したデータ、会話・行動の記録、一部の起動用プログラムは残った。別のAIへ履歴やログイン状態が引き継がれるかは未検証。

最後の1体を削除すると、アプリが新しいAIを自動補充した。原実験では5回続けて同じ挙動を確認した。

100画面の設定値は、100体が安定して動く保証ではない

SAND_BOX_MAX_WINDOWS=100 を確認したが、100体同時の実行は試していない。環境を作り直したとき、保存した記録をどこまで戻せるかは試していない。記録を別の場所へ保存している形跡から推測した部分がある。

04 / 根拠と未確認

小さな分担の実証。運用の保証はこれから。

確認できたのは、最初の指示を受けた3体が分担し、方針とファイルを残したこと。次の判断では、以下を未確認の条件として扱う。

  • 追加の指示なしで、長期間仕事を続けられるか定期実行や、数日以上にわたる継続運用は試していない。
  • 使用量や費用を把握して止まれるか今回の費用担当は、AIをあとどれだけ使えるか確認できなかった。上限に達した場合の停止は未検証。
  • 人数を増やしても安定するか多人数での同時実行、待ち時間、計算機の負荷の上限は未測定。
  • 記録と認証情報を安全に扱えるかAIを削除した後の履歴、他のAIへのログイン状態の引き継ぎ、計算機を作り直した後に戻せる記録が未確認。

今回の再確認

2026年9月5日 21:20〜21:22(日本時間)、APIと観覧画面を再確認。

  • 3体が残っており、いずれも実行中ではなかった。定期実行の登録は0件。
  • 3つの画面に接続でき、各画面が1280×800で表示されることを確認。
  • 内部の版は 0065e8e。原調査の 15e3277 から変わっていた。

今回読み取ったAPIは listAgents、countAgents、getHostStatus、listAllAutomations の4種類。一覧の120件すべてを新しい版で再検証したわけではありません。

画面は別のブラウザでは読み込みが完了しない場合もありました。原因は特定できていません。

根拠になった3つの資料

原資料は当時の記録です。件数や断定の強さに不整合がある箇所は、このページで範囲を明示して整理しました。

再編前のページを見る · 実験日:2026年9月3〜5日

05 / API一覧

API一覧 — 全120件

原表の120件を、用途ごとにすべて掲載した。API名と用途、確認の状態、記録されている引数・戻り値を順に示す。

非公式の調査資料に基づく一覧です。名称を日本語の用途に整理しました。未検証の項目の用途は名称からの解釈を含み、仕様を保証するものではありません。

動作を確認 · 9件

原資料で実行結果を記録。

存在を確認 · 22件

実機に存在。全仕様の検証は含まない。

未検証 · 88件

資料への掲載のみ。重要な変更5件を含む。

実機にない · 1件

原調査の実機では呼び出せなかった。

会話・指示11件

指示を送る、受け付け状況を調べる

API名・用途確認の状態引数・戻り値・記録
sendPrompt指示を送る動作を確認
引数{agentId, prompt, clientNonce}
{"accepted":true} しか返さない。返事は getAgentTranscriptTail で別途取る
broadcastToAgents複数のAIへ一斉に送る動作を確認
引数{targets:"all"|[id…], message}
{total, scheduled}。prompt ではなく message
promptAcceptanceStatus指示の受け付け状況を確認する存在を確認引数・戻り値の記載なし
respondToWidget操作カードへ返答する未検証引数・戻り値の記載なし
reactToMessageメッセージに反応を付ける未検証引数・戻り値の記載なし
voteFeedback回答への評価を送る未検証引数・戻り値の記載なし
resolveAutoReviewApproval自動レビューの承認へ返答する未検証引数・戻り値の記載なし
resolveLocalToolPermission操作権限の確認へ返答する未検証引数・戻り値の記載なし
dismissWidget操作カードを閉じる未検証引数・戻り値の記載なし
submitSecret秘密情報を渡す未検証引数・戻り値の記載なし
appendConnectorCard接続用のカードを追加する未検証引数・戻り値の記載なし

返事・会話の記録8件

返事や会話の履歴を読む

API名・用途確認の状態引数・戻り値・記録
getAgentTranscriptTail最近の返事を読む動作を確認
引数{id, limit}
{entries:[…]}。entry の kind は message / send-message / event
getAgentTranscript会話の記録を読む未検証
引数{id}
配列を直接返す
getConversationOutline会話の概要を読む存在を確認引数・戻り値の記載なし
getAgentTranscriptPage会話の記録をページ単位で読む未検証引数・戻り値の記載なし
getAgentTranscriptWindow会話の記録を範囲指定で読む未検証引数・戻り値の記載なし
openAgentWindowed会話を範囲付きで開く未検証引数・戻り値の記載なし
openAgentTail会話の末尾を開く未検証引数・戻り値の記載なし
getAgentThread会話のスレッドを読む未検証引数・戻り値の記載なし

AIの作成・管理16件

作成、名前の変更、一覧、停止

API名・用途確認の状態引数・戻り値・記録
listAgentsAIの一覧を取る動作を確認
引数{}
AgentSummary[](id, name, description, isRunning, lastMessagePreview 等)
countAgentsAIの数を数える動作を確認
引数{}
数値が直接返る(例: 3)
createAgentAIを作る動作を確認
引数{name, description}
{agent:{…}}。name/description は空不可、origin は省略か "user" のみ
updateAgent名前や役割を変える動作を確認
引数{id, profile:{name, description}}
profile で包む必要あり(平だと拒否)
deleteAgentAIを1体削除する動作を確認
引数{id}
戻り値が transcript。bot はゼロにできない(最後の 1 体を消すと New Bot を自動補充)
searchAgentsAIを探す存在を確認引数・戻り値の記載なし
duplicateAgentAIを複製する未検証引数・戻り値の記載なし
kickstartAgentAIの作業を開始する未検証引数・戻り値の記載なし
interruptAgentRun実行中の作業を中断する未検証引数・戻り値の記載なし
openAgentAIを開く未検証引数・戻り値の記載なし
setWindowFocused画面の選択状態を変える未検証引数・戻り値の記載なし
setAgentUnread未読の状態を変える未検証引数・戻り値の記載なし
setAgentNotificationsEnabled通知の有効・無効を変える未検証引数・戻り値の記載なし
setAgentNotifyOnUpdates更新時の通知を変える未検証引数・戻り値の記載なし
setAgentHiddenFromSidebarサイドバーでの表示を変える未検証引数・戻り値の記載なし
requestDiskSaverAuditディスク節約の確認を要求する未検証引数・戻り値の記載なし

記憶3件

AIが残した記憶を読む・整理する

API名・用途確認の状態引数・戻り値・記録
getAgentMemoriesAIの記憶を読む動作を確認
引数{id}
bot の記憶(裏側は月ごとの Markdown)。CEO 役の記憶に「枠不明のため新規案件は起こさず待機」が保存されていた
deleteAgentMemory記憶を削除する未検証引数・戻り値の記載なし
clearAgentMemories記憶をまとめて消す未検証引数・戻り値の記載なし

チーム・共有の会話14件

メンバーや共有の会話を管理する

API名・用途確認の状態引数・戻り値・記録
createGroupグループを作る未検証
引数{name, …}
name 必須、他は未確認
setGroupMembersグループのメンバーを決める未検証引数・戻り値の記載なし
getSharingState共有の状態を読む存在を確認引数・戻り値の記載なし
createRoomFromAgentAIから共有の会話を作る未検証引数・戻り値の記載なし
createRoomInvite会話への招待を作る未検証引数・戻り値の記載なし
joinSharedRoom共有の会話に参加する未検証引数・戻り値の記載なし
respondToRoomJoinRequest参加の要求に返答する未検証引数・戻り値の記載なし
createSharedRoom共有の会話を作る未検証引数・戻り値の記載なし
addOwnAgentToSharedRoom自分のAIを共有の会話に加える未検証引数・戻り値の記載なし
removeOwnAgentFromSharedRoom自分のAIを共有の会話から外す未検証引数・戻り値の記載なし
setSharedRoomTyping入力中の状態を変える未検証引数・戻り値の記載なし
leaveSharedRoom共有の会話から退出する未検証引数・戻り値の記載なし
getSubagents子AIの情報を読む存在を確認
引数{id}
getAsyncTasks並行して進む作業を読む存在を確認引数・戻り値の記載なし

定期実行7件

実行予定を登録・管理する

API名・用途確認の状態引数・戻り値・記録
createAgentAutomation定期実行を作る未検証
引数{id, …}
id 必須、中身は未検証
getAgentAutomationsAIの実行予定を読む存在を確認
引数{id}
現状 []
listAllAutomationsすべての実行予定を読む存在を確認
引数{}
現状 []
updateAgentAutomation定期実行の内容を変える未検証引数・戻り値の記載なし
deleteAgentAutomation定期実行を削除する未検証引数・戻り値の記載なし
runAgentAutomationNow予定した作業を今すぐ実行する未検証引数・戻り値の記載なし
setAgentAutomationEnabled定期実行の有効・無効を変える未検証引数・戻り値の記載なし

作業手順・スキル16件

作業手順やスキルを登録・管理する

API名・用途確認の状態引数・戻り値・記録
getAgentWorkflowsAIの作業手順を読む存在を確認
引数{id}
add-connector 等の既定 workflow が入っている {id, name, description, body}
createAgentWorkflow作業手順を作る未検証引数・戻り値の記載なし
updateAgentWorkflow作業手順を変更する未検証引数・戻り値の記載なし
deleteAgentWorkflow作業手順を削除する未検証引数・戻り値の記載なし
runAgentWorkflowNow作業手順を今すぐ実行する未検証引数・戻り値の記載なし
setAgentWorkflowEnabled作業手順の有効・無効を変える未検証引数・戻り値の記載なし
importAgentWorkflowText文章から作業手順を取り込む未検証引数・戻り値の記載なし
importAgentWorkflowUrlURLから作業手順を取り込む未検証引数・戻り値の記載なし
portAgentLocalSkillsローカルのスキルを移す未検証引数・戻り値の記載なし
skillsCatalogスキルの一覧を読む存在を確認
引数{}
syncPluginSkillsプラグインのスキルを同期する未検証引数・戻り値の記載なし
getPluginSyncStatusプラグインの同期状態を読む存在を確認引数・戻り値の記載なし
publishSkillスキルを公開する未検証引数・戻り値の記載なし
unpublishSkillスキルの公開を止める未検証引数・戻り値の記載なし
resyncPublishedSkill公開したスキルを再同期する未検証引数・戻り値の記載なし
getSkillPublishTargetsスキルの公開先を読む未検証引数・戻り値の記載なし

外部サービスとの接続12件

外部サービスや連携先を管理する

API名・用途確認の状態引数・戻り値・記録
getAgentChannelsAIの接続先を読む未検証引数・戻り値の記載なし
connectChannel接続先を追加する未検証引数・戻り値の記載なし
disconnectChannel接続を解除する未検証引数・戻り値の記載なし
refreshChannel接続の情報を更新する未検証引数・戻り値の記載なし
getListenerIntegrations受信の連携先を読む存在を確認引数・戻り値の記載なし
getListenerConnectUrl受信連携の接続URLを取る未検証引数・戻り値の記載なし
isEgressTunnelAvailable外向き通信の中継が使えるか調べる存在を確認
引数{}
→ false
isGlobalSearchEnabled全体検索の有効・無効を調べる存在を確認引数・戻り値の記載なし
completeMcpOAuth連携先の認証を完了する未検証引数・戻り値の記載なし
refreshMcp連携サーバーの情報を更新する未検証引数・戻り値の記載なし
listBoxMcpServers連携サーバーの一覧を読む存在を確認引数・戻り値の記載なし
isAgentNetworkEnabledAI間ネットワークの状態を調べる実機にない
unknown gateway method。表に載っていても実在しない例

実行環境の管理20件

状態、設定、更新、初期化

API名・用途確認の状態引数・戻り値・記録
resetForeverBox実行環境を初期化する未検証重要な変更
VM 初期化
clearBoxStoreNow保存領域を消去する未検証重要な変更
ストア消去
deleteAgents複数のAIを一括削除する未検証重要な変更
bot 一括削除
updateHostNowホストを更新する未検証重要な変更
ホスト更新
setBoxSecrets実行環境の秘密情報を書き換える未検証重要な変更
箱のシークレット書き換え
getHostStatusホストの版と状態を読む存在を確認
引数{}
{hostVersion:"15e3277", capabilities:["orderedReplicasV1","sendAcceptanceV1"]} ← 版の確認に使う
getForeverBoxStatus実行環境の状態を読む存在を確認引数・戻り値の記載なし
getCloudAgentInfoクラウド側のAI情報を読む存在を確認引数・戻り値の記載なし
getBoxStoreStatus保存領域の状態を読む存在を確認引数・戻り値の記載なし
getBoxSecretsStatus秘密情報の設定状態を読む存在を確認引数・戻り値の記載なし
getHostSettingsホストの設定を読む存在を確認引数・戻り値の記載なし
setHostSettingsホストの設定を変える未検証引数・戻り値の記載なし
ensureForeverBox実行環境の用意を要求する未検証引数・戻り値の記載なし
updateForeverBox実行環境を更新する未検証引数・戻り値の記載なし
handBackForeverBox実行環境を返却する未検証引数・戻り値の記載なし
snapshotBoxStoreNow保存領域の記録を今すぐ作る未検証引数・戻り値の記載なし
prepareBoxForRecreate実行環境の作り直しを準備する未検証引数・戻り値の記載なし
resumeBoxAfterRecreate作り直した環境を再開する未検証引数・戻り値の記載なし
setBoxMigrating移行中の状態を変える未検証引数・戻り値の記載なし
autoUpdateBoxNow実行環境の自動更新を要求する未検証引数・戻り値の記載なし

添付・画像・その他13件

添付ファイルや記録を扱う

API名・用途確認の状態引数・戻り値・記録
getTrays通知の一覧を読む存在を確認引数・戻り値の記載なし
dismissTray通知を閉じる未検証引数・戻り値の記載なし
clearTrays通知をまとめて消す未検証引数・戻り値の記載なし
uploadAttachment添付ファイルを送る未検証引数・戻り値の記載なし
readAttachmentImage添付の画像を読む未検証引数・戻り値の記載なし
readAttachmentText添付の文章を読む未検証引数・戻り値の記載なし
readAttachmentChunk添付ファイルを部分的に読む未検証引数・戻り値の記載なし
setAgentAvatarBytesAIのアイコン画像を設定する未検証引数・戻り値の記載なし
getAgentAvatarAIのアイコン画像を読む未検証引数・戻り値の記載なし
startTeachRecording操作の記録を開始する未検証引数・戻り値の記載なし
stopTeachRecording操作の記録を止める未検証引数・戻り値の記載なし
getTeachRecordingStatus操作の記録状態を読む未検証引数・戻り値の記載なし
requestWebAuthnCeremonyブラウザの認証処理を要求する未検証引数・戻り値の記載なし

件数の修正・重要な変更・他のAPIの入口

原資料の本文は「116件」としていたが、掲載表は重複のない120行だった。このページは表を全件抽出し、実際の掲載数に合わせた。

原表の「危険」5件は、確認状態と分けて「未検証」かつ「重要な変更」と表示した。対象は resetForeverBox、clearBoxStoreNow、deleteAgents、updateHostNow、setBoxSecrets。これ以外の削除・公開・設定変更にも、実行時の判断は必要。

受付APIのほかに、実行用の 1337/1338、画面振り分けの 1339、画面配信の 6080/6081、Dockerの 2375 が記録されている。認証や用途が異なり、受付APIと同じ扱いにはできない。

API一覧は2026年9月5日の原調査に対応。記録されたホストの版は 15e3277。現在も同じ仕様かは、使用する環境で確認する。