diff --git a/src/hooks/new.ts b/src/hooks/new.ts index cb63f272..f2c30f10 100644 --- a/src/hooks/new.ts +++ b/src/hooks/new.ts @@ -13,8 +13,20 @@ export interface UserPromptSubmitInput { * New Hook - UserPromptSubmit * Initializes SDK memory session in background */ -export function newHook(input: UserPromptSubmitInput): void { +export function newHook(input?: UserPromptSubmitInput): void { try { + // Handle standalone execution (no input provided) + if (!input) { + console.log('No input provided - this script is designed to run as a Claude Code UserPromptSubmit hook'); + console.log('\nExpected input format:'); + console.log(JSON.stringify({ + session_id: "string", + cwd: "string", + prompt: "string" + }, null, 2)); + process.exit(0); + } + const { session_id, cwd, prompt } = input; // Extract project from cwd diff --git a/src/hooks/save.ts b/src/hooks/save.ts index a56c4605..35ebf547 100644 --- a/src/hooks/save.ts +++ b/src/hooks/save.ts @@ -21,8 +21,22 @@ const SKIP_TOOLS = new Set([ * Save Hook - PostToolUse * Sends tool observations to worker via Unix socket */ -export function saveHook(input: PostToolUseInput): void { +export function saveHook(input?: PostToolUseInput): void { try { + // Handle standalone execution (no input provided) + if (!input) { + console.log('No input provided - this script is designed to run as a Claude Code PostToolUse hook'); + console.log('\nExpected input format:'); + console.log(JSON.stringify({ + session_id: "string", + cwd: "string", + tool_name: "string", + tool_input: {}, + tool_output: {} + }, null, 2)); + process.exit(0); + } + const { session_id, tool_name, tool_input, tool_output } = input; // Skip certain tools diff --git a/src/hooks/summary.ts b/src/hooks/summary.ts index f492c8f9..e7c5522a 100644 --- a/src/hooks/summary.ts +++ b/src/hooks/summary.ts @@ -12,8 +12,19 @@ export interface StopInput { * Summary Hook - Stop * Sends FINALIZE message to worker via Unix socket */ -export function summaryHook(input: StopInput): void { +export function summaryHook(input?: StopInput): void { try { + // Handle standalone execution (no input provided) + if (!input) { + console.log('No input provided - this script is designed to run as a Claude Code Stop hook'); + console.log('\nExpected input format:'); + console.log(JSON.stringify({ + session_id: "string", + cwd: "string" + }, null, 2)); + process.exit(0); + } + const { session_id } = input; // Find active SDK session