Skip to content

Commit abf5fae

Browse files
ashwin-antclaude
andauthored
feat: add PostToolUseFailure hook event type (#535)
## Summary - Add `PostToolUseFailureHookInput` type with fields for `tool_name`, `tool_input`, `tool_use_id`, `error`, and optional `is_interrupt` - Add `PostToolUseFailureHookSpecificOutput` type with `additionalContext` field - Add `"PostToolUseFailure"` to `HookEvent`, `HookInput`, and `HookSpecificOutput` union types - Export new types from `__init__.py` and add to `__all__` ## Test plan - [ ] Verify `PostToolUseFailureHookInput` can be constructed with required and optional fields - [ ] Verify `PostToolUseFailureHookSpecificOutput` accepts valid output shapes - [ ] Verify type checking passes with `mypy` - [ ] Verify existing tests still pass ## Changelog <!-- CHANGELOG:START --> Added `PostToolUseFailure` hook event type for handling tool use failures, including `PostToolUseFailureHookInput` and `PostToolUseFailureHookSpecificOutput` types. <!-- CHANGELOG:END --> 🤖 Generated with [Claude Code](https://claude.com/claude-code) (0% 4-shotted by claude) Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
1 parent ccdf20a commit abf5fae

2 files changed

Lines changed: 25 additions & 0 deletions

File tree

src/claude_agent_sdk/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@
3535
PermissionResultAllow,
3636
PermissionResultDeny,
3737
PermissionUpdate,
38+
PostToolUseFailureHookInput,
39+
PostToolUseFailureHookSpecificOutput,
3840
PostToolUseHookInput,
3941
PreCompactHookInput,
4042
PreToolUseHookInput,
@@ -335,6 +337,8 @@ async def call_tool(name: str, arguments: dict[str, Any]) -> Any:
335337
"BaseHookInput",
336338
"PreToolUseHookInput",
337339
"PostToolUseHookInput",
340+
"PostToolUseFailureHookInput",
341+
"PostToolUseFailureHookSpecificOutput",
338342
"UserPromptSubmitHookInput",
339343
"StopHookInput",
340344
"SubagentStopHookInput",

src/claude_agent_sdk/types.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@ class PermissionResultDeny:
163163
HookEvent = (
164164
Literal["PreToolUse"]
165165
| Literal["PostToolUse"]
166+
| Literal["PostToolUseFailure"]
166167
| Literal["UserPromptSubmit"]
167168
| Literal["Stop"]
168169
| Literal["SubagentStop"]
@@ -197,6 +198,17 @@ class PostToolUseHookInput(BaseHookInput):
197198
tool_response: Any
198199

199200

201+
class PostToolUseFailureHookInput(BaseHookInput):
202+
"""Input data for PostToolUseFailure hook events."""
203+
204+
hook_event_name: Literal["PostToolUseFailure"]
205+
tool_name: str
206+
tool_input: dict[str, Any]
207+
tool_use_id: str
208+
error: str
209+
is_interrupt: NotRequired[bool]
210+
211+
200212
class UserPromptSubmitHookInput(BaseHookInput):
201213
"""Input data for UserPromptSubmit hook events."""
202214

@@ -230,6 +242,7 @@ class PreCompactHookInput(BaseHookInput):
230242
HookInput = (
231243
PreToolUseHookInput
232244
| PostToolUseHookInput
245+
| PostToolUseFailureHookInput
233246
| UserPromptSubmitHookInput
234247
| StopHookInput
235248
| SubagentStopHookInput
@@ -254,6 +267,13 @@ class PostToolUseHookSpecificOutput(TypedDict):
254267
additionalContext: NotRequired[str]
255268

256269

270+
class PostToolUseFailureHookSpecificOutput(TypedDict):
271+
"""Hook-specific output for PostToolUseFailure events."""
272+
273+
hookEventName: Literal["PostToolUseFailure"]
274+
additionalContext: NotRequired[str]
275+
276+
257277
class UserPromptSubmitHookSpecificOutput(TypedDict):
258278
"""Hook-specific output for UserPromptSubmit events."""
259279

@@ -271,6 +291,7 @@ class SessionStartHookSpecificOutput(TypedDict):
271291
HookSpecificOutput = (
272292
PreToolUseHookSpecificOutput
273293
| PostToolUseHookSpecificOutput
294+
| PostToolUseFailureHookSpecificOutput
274295
| UserPromptSubmitHookSpecificOutput
275296
| SessionStartHookSpecificOutput
276297
)

0 commit comments

Comments
 (0)