Codex: 実行するコマンドに秘密の環境変数を渡さない(shell_environment_policy)
Codex は既定で、シェルの環境変数を実行するコマンドにほぼそのまま渡す。OPENAI_API_KEY のような秘密も同じ。config.toml の [shell_environment_policy] で、渡す範囲を絞る。
どんな時に使う?
.envを読み込んだシェルや、クラウドの認証情報が入ったシェルから Codex を起動している- エージェントが走らせるスクリプトや依存パッケージに、秘密を見せたくない
手順
~/.codex/config.toml(信頼したプロジェクトなら.codex/config.tomlでも可)に書く:toml[shell_environment_policy] inherit = "core" # 全部ではなく最小限だけ引き継ぐ。"none" なら空から始める ignore_default_excludes = false # 名前に KEY / SECRET / TOKEN を含む変数を自動で外す set = { MY_FLAG = "1" } # 必要な値だけ明示的に足す [shell_environment_policy.filters] "AWS_*" = "exclude" "AZURE_*" = "exclude" "*PASSWORD*" = "exclude" # 自動除外では拾えない名前は自分で足す- その場だけ試すなら
codex --config 'shell_environment_policy.include_only=["PATH","HOME"]' - 確かめる: Codex に
env | sortを実行させ、外したはずの変数が出てこないことを見る
注意点
ignore_default_excludesの既定値はtrue、つまり既定では KEY / SECRET / TOKEN を含む変数も外さない。falseにして初めて自動除外が効く- 自動除外は名前で判断する。@supportapp3_lab の検証(codex 0.165.0)では、
falseにするとOPENAI_API_KEYは消えたがDB_PASSWORDは残った。PASSWORD や CREDENTIAL などはfiltersで自分で外す - 適用順は、自動除外 → 自分の exclude →
set→ include の許可リスト。setで除外済みの変数を戻すことはできるが、include を使うと許可リストに無いものはまた消える - 古い
exclude/include_only配列とfiltersを同じ設定レイヤーで混ぜると、Codex が設定を受け付けない - 秘密そのものを環境変数に置かないやり方は Codex: 1Password の MCP で .env を「平文で書かない」形でマウントする と AIエージェントにクレデンシャルを渡す4つの方式と使い分け
出典
- @supportapp3_lab 2026-10-30(既定で環境変数が渡る・
ignore_default_excludes=falseでも DB_PASSWORD は残る): @supportapp3_lab · 2026-10-30 - 公式ドキュメント(Advanced config / Shell environment policy): developers.openai.com
- 公式ドキュメント(Configuration Reference): developers.openai.com