updated codex hooks
This commit is contained in:
@@ -1,5 +1,2 @@
|
|||||||
sandbox_mode = "danger-full-access"
|
sandbox_mode = "danger-full-access"
|
||||||
approval_policy = "never"
|
approval_policy = "never"
|
||||||
|
|
||||||
[features]
|
|
||||||
codex_hooks = true
|
|
||||||
|
|||||||
@@ -25,6 +25,18 @@
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"PermissionRequest": [
|
||||||
|
{
|
||||||
|
"hooks": [
|
||||||
|
{
|
||||||
|
"type": "command",
|
||||||
|
"command": "python3 .codex/hooks/scripts/hooks.py --hook PermissionRequest",
|
||||||
|
"timeout": 10,
|
||||||
|
"statusMessage": "Running permission request hook"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
"PostToolUse": [
|
"PostToolUse": [
|
||||||
{
|
{
|
||||||
"hooks": [
|
"hooks": [
|
||||||
@@ -60,6 +72,30 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
],
|
||||||
|
"PreCompact": [
|
||||||
|
{
|
||||||
|
"hooks": [
|
||||||
|
{
|
||||||
|
"type": "command",
|
||||||
|
"command": "python3 .codex/hooks/scripts/hooks.py --hook PreCompact",
|
||||||
|
"timeout": 10,
|
||||||
|
"statusMessage": "Running pre-compact hook"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"PostCompact": [
|
||||||
|
{
|
||||||
|
"hooks": [
|
||||||
|
{
|
||||||
|
"type": "command",
|
||||||
|
"command": "python3 .codex/hooks/scripts/hooks.py --hook PostCompact",
|
||||||
|
"timeout": 10,
|
||||||
|
"statusMessage": "Running post-compact hook"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,22 +3,18 @@ Contains all the details, scripts, and instructions for the Codex CLI hooks.
|
|||||||
|
|
||||||
## Hook Events Overview
|
## Hook Events Overview
|
||||||
|
|
||||||
Codex CLI provides **5 hooks** via hooks.json:
|
Codex CLI provides **8 hooks** via hooks.json:
|
||||||
|
|
||||||
| # | Hook | Event Type | Config File | Description |
|
| # | Hook | Event Type | Config File | Description |
|
||||||
|:-:|------|------------|-------------|-------------|
|
|:-:|------|------------|-------------|-------------|
|
||||||
| 1 | `SessionStart` | `SessionStart` | `hooks.json` | Runs once at session start — injects context + plays sound |
|
| 1 | `SessionStart` | `SessionStart` | `hooks.json` | Runs once at session start — injects context + plays sound |
|
||||||
| 2 | `PreToolUse` | `PreToolUse` | `hooks.json` | Runs before a tool executes — plays sound |
|
| 2 | `PreToolUse` | `PreToolUse` | `hooks.json` | Runs before a tool executes — plays sound |
|
||||||
| 3 | `PostToolUse` | `PostToolUse` | `hooks.json` | Runs after a tool completes — plays sound |
|
| 3 | `PermissionRequest` | `PermissionRequest` | `hooks.json` | Runs when Codex requests approval for a sensitive op — plays sound |
|
||||||
| 4 | `Stop` | `stop` | `hooks.json` | Runs when the session ends — plays sound |
|
| 4 | `PostToolUse` | `PostToolUse` | `hooks.json` | Runs after a tool completes — plays sound |
|
||||||
| 5 | `UserPromptSubmit` | `UserPromptSubmit` | `hooks.json` | Runs when the user submits a prompt — plays sound |
|
| 5 | `Stop` | `stop` | `hooks.json` | Runs when the session ends — plays sound |
|
||||||
|
| 6 | `UserPromptSubmit` | `UserPromptSubmit` | `hooks.json` | Runs when the user submits a prompt — plays sound |
|
||||||
> Hooks 1 and 4 require **Codex CLI v0.114.0+** with the hooks engine enabled.
|
| 7 | `PreCompact` | `PreCompact` | `hooks.json` | Runs before context compaction — plays sound |
|
||||||
> Hooks 2 and 3 require **Codex CLI v0.117.0+** with the hooks engine enabled.
|
| 8 | `PostCompact` | `PostCompact` | `hooks.json` | Runs after context compaction — plays sound |
|
||||||
> Hook 5 requires **Codex CLI v0.116.0+** with the hooks engine enabled:
|
|
||||||
> ```bash
|
|
||||||
> codex -c features.codex_hooks=true
|
|
||||||
> ```
|
|
||||||
|
|
||||||
### How Hooks Are Called
|
### How Hooks Are Called
|
||||||
|
|
||||||
@@ -26,9 +22,12 @@ All hooks (hooks.json) are called with `--hook` flag:
|
|||||||
```
|
```
|
||||||
python3 .codex/hooks/scripts/hooks.py --hook SessionStart
|
python3 .codex/hooks/scripts/hooks.py --hook SessionStart
|
||||||
python3 .codex/hooks/scripts/hooks.py --hook PreToolUse
|
python3 .codex/hooks/scripts/hooks.py --hook PreToolUse
|
||||||
|
python3 .codex/hooks/scripts/hooks.py --hook PermissionRequest
|
||||||
python3 .codex/hooks/scripts/hooks.py --hook PostToolUse
|
python3 .codex/hooks/scripts/hooks.py --hook PostToolUse
|
||||||
python3 .codex/hooks/scripts/hooks.py --hook Stop
|
python3 .codex/hooks/scripts/hooks.py --hook Stop
|
||||||
python3 .codex/hooks/scripts/hooks.py --hook UserPromptSubmit
|
python3 .codex/hooks/scripts/hooks.py --hook UserPromptSubmit
|
||||||
|
python3 .codex/hooks/scripts/hooks.py --hook PreCompact
|
||||||
|
python3 .codex/hooks/scripts/hooks.py --hook PostCompact
|
||||||
```
|
```
|
||||||
|
|
||||||
### SessionStart Context Injection
|
### SessionStart Context Injection
|
||||||
@@ -66,7 +65,7 @@ The hook script automatically detects and uses the appropriate audio player for
|
|||||||
|
|
||||||
There are **two** configuration files:
|
There are **two** configuration files:
|
||||||
|
|
||||||
1. **`.codex/hooks.json`** — Registers `SessionStart`, `PreToolUse`, `PostToolUse`, `Stop`, and `UserPromptSubmit` hooks
|
1. **`.codex/hooks.json`** — Registers `SessionStart`, `PreToolUse`, `PermissionRequest`, `PostToolUse`, `Stop`, `UserPromptSubmit`, `PreCompact`, and `PostCompact` hooks
|
||||||
2. **`.codex/hooks/config/hooks-config.json`** — Enable/disable individual hooks and logging
|
2. **`.codex/hooks/config/hooks-config.json`** — Enable/disable individual hooks and logging
|
||||||
|
|
||||||
#### hooks.json
|
#### hooks.json
|
||||||
@@ -90,6 +89,14 @@ There are **two** configuration files:
|
|||||||
"timeout": 10
|
"timeout": 10
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"PermissionRequest": [
|
||||||
|
{
|
||||||
|
"type": "shell",
|
||||||
|
"command": "python3 .codex/hooks/scripts/hooks.py --hook PermissionRequest",
|
||||||
|
"statusMessage": "Running permission request hook...",
|
||||||
|
"timeout": 10
|
||||||
|
}
|
||||||
|
],
|
||||||
"PostToolUse": [
|
"PostToolUse": [
|
||||||
{
|
{
|
||||||
"type": "shell",
|
"type": "shell",
|
||||||
@@ -113,6 +120,22 @@ There are **two** configuration files:
|
|||||||
"statusMessage": "Running user prompt submit hook...",
|
"statusMessage": "Running user prompt submit hook...",
|
||||||
"timeout": 10
|
"timeout": 10
|
||||||
}
|
}
|
||||||
|
],
|
||||||
|
"PreCompact": [
|
||||||
|
{
|
||||||
|
"type": "shell",
|
||||||
|
"command": "python3 .codex/hooks/scripts/hooks.py --hook PreCompact",
|
||||||
|
"statusMessage": "Running pre-compact hook...",
|
||||||
|
"timeout": 10
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"PostCompact": [
|
||||||
|
{
|
||||||
|
"type": "shell",
|
||||||
|
"command": "python3 .codex/hooks/scripts/hooks.py --hook PostCompact",
|
||||||
|
"statusMessage": "Running post-compact hook...",
|
||||||
|
"timeout": 10
|
||||||
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -127,9 +150,12 @@ Edit `.codex/hooks/config/hooks-config.json`:
|
|||||||
{
|
{
|
||||||
"disableSessionStartHook": false,
|
"disableSessionStartHook": false,
|
||||||
"disablePreToolUseHook": false,
|
"disablePreToolUseHook": false,
|
||||||
|
"disablePermissionRequestHook": false,
|
||||||
"disablePostToolUseHook": false,
|
"disablePostToolUseHook": false,
|
||||||
"disableStopHook": false,
|
"disableStopHook": false,
|
||||||
"disableUserPromptSubmitHook": false,
|
"disableUserPromptSubmitHook": false,
|
||||||
|
"disablePreCompactHook": false,
|
||||||
|
"disablePostCompactHook": false,
|
||||||
"disableLogging": true
|
"disableLogging": true
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
@@ -137,9 +163,12 @@ Edit `.codex/hooks/config/hooks-config.json`:
|
|||||||
**Configuration Options:**
|
**Configuration Options:**
|
||||||
- `disableSessionStartHook`: Set to `true` to disable the session start context injection and sound
|
- `disableSessionStartHook`: Set to `true` to disable the session start context injection and sound
|
||||||
- `disablePreToolUseHook`: Set to `true` to disable the pre-tool-use sound
|
- `disablePreToolUseHook`: Set to `true` to disable the pre-tool-use sound
|
||||||
|
- `disablePermissionRequestHook`: Set to `true` to disable the permission request sound
|
||||||
- `disablePostToolUseHook`: Set to `true` to disable the post-tool-use sound
|
- `disablePostToolUseHook`: Set to `true` to disable the post-tool-use sound
|
||||||
- `disableStopHook`: Set to `true` to disable the session stop sound
|
- `disableStopHook`: Set to `true` to disable the session stop sound
|
||||||
- `disableUserPromptSubmitHook`: Set to `true` to disable the user prompt submit sound
|
- `disableUserPromptSubmitHook`: Set to `true` to disable the user prompt submit sound
|
||||||
|
- `disablePreCompactHook`: Set to `true` to disable the pre-compact sound
|
||||||
|
- `disablePostCompactHook`: Set to `true` to disable the post-compact sound
|
||||||
- `disableLogging`: Set to `true` to disable logging hook events to `.codex/hooks/logs/hooks-log.jsonl`
|
- `disableLogging`: Set to `true` to disable logging hook events to `.codex/hooks/logs/hooks-log.jsonl`
|
||||||
|
|
||||||
### Configuration Fallback
|
### Configuration Fallback
|
||||||
@@ -159,9 +188,12 @@ Create or edit `.codex/hooks/config/hooks-config.local.json` for personal prefer
|
|||||||
{
|
{
|
||||||
"disableSessionStartHook": false,
|
"disableSessionStartHook": false,
|
||||||
"disablePreToolUseHook": false,
|
"disablePreToolUseHook": false,
|
||||||
|
"disablePermissionRequestHook": false,
|
||||||
"disablePostToolUseHook": false,
|
"disablePostToolUseHook": false,
|
||||||
"disableStopHook": true,
|
"disableStopHook": true,
|
||||||
"disableUserPromptSubmitHook": false,
|
"disableUserPromptSubmitHook": false,
|
||||||
|
"disablePreCompactHook": false,
|
||||||
|
"disablePostCompactHook": false,
|
||||||
"disableLogging": true
|
"disableLogging": true
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1,8 +1,11 @@
|
|||||||
{
|
{
|
||||||
"disableSessionStartHook": false,
|
"disableSessionStartHook": false,
|
||||||
"disablePreToolUseHook": false,
|
"disablePreToolUseHook": false,
|
||||||
|
"disablePermissionRequestHook": false,
|
||||||
"disablePostToolUseHook": false,
|
"disablePostToolUseHook": false,
|
||||||
"disableStopHook": false,
|
"disableStopHook": false,
|
||||||
"disableUserPromptSubmitHook": false,
|
"disableUserPromptSubmitHook": false,
|
||||||
|
"disablePreCompactHook": false,
|
||||||
|
"disablePostCompactHook": false,
|
||||||
"disableLogging": true
|
"disableLogging": true
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,12 +3,15 @@
|
|||||||
Codex CLI Hook Handler
|
Codex CLI Hook Handler
|
||||||
=============================================
|
=============================================
|
||||||
This script handles hooks from Codex CLI and plays sounds.
|
This script handles hooks from Codex CLI and plays sounds.
|
||||||
Codex CLI supports 5 hooks:
|
Codex CLI supports 8 hooks:
|
||||||
1. SessionStart - via hooks.json (v0.114.0+)
|
1. SessionStart - via hooks.json (v0.114.0+)
|
||||||
2. PreToolUse - via hooks.json (v0.117.0+)
|
2. PreToolUse - via hooks.json (v0.117.0+)
|
||||||
3. PostToolUse - via hooks.json (v0.117.0+)
|
3. PermissionRequest - via hooks.json (v0.122.0+)
|
||||||
4. Stop - via hooks.json (v0.114.0+)
|
4. PostToolUse - via hooks.json (v0.117.0+)
|
||||||
5. UserPromptSubmit - via hooks.json (v0.116.0+)
|
5. Stop - via hooks.json (v0.114.0+)
|
||||||
|
6. UserPromptSubmit - via hooks.json (v0.116.0+)
|
||||||
|
7. PreCompact - via hooks.json (v0.130.0+)
|
||||||
|
8. PostCompact - via hooks.json (v0.130.0+)
|
||||||
|
|
||||||
Input:
|
Input:
|
||||||
- All hooks use --hook <hook-name> flag via hooks.json
|
- All hooks use --hook <hook-name> flag via hooks.json
|
||||||
@@ -32,18 +35,24 @@ except ImportError:
|
|||||||
HOOK_SOUND_MAP = {
|
HOOK_SOUND_MAP = {
|
||||||
"SessionStart": "SessionStart",
|
"SessionStart": "SessionStart",
|
||||||
"PreToolUse": "PreToolUse",
|
"PreToolUse": "PreToolUse",
|
||||||
|
"PermissionRequest": "PermissionRequest",
|
||||||
"PostToolUse": "PostToolUse",
|
"PostToolUse": "PostToolUse",
|
||||||
"Stop": "Stop",
|
"Stop": "Stop",
|
||||||
"UserPromptSubmit": "UserPromptSubmit",
|
"UserPromptSubmit": "UserPromptSubmit",
|
||||||
|
"PreCompact": "PreCompact",
|
||||||
|
"PostCompact": "PostCompact",
|
||||||
}
|
}
|
||||||
|
|
||||||
# ===== HOOK EVENT TO CONFIG KEY MAPPING =====
|
# ===== HOOK EVENT TO CONFIG KEY MAPPING =====
|
||||||
HOOK_CONFIG_MAP = {
|
HOOK_CONFIG_MAP = {
|
||||||
"SessionStart": "disableSessionStartHook",
|
"SessionStart": "disableSessionStartHook",
|
||||||
"PreToolUse": "disablePreToolUseHook",
|
"PreToolUse": "disablePreToolUseHook",
|
||||||
|
"PermissionRequest": "disablePermissionRequestHook",
|
||||||
"PostToolUse": "disablePostToolUseHook",
|
"PostToolUse": "disablePostToolUseHook",
|
||||||
"Stop": "disableStopHook",
|
"Stop": "disableStopHook",
|
||||||
"UserPromptSubmit": "disableUserPromptSubmitHook",
|
"UserPromptSubmit": "disableUserPromptSubmitHook",
|
||||||
|
"PreCompact": "disablePreCompactHook",
|
||||||
|
"PostCompact": "disablePostCompactHook",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -311,12 +320,15 @@ def main():
|
|||||||
"""
|
"""
|
||||||
Main program - runs when Codex CLI triggers a hook.
|
Main program - runs when Codex CLI triggers a hook.
|
||||||
|
|
||||||
Supports 5 hooks:
|
Supports 8 hooks:
|
||||||
1. SessionStart (hooks.json): Outputs context to stdout + plays sound
|
1. SessionStart (hooks.json): Outputs context to stdout + plays sound
|
||||||
2. PreToolUse (hooks.json): Plays sound before a tool executes
|
2. PreToolUse (hooks.json): Plays sound before a tool executes
|
||||||
3. PostToolUse (hooks.json): Plays sound after a tool completes
|
3. PermissionRequest (hooks.json): Plays sound when approval is requested
|
||||||
4. Stop (hooks.json): Plays sound on session end
|
4. PostToolUse (hooks.json): Plays sound after a tool completes
|
||||||
5. UserPromptSubmit (hooks.json): Plays sound when user submits a prompt
|
5. Stop (hooks.json): Plays sound on session end
|
||||||
|
6. UserPromptSubmit (hooks.json): Plays sound when user submits a prompt
|
||||||
|
7. PreCompact (hooks.json): Plays sound before context compaction
|
||||||
|
8. PostCompact (hooks.json): Plays sound after context compaction
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
event_type, input_data = parse_args(sys.argv[1:])
|
event_type, input_data = parse_args(sys.argv[1:])
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user