anthropics / anthropics/claude-agent-sdk-python

PreToolUse hook updatedInput has no effect on AskUserQuestion tool

Aberta
#767 0 comentários 0 reações 0 responsáveis Ver no GitHub
Linguagem predominante
Python
Estrelas
8.1k
Forks
1.3k
Merge médio
2d 31min
PRs com merge (30d)
1

Descrição

## Description

When a PreToolUse Python hook callback returns `updatedInput` for AskUserQuestion, the updated input is not reflected in the tool result that Claude sees. Claude continues as if no answer was provided.

## Steps to Reproduce

```python
async def ask_hook(hook_input, tool_use_id, hook_context):
return {
"hookSpecificOutput": {
"hookEventName": "PreToolUse",
"permissionDecision": "allow",
"updatedInput": {"answer": "Jeremy"}, # This is ignored
}
}

options = ClaudeAgentOptions(
permission_mode="bypassPermissions",
cli_path="/home/tester/.local/bin/claude",
hooks={
"PreToolUse": [HookMatcher(matcher="AskUserQuestion", hooks=[ask_hook])],
},
)

async for msg in query(prompt="Ask my name with AskUserQuestion, then greet me", options=options):
if isinstance(msg, ResultMessage):
print(msg.result)
# Output: "It seems your answer didn't come through clearly!"
# Expected: "Hello, Jeremy!"
```

## Expected Behavior

`updatedInput: {"answer": "Jeremy"}` should replace the AskUserQuestion tool input, and Claude should see the answer in the tool result.

## Workaround

Use `permissionDecision: "deny"` with the answer in `permissionDecisionReason`:
```python
return {
"hookSpecificOutput": {
"hookEventName": "PreToolUse",
"permissionDecision": "deny",
"permissionDecisionReason": "The user has already provided their answer: Jeremy",
}
}
```
Claude reads the denial reason and uses the answer correctly.

## Environment

- claude-agent-sdk: 0.1.51
- Claude CLI: 2.1.86
- Python: 3.12
- OS: Linux (Docker)

Guia de contribuição

Nenhum guia de contribuição indexado para este repositório

Avaliação

Esta issue ainda não foi avaliada.

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.