Skip to content llms.txt

decision_control

Which decision actions hooks can take on the triggering action. Contents: {block: bool, allow: bool, modify: bool}. Mechanisms include exit code contracts, JSON decision fields, or cancel flags. Boundary: decision_control governs whether a tool invocation proceeds; see permission_control for whether a tool is available at all.

Type: object Content type: hooks

ProviderSupportedMechanism
ampPre-execute 'send-user-message' action cancels the pending tool call and injects a user message; exit code 0 = allow, non-zero = block
claude-codeblock: exit code 2 or decision=block; allow: permissionDecision=allow in hookSpecificOutput; modify: updatedInput replaces tool input before execution
clinepre_tool_use_cancellation: PreToolUse hooks can cancel (block) the tool invocation; no allow or modify sub-capabilities documented
codexhook_result_abort: Codex hooks can abort (block) the triggering action; allow and modify sub-capabilities documented via hook result schema
copilot-clipre_tool_use_deny: Copilot CLI PreToolUse hooks can deny (block) the tool invocation; no allow or modify documented
cursorExit codes drive decisions: non-zero blocks the action and surfaces stderr, zero allows it to proceed; JSON on stdout can also return structured decision fields.
factory-droidhook_exit_code_behavior: Factory Droid hooks use exit codes to signal block (non-zero) or allow (zero) decisions on the triggering action
gemini-cliexit_code_semantics: Gemini CLI uses exit codes to signal block (non-zero) or allow (zero) decisions; no modify sub-capability documented
crushnot documented
kiroKiro hooks are observational; no mechanism to block, allow, or modify tool invocations documented
opencodenot documented
piPi hooks are observational; no mechanism to block, allow, or modify tool invocations documented
roo-codenot documented
windsurfWindsurf hooks are observational; no mechanism to block, allow, or modify the triggering action documented
zednot documented