2026.07.15 (水)
2026.07.17 (金) 更新

✨ GPT-5.6 Solの要約

Linux VMとユーザー別Containerを基本とした計画をやめ、従業員ごとのmacOSユーザーとnative OpenClawを実行単位として定め直した記録。

一日で基本構造をひっくり返した

昨日はコーディネーターとワーカーを実際につないでみた。複数のAIが作った結果をWorktree、Branch、commitに分け、もう一度まとめる方法を試した。

その作業と並行して、AI Orchestrationの実行環境も作っていた。14日まで考えていた基本構造は次のとおりだった。

Mac mini
→ Colima Linux VM 1台
→ 従業員ごとのOpenClaw Cell Container

共通Imageを作り、従業員ごとにNetworkとVolumeを分ければ、デプロイと再現が容易に見えた。実際に公式OpenClaw Linux arm64 Imageを確認し、child ImageとCell Networkの契約も作った。従業員ごとの環境をContainerで分離する方向が、かなり具体化していた。

だが15日、この構造を基本案から外した。

作ろうとしていたのはContainerサービスではなかった

AI Orchestrationの目的を改めて書き出すと、ずれていた部分が見えた。

私が作りたかったのは、従業員がWebChatに目標だけを伝えれば、個人AIが必要な作業を分け、ツールを選び、最後まで処理する環境だった。コードや文書を作るだけではなく、Macアプリを操作し、XcodeとSimulatorを起動し、ユーザーのWorkspaceとGit identityで実際の成果を残さなければならなかった。

Linux Containerの中から無理にmacOSの機能を呼び出した瞬間、構造がおかしくなる。Containerの外に別の実行機構を置き、権限と状態をもう一度つなぎ、ユーザーのKeychainとGUI Sessionを渡さなければならない。分離のために追加した階層のせいで、本当に必要な機能には迂回路ばかり作ることになった。

OpenClawも単純なstateless workerではなかった。一人のユーザーのGateway、Profile、Session、Memory、OAuth、実行状態をまとめて持つ個人環境に近かった。それなら、CellをContainer一つと定義したこと自体が間違っていたのかもしれない。

15日、Cellの意味を定義し直した。

従業員1人
= macOSユーザー1人
= 独立したOpenClaw Gateway 1つ
= UID・HOME・Keychain 1セット
= ChatGPT OAuth・CODEX_HOME 1セット
= Workspace・Git identity・Session・Memory 1セット

一台のMac miniに従業員ごとの独立したmacOSユーザーを作り、各ユーザーの中でcomplete OpenClaw Gatewayをnative実行する構造だった。

Containerは任意のsandboxとして残した

Containerの実験で確認できたことは確かにあった。公式Image、非root実行、read-only root、Networkの分離、Volumeとcredentialの境界、Image provenance、restartに関する証拠には、そのまま価値があった。

Linux VMとContainerは基本のPilot環境ではなく、本当に分離が必要な特定の作業だけで選ぶsandbox候補へ下げた。native macOSを基本とし、Containerは必要性が証明されたときに使うツールになった。

macOSユーザーを分けるだけで分離が終わるわけでもなかった

native構造は単純に見えたが、検証すべきことは増えた。

  • ログインした従業員と実際に実行するmacOSユーザーは同じか?
  • そのユーザーのGateway、OAuth、Workspace、Git identityが正確に結び付いているか?
  • あるユーザーの認証に失敗したとき、別のユーザーの認証へ切り替わらないか?
  • 別のユーザーのHOME、Keychain、Port、Workspaceへアクセスできないか?
  • ファストユーザスイッチと再起動の後も、各Gatewayが自分の状態で復旧するか?

だから、文書上のtopologyを変更しただけでは終わらせなかった。native macOS Cellの契約とAcceptanceを新たに作り、実際のRuntime証拠がない項目はNOT_READYのまま残した。

テストfixtureが通ったからといって、実際の二人のユーザーの分離が完了したとは言えなかった。外部入力ファイルのhashと実際のprobe実行証拠を分け、別のユーザーを装った値やsymlink、macOSの大文字・小文字やUnicodeのパスaliasで検査を迂回できないように修正を重ねた。

正午にtopologyを変えてから、午後はずっと「通ったと偽れる抜け道」をふさぐcommitが続いた。構造を変えることより、新しい構造の合格条件を正直なものにする方が、さらに多くのコードを必要とした。

共通Workflowと個人状態も分けた

従業員ごとに完全に別の環境を与えても、会社が管理する共通Workflowは同じversionでデプロイしなければならなかった。その一方で、共通Workflowを更新したからといって、個人のOAuth、Memory、Workspaceまで変わってはいけなかった。

15日の午後には、Workflow Releaseをversionとcontent hashで固定し、検証済みのreleaseだけを選択できるadmission契約を作った。新しいreleaseの選択はatomicに切り替わらなければならず、実行中の作業は開始時に選んだreleaseに固定され、rollbackや整理の過程でも使用中のreleaseが消えてはならなかった。

これもSourceとテストを作ったからといって、実際のMacの共用インストール先へデプロイしたとは記録しなかった。インストールしていないRuntimeは、最後までNOT_READYだった。

基本の実行環境と残る検証

  • 基本Cell: 従業員ごとのnative macOSユーザーと独立したOpenClaw Gateway
  • 任意の分離: 必要性が証明された作業にだけLinux Container sandboxを使用
  • 共通状態: versionとcontent hashで固定したWorkflow release
  • 個人状態: OAuth、Memory、Workspace、Git identity、Session
  • 実際のマルチユーザーRuntime分離: NOT_READY

15日に確定したのはtopologyであり、実際の二人のユーザー間の分離と共通Workflowのインストールは、今後Runtimeの証拠で確認する必要があった。

コメントする