Key differences between Claude Code and Cursor hook formats:
| Concept | Claude Code | Cursor |
|---|---|---|
| Event name | hook_event_name |
hook_event_name (same) |
| Session ID | session_id |
conversation_id |
| Working dir | cwd + CLAUDE_PROJECT_ROOT env |
workspace_roots[] + CURSOR_PROJECT_DIR env |
| Tool name | tool_name |
tool_name (same for preToolUse/postToolUse) |
| Tool input | tool_input |
tool_input (same) |
| Tool output | tool_response (PostToolUse) |
tool_output (PostToolUse, JSON-stringified) |
| Prompt text | prompt (UserPromptSubmit) |
Part of beforeSubmitPrompt |
| Env file | CLAUDE_ENV_FILE (append exports) |
sessionStart returns { env: {...} } |
| Output: context | hookSpecificOutput.additionalContext |
additional_context (top-level) |
| Output: permission | hookSpecificOutput.permissionDecision |
permission (top-level) |
| Matcher | String in hooks.json matcher field | Object in hooks.json matcher field |