| Claude CodeCLI, settings.json | Stop and SubagentStop take {"decision":"block","reason":"…"}. TaskCompleted blocks on exit code 2, or on {"continue":false,"stopReason":"…"}. Claude Code overrides the hook and ends the turn after 8 consecutive blocks.hooks reference ↗ | Handler types include type:"prompt" and type:"agent" — an agent handler spawns a subagent with tool access to check the condition. Agent hooks are documented as experimental.hooks reference ↗ | None in the hooks reference. Stop hooks receive last_assistant_message — the text of the claim, not a list of claims with their evidence.hooks reference ↗ | The reason returns to the model as feedback for the next turn. The session transcript at transcript_path keeps it as conversation text.hooks reference ↗ |
|---|
| Codex CLI~/.codex/hooks.json | Stop takes {"decision":"block","reason":"…"}, or exit code 2 with the continuation reason on stderr.hooks docs ↗ | Only type:"command" handlers run today. prompt and agent handlers are parsed and skipped.hooks docs ↗ | None in the hooks docs.hooks docs ↗ | The reason continues the model from the hook-provided message. No cap on repeated blocks is documented.hooks docs ↗ |
|---|
| Cursor.cursor/hooks.json | No. The stop hook returns followup_message and nothing else; Cursor submits it as the next user message. The default loop_limit is 5 auto follow-ups per script.hooks docs ↗ | No. Hooks are scripts Cursor executes.hooks docs ↗ | None in the hooks docs.hooks docs ↗ | The follow-up becomes a user message. Hook failures — crash, timeout, invalid JSON — allow the action through unless failClosed is set.hooks docs ↗ |
|---|
| Gemini CLIsettings.json | AfterAgent takes decision:"deny", which rejects the response and forces a retry turn.hooks reference ↗ | No. The type field accepts "command" only.hooks reference ↗ | None in the hooks reference.hooks reference ↗ | The reason returns to the agent as feedback. No retry cap is documented.hooks reference ↗ |
|---|
| OpenHands.openhands/hooks.json | The stop event takes {"decision":"deny","reason":"…"} and the agent keeps working.hooks docs ↗ | No. Hooks are commands with a timeout.hooks docs ↗ | None in the hooks docs.hooks docs ↗ | The reason continues the conversation. No cap on repeated denials is documented.hooks docs ↗ |
|---|
| Ampplugin API | No. agent.end fires when the agent has finished handling a prompt; the handler can return { action: 'continue', userMessage } to start a new turn, which is not a veto of the one that ended.plugin API ↗ | No. Plugins are code the harness loads.plugin API ↗ | None in the plugin API.plugin API ↗ | The userMessage becomes the next turn's prompt.plugin API ↗ |
|---|
| GitHub Copilotcloud agent + CLI, .github/hooks/*.json | agentStop and subagentStop take decision:"block", which forces another agent turn using reason. Hooks are available for the Copilot cloud agent and for Copilot CLI.hooks reference ↗ | No. Handler types are command, HTTP and prompt. A prompt handler auto-submits text as if the user typed it and is supported on sessionStart only, so nothing evaluates agentStop in a context of its own.hooks reference ↗ | None in the hooks reference.hooks reference ↗ | The reason forces another agent turn.hooks reference ↗ |
|---|
| DevinCLI only — .devin/hooks.v1.json | Stop fires when the agent wants to stop, and a hook returns decision "approve" or "block". The document covers Devin CLI; it does not describe the cloud agent.hooks overview ↗ | Handler type is "command" to run a shell command, or "prompt" to evaluate an LLM prompt.hooks overview ↗ | not verified — the hooks overview does not address it.hooks overview ↗ | not verified — the hooks overview does not say where the block reason goes.hooks overview ↗ |
|---|
| AiderCLI flags | No hook system and no completion event. --auto-test runs --test-cmd after changes and feeds problems back; there is no event to subscribe to and no decision field.options reference ↗ | No. The test command is a command.options reference ↗ | None in the options reference.options reference ↗ | .aider.chat.history.md — a markdown log of the conversation.FAQ ↗ |
|---|