> ## Documentation Index
> Fetch the complete documentation index at: https://easyaf.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Overview

> Summary of the CloudNimble.ClaudeEssentials.Hooks Namespace

## Summary

The `CloudNimble.ClaudeEssentials.Hooks` namespace provides strongly-typed C# models for building Claude Code hooks. These models represent the JSON input/output schemas that Claude Code uses to communicate with hook executables.

## Key Components

* **Inputs**: Classes for deserializing JSON received from Claude Code via stdin
* **Outputs**: Classes for serializing JSON responses to stdout
* **Enums**: Type-safe representations of hook events, decisions, and modes
* **ClaudeHooksSerializer**: AOT-compatible helper methods for JSON serialization
* **ClaudeHooksJsonContext**: Source-generated JSON context for Native AOT support

## Usage

### Basic Hook Pattern

A Claude Code hook is an executable that:

1. Reads JSON from stdin
2. Processes the input
3. Writes JSON to stdout
4. Exits with an appropriate code (0 = success, 2 = blocking error)

```csharp theme={"dark"}
using CloudNimble.ClaudeEssentials.Hooks;
using CloudNimble.ClaudeEssentials.Hooks.Inputs;
using CloudNimble.ClaudeEssentials.Hooks.Outputs;

// Read input from stdin
var json = Console.In.ReadToEnd();
var input = ClaudeHooksSerializer.DeserializePreToolUseInput(json);

// Process and respond
var output = new PreToolUseHookOutput<object> { Continue = true };
Console.WriteLine(ClaudeHooksSerializer.SerializePreToolUseOutput(output));
```

### Hook Configuration

Configure hooks in `~/.claude/settings.json` or `.claude/settings.json`:

```json theme={"dark"}
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [{ "type": "command", "command": "my-hook.exe" }]
      }
    ]
  }
}
```

## Examples

### PreToolUse: Auto-approve safe tools

```csharp theme={"dark"}
var input = ClaudeHooksSerializer.DeserializePreToolUseInput(Console.In.ReadToEnd());

var output = new PreToolUseHookOutput<object>
{
    HookSpecificOutput = new PreToolUseSpecificOutput<object>
    {
        PermissionDecision = input?.ToolName == "Read"
            ? PermissionDecision.Allow
            : PermissionDecision.Ask,
        PermissionDecisionReason = "Read operations are safe"
    }
};

Console.WriteLine(ClaudeHooksSerializer.SerializePreToolUseOutput(output));
```

### PostToolUse: Log tool executions

```csharp theme={"dark"}
var input = ClaudeHooksSerializer.DeserializePostToolUseInput(Console.In.ReadToEnd());

File.AppendAllText("hooks.log", $"{DateTime.Now}: {input?.ToolName}\n");

Console.WriteLine(ClaudeHooksSerializer.SerializePostToolUseOutput(new PostToolUseHookOutput()));
```

### Stop: Require confirmation before stopping

```csharp theme={"dark"}
var input = ClaudeHooksSerializer.DeserializeStopInput(Console.In.ReadToEnd());

var output = new StopHookOutput
{
    Decision = HookDecision.Block,
    Reason = "Please confirm all tests pass before stopping."
};

Console.WriteLine(ClaudeHooksSerializer.SerializeStopOutput(output));
```

## Types

### <Icon icon="file-brackets-curly" iconType="duotone" color="#419AC5" size={24} style={{ paddingRight: '8px' }} /> Classes

| Name                                                                                                                      | Summary                                                                                                                                                                                                                                                                         |
| ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [ClaudeHooksJsonContext](/claudeessentials/api-reference/CloudNimble/ClaudeEssentials/Hooks/ClaudeHooksJsonContext)       | Provides AOT-compatible JSON serialization context for Claude Code hook types.              This context uses source generators to pre-compile serialization code,              eliminating the need for runtime reflection.                                                    |
| [ClaudeHooksSerializer](/claudeessentials/api-reference/CloudNimble/ClaudeEssentials/Hooks/ClaudeHooksSerializer)         | Provides static helper methods for serializing and deserializing Claude Code hook types.              All methods use the AOT-compatible [ClaudeHooksJsonContext](/claudeessentials/api-reference/CloudNimble/ClaudeEssentials/Hooks/ClaudeHooksJsonContext) for serialization. |
| [CompactTrigger](/claudeessentials/api-reference/CloudNimble/ClaudeEssentials/Hooks/CompactTrigger)                       | Represents what triggered a compact operation.                                                                                                                                                                                                                                  |
| [HookDecision](/claudeessentials/api-reference/CloudNimble/ClaudeEssentials/Hooks/HookDecision)                           | Represents a hook's decision to block or allow an operation.                                                                                                                                                                                                                    |
| [HookEventName](/claudeessentials/api-reference/CloudNimble/ClaudeEssentials/Hooks/HookEventName)                         | Represents the different types of hook events that can be triggered in Claude Code.                                                                                                                                                                                             |
| [NotificationType](/claudeessentials/api-reference/CloudNimble/ClaudeEssentials/Hooks/NotificationType)                   | Represents the type of notification sent by Claude Code.                                                                                                                                                                                                                        |
| [PermissionDecision](/claudeessentials/api-reference/CloudNimble/ClaudeEssentials/Hooks/PermissionDecision)               | Represents the decision for a PreToolUse permission check.                                                                                                                                                                                                                      |
| [PermissionMode](/claudeessentials/api-reference/CloudNimble/ClaudeEssentials/Hooks/PermissionMode)                       | Represents the permission mode under which Claude Code is operating.                                                                                                                                                                                                            |
| [PermissionRequestBehavior](/claudeessentials/api-reference/CloudNimble/ClaudeEssentials/Hooks/PermissionRequestBehavior) | Represents the behavior decision for a PermissionRequest hook.                                                                                                                                                                                                                  |
| [SessionEndReason](/claudeessentials/api-reference/CloudNimble/ClaudeEssentials/Hooks/SessionEndReason)                   | Represents the reason why a session ended.                                                                                                                                                                                                                                      |
| [SessionStartSource](/claudeessentials/api-reference/CloudNimble/ClaudeEssentials/Hooks/SessionStartSource)               | Represents the source that triggered a session start event.                                                                                                                                                                                                                     |

### <Icon icon="list-ol" iconType="duotone" color="#419AC5" size={24} style={{ paddingRight: '8px' }} /> Enums

| Name                                                                                                                      | Summary                                                                             |
| ------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
| [CompactTrigger](/claudeessentials/api-reference/CloudNimble/ClaudeEssentials/Hooks/CompactTrigger)                       | Represents what triggered a compact operation.                                      |
| [HookDecision](/claudeessentials/api-reference/CloudNimble/ClaudeEssentials/Hooks/HookDecision)                           | Represents a hook's decision to block or allow an operation.                        |
| [HookEventName](/claudeessentials/api-reference/CloudNimble/ClaudeEssentials/Hooks/HookEventName)                         | Represents the different types of hook events that can be triggered in Claude Code. |
| [NotificationType](/claudeessentials/api-reference/CloudNimble/ClaudeEssentials/Hooks/NotificationType)                   | Represents the type of notification sent by Claude Code.                            |
| [PermissionDecision](/claudeessentials/api-reference/CloudNimble/ClaudeEssentials/Hooks/PermissionDecision)               | Represents the decision for a PreToolUse permission check.                          |
| [PermissionMode](/claudeessentials/api-reference/CloudNimble/ClaudeEssentials/Hooks/PermissionMode)                       | Represents the permission mode under which Claude Code is operating.                |
| [PermissionRequestBehavior](/claudeessentials/api-reference/CloudNimble/ClaudeEssentials/Hooks/PermissionRequestBehavior) | Represents the behavior decision for a PermissionRequest hook.                      |
| [SessionEndReason](/claudeessentials/api-reference/CloudNimble/ClaudeEssentials/Hooks/SessionEndReason)                   | Represents the reason why a session ended.                                          |
| [SessionStartSource](/claudeessentials/api-reference/CloudNimble/ClaudeEssentials/Hooks/SessionStartSource)               | Represents the source that triggered a session start event.                         |
