Skip to content

Add SubagentStop hook#22873

Merged
abhinav-oai merged 9 commits into
mainfrom
abhinav/subagent-stop-stack
May 20, 2026
Merged

Add SubagentStop hook#22873
abhinav-oai merged 9 commits into
mainfrom
abhinav/subagent-stop-stack

Conversation

@abhinav-oai
Copy link
Copy Markdown
Collaborator

@abhinav-oai abhinav-oai commented May 15, 2026

What

image

SubagentStop runs when a thread-spawned subagent turn is about to finish. Thread-spawned subagents use SubagentStop instead of the normal root-agent Stop hook.

Configured handlers match on agent_type. Hook input includes the normal stop fields plus:

  • agent_id: the child thread id.
  • agent_type: the resolved subagent type.
  • agent_transcript_path: the child subagent transcript path.
  • transcript_path: the parent thread transcript path.
  • last_assistant_message: the final assistant message from the child turn, when available.
  • stop_hook_active: true when the child is already continuing because an earlier stop-like hook blocked completion.

SubagentStop shares the same completion-control semantics as Stop, scoped to the child turn:

  • No decision allows the child turn to finish.
  • decision: "block" with a non-empty reason records that reason as hook feedback and continues the child with that prompt.
  • continue: false stops the child turn. If stopReason is present, Codex surfaces it as the stop reason.

Lifecycle Scope

Only thread-spawned subagents run SubagentStop.

Internal/system subagents such as Review, Compact, MemoryConsolidation, and Other do not run normal Stop hooks and do not run SubagentStop. This avoids exposing synthetic matcher labels for internal implementation paths.

Stack

  1. Add SubagentStart hook #22782: add SubagentStart.
  2. This PR: add SubagentStop.
  3. Add subagent identity to hook inputs #22882: add subagent identity to normal hook inputs.

@abhinav-oai abhinav-oai changed the title [codex] Add SubagentStop hook Add SubagentStop hook May 15, 2026
@abhinav-oai abhinav-oai marked this pull request as ready for review May 15, 2026 23:28
@abhinav-oai abhinav-oai requested a review from a team as a code owner May 15, 2026 23:28
@abhinav-oai
Copy link
Copy Markdown
Collaborator Author

@codex review

@chatgpt-codex-connector
Copy link
Copy Markdown
Contributor

Codex Review: Didn't find any major issues. Swish!

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

abhinav-oai added a commit that referenced this pull request May 19, 2026
# 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.
Base automatically changed from abhinav/subagent-hooks-minimal to main May 19, 2026 19:45
@abhinav-oai abhinav-oai merged commit eee3e60 into main May 20, 2026
31 checks passed
@abhinav-oai abhinav-oai deleted the abhinav/subagent-stop-stack branch May 20, 2026 21:59
@github-actions github-actions Bot locked and limited conversation to collaborators May 20, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants