ccgate -- OpenAI Codex CLI
June 2, 2026 · View on GitHub
English version (docs/codex-cli.md)
ccgate codex フック専用のドキュメント。
前提
- Codex hooks は
[features] hooks = trueの設定が必要です。 upstream の payload schema は OpenAI Codex hooks docs を参照。 - Tool-agnostic: Codex hooks は Bash、
apply_patch、 MCP tool 呼び出しなど複数の surface で発火します。 ccgate はtool_name+tool_inputJSON 全体で分類。
hook 登録
Codex CLI の lookup 順序 (OpenAI Codex hooks docs より):
~/.codex/hooks.json~/.codex/config.toml<repo>/.codex/hooks.json(project の.codex/layer が trusted の場合のみ)<repo>/.codex/config.toml(同 trust 要件)
Layer は加算 -- global と project-local の両方に hook が登録されてれば両方発火します。
hooks.json 形式 (推奨)
{
"hooks": {
"PermissionRequest": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "ccgate codex",
"statusMessage": "ccgate evaluating request"
}
]
}
]
}
}
"matcher": "" で Codex が emit する全 PermissionRequest (Bash / apply_patch / MCP tool 等) を ccgate で評価。subset だけ評価したい場合は tool 名 pattern で絞ります。
config.toml 形式
Codex 設定全体を 1 ファイルにまとめたい場合:
[features]
hooks = true # Codex hooks はこの feature flag 配下にある
[[hooks.PermissionRequest]]
matcher = ""
[[hooks.PermissionRequest.hooks]]
type = "command"
command = "ccgate codex"
statusMessage = "ccgate evaluating request"
dotfiles を触らずに dev build を試す
project-local の <repo>/.codex/{hooks.json,config.toml} は、project が trusted の場合だけ読み込まれます。リポジトリ内の開発ビルドを試したい場合は、Git 未追跡の project-local hooks file を置き、go run を指す形にします:
// <repo>/.codex/hooks.json (untracked)
{
"hooks": {
"PermissionRequest": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "go run /absolute/path/to/ccgate codex",
"statusMessage": "ccgate (dev) evaluating request"
}
]
}
]
}
}
go run の build cache が効くので 2 回目以降は速い。dotfiles 管理の ~/.codex/config.toml には触らない。
ccgate が HookInput から見るフィールド
ccgate は tool_input の JSON 全体をそのまま LLM に渡します。そのため、ccgate 側に専用フィールドのない MCP arguments や apply_patch の hunk metadata も判定対象に含まれます。metrics には parsed view (command / description / file_path / path / pattern) だけを書きますが、LLM に渡す内容から raw payload を削ることはありません。
ccgate が Codex HookInput から読むフィールド:
session_idtranscript_path(path のみ; ccgate は transcript JSONL を parse しない)cwdhook_event_namemodel(AI 側のモデル、例:gpt-5)turn_idtool_name(Bash,apply_patch,mcp__<server>__<tool>, ...)tool_input(typed view)tool_input_raw(元の JSON payload をそのまま LLM に転送 —apply_patchの hunk や MCP 引数を見るときの主経路)referenced_paths(tool_inputから best-effort で抽出した path リスト。Codex ではBashのみ対応。apply_patchと MCP はtool_input_rawを LLM が直接読む)
Codex 側の system prompt は LLM に tool_name + tool_input + tool_input_raw + cwd で判断するよう指示し、 HookInput に存在しない context を捏造しないようにしています。
Codex 固有の state リファレンス
| 観点 | 値 |
|---|---|
| Tool surface | Bash, apply_patch, MCP (mcp__<server>__<tool>)。Codex hooks は tool 種別に関わらず全 PermissionRequest で発火 |
| State path | $XDG_STATE_HOME/ccgate/codex/ (未設定なら ~/.local/state/ccgate/codex/) |
| Project-local config | {repo_root}/.codex/ccgate.local.jsonnet (Git 未追跡のみ、project trust が必要) |
埋込デフォルト
ccgate codex init | less で binary に同梱された allow / deny / environment guidance の中身を読めます。 拡張・置換の方法は docs/ja/rule-tuning.md を参照。