Codex 0.61.0 にて追加された ExecPolicy2 の解説
OpenAI の OSS Coding Agent Codex v0.61.0 にて "ExecPolicy2" なるものがリリースされました:
要するに、「AIが実行しようとするコマンドに対する、人間側の『検閲ルール』の自動化」が可能となりました。
以下リリースノート邦訳
- ExecPolicy2 の統合と exec-server の準備: core が ExecPolicy2 を exec-server リファクタリングおよび移行準備と統合しました。さらに、新しいポリシーエンジンをチームが導入するのに役立つクイックスタートドキュメントが追加されました。
- 改善されたトランケーションとエラー報告: シングルパストランケーションにより重複作業が削減され、エラーイベントはより明確な可観測性のためにオプションのステータスコードを伝達できるようになりました。
- シェルの信頼性とサンドボックスの警告: フォールバックシェルの選択が強化され、ワールド書き込み可能なディレクトリに関する警告が抑制されました。Windows でのメッセージングの改善も含まれます。
- UX の修正: 推論表示の修正、/review 後のレビューフッターコンテキストの保持、モデル移行画面が一度しか表示されないように修正されました。
具体的には主にこの PR のことを指しているはずです
ここで追加された QuickStart の邦訳がこちら
Execpolicy Quickstart
Codexは、シェルコマンドを実行する前に、独自のルールに基づいた実行ポリシーを適用できます。
- まず、ポリシーディレクトリを作成してください: mkdir -p ~/.codex/policy
- 次に、そのディレクトリに1つ以上の
.codexpolicyファイルを作成します。Codex は起動時に、このディレクトリ内のすべての.codexpolicyファイルを自動的に読み込みます。 -
prefix_ruleエントリを記述して、許可、プロンプト表示、またはブロックしたいコマンドを定義します:
prefix_rule(
pattern = ["git", ["push", "fetch"]],
decision = "prompt", # allow | prompt | forbidden
match = [["git", "push", "origin", "main"]], # マッチする必要がある例
not_match = [["git", "status"]], # マッチしてはならない例
)
-
patternはシェルトークンのリストであり、左から右に評価されます。代替案を表現するには、トークンをネストされたリストで囲みます (例:pushとfetchの両方にマッチさせる)。 -
decisionには重要度を設定します。複数のルールがマッチした場合、Codex は最も厳格な決定を選択します (forbidden > prompt > allow)。 -
matchとnot_matchは、(オプションの)単体テストとして機能します。Codex はポリシーのロード時にこれらを検証し、例が予期しない動作をする場合にフィードバックを提供します。
上記例のルールでは、Codex が プレフィックス git push または git fetch を持つコマンドを実行しようとすると、最初にユーザーの承認を求めます。
ルールを保存する前に、 codex execpolicy check サブコマンドを使用して決定をプレビューします(構文の詳細については、 codex-execpolicy の README を参照してください)。
codex execpolicy check --policy ~/.codex/policy/default.codexpolicy git push origin main
複数の --policy フラグを渡して、複数のファイルがどのように組み合わされるかをテストしたり、 --pretty を使用して整形された JSON 出力を得ることができます。利用可能な構文の詳細なウォークスルーについては、 codex-rs/execpolicy のREADME を参照してください。
注: execpolicy コマンドはまだプレビュー段階です。APIには将来、互換性を破る変更が加えられる可能性があります。
codex-rs/execpolicy 側の README の邦訳がこちら:
codex-execpolicy
概要
-
prefix_rule(pattern=[...], decision?, match?, not_match?)を中心に構築されたポリシーエンジンと CLI - このリリースでは、execpolicy 言語の prefix-rule サブセットを扱います。より高度な言語は今後リリース予定です
- トークンは順番に照合されます。
patternの各要素は、選択肢を示すリストにすることができます。decisionのデフォルト値はallowです。有効な値は、allow,prompt,forbiddenです -
match/not_matchは、ロード時に検証される実行例を提供します(ユニットテストと考えてください)。例はトークン配列または文字列で指定できます(文字列はshlexでトークン化されます) - CLI は常に評価結果の JSON シリアライゼーションを出力します。
- レガシーなルールマッチャーは
codex-execpolicy-legacyに存在します。
ポリシーの構造
- Prefix ルールは Starlark 構文を使用します:
prefix_rule(
pattern = ["cmd", ["alt1", "alt2"]], # 順序付けられたトークン。リストのエントリは選択肢を示す
decision = "prompt", # allow | prompt | forbidden。デフォルトはallow
match = [["cmd", "alt1"], "cmd alt2"], # このルールに一致する必要がある例
not_match = [["cmd", "oops"], "cmd alt3"], # このルールに一致してはならない例
)
CLI
- Codex CLI から、
codex execpolicy checkサブコマンドを、1つまたは複数のポリシーファイル(例:src/default.codexpolicy)とともに実行して、コマンドをチェックします。
codex execpolicy check --policy path/to/policy.codexpolicy git status
-
複数の
--policyフラグを渡してルールをマージし、指定された順序で評価します。整形されたJSONを得るには--prettyを使用します。 -
開発中は、スタンドアロンのdevバイナリを直接実行することもできます。
cargo run -p codex-execpolicy -- check --policy path/to/policy.codexpolicy git status
- 結果の例:
- 一致:
{"match": { ... "decision": "allow" ... }} - 不一致:
{"noMatch": {}}
- 一致:
レスポンスの構造
- 一致(Match):
{
"match": {
"decision": "allow|prompt|forbidden",
"matchedRules": [
{
"prefixRuleMatch": {
"matchedPrefix": ["<token>", "..."],
"decision": "allow|prompt|forbidden"
}
}
]
}
}
- 不一致(No match):
{"noMatch": {}}
-
matchedRulesは、コマンドのプレフィックスに一致したすべてのルールをリストします。matchedPrefixは、一致した正確なプレフィックスです。 - 有効な
decisionは、すべての一致の中で最も厳格な重大度です (forbidden>prompt>allow)。
注意: execpolicy コマンドはまだプレビュー段階です。APIには将来、破壊的な変更が加えられる可能性があります。
Starlark は Bazel など Google で使われる Python の方言のようなものです。柔軟な言語でポリシー記述を可能にしたわけですね。
おそらくポリシーの王道設定が今後出回ると思われるので、注目していきましょう。
Discussion