HN 日本語サマリー

← 一覧へ戻る
プログラミング

Show HN: Clawk – コーディングエージェントにラップトップではなく、使い捨てのLinux VMを与える

Show HN: Clawk – Give coding agents a disposable Linux VM, not your laptop (github.com)

128 pointsby celrenheit119 コメント

要約

Clawkは、コーディングエージェントに開発者のラップトップではなく、使い捨てのLinux仮想マシンを提供するツールです。これにより、エージェントはパッケージのインストールやコードの実行などを安全に行えます。VMは分離されており、ホストマシンやファイルへのアクセスは制限されているため、セキュリティリスクを低減します。

全文翻訳

コーディングエージェントにあなたのラップトップではなく、独自の使い捨てLinuxマシンを与えましょう。 インストール クイックスタート VMを使う理由 仕組み 比較 FAQ ドキュメント コーディングエージェントは、パッケージをインストールしたり、書いたコードを実行したり、サーバーを起動したり、ネットワークを使用したりすることを許可されて初めて有用になります。自分のマシンでこれを行う場合、2つの悪い選択肢しかありません。コマンドをすべて承認するか(数秒ごとにプロンプトを監視する)、--dangerously-skip-permissions を実行して、何も重要なものが rm -rf や漏洩したトークンから遠くないことを願うかです。 clawk は 3 番目の選択肢です。リポジトリに cd して clawk と入力すると、Claude Code (または Codex、またはシェル) が使い捨ての Linux VM 内で動作します (コードはマウントされ、ゲスト内は root 権限で、権限プロンプトなし)。あなたのファイル、キーチェーン、その他のマシンは手の届かないところに置かれます。エージェントはあなた自身のマシンではなく、独自のマシンを得ます。1 つのコマンドで動作するエージェントに接続できます。未知のサーバーへのデータ送信の試みは、ネットワーク許可リストによってブロックされます。clawk attach は後でセッションを再開します。境界線は、エージェントが説得されてしまうようなプロンプト内のルールではありません。それは別のマシンであり、開口部はあなたがマウントしたものだけです。 サンドボックス内のシェルから: $ curl https://tracker.evil.example # 許可リストにない: ブロックされました curl: (7) 2 ms 後に tracker.evil.example ポート 443 への接続に失敗しました: 接続拒否されました $ cat ~/.ssh/id_rsa # あなたのキーは VM に入ることはありませんでした cat: /home/agent/.ssh/id_rsa: No such file or directory $ git push # ...しかし、これは機能します: ssh-agent が転送されています オブジェクトを列挙しています: 5、完了しました。 限界について正直に言うと、許可リストは未知のサーバーへの接続をブロックしますが、あなたが許可したサーバーへの接続はブロックしません。github.com は事前に許可されており、転送された ssh-agent はプッシュできるため、エージェントが読み取れるものはすべて公開できるものと見なしてください。セキュリティモデルではこれを詳述しています。エージェントが VM を破壊した場合、clawk destroy && clawk を実行します。新しい VM、同じリポジトリ、そして --resume で会話を再開できます。 重要 1.0 より前で、急速に進化しています。リリース間の破壊的な変更や、時折の粗いエッジを予想してください。物事は壊れる可能性があり、壊れます。問題を報告してください。そのフィードバックが 1.0 を形作っています。 ハイライト エージェントにあらゆることを許可する。制限されたネットワークを持つ使い捨て VM で実行されるため、rm -rf、パッケージのインストール、信頼できないコードは、ホスト、ファイル、または明示的に共有したものに到達できません。 1 コマンドで作業する。リポジトリに cd して clawk を実行します。Dockerfile、devcontainer、またはセットアップファイルはありません。最初の起動時にイメージから rootfs がビルドされます。それ以降の各起動は数秒かかります。 何も失うことなく壊す。自由に破棄して再作成してください。あなたのコードとエージェントの会話はホスト上に残ります。失われるのは使い捨て VM ディスクのみです。 実際の Linux ボックス、あなたのツールチェーン。任意の OCI イメージが rootfs です。プロジェクトに必要なツールがすべて揃った完全な OS です。Docker デーモンは不要です。 シークレットはあなたのマシンに残ります。送信トラフィックは許可リストに登録されており、ssh-agent は転送されるため、キーが VM に入ることなく git push が機能します。 プロジェクトまたはチケットごとにサンドボックス。複数同時に実行します。マルチリポジトリのチケットは、リポジトリごとに git worktree を持ち、調整された PR が作成されます。アイドル状態の VM は自動的にメモリを解放し、ディスクにサスペンドするため、忘れられたサンドボックスは (ほとんど) コストがかかりません。 VM を使う理由 clawk は、自律的なコーディングエージェントのための汎用ローカル環境です。VM が重要です。それはエージェントが所有できる完全なマシンであり、あなたが使用しているマシン上のポリシーでラップされたプロセスではありません。 独立したカーネル。ゲストは独自の Linux カーネルを実行するため、ホストファイルシステムは拒否ルールによって隠されることはありません。マウントされたことすらありません。 従来の Linux 環境。標準カーネル、標準ユーザーランド、/dev/kvm を想定した期待値。そのため、ツールは、syscall-filter の驚きなしに、ドキュメントどおりに動作します。 ゲスト内の root 権限。システムパッケージをインストールしたり、/etc を編集したり、モジュールをロードしたり、特権ポートをバインドしたりできます。エージェントが再構成できるボックスです。 使い捨てのライフサイクル。壊すのが簡単で、素早く再作成できます。壊れた VM は clawk destroy && clawk で済み、リポジトリと会話はホスト上で変更されません。 ホストからのより強力な分離。分離は、プロセスのサンドボックスポリシーを正確に設定することではなく、ハイパーバイザーの境界線に基づいています。 この組み合わせにより、制限されたプロセスサンドボックスが通常は対立するワークロードを実行できます。パッケージやネイティブ依存関係のインストール、バックグラウンドサービス (データベース、キュー、開発サーバー) の実行、信頼できないビルドやテストのフルスピードでの実行、実際のマシンを期待するシステムレベルの Linux ツールの使用、そしてサポートされているハードウェア上の KVM 対応ゲストカーネルを使用すると、サンドボックス内で実行される Docker や Kind のようなコンテナおよび Kubernetes の開発ワークフロー。 これはオプトインであり、ハードウェアで制限されています。正確な要件については、Images を参照してください。 これらは製品ではありません。clawk は一般的なローカルエージェント作業用です。Docker と Kubernetes は、「サンドボックス化されたプロセスではなく、実際のマシンが必要」という状況の最も顕著な例です。 インストール macOS 14+ (Apple Silicon) が必要です。(Linux は firecracker 経由でサポートされており、現在は実験的です。VM プロバイダーのギャップを参照してください。この README は macOS ファーストです。) brew install clawkwork/tap/clawk ソースから (貢献者、または Homebrew を使用しない場合)、Go 1.26+ が必要です: git clone https://github.com/clawkwork/clawk && cd clawk make install どちらの場合も、追加のホストツールは不要です。Docker、qemu、sudo は不要です。ハイパーバイザーは Apple の Virtualization.framework で、バイナリにリンクされています。初回実行時に不足しているものをプローブし、修正を提案します。 アンインストール: clawk destroy でサンドボックスを破棄し、rm -rf ~/.clawk してから、brew uninstall clawk (またはソースインストール用の $GOBIN から削除) でバイナリを削除します。他に何もインストールされていません。launchd ジョブはありません。サンドボックスごとのデーモンは通常のプロセスで、VM とともに終了します。 クイックスタート 日常的なケース、現在いるディレクトリのサンドボックス: cd ~/code/my-project clawk # このディレクトリのサンドボックスを起動 + アタッチ claude clawk run shell # 同じサンドボックスのシェルにドロップする clawk run codex # または他のエージェント: codex, opencode, shell clawk down # VM を停止する (リポジトリ + エージェントの状態は永続化される) clawk attach # 後で戻る — 停止している場合は起動し、再アタッチする claude clawk destroy # VM を削除する (会話履歴は保持される) 一般的なオプション: clawk run claude -- --resume # エージェントに引数を渡す clawk forward add my-project 3000 # ゲスト開発サーバーを localhost:3000 で公開する clawk network allow my-project api.example.com 複数のリポジトリにまたがるチケットに取り組んでいますか?1 つのコマンドで、リポジトリごとに git worktree を持つサンドボックスを作成し、新しいブランチに、後で clawk pr で変更されたものごとにクロスリンクされた PR を開きます: cd ~/code/my-workspace # リポジトリをリストする clawk.mod を含む clawk work INFRA-123 # 1 つのサンドボックス、リポジトリごとに 1 つの worktree、claude がアタッチされている clawk pr INFRA-123 # ブランチをプッシュ + リポジトリごとに 1 つの PR を開く チケットのライフサイクル全体 (ステータス、マージ後のフォローアップブランチ、リベース) は docs/ticket-mode.md に記載されています。 ヒント: Claude Code を使用していますか?claude setup-token を実行してから clawk auth set-token を一度実行すると、すべてのサンドボックスがサインインした状態で起動し、/login もなく、並列サンドボックス間でログイン競合も発生しません。docs/claude-auth.md を参照してください。 何が何を生き残るか 1 つのルールが永続性を支配します。VM は使い捨てです。失うことになるすべてはホスト上に残ります。 | 操作 | clawk down | clawk destroy | |-------------|------------|---------------| | あなたのリポジトリ (マウントされた worktree; コミット、ブランチ) | ✅ | ✅ | | エージェントの状態 (Claude/Codex の会話、メモリ) | ✅ | ✅ | | VM ディスク (apt インストール、キャッシュ、$HOME) | ❌ (毎回再ビルド*) | ❌ (それがポイントです) | * 2 つの例外: clawk snapshot を再開すると、ディスクとメモリが中断されたときとまったく同じ状態で復元されます。Linux/firecracker プロバイダーは destroy までディスクを保持します。 各起動で必要となるツールはイメージに含める必要があります (vm ( image … ))。起動ごとのセットアップは on up フックに含めます。 エージェントの状態はサンドボックスごとにホストにマウントされます。ゲストの ~/.claude/projects/ および ~/.claude/memory/ (および codex の ~/.codex/) は、ホスト上の ~/.clawk/namespaces/default/state/<name>/ の下にライブするため、再作成されたサンドボックスは --resume で古い会話を引き継ぎます。 デフォルトで完全な自律性 (および --safe オプトアウト) ランナーは「外部でサンドボックス化された」モードで起動します。claude は --dangerously-ski