2026.07.15 (水)
2026.07.16 (木) 更新

✨ 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実行する構造だった。

LinuxとContainerを失敗として消しはしなかった

方向を変えたからといって、14日までに作ったものを失敗として扱いたくはなかった。

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

ただ、それが最終的なCellの定義ではなかった。

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

この違いは重要だった。すでに多くの時間をかけたという理由で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だった。

製品が実行環境より先だった

14日は、複数のAIをどう分け、どう統合するかを考えた。15日は、そのAIたちが実際に暮らすCellとは何かを改めて考えた。

Containerをかなり準備した段階でnative macOSへ方向を変えることが惜しくなかったわけではない。それでも、製品がやるべきことにMacアプリ、Xcode、ユーザー別OAuth、Memoryまで含まれるなら、実行環境もその目的に従わなければならなかった。

Cellは分離されたprocess一つではなかった。一人の人が自分の認証、記憶、作業空間、ツールを持って働く、完全な個人AI環境だった。

15日は、Linux VMの上にさらにContainerを重ねる代わりに、macOSユーザーそのものをCellの境界にすると決めた日だった。

カテゴリー: ,

更新日時:

コメントする