Codexで作業していると、コマンドが実行できなかったり通信が遮断されたりすることがあります。
これは不具合ではなく、サンドボックスという保護機能が働いているためです。
Codexの制御は、操作可能な範囲を決めるサンドボックスと、実行前に確認するかを決める承認の2つに分かれています。
この2つは別々に設定します。
この2点を分けて把握すると、原因と対処法を特定しやすくなります。
サンドボックスの3段階
| 設定値 | 動作と権限 |
|---|---|
read-only | 読み取りのみ許可。ファイルの書き換えやコマンド実行は不可 |
workspace-write | 既定。作業ディレクトリ内のみ書き換え可能。外部通信は既定で無効 |
danger-full-access | 制限なし。ネットワーク通信も含めてすべての操作を許可 |
起動時にコマンドライン引数で指定する場合は次のように実行します。
codex --sandbox workspace-write起動時に自動選択される基準
Codexは対象ディレクトリの状態に応じて、起動時のモードを自動で切り替えます。
- Gitで管理されているディレクトリ …
workspace-write+ 変更時のみ承認 - Gitで管理されていないディレクトリ …
read-only
「ファイルを変更してくれない」という場合は、対象ディレクトリがGit管理下にないケースが一般的です。
作業ディレクトリを信頼済みに設定するまで read-only で動作することもあります。
現在の状態は /status、権限の変更は /permissions で確認・設定できます。
書き込み可能モードでも保護される対象
workspace-write を指定している場合でも、次のパスは読み取り専用として保護されます。
.git.agents.codex
上記ディレクトリの配下全体が保護対象です。
履歴や設定ファイルが意図せず破損するのを防ぐ仕組みになっています。
承認プロンプトの動作設定
制限された操作や変更を伴う処理を行う際に、ユーザーに確認を求めるかを決めるのが承認設定です。
| 設定値 | 動作 |
|---|---|
on-request | 承認が必要な操作の実行時のみ確認を求める |
untrusted | 安全な読み取り操作のみ自動実行。状態を変更する操作は必ず確認を求める |
never | 確認を求めない。現在のサンドボックス内で許可された操作のみ実行 |
codex --sandbox workspace-write --ask-for-approval on-requestnever は実行権限を拡張する設定ではありません。
確認プロンプトが表示されなくなるだけで、サンドボックスによる制限自体は維持されます。
この違いを混同すると、「確認は出ないのに処理が失敗する」という状況の原因になります。
ネットワーク通信が失敗する場合の対処
workspace-write では、外部通信が既定で無効化されています。
npm install や pip install などのパッケージ取得がエラーになるのはこの制限が原因です。
通信を許可するには設定ファイルを編集します。
# ~/.codex/config.toml
[sandbox_workspace_write]
network_access = true通信先のドメインを制限する方法
通信を有効化したうえで、アクセス可能な宛先をホワイトリストで絞り込むことも可能です。
[features.network_proxy]
enabled = true
domains = { "api.openai.com" = "allow", "example.com" = "deny" }ここで注意が必要なポイントがあります。
宛先ルールを定義しただけでは、通信機能自体は有効化されません。
| 通信設定 | proxy設定 | 実際の挙動 |
|---|---|---|
| 無効 | 有効 | 通信は無効のまま維持。宛先ルールは適用されない |
| 有効 | 無効 | 制限なしですべての通信を許可 |
| 有効 | 有効 | 指定したルールに基づいて宛先を制限 |
特定ドメインへのアクセスに絞り込みたい場合は、通信許可とproxy設定の両方を有効にする必要があります。
Web検索機能の独立設定
コマンド実行時の外部通信とは別に、Web検索機能にも個別の設定項目があります。
web_search = "cached" # 既定。あらかじめ集めた結果を使う
# web_search = "live" # その場で見に行く(--search と同じ)
# web_search = "disabled" # 使わない既定値が cached に設定されているのは、取得したWebコンテンツ経由で意図しないプロンプト指示が混入するリスクを低減するためです。
最新のWeb情報が必要な場面に限定して live を指定するのが安全です。
ユースケース別の推奨設定
| 用途 | 推奨コマンド引数 |
|---|---|
| 通常開発 | --sandbox workspace-write --ask-for-approval on-request |
| コード閲覧・設計相談 | --sandbox read-only --ask-for-approval on-request |
| CI環境での読み取り専用実行 | --sandbox read-only --ask-for-approval never |
| ファイル編集は許可しコマンド実行は都度確認 | --sandbox workspace-write --ask-for-approval untrusted |
起動ごとのオプション指定を省略したい場合は、設定ファイルに記述して永続化できます。
# ~/.codex/config.toml
approval_policy = "on-request"
sandbox_mode = "workspace-write"
[sandbox_workspace_write]
network_access = true用途ごとに設定を切り替える場合はプロファイル機能を活用します。
# ~/.codex/full_auto.config.toml
approval_policy = "on-request"
sandbox_mode = "workspace-write"codex --profile full_auto のようにプロファイル名を指定して呼び出せます。
すべての制限を解除する指定
読み書き・外部通信・承認の制限をすべて解除して実行するオプションは以下のとおりです。
codex --sandbox danger-full-access--dangerously-bypass-approvals-and-sandbox も同様の目的で使用される指定です。
セキュリティリスクが高いため、開発環境のホストマシンで常用する設定ではありません。
検証用コンテナなど、システムが破損しても問題のない隔離環境に限定して使用してください。
よくあるトラブルと解決策
ファイルが書き換えられない
対象ディレクトリがGit管理下にない場合、自動的に read-only で起動します。
git init を実行してリポジトリ化するか、/permissions コマンドで権限を切り替えてください。
承認を無効化したのにコマンドが失敗する
--ask-for-approval never は確認プロンプトを省略する設定にすぎません。
実行可能な範囲を広げたい場合は --sandbox の設定値を変更してください。
ドメインを許可しても通信できない
network_access = true が正しく設定されているか確認してください。
proxyルールを設定しただけでは外部通信自体は有効になりません。
プロジェクト設定が反映されない
.codex/config.toml は、対象プロジェクトが信頼済みとして登録されるまで読み込まれません。
クローン直後などの未信頼リポジトリでは設定が無効化されます。
この記事で紹介しているコードは、GitHubのMOTOKI-LLC/cg-method-codeにもまとめています。
導入と設定の記事は、ほかにもあります。



要点まとめ
- サンドボックス(操作可能範囲)と承認(確認タイミング)は独立した設定である
- 既定値は
workspace-write。ただしGit管理外のディレクトリではread-only .git.agents.codexは書き込み可能モード下でも読み取り専用として保護される- 通信は既定で遮断。宛先ルールを記述しただけでは通信は有効にならない
- Web検索は既定で
cached。最新情報が必要な場合のみlive
Codex CLIのインストール手順や設定ファイルの配置場所は、Codex CLIのインストールと初期設定にて詳しく解説しています。
同様のパーミッション管理設計はClaude Codeにも採用されています。
Claude Codeの権限設定については、Claude Code│権限設定の使い方をご覧ください。
本記事は2026年9月9日時点の公式ドキュメントに基づいて記載しています。
設定項目名や仕様はアップデートにより変更される可能性があるため、最新の公式ドキュメントも併せて確認してください。
