Skip to main content

Summary

The Outputs namespace contains classes for serializing JSON responses that hooks send to Claude Code via stdout. All output classes inherit from HookOutputBase which provides Continue, StopReason, SuppressOutput, and SystemMessage properties.

Usage

Creating and Serializing Output

// Simple output - allow operation to continue
var output = new PreToolUseHookOutput<object> { Continue = true };
Console.WriteLine(ClaudeHooksSerializer.SerializePreToolUseOutput(output));

// Block an operation
var blockOutput = new StopHookOutput
{
    Decision = HookDecision.Block,
    Reason = "Tests must pass before stopping"
};
Console.WriteLine(ClaudeHooksSerializer.SerializeStopOutput(blockOutput));

Exit Codes

  • 0: Success - stdout is parsed as JSON
  • 2: Blocking error - stderr is shown to Claude/user
  • Other: Non-blocking error - shown in verbose mode only

Common Base Properties

All outputs inherit from HookOutputBase:
  • Continue - Whether to continue (default: true)
  • StopReason - Message when Continue is false
  • SuppressOutput - Hide from transcript
  • SystemMessage - Warning message for Claude

Types

Classes

NameSummary
HookOutputBaseBase class containing common fields for all hook outputs. Hook outputs are written to stdout as JSON when the hook exits with code 0.
HookSpecificOutputBaseBase class for hook-specific output data. Contains the hook event name and serves as base for specific output types.
NotificationHookOutputRepresents the output for a Notification hook. The Notification hook typically only uses base output fields.
PermissionRequestDecisionRepresents the decision object for a PermissionRequest hook response. Contains the behavior decision and optional parameters.
PermissionRequestHookOutputRepresents the complete output for a PermissionRequest hook. Combines base output fields with PermissionRequest-specific output.
PermissionRequestSpecificOutputRepresents the hook-specific output for a PermissionRequest hook. Contains the decision object with behavior and optional parameters.
PostToolUseHookOutputRepresents the complete output for a PostToolUse hook. Combines base output fields with PostToolUse-specific output.
PostToolUseSpecificOutputRepresents the hook-specific output for a PostToolUse hook. Contains additional context to provide to Claude after tool execution.
PreCompactHookOutputRepresents the output for a PreCompact hook. The PreCompact hook typically only uses base output fields.
PreToolUseHookOutputRepresents the complete output for a PreToolUse hook. Combines base output fields with PreToolUse-specific output.
PreToolUseSpecificOutputRepresents the hook-specific output for a PreToolUse hook. Contains permission decisions and optional input modifications.
SessionEndHookOutputRepresents the output for a SessionEnd hook. The SessionEnd hook typically only uses base output fields.
SessionStartHookOutputRepresents the complete output for a SessionStart hook. Combines base output fields with SessionStart-specific output.
SessionStartSpecificOutputRepresents the hook-specific output for a SessionStart hook. Contains additional context to add to the session start.
StopHookOutputRepresents the output for a Stop hook. Used to optionally block Claude from stopping and continue processing.
SubagentStopHookOutputRepresents the output for a SubagentStop hook. Used to optionally block a subagent from stopping and continue processing.
UserPromptSubmitHookOutputRepresents the complete output for a UserPromptSubmit hook. Combines base output fields with UserPromptSubmit-specific output.
UserPromptSubmitSpecificOutputRepresents the hook-specific output for a UserPromptSubmit hook. Contains additional context to add to Claude’s processing of the user prompt.