anthropics / anthropics/claude-agent-sdk-python

Hook denial causes "API Error: 400 due to tool use concurrency issues" instead of graceful handling

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

Descrição

## Issue Description
When using PreToolUse hooks to deny tool access, Claude responds with a synthetic error message about "tool use concurrency issues" instead of gracefully handling the hook denial. This appears to be a regression as the same code worked correctly previously.

## Expected Behavior
When a hook denies tool access, Claude should either:

Gracefully acknowledge the denial and inform the user it cannot access the resource
Ask for clarification or suggest alternatives
Continue the conversation without generating an API error

## Actual Behavior
Claude generates a synthetic error message:
API Error: 400 due to tool use concurrency issues. Run /rewind to recover the conversation.
This error message is misleading as there are no actual concurrency issues - the tool was simply denied by the hook.

## Reproduction:
Just run the example at [hooks](https://github.com/anthropics/claude-agent-sdk-python?tab=readme-ov-file#example)

## Output:
```
SystemMessage(subtype='init', data={'type': 'system', 'subtype': 'init', 'cwd': '/Users/shashank/Downloads/tests', 'session_id': '04733b4c-3f8d-473b-bc98-13d8bf791f68', 'tools': ['Task', 'Bash', 'Glob', 'Grep', 'ExitPlanMode', 'Read', 'Edit', 'Write', 'NotebookEdit', 'WebFetch', 'TodoWrite', 'WebSearch', 'BashOutput', 'KillShell', 'Skill', 'SlashCommand'], 'mcp_servers': [], 'model': 'claude-sonnet-4-5-20250929', 'permissionMode': 'default', 'slash_commands': ['compact', 'context', 'cost', 'init', 'output-style:new', 'pr-comments', 'release-notes', 'todos', 'review', 'security-review'], 'apiKeySource': 'ANTHROPIC_API_KEY', 'claude_code_version': '2.0.20', 'output_style': 'default', 'agents': ['general-purpose', 'statusline-setup', 'output-style-setup', 'Explore'], 'uuid': '528e006a-6260-44e6-8af5-fc085de21a3d'})
AssistantMessage(content=[TextBlock(text="I'll run the bash command to display the help information for the foo.sh script.")], model='claude-sonnet-4-5-20250929', parent_tool_use_id=None)
AssistantMessage(content=[ToolUseBlock(id='toolu_01KtERtZPLP1jJHD8Q6R5Urr', name='Bash', input={'command': './foo.sh --help', 'description': 'Run foo.sh script with --help flag'})], model='claude-sonnet-4-5-20250929', parent_tool_use_id=None)
UserMessage(content=[ToolResultBlock(tool_use_id='toolu_01KtERtZPLP1jJHD8Q6R5Urr', content='Hook requested permission behavior: deny', is_error=True)], parent_tool_use_id=None)
AssistantMessage(content=[TextBlock(text='API Error: 400 due to tool use concurrency issues. Run /rewind to recover the conversation.')], model='', parent_tool_use_id=None)
ResultMessage(subtype='success', duration_ms=6004, duration_api_ms=8428, is_error=True, num_turns=4, session_id='04733b4c-3f8d-473b-bc98-13d8bf791f68', total_cost_usd=0.016683999999999997, usage={'input_tokens': 3, 'cache_creation_input_tokens': 2604, 'cache_read_input_tokens': 12040, 'output_tokens': 101, 'server_tool_use': {'web_search_requests': 0}, 'service_tier': 'standard', 'cache_creation': {'ephemeral_1h_input_tokens': 0, 'ephemeral_5m_input_tokens': 2604}}, result='API Error: 400 due to tool use concurrency issues. Run /rewind to recover the conversation.')

==================================================

SystemMessage(subtype='init', data={'type': 'system', 'subtype': 'init', 'cwd': '/Users/shashank/Downloads/tests', 'session_id': '04733b4c-3f8d-473b-bc98-13d8bf791f68', 'tools': ['Task', 'Bash', 'Glob', 'Grep', 'ExitPlanMode', 'Read', 'Edit', 'Write', 'NotebookEdit', 'WebFetch', 'TodoWrite', 'WebSearch', 'BashOutput', 'KillShell', 'Skill', 'SlashCommand'], 'mcp_servers': [], 'model': 'claude-sonnet-4-5-20250929', 'permissionMode': 'default', 'slash_commands': ['compact', 'context', 'cost', 'init', 'output-style:new', 'pr-comments', 'release-notes', 'todos', 'review', 'security-review'], 'apiKeySource': 'ANTHROPIC_API_KEY', 'claude_code_version': '2.0.20', 'output_style': 'default', 'agents': ['general-purpose', 'statusline-setup', 'output-style-setup', 'Explore'], 'uuid': '52d621cc-abbb-4c45-8245-b72b17b0172e'})
AssistantMessage(content=[TextBlock(text="I'll run the bash command to echo the message.")], model='claude-sonnet-4-5-20250929', parent_tool_use_id=None)
AssistantMessage(content=[ToolUseBlock(id='toolu_01GSdQauBw8vtEroSiVYdYXj', name='Bash', input={'command': "echo 'Hello from hooks example!'", 'description': 'Echo a greeting message'})], model='claude-sonnet-4-5-20250929', parent_tool_use_id=None)
UserMessage(content=[ToolResultBlock(tool_use_id='toolu_01GSdQauBw8vtEroSiVYdYXj', content='Hello from hooks example\\!', is_error=False)], parent_tool_use_id=None)
AssistantMessage(content=[TextBlock(text='The command executed successfully and printed: `Hello from hooks example!`')], model='claude-sonnet-4-5-20250929', parent_tool_use_id=None)
ResultMessage(subtype='success', duration_ms=7572, duration_api_ms=16764, is_error=False, num_turns=9, session_id='04733b4c-3f8d-473b-bc98-13d8bf791f68', total_cost_usd=0.028661349999999995, usage={'input_tokens': 8, 'cache_creation_input_tokens': 275, 'cache_read_input_tokens': 29457, 'output_tokens': 108, 'server_tool_use': {'web_search_requests': 0}, 'service_tier': 'standard', 'cache_creation': {'ephemeral_1h_input_tokens': 0, 'ephemeral_5m_input_tokens': 275}}, result='The command executed successfully and printed: `Hello from hooks example!`')
```

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.