mirror of
https://github.com/openai/codex.git
synced 2026-04-28 16:45:54 +00:00
- add `PreToolUse` hook for bash-like tool execution only at first - block shell execution before dispatch with deny-only hook behavior - introduces common.rs matcher framework for matching when hooks are run example run: ``` › run three parallel echo commands, and the second one should echo "[block-pre-tool-use]" as a test • Running the three echo commands in parallel now and I’ll report the output directly. • Running PreToolUse hook: name for demo pre tool use hook • Running PreToolUse hook: name for demo pre tool use hook • Running PreToolUse hook: name for demo pre tool use hook PreToolUse hook (completed) warning: wizard-tower PreToolUse demo inspected Bash: echo "first parallel echo" PreToolUse hook (blocked) warning: wizard-tower PreToolUse demo blocked a Bash command on purpose. feedback: PreToolUse demo blocked the command. Remove [block-pre-tool-use] to continue. PreToolUse hook (completed) warning: wizard-tower PreToolUse demo inspected Bash: echo "third parallel echo" • Ran echo "first parallel echo" └ first parallel echo • Ran echo "third parallel echo" └ third parallel echo • Three little waves went out in parallel. 1. printed first parallel echo 2. was blocked before execution because it contained the exact test string [block-pre-tool-use] 3. printed third parallel echo There was also an unrelated macOS defaults warning around the successful commands, but the echoes themselves worked fine. If you want, I can rerun the second one with a slightly modified string so it passes cleanly. ```
77 lines
1.5 KiB
JSON
77 lines
1.5 KiB
JSON
{
|
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
"additionalProperties": false,
|
|
"definitions": {
|
|
"BlockDecisionWire": {
|
|
"enum": [
|
|
"block"
|
|
],
|
|
"type": "string"
|
|
},
|
|
"HookEventNameWire": {
|
|
"enum": [
|
|
"PreToolUse",
|
|
"SessionStart",
|
|
"UserPromptSubmit",
|
|
"Stop"
|
|
],
|
|
"type": "string"
|
|
},
|
|
"UserPromptSubmitHookSpecificOutputWire": {
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"additionalContext": {
|
|
"default": null,
|
|
"type": "string"
|
|
},
|
|
"hookEventName": {
|
|
"$ref": "#/definitions/HookEventNameWire"
|
|
}
|
|
},
|
|
"required": [
|
|
"hookEventName"
|
|
],
|
|
"type": "object"
|
|
}
|
|
},
|
|
"properties": {
|
|
"continue": {
|
|
"default": true,
|
|
"type": "boolean"
|
|
},
|
|
"decision": {
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/definitions/BlockDecisionWire"
|
|
}
|
|
],
|
|
"default": null
|
|
},
|
|
"hookSpecificOutput": {
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/definitions/UserPromptSubmitHookSpecificOutputWire"
|
|
}
|
|
],
|
|
"default": null
|
|
},
|
|
"reason": {
|
|
"default": null,
|
|
"type": "string"
|
|
},
|
|
"stopReason": {
|
|
"default": null,
|
|
"type": "string"
|
|
},
|
|
"suppressOutput": {
|
|
"default": false,
|
|
"type": "boolean"
|
|
},
|
|
"systemMessage": {
|
|
"default": null,
|
|
"type": "string"
|
|
}
|
|
},
|
|
"title": "user-prompt-submit.command.output",
|
|
"type": "object"
|
|
} |