Codex の workspace-write で作業ディレクトリ外にも書き込ませる writable_roots と /tmp の扱い

Codex 公開:

Codex のサンドボックス workspace-write で書き込める範囲(作業ディレクトリ、/tmp、)と、writable_roots で追加する方法、一時ディレクトリを外す設定、.git が読み取り専用になる注意点を解説します。

検証日 2026年9月10日 仕様変更が早い分野です。最新の公式ドキュメントも併せてご確認ください。
目次
  1. workspace-write の既定の範囲
  2. writable_roots で追加する
  3. /tmp と $TMPDIR を外す
  4. .git と .codex が書けない理由
  5. まとめ

Codex を workspace-write で動かしていると、~/.cache~/.pyenv のような作業ディレクトリ外への書き込みでビルドやパッケージのインストールが失敗することがあります。サンドボックスが書き込み先を制限しているためです。

結論として、書き込みを許可する場所は [sandbox_workspace_write]writable_roots に追加できます。逆に、既定で書き込める /tmp$TMPDIR を外すのが exclude_slash_tmpexclude_tmpdir_env_var です。

KEY POINT

この記事で分かること

  • workspace-write で既定で書き込める場所
  • writable_roots の書き方と、/tmp / $TMPDIR の除外設定
  • .git/.codex/ が書けない理由と、フル権限との違い

workspace-write の既定の範囲

sandbox_mode には 3 つの値があります。

できること
read-onlyファイルの閲覧のみ。編集やコマンド実行には承認が必要
workspace-write作業領域内のファイル編集と、その範囲内での通常のローカルコマンド実行。ローカル作業の既定
danger-full-accessサンドボックスなし。ファイルシステムとネットワークの境界を外す

workspace-write で書き込めるのは、作業ディレクトリ(cwd)と、既定では /tmp$TMPDIR です。サンプル設定の既定値は次のとおりです。

[sandbox_workspace_write]
# 作業ディレクトリ以外に追加で書き込める場所。既定: []
writable_roots = []
# サンドボックス内からの外向き通信。既定: false
network_access = false
# $TMPDIR を書き込み可能から外す。既定: false
exclude_tmpdir_env_var = false
# /tmp を書き込み可能から外す。既定: false
exclude_slash_tmp = false

用語解説

writable roots: サンドボックスが書き込みを許可するディレクトリの起点です。ここに含まれる配下のパスに書けます。作業ディレクトリは常に含まれ、writable_roots で増やせます。

writable_roots で追加する

公式ドキュメントの例は、pyenv の shims ディレクトリを追加しています。

[sandbox_workspace_write]
writable_roots = ["/Users/YOU/.pyenv/shims"]

追加する候補になりやすいのは、次のようなツールのキャッシュやインストール先です。

用途
Python の仮想環境やツールの shims~/.pyenv/shims
パッケージマネージャのキャッシュ~/.npm~/.cache/pip~/.cargo/registry
複数リポジトリをまたぐ作業隣接するリポジトリのパス

パスは絶対パスで書きます。~ の展開が効くかは公式ドキュメントでは確認できなかったので、上の例のようにフルパスで書くのが確実です。

追加は最小限に。ホーム全体を足さない

writable_roots = ["/Users/YOU"] のようにホーム全体を足すと、シェルの設定ファイルや SSH の鍵まで書き込み可能になり、サンドボックスの意味がほぼなくなります。必要なキャッシュディレクトリだけを個別に足してください。

/tmp と $TMPDIR を外す

一時ディレクトリへの書き込みも止めたい場合は、除外フラグを true にします。

[sandbox_workspace_write]
exclude_slash_tmp = true
exclude_tmpdir_env_var = true

ただし、多くのビルドツールやテストランナーは一時ファイルを /tmp に作るため、外すと承認の回数が増えます。共有マシンで /tmp に他人のファイルがある、といった具体的な理由がない限り既定のままで問題ありません。

.git と .codex が書けない理由

公式ドキュメントは、workspace-write でも「環境によっては .git/.codex/ が読み取り専用のまま」になると説明しています。Codex が git の履歴や設定、自分自身の設定ファイルを書き換えてしまうのを防ぐ措置です。コミットを Codex に作らせたい場合に .git/ への書き込みが拒否されるなら、その操作は承認を伴う形で行うか、コミット自体は自分で行う運用にしてください。

ネットワークを開けるかどうかは network_access で別に決めます。承認ポリシーとサンドボックスの組み合わせ全体は親記事の approval mode と sandbox 設定の違い を、--full-auto が何を変えるかは Codex の --full-auto は何をするのか を参照してください。

まとめ

  • workspace-write の既定で書けるのは作業ディレクトリと /tmp$TMPDIR
  • 作業ディレクトリ外は [sandbox_workspace_write] writable_roots に絶対パスで追加する。ホーム全体は足さない
  • /tmp$TMPDIR を外すのは exclude_slash_tmp / exclude_tmpdir_env_var(既定 false)
  • .git/.codex/ は環境によっては読み取り専用のまま
  • ネットワークは network_access で別に制御する

よくある質問

workspace-write では既定でどこに書けますか?
作業ディレクトリ(cwd)に加えて、/tmp と $TMPDIR です。サンプル設定では exclude_slash_tmp と exclude_tmpdir_env_var の既定が false と示されており、既定ではどちらも書き込み可能です。
ホームディレクトリ配下のキャッシュに書けずにビルドが失敗します。
そのパスを writable_roots に追加します。公式の例では pyenv の shims ディレクトリを追加しています。
.git に書けないのは仕様ですか?
公式ドキュメントは、workspace-write でも環境によっては .git/ と .codex/ が読み取り専用のままになると説明しています。

参考にした一次情報

この記事は公式ドキュメントを基に AI が下書きを作成し、運営者が内容を確認して公開しています。誤りを見つけた場合は お問い合わせからお知らせください。