anthropics / anthropics/claude-agent-sdk-python

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

Abierto
#265 0 comentarios 2 reacciones 1 asignado Reclamado por @dhollman Ver en GitHub
bug
Lenguaje dominante
Python
Estrellas
8.1k
Forks
1.3k
Merge medio
2 d 31 min
PR fusionados (30 d)
1

Descripción

## 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!`')
```

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.