Packages
claude_code
0.36.4
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/output/pre_tool_use.ex
defmodule ClaudeCode.Hook.Output.PreToolUse do
@moduledoc """
Hook-specific output for `PreToolUse` events.
Controls whether a tool is allowed, denied, or requires user confirmation.
Shorthand: `{:allow, []}`, `{:deny, permission_decision_reason: "..."}`,
`{:ask, []}`, or `{:ok, additional_context: "..."}` (no permission decision).
## Fields
* `:permission_decision` - `"allow"`, `"deny"`, or `"ask"`
* `:permission_decision_reason` - explanation for the decision
* `:updated_input` - replacement tool input map
* `:additional_context` - extra context injected into the conversation
"""
alias ClaudeCode.Hook.Output
@type permission_decision :: String.t()
@type t :: %__MODULE__{
permission_decision: permission_decision() | nil,
permission_decision_reason: String.t() | nil,
updated_input: map() | nil,
additional_context: String.t() | nil
}
defstruct [
:permission_decision,
:permission_decision_reason,
:updated_input,
:additional_context
]
def to_wire(%__MODULE__{} = o) do
%{"hookEventName" => "PreToolUse"}
|> Output.maybe_put("permissionDecision", o.permission_decision)
|> Output.maybe_put("permissionDecisionReason", o.permission_decision_reason)
|> Output.maybe_put("updatedInput", o.updated_input)
|> Output.maybe_put("additionalContext", o.additional_context)
end
end