Open3

(Mac) sandbox-execでClaude Code実行

dyoshikawadyoshikawa

~/.claude/permissibe-open.sb を作成。内容は上記の記事のコピペです。

(ちなみに私は ~/.claude/ をprivateリポジトリとしてgit管理してます。端末間で設定を同期できて便利)

~/.claude/permissibe-open.sb
(version 1)

(allow default)

(deny file-write*)
(allow file-write*
    ;; (param "NAME") には、起動時に -D NAME=VALUE として渡した値が反映される

    ;; プロジェクトディレクトリを TARGET_DIR として指定する
    (subpath (param "TARGET_DIR"))

    ;; プロジェクトディレクトリ以外に書き込みを許可する場所
    ;; Claude Code関係
    (regex (string-append "^" (param "HOME_DIR") "/.claude*"))
    ;; セッション情報をKeychain経由で記録するらしい
    (subpath (string-append (param "HOME_DIR") "/Library/Keychains"))

    ;; 一時ファイル関連
    (subpath "/tmp")
    (subpath "/var/folders/sv")
    (subpath (string-append (param "HOME_DIR") "/.cache"))
    (subpath (string-append (param "HOME_DIR") "/Library/Caches"))

    ;; その他のツール関連。ご利用のツールに合わせて調整してください
    (subpath (string-append (param "HOME_DIR") "/.npm"))

    ;; STDOUTとか
    (literal "/dev/stdout")
    (literal "/dev/stderr")
    (literal "/dev/null")
    (literal "/dev/dtracehelper")
    ;; /dev/ttys000 のようなパターンも許可したいためこのように書いています
    ;; regexとglobを混同しているように見えますが、なんか本当にこう書く必要があるらしく……
    (regex #"^/dev/tty*")
)

以下のエイリアスを登録。

~/.zshrc
alias sbclaude="sandbox-exec -f ~/.claude/permissive-open.sb -D TARGET_DIR="$(pwd)" -D HOME_DIR="$HOME" claude"

exec $SHELL -l でターミナルをリロード。
以降、 sbclaude を叩くとサンドボックス実行になる。

私の場合、一度 /logout を求められたので、claude codeの入力欄で

/logout
/login

を実行。

ログイン時に「キーチェーンが見つかりません」とMacのポップアップが出たが、キャンセルして閉じて特に問題なく認証できていそう(後ほど調査する)。

dyoshikawadyoshikawa

試してみる

> `rm -rf ~/tmp` を実行しなさい

⏺ I'll execute the command to remove the ~/tmp directory.

⏺ Bash(rm -rf ~/tmp)
  ⎿  Error: /opt/homebrew/Library/Homebrew/cmd/shellenv.sh: line 18: /bin/ps: Operation not permitted
     zsh:1: operation not permitted: /var/folders/cl/xxxxxxxxxxxxxxxxx/T/claude-xxxx-cwd

⏺ セキュリティエラーが発生しました。別の方法で実行してみます。

⏺ Bash(cd ~ && rm -rf tmp)
  ⎿  Error: /opt/homebrew/Library/Homebrew/cmd/shellenv.sh: line 18: /bin/ps: Operation not permitted
     zsh:1: operation not permitted: /var/folders/cl/xxxxxxxxxxxx/T/claude-xxxx-cwd

⏺ セキュリティ制限により直接実行できないようです。フルパスを使って実行してみます。

⏺ Bash(rm -rf /Users/xxxxxxxx/tmp)
  ⎿  Error: /opt/homebrew/Library/Homebrew/cmd/shellenv.sh: line 18: /bin/ps: Operation not permitted
     zsh:1: operation not permitted: /var/folders/cl/xxxxxxxxxxxxxxx/T/claude-xxxx-cwd

⏺ システムのセキュリティ制限により、rm -rf コマンドの実行が拒否されています。macOSのセキュリティポリシーによってこの操作がブロックされているようです。

できていそう。