Packages
claude_code
0.28.0
0.36.5
0.36.4
0.36.3
0.36.2
0.36.1
0.36.0
0.35.0
0.34.0
0.33.1
0.32.2
0.32.0
0.31.0
0.30.0
0.29.0
0.28.0
0.27.0
0.26.0
0.25.0
0.24.0
0.23.0
0.22.0
0.21.0
0.20.0
0.19.0
0.18.0
0.17.0
0.16.0
0.15.0
0.14.0
0.13.3
0.13.2
0.13.1
0.13.0
0.12.0
0.11.0
0.10.0
0.9.0
0.8.1
0.8.0
0.7.0
0.6.0
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
Claude Agent SDK for Elixir – Build AI agents with Claude Code
Current section
Files
Jump to
Current section
Files
lib/claude_code/hook.ex
defmodule ClaudeCode.Hook do
@moduledoc """
Behaviour for hook callbacks.
Implement this behaviour in a module, or pass an anonymous function
with the same `call/2` signature. Used by both `:can_use_tool` and
`:hooks` options.
## Return types by event
The return type depends on which event the hook is registered for:
### can_use_tool / PreToolUse (permission decisions)
:allow
{:allow, updated_input}
{:allow, updated_input, permissions: [permission_update]}
{:deny, reason}
{:deny, reason, interrupt: true}
### PostToolUse / PostToolUseFailure (observation only)
:ok
### UserPromptSubmit
:ok
{:reject, reason}
### Stop / SubagentStop
:ok
{:continue, reason}
### PreCompact
:ok
{:instructions, custom_instructions}
### Notification / SubagentStart (observation only)
:ok
"""
@callback call(input :: map(), tool_use_id :: String.t() | nil) :: term()
@doc """
Invokes a hook callback (module or function) with error protection.
Returns the callback's result, or `{:error, reason}` if it raises.
"""
@spec invoke(module() | function(), map(), String.t() | nil) :: term()
def invoke(hook, input, tool_use_id) when is_atom(hook) do
hook.call(input, tool_use_id)
rescue
e -> {:error, Exception.message(e)}
end
def invoke(hook, input, tool_use_id) when is_function(hook, 2) do
hook.(input, tool_use_id)
rescue
e -> {:error, Exception.message(e)}
end
end