anthropics / anthropics/claude-agent-sdk-python

[BUG] --include-hook-events flag not emitting hook lifecycle events to message stream

Aberta
#991 2 comentários 1 reação 0 responsáveis 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

## Problem
When using the Claude Agent SDK (Python v0.2.87) with `include_hook_events=True`,
hook callbacks execute correctly but `hook_started` and `hook_response` system messages
are not emitted to the message stream, despite the `--include-hook-events` CLI flag
being passed to Claude Code.

## Expected Behavior
According to the [Agent SDK documentation](https://code.claude.com/docs/en/agent-sdk/hooks),
when `include_hook_events=True` is set, the CLI should emit hook lifecycle events
(`hook_started` and `hook_response` messages with `type: "system"` and `subtype` in
`["hook_started", "hook_response"]`) into the message stream as `HookEventMessage` objects.

## Actual Behavior
- Hook callbacks ARE returning correct `hookSpecificOutput` format
- `--include-hook-events` CLI flag IS being passed to Claude Code
- BUT `hook_started` and `hook_response` system messages NEVER appear in the stream
- Only `init` and `status` system messages appear

## Steps to Reproduce
1. Use Claude Agent SDK (Python) with `include_hook_events=True`
2. Register `PreToolUse` and `PostToolUse` hooks
3. Make a query that triggers tool use
4. Listen to message stream with `client.receive_messages()`
5. Observe that `HookEventMessage` objects never appear

## Environment
- Claude Code CLI: 2.1.150
- Claude Agent SDK (Python): 0.2.87
- Output format: stream-json
- Mode: Streaming/bidirectional

## Logs
Hook callbacks execute and print to console, confirming they're being called.
However, no `hook_started` or `hook_response` messages appear in the parsed message stream.

python api.py
INFO: Started server process [34419]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
INFO: 127.0.0.1:51645 - "GET /chat HTTP/1.1" 200 OK
****************************************************************************************************
PreToolUse Event:
{'session_id': 'a561c82a-f6d7-4c89-b6f3-f839625b5dd1', 'transcript_path': '/Users/raman/.claude/projects/-Users-raman-Developer-claude-agent-sdk-backend/a561c82a-f6d7-4c89-b6f3-f839625b5dd1.jsonl', 'cwd': '/Users/raman/Developer/claude-agent-sdk/backend', 'permission_mode': 'default', 'hook_event_name': 'PreToolUse', 'tool_name': 'Bash', 'tool_input': {'command': 'find . -type f ! -path "*/node_modules/*" ! -path "*/venv/*" | wc -l', 'description': 'Count files in current directory, excluding node_modules and venv'}, 'tool_use_id': 'toolu_019AASM8eM8emLZiY565mA7N'}
****************************************************************************************************
****************************************************************************************************
PostToolUse Event:
{'session_id': 'a561c82a-f6d7-4c89-b6f3-f839625b5dd1', 'transcript_path': '/Users/raman/.claude/projects/-Users-raman-Developer-claude-agent-sdk-backend/a561c82a-f6d7-4c89-b6f3-f839625b5dd1.jsonl', 'cwd': '/Users/raman/Developer/claude-agent-sdk/backend', 'permission_mode': 'default', 'hook_event_name': 'PostToolUse', 'tool_name': 'Bash', 'tool_input': {'command': 'find . -type f ! -path "*/node_modules/*" ! -path "*/venv/*" | wc -l', 'description': 'Count files in current directory, excluding node_modules and venv'}, 'tool_response': {'stdout': ' 3', 'stderr': '', 'interrupted': False, 'isImage': False, 'noOutputExpected': False}, 'tool_use_id': 'toolu_019AASM8eM8emLZiY565mA7N', 'duration_ms': 59}
****************************************************************************************************

##

[api.py](https://github.com/user-attachments/files/28233333/api.py)

SSE UI STREAMS LOGS
data: {"type": "system", "subtype": "init"}

data: {"type": "system", "subtype": "status"}

data: {"type": "thinking", "thinking": "The user wants to find the number of files in the current working directory, ignoring node_modules and venv folders.\n\nI should use the Bash tool to run a command that counts files while excluding those directories. A good approach would be to use `find` command with appropriate exclusion patterns.\n\nLet me run a command to count the files."}

data: {"type": "tool_use", "tool": "Bash", "input": {"command": "find . -type f ! -path \"*/node_modules/*\" ! -path \"*/venv/*\" | wc -l", "description": "Count files in current directory, excluding node_modules and venv"}}

data: {"type": "system", "subtype": "status"}

data: {"type": "thinking", "thinking": "The command found 3 files in the current working directory when excluding node_modules and venv directories."}

data: {"type": "text", "text": "There are **3 files** in the current working directory (excluding `node_modules` and `venv` directories)."}

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.