Packages
claude_code
0.32.2
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/debug_logger.ex
defmodule ClaudeCode.Hook.DebugLogger do
@moduledoc """
A diagnostic hook that logs every invocation with event name, tool name,
and available input keys. Returns `:ok` so it never interferes with
normal execution.
## Usage
Register it for any event types you want to observe:
{:ok, session} = ClaudeCode.start_link(
hooks: %{
PreToolUse: [ClaudeCode.Hook.DebugLogger],
PostToolUse: [ClaudeCode.Hook.DebugLogger],
Stop: [ClaudeCode.Hook.DebugLogger]
}
)
For `can_use_tool`, use `ClaudeCode.Hook.DebugLogger.Permissive` which
returns `:allow` instead of `:ok`:
{:ok, session} = ClaudeCode.start_link(
can_use_tool: ClaudeCode.Hook.DebugLogger.Permissive
)
"""
@behaviour ClaudeCode.Hook
require Logger
@impl true
def call(input, tool_use_id) do
event = input[:hook_event_name] || "unknown"
tool = input[:tool_name] || "n/a"
Logger.info(
"[DebugLogger] event=#{event} tool=#{tool} tool_use_id=#{inspect(tool_use_id)} keys=#{inspect(Map.keys(input))}"
)
:ok
end
defmodule Permissive do
@moduledoc """
Like `ClaudeCode.Hook.DebugLogger` but returns `:allow` — suitable for
`can_use_tool` callbacks.
"""
@behaviour ClaudeCode.Hook
require Logger
@impl true
def call(input, tool_use_id) do
Logger.info(
"[DebugLogger] event=can_use_tool tool=#{input[:tool_name]} tool_use_id=#{inspect(tool_use_id)} keys=#{inspect(Map.keys(input))}"
)
{:allow, []}
end
end
end