---
title: Codex / Gemini CLIを支えるSandbox機能
tags: 
author: [raku](https://docswell.com/user/rakutek)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/LE3166RG75.jpg?width=480
description: Codex / Gemini CLIを支えるSandbox機能 by raku
published: October 27, 25
canonical: https://docswell.com/s/rakutek/ZJQVJ1-codex-gemini-sandbox
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/LE3166RG75.jpg)

を支えるSandbox
Codex/Gemini CLI
勉強会 @クラシル
Agentic Coding


# Page. 2

![Page Image](https://bcdn.docswell.com/page/8EDXVVYNJG.jpg)

自己紹介
ラク
年にクラシル株式会社に入社
バックエンドエンジニアとして「クラシル」「クラシルリワード」の
バックエンド開発を担当した後、現在はSRE
AIツールの導入・推進
未踏スーパークリエイター’21
好きなものはTypeScript・キーボード・クラブ・Skrillex
2023
X: @rakutek
アイコンはクラブで労働中の影


# Page. 3

![Page Image](https://bcdn.docswell.com/page/V7PPVV6N78.jpg)



# Page. 4

![Page Image](https://bcdn.docswell.com/page/2JV2ZZ3YJQ.jpg)

9
月に書いたzenn
月中旬時点での基本的な設定などをリリースノートやPRを読んで記事化
9
はOSSなので実装を読みまくってSandboxの実装が面白いことに気づく
Codex


# Page. 5

![Page Image](https://bcdn.docswell.com/page/5EGR443WJL.jpg)

セキュリティに気をかけてCoding Agent
を使えてますか？


# Page. 6

![Page Image](https://bcdn.docswell.com/page/4JQVGG5Q7P.jpg)

簡単にできる対策: コンテナ上で動かす


# Page. 7

![Page Image](https://bcdn.docswell.com/page/K74M559YJ1.jpg)

ぶっちゃけ面倒だしオーバーヘッドもある
コンテナ化せずホストマシン上で使っていることも全然ある


# Page. 8

![Page Image](https://bcdn.docswell.com/page/LJ18WWKNEG.jpg)

で一番好きなオプション --dangerously-skip-permissions
CC
プランのPOCを開始した日のslack
*Claude Max


# Page. 9

![Page Image](https://bcdn.docswell.com/page/GJWZ66PMJ2.jpg)

ターミネーターみたいなことは起こる
https://x.com/mugisus/status/1940127947962396815


# Page. 10

![Page Image](https://bcdn.docswell.com/page/4EZ1YYKM73.jpg)

MCP
によって新たなサプライチェーン攻撃のリスクも出てきた
メール配信PaaSの野良MCPを使ってメールを配信する
と、悪意のある第三者にBCCでメールが送られてしまっ
ていた事件


# Page. 11

![Page Image](https://bcdn.docswell.com/page/Y76LDDQ5JV.jpg)

MCP
によって新たなサプライチェーン攻撃のリスクも出てきた
の野良MCPに任意コード実行可能な脆弱性が見つかった事件
Figma


# Page. 12

![Page Image](https://bcdn.docswell.com/page/G75133RGE4.jpg)

も出てきた
Claude Skills


# Page. 13

![Page Image](https://bcdn.docswell.com/page/9J21ZZDD7R.jpg)

どうやって安全に使うのか
もちろんコンテナ上で動かすのもアリ


# Page. 14

![Page Image](https://bcdn.docswell.com/page/DEYZRR2M7M.jpg)

にはSandbox機能があります！
Codex / Gemini CLI


# Page. 15

![Page Image](https://bcdn.docswell.com/page/VJN3DD83J8.jpg)

Codex CLI
のSandbox機能


# Page. 16

![Page Image](https://bcdn.docswell.com/page/YE99GGKPE3.jpg)

を安全に実行するためのsandbox
Codex CLI
sandbox
モード
のモードは3種類
説明
ファイルシステム全体への読み取り専用アクセスを許可。書き込みやネットワークアクセ
read-only
スの試行はブロックされる。
workspace-write 現在の作業ディレクトリへの書き込みアクセスを許可。
danger-fullaccess
すべての制限を無効化。Dockerコンテナなど、既に隔離された環境での使用を想定。


# Page. 17

![Page Image](https://bcdn.docswell.com/page/GE89VVRX7D.jpg)

Sandbox
モードの決定
の起動時にバージョンコントロールされているディレクトリであればworkspace-writeモードが選択
バージョンコントロールされていないディレクトリではread-onlyモードが選択
codex
の設定はconfig.tomlで設定可能
sandbox
sandbox_mode = &quot;workspace-write&quot;
sandbox_mode = &quot;danger-full-access&quot;
sandbox_mode = &quot;read-only&quot;


# Page. 18

![Page Image](https://bcdn.docswell.com/page/LELW55KNJR.jpg)

の
debugコマンドでsandboxの挙動を試す
モードで動作させると、
Codex CLI
read-only
&gt; test % codex debug seatbelt touch hoge.txt
touch: hoge.txt: Operation not permitted # 権限エラー
&gt; test % codex debug seatbelt ls
ワークスペース内であれば書き込み可能)で動作させると、
–full-auto(
&gt; test % codex debug seatbelt --full-auto touch hoge.txt
&gt; test % ls
hoge.txt # hoge.txtが作成されている


# Page. 19

![Page Image](https://bcdn.docswell.com/page/4JM9332QEW.jpg)

やってみたくなりますよね
rm -rf ~
codex-findy % codex debug seatbelt --full-auto rm -rf ~
rm: /Users/raku/.claude.json.backup: Operation not permitted
rm: /Users/raku/.config/zed/settings.json: Operation not permitted
rm: /Users/raku/.config/zed/conversations: Operation not permitted
rm: /Users/raku/.config/zed/prompts: Operation not permitted
rm: /Users/raku/.config/zed/themes: Operation not permitted
rm: /Users/raku/.config/zed: Operation not permitted
rm: /Users/raku/.config/mise/config.toml: Operation not permitted
rm: /Users/raku/.config/mise: Operation not permitted
rm: /Users/raku/.config/gh/config.yml: Operation not permitted
rm: /Users/raku/.config/gh/hosts.yml: Operation not permitted
rm: /Users/raku/.config/gh: Operation not permitted
ドキドキしましたが、sandboxのおかげでファイルは削除されませんでした👍


# Page. 20

![Page Image](https://bcdn.docswell.com/page/PJRGQQMKE9.jpg)

を支えるSandbox
Codex/Gemini CLI


# Page. 21

![Page Image](https://bcdn.docswell.com/page/PEXX55V5EX.jpg)

にClaude CodeにもSandboxがきた！
10/21


# Page. 22

![Page Image](https://bcdn.docswell.com/page/3EKW66QRED.jpg)

Claude Code
モード
Sandbox + Auto Allow
で/sandboxを実行
説明
サンドボックス環境で自動的にコマンド実行を許可する。安全性を保ちつつ手
動承認を減らす。
Permission
サンドボックス環境で通常通りの承認ルール。セキュアかつ制御可能。
No Sandbox
サンドボックスなしで実行
Sandbox + Manual


# Page. 23

![Page Image](https://bcdn.docswell.com/page/L73166PGJ5.jpg)

を使うとファイルシステム・ネットワークを
分離できる
Sandbox
書き込み: 現在の作業ディレクトリ以下（CWD）に限定
読み取り: 明示的に拒否されたフォルダ以外は許可
ネットワークアクセス: 承認されたドメインのみアクセス可能


# Page. 24

![Page Image](https://bcdn.docswell.com/page/87DXVVLNEG.jpg)

設定のカスタマイズ
settings.json
サンプル
{
で許可/拒否パスやドメインを細かく制御
&quot;sandbox&quot;: {
&quot;enabled&quot;: true,
&quot;autoAllowBashIfSandboxed&quot;: true,
&quot;excludedCommands&quot;: [&quot;docker&quot;],
&quot;network&quot;: {
&quot;allowUnixSockets&quot;: [
&quot;/var/run/docker.sock&quot;
],
&quot;allowLocalBinding&quot;: true
}
},
&quot;permissions&quot;: {
&quot;deny&quot;: [
&quot;Read(.envrc)&quot;,
&quot;Read(~/.aws/**)&quot;
]


# Page. 25

![Page Image](https://bcdn.docswell.com/page/VJPPVV2NJ8.jpg)

はどうや
ってSandboxを実装しているのか
Claude Code,Codex/Gemini CLI


# Page. 26

![Page Image](https://bcdn.docswell.com/page/2EV2ZZDYEQ.jpg)

Apple Seatbelt(sandbox-exec)


# Page. 27

![Page Image](https://bcdn.docswell.com/page/57GR44YWEL.jpg)

Apple Seatbelt
とは
懐かしい)から搭載されたアプリケーション用のサンドボックス機構&quot; Apple
Seatbelt”というコードネームで開発が進められている
os標準なので手元のPCでも sandbox-exec と打つと動きます！
Mac OSX Snow Leopard(
Apple Seatblet
はなんと仕様非公開・非推奨の機能
すでに非推奨になっている
設定言語のsb,sbplの仕様は非公開・有志がリバースエンジニアリングで仕様をまとめている
Chromeiumのwikiにもsbplの仕様を解説したPDFがリンクされているが、これも非公式のもの
https://www.chromium.org/developers/design-documents/sandbox/osx-sandboxing-design/


# Page. 28

![Page Image](https://bcdn.docswell.com/page/4EQVGGMQJP.jpg)

ただ多くのソフトウェアが今でも
Apple Seatbeltを使っている
代表的なのは
Chromium
でもApple Seatbeltは非推奨になっているよとissueが上がっていた、「まだ十分に動いているからヨシ
(意訳)」というメンテナからの回答があった https://github.com/openai/codex/issues/215
Codex


# Page. 29

![Page Image](https://bcdn.docswell.com/page/KJ4M55VYE1.jpg)

内部のSandboxプロファイルを覗いてみる
mac
/System/Library/Sandbox/Profiles
/usr/share/sandbox


# Page. 30

![Page Image](https://bcdn.docswell.com/page/LE18WW3N7G.jpg)

を試してみる
でプロファイルを指定
sandbox-exec
-n
デフォルトで用意されているno-writeのプロファイルを使ってみる
raku@raku-MacBook-Air sandbox-exec -n no-write touch hoge.txt
sandbox-exec: The no-write profile is deprecated and may not be secure
touch: hoge.txt: Operation not permitted
ちゃんと新しくファイルを作成することができなかった


# Page. 31

![Page Image](https://bcdn.docswell.com/page/GEWZ66XME2.jpg)

sandbox
のプロファイルはLispというかS式っぽい記述
(version 1)
(deny default)
(import &quot;system.sb&quot;)
(import &quot;com.apple.corefoundation.sb&quot;)
(allow pseudo-tty)
(allow file-ioctl
(literal &quot;/dev/ptmx&quot;)
(regex #&quot;^/dev/ttys&quot;)
)
(allow file-read* file-write*
(regex #&quot;^/Library/Keychains/System.keychain&quot;)
(regex #&quot;^/Library/Keychains[^/]+\.[^/]+$&quot;)
(literal &quot;/Library/Keychains&quot;)
(literal &quot;/dev/ptmx&quot;)
(regex #&quot;^/dev/ttys&quot;)
)
(allow file-read* file-write*
(regex #&quot;^/private/var/root/Library/Logs/Bluetooth/[^/]+\.pklg$&quot;)
(literal &quot;/private/var/root/Library/Logs&quot;)
(literal &quot;/private/var/root/Library/Logs/Bluetooth&quot;)


# Page. 32

![Page Image](https://bcdn.docswell.com/page/47Z1YY6MJ3.jpg)

Codex
の実装を見てみる
のベースとして使うsbplファイル(Chromiumにインスパイアされているとコメントがある)
Codex
https://github.com/openai/codex/blob/88abbf58cec9843a7cebe250d71146314ebbcf1a/codexrs/core/src/seatbelt_base_policy.sbpl
の実行
Sandbox
https://github.com/openai/codex/blob/88abbf58cec9843a7cebe250d71146314ebbcf1a/codexrs/core/src/seatbelt.rs#L13
でcodexの設定ファイルからwriteプロファイルを組み立て、ベースのsbplと組
create_seatbelt_command_args
み合わせる https://github.com/openai/codex/blob/88abbf58cec9843a7cebe250d71146314ebbcf1a/codexrs/core/src/seatbelt.rs#L47


# Page. 33

![Page Image](https://bcdn.docswell.com/page/YJ6LDD25EV.jpg)

とっつきにくい！


# Page. 34

![Page Image](https://bcdn.docswell.com/page/GJ51332G74.jpg)

はSandbox機能をOSSとして公開している
Claude Code


# Page. 35

![Page Image](https://bcdn.docswell.com/page/9E21ZZ4DJR.jpg)

anthropic-experimental/sandbox-runtime
https://github.com/anthropic-experimental/sandbox-runtime
がすごく便利


# Page. 36

![Page Image](https://bcdn.docswell.com/page/D7YZRRMMJM.jpg)

str
の使い方はシンプル
で使う
CLI
raku@raku-MacBook-Air sandbox % bunx @anthropic-ai/sandbox-runtime &quot;curl example.com&quot;
Running: curl example.com
Connection blocked by network allowlist%
MCP
{
}
と組みわせて使う
&quot;mcpServers&quot;: {
&quot;filesystem&quot;: {
&quot;command&quot;: &quot;str&quot;,
&quot;args&quot;: [&quot;npx&quot;, &quot;-y&quot;, &quot;@modelcontextprotocol/server-filesystem&quot;]
}
}
他の有象無象のAIエージェントを使う時もstrを使ってセキュアに使っていきたい


# Page. 37

![Page Image](https://bcdn.docswell.com/page/VEN3DDW3E8.jpg)

まとめ
コーディングエージェントはSandbox化して使おう
Claude Code,Codex/Gemini CLIにはそれぜれSandbox機能が実装されている
その実装にはmac標準のApple Seatbeltが使われている
Claudeはsandbox機能を便利に使えるstrというCLIを公開している。おすすめ


# Page. 38

![Page Image](https://bcdn.docswell.com/page/Y799GGXP73.jpg)

Thank You
✊


