⛩️

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 の邦訳がこちら

https://github.com/openai/codex?tab=readme-ov-file#execpolicy-quickstart


Execpolicy Quickstart

Codexは、シェルコマンドを実行する前に、独自のルールに基づいた実行ポリシーを適用できます。

  1. まず、ポリシーディレクトリを作成してください: mkdir -p ~/.codex/policy
  2. 次に、そのディレクトリに1つ以上の .codexpolicy ファイルを作成します。Codex は起動時に、このディレクトリ内のすべての .codexpolicy ファイルを自動的に読み込みます。
  3. prefix_rule エントリを記述して、許可、プロンプト表示、またはブロックしたいコマンドを定義します:
prefix_rule(
    pattern = ["git", ["push", "fetch"]],
    decision = "prompt",  # allow | prompt | forbidden
    match = [["git", "push", "origin", "main"]],  # マッチする必要がある例
    not_match = [["git", "status"]],              # マッチしてはならない例
)
  • pattern はシェルトークンのリストであり、左から右に評価されます。代替案を表現するには、トークンをネストされたリストで囲みます (例: pushfetch の両方にマッチさせる)。

  • decision には重要度を設定します。複数のルールがマッチした場合、Codex は最も厳格な決定を選択します (forbidden > prompt > allow)。

  • matchnot_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