mirror of
https://github.com/openai/codex.git
synced 2026-05-22 12:04:19 +00:00
# What `SubagentStart` runs once when Codex creates a thread-spawned subagent, before that child sends its first model request. Thread-spawned subagents use `SubagentStart` instead of the normal root-agent `SessionStart` hook. Configured handlers match on the subagent `agent_type`, using the same value passed to `spawn_agent`. When no agent type is specified, Codex uses the default agent type. Hook input includes the normal session-start fields plus: - `agent_id`: the child thread id. - `agent_type`: the resolved subagent type. `SubagentStart` may return `hookSpecificOutput.additionalContext`. That context is added to the child conversation before the first model request. # Lifecycle Scope Only thread-spawned subagents run `SubagentStart`. Internal/system subagents such as Review, Compact, MemoryConsolidation, and Other do not run normal `SessionStart` hooks and do not run `SubagentStart`. This avoids exposing synthetic matcher labels for internal implementation paths. Also the `SessionStart` hook no longer fires for subagents, this matches behavior with other coding agents' implementation # Stack 1. This PR: add `SubagentStart`. 2. #22873: add `SubagentStop`. 3. #22882: add subagent identity to normal hook inputs.
106 lines
2.1 KiB
JSON
Generated
106 lines
2.1 KiB
JSON
Generated
{
|
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
"additionalProperties": false,
|
|
"definitions": {
|
|
"HookEventNameWire": {
|
|
"enum": [
|
|
"PreToolUse",
|
|
"PermissionRequest",
|
|
"PostToolUse",
|
|
"PreCompact",
|
|
"PostCompact",
|
|
"SessionStart",
|
|
"UserPromptSubmit",
|
|
"SubagentStart",
|
|
"Stop"
|
|
],
|
|
"type": "string"
|
|
},
|
|
"PreToolUseDecisionWire": {
|
|
"enum": [
|
|
"approve",
|
|
"block"
|
|
],
|
|
"type": "string"
|
|
},
|
|
"PreToolUseHookSpecificOutputWire": {
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"additionalContext": {
|
|
"default": null,
|
|
"type": "string"
|
|
},
|
|
"hookEventName": {
|
|
"$ref": "#/definitions/HookEventNameWire"
|
|
},
|
|
"permissionDecision": {
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/definitions/PreToolUsePermissionDecisionWire"
|
|
}
|
|
],
|
|
"default": null
|
|
},
|
|
"permissionDecisionReason": {
|
|
"default": null,
|
|
"type": "string"
|
|
},
|
|
"updatedInput": {
|
|
"default": null
|
|
}
|
|
},
|
|
"required": [
|
|
"hookEventName"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"PreToolUsePermissionDecisionWire": {
|
|
"enum": [
|
|
"allow",
|
|
"deny",
|
|
"ask"
|
|
],
|
|
"type": "string"
|
|
}
|
|
},
|
|
"properties": {
|
|
"continue": {
|
|
"default": true,
|
|
"type": "boolean"
|
|
},
|
|
"decision": {
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/definitions/PreToolUseDecisionWire"
|
|
}
|
|
],
|
|
"default": null
|
|
},
|
|
"hookSpecificOutput": {
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/definitions/PreToolUseHookSpecificOutputWire"
|
|
}
|
|
],
|
|
"default": null
|
|
},
|
|
"reason": {
|
|
"default": null,
|
|
"type": "string"
|
|
},
|
|
"stopReason": {
|
|
"default": null,
|
|
"type": "string"
|
|
},
|
|
"suppressOutput": {
|
|
"default": false,
|
|
"type": "boolean"
|
|
},
|
|
"systemMessage": {
|
|
"default": null,
|
|
"type": "string"
|
|
}
|
|
},
|
|
"title": "pre-tool-use.command.output",
|
|
"type": "object"
|
|
} |