🛠️

Claude Codeをサンドボックス上で実行するスクリプト

に公開

Macのsandbox-execを使用してClaude Codeをサンドボックス上で実行するスクリプトclaude-sandboxを作成しました。

https://github.com/kohkimakimoto/claude-sandbox

コアとなるアイデアとして、以下の記事を参考にさせてもらいました。

https://zenn.dev/todesking/articles/claude-code-with-sandbox-exec

claude-sandboxは300行程度のごく小規模な単一ファイルのBashスクリプトです。実行すると、内部でサンドボックスのプロファイルを作成し、それを利用したsandbox-exec経由でClaude Codeを実行します。

claude-sandboxclaudeコマンドを、ほぼそのまま置き換えて使えるようにデザインされています。つまり

claude

と実行する代わりに

claude-sandbox

とするだけで、安全なサンドボックス環境でClaude Codeが起動します。

インストール

単一ファイルのBashスクリプトなので、インストールはGithubのリポジトリにあるclaude-sandboxファイルをダウンロードして実行権限を付与するだけです。以下はcurlを使って/usr/local/bin配下にインストールする例です

curl -sSL https://raw.githubusercontent.com/kohkimakimoto/claude-sandbox/refs/heads/main/claude-sandbox | sudo tee /usr/local/bin/claude-sandbox > /dev/null && sudo chmod +x /usr/local/bin/claude-sandbox

実行

基本的な使い方は、前述したようにclaudeコマンドの代わりにclaude-sandboxを実行するだけで良いです。

claude-sandbox

これで作業ディレクトリ配下とClaude Codeが暗黙的に利用する関連ファイル、一時ディレクトリなどを除いて、ファイルの書き込みが制限された状態でClaude Codeが起動します。

実際のサンドボックスの設定(プロファイル)がどうなっているかはclaude-sandbox profileコマンドで確認できます。

claude-sandbox profile
;; This is a default built-in sandbox profile for claude-sandbox.
(version 1)

(allow default)

(deny file-write*)
(allow file-write*
    ;; Working directory
    (subpath (param "WORKDIR"))

    ;; Claude Code
    (subpath (string-append (param "HOME") "/.claude"))
    (literal (string-append (param "HOME") "/.claude.json"))
    (literal (string-append (param "HOME") "/.claude.json.lock"))
    (literal (string-append (param "HOME") "/.claude.json.backup"))
    (regex (string-append "^" (param "HOME") "/\\.claude\\.json\\.tmp"))

    ;; Temporary directories and files
    (subpath "/tmp")
    (subpath "/var/folders")
    (subpath "/private/tmp")
    (subpath "/private/var/folders")

    ;; Home directory
    (subpath (string-append (param "HOME") "/.npm"))
    (subpath (string-append (param "HOME") "/.cache"))

    ;; devices
    (literal "/dev/stdout")
    (literal "/dev/stderr")
    (literal "/dev/null")
)

サンドボックスのカスタマイズ

サンドボックスの設定をカスタマイズしたいときは、カレントディレクトリ配下に.claude/sandbox.sbファイルを作成して、そこに設定を書きます。claude-sandbox.claude/sandbox.sbにファイルがあると、そこからサンドボックスの設定を読み込みます。

デフォルトと同じ初期設定で.claude/sandbox.sbを新規作成するためのコマンドclaude-sandbox initを用意したので、それを使って作成した後に、自分の用途に合わせて編集してもよいでしょう。

claude-sandbox init
# .claude/sandbox.sbが作成される

また、特定のプロジェクト(ディレクトリ)ごとではなく、グローバルに設定を変更したいときは、ホームディレクトリ配下の.claude/sandbox.sbに設定を記述することで対応できます。こちらはclaude-sandbox init-globalで、初期設定が定義された状態のファイルを作成することができます。

claude-sandbox init-global
# ~/.claude/sandbox.sbが作成される

既知の制限

IDEのターミナル(VSCodeやIntelliJ内のターミナル)からclaude-sandboxを起動したときに、IDEとの連携ができない問題があります。一方、Macの標準のターミナルからなら問題なく連携でき、この不具合の原因は判明していません。

まとめ

Claude Codeをサンドボックス環境で動作させるためのツールclaude-sandboxを紹介しました。シンプルにclaudeと置き換えて使うことができ、Claude Codeの予期せぬ動作によるリスクを軽減することができます。

Discussion