Clawk: AIコーディングエージェント向け使い捨てLinux VM

Clawk: AIコーディングエージェント向け使い捨てLinux VM

Clawkは、AIコーディングエージェントに専用の使い捨てLinux仮想マシン(VM)を提供するために設計されたツールであり、自律型エージェントをホストのラップトップ上で直接実行するリスクを排除します。エージェントを独自のカーネルを持つ別のマシンに隔離することで、Clawkは、明示的に共有されない限り、エージェントがホストのファイルシステム、キーチェーン、または機密性の高いシステムファイルにアクセスできないことを保証します。

主要な機能と能力

Clawkにより、コーディングエージェントは、隔離された環境内でパッケージのインストール、サーバーの実行、ビルドの実行などの完全な自律性を備えて動作することが可能になります。

隔離とセキュリティ

  • ハイパーバイザレベルの境界: プロセスレベルのサンドボックスとは異なり、Clawkは個別のLinuxカーネルを使用します。ホストのファイルシステムは拒否ルールによって隠されるのではなく、単にマウントされていません。
  • ネットワーク許可リスト: すべてのアウトバウンドトラフィックはデフォルトで拒否されます。各サンドボックスは独自のDNS対応の許可リストを持っており、エージェントが承認されたサーバー(例:GitHub, npm, PyPI)にのみ到達できることを保証します。
  • 機密情報の保護: SSHキーやその他の機密性の高い認証情報はホストに保持されます。Clawkはssh-agent forwardingを使用することで、実際のキーがVMに入力されることなく、エージェントがgit push操作を実行できるようにします。
  • 使い捨てのライフサイクル: エージェントがVMを侵害したり破壊したりした場合、clawk destroy && clawkを使用して即座に破棄して再作成することができます。その間、プロジェクトのリポジトリとエージェントの会話履歴はホスト上に安全に残ります。

ワークフローの統合

  • ワンコマンド・セットアップ: プロジェクトディレクトリ内でclawkを実行すると、サンドボックスが起動し、エージェント(Claude CodeやCodexなど)が自動的にアタッチされます。
  • OCI Image Support: 任意のOCIイメージがrootfsとして機能でき、ユーザーはclawk.mod設定ファイルを通じてプロジェクトに必要な正確なツールチェーンを定義できます。
  • Ticket Mode: 複数のリポジトリにまたがるタスクの場合、Clawkはリポジトリごとにgit worktreeを使用した単一のサンドボックスを作成し、複数のプロジェクトにわたる変更を調整し、相互リンクされたPRを作成することができます。
  • 状態の永続化: エージェントの会話とメモリはホストにマウントされています。つまり、--resumeフラグを使用する場合、再作成されたVMは前のセッションが中断された場所から正確に再開されます。

技術的アーキテクチャ

Clawkは、サンドボックスごとにデーモンを作成することで、VMのライフサイクルとネットワークを管理します。

  • ハイパーバイザ: macOSではAppleのVirtualization.frameworkを活用します。Linuxではfirecrackerを使用します(現在は実験的機能です)。
  • ネットワーク: デーモンはユーザースペースTCP/IPスタック(gvproxy)を実装しています。これにより、ネットワークフィルタがゲストOSの下層で動作するため、VM内のrootユーザーであってもファイアウォールを再設定することはできません。
  • ディスク管理: OCIイメージはプルされ、ext4ディスクにフラット化されます。容量を節約するために、Clawkはcopy-on-writeクローン(macOSではAPFS clonefile)を使用するため、複数のサンドボックスが同じイメージから作成された場合、追加の容量はゲストの書き込み分のみ消費されます。
  • アクセス: ゲスト内にはsshdcloud-initは存在しません。アクセスはvsock bridgeを介してゲスト内のpty-agentに提供されます。

他のサンドボックス手法との比較

| メソッド | 隔離レベル | セットアップのオーバーヘッド | ホストへのリスク | | :--- | :--- | <%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%200%20%20%20%20%20%20%20%20%- | Local Process | なし | 低 | 高 | | Containers/Devcontainers | 共有カーネル | 低 | 中 (Kernel bugs/socket mounts) | | C-level Sandboxes | プロセスレベル | 低 | 中 (Policy mistakes) | | Clawk (VMs) | 別のカーネル | 中 | 低 |

コミュニティの洞察と代替案

開発者の間での議論は、「エージェント的」なインフラストラクチャへの高まる傾向を浮き彫りにしています。一部のユーザーは、基本的な隔離を目的とするならば、個別のOSユーザーやPodmanコンテナで十分であると提案していますが、他のユーザーは、ネイティブな依存関係やネストされた仮想化(例:Dockerをサンドボックス内で実行する)が必要なワークロードには、完全なVMが必要であると強調しています。

コミュニティの議論では、いくつかの代替プロジェクトが言及されました:

  • yoloai: 複数のバックエンド(Docker, gVisor, Firecracker)をサポートする同様のサンドボックス手法。
  • flar: 名前空間ベースのアプローチで、VMよりも高速な起動を実現するためにエージェントをbubblewrapsします。
  • katsuobushi: microvm.nixを活用して宣言的な設定を行うNixベースのサンドボックス。
  • AgentCage: コンテナとVMの選択肢を提供し、モニタリングのためのMITM proxyを提供します。

システム要件と制限事項

  • プラットフォームサポート: 完全なサポートにはApple silicon上のmacOS 14+が必要です。LinuxサポートはFirecrackerを介して実験的です。
  • ハードウェア・ゲーティング: ネストされた仮想化(VM内でDocker/Kubernetesを実行する)は、オプトイン機能であり、特定のハードウェアとゲストカーネルのオーバーライドが必要です。
  • セキュリティ・リミット: Clawkは、エージェントがリポジトリにコミットした悪意のあるコードに対しては保護を提供しません。また、ハイパーバイザ・エスケープに対しても保護を提供しません。ユーザーは、エージェントが生成したすべてのコミットを、見知らぬ人のPRのように確認することを推奨します。

Sources