anthropics / anthropics/claude-agent-sdk-python

PreToolUse hooks not called for Read tool when file doesn't exist

Đang mở
#316 4 bình luận 0 reaction 0 người được giao Xem trên GitHub
bug
Ngôn ngữ chính
Python
Star
8.1k
Fork
1.3k
Merge trung bình
2 ngày 31 phút
Pull request đã merge (30 ngày)
1

Mô tả

PreToolUse hooks are **not invoked** when Claude calls the `Read` tool with a file path that doesn't exist. The hook is only called when the file exists. This contradicts the [official documentation](https://code.claude.com/docs/en/hooks) which states that PreToolUse hooks execute "after Claude creates tool parameters and **before processing the tool call**".

This breaks legitimate use cases like path translation where hooks need to modify file paths before validation occurs.

## Expected Behavior

According to the documentation, PreToolUse hooks should be called **before** the tool processes the call, allowing hooks to:
- Validate inputs
- Modify tool parameters using `updatedInput`
- Block execution with `permissionDecision: "deny"`

The hook should be invoked **regardless of whether the file exists**.

## Actual Behavior

When Claude calls `Read` with a non-existent file path:
1. The SDK validates that the file doesn't exist
2. The SDK returns "File does not exist" error
3. **The PreToolUse hook is never called**

When Claude calls `Read` with an existing file path:
1. The PreToolUse hook is called ✅
2. The file is read successfully ✅

## Reproduction

See the minimal reproduction script: [reproduce_hook_bug.py](https://gist.github.com/feroult/731c564f7920859d9dec2e47a358fa11)

**Run it:**
```bash
pip install claude-agent-sdk
python reproduce_hook_bug.py
```

**Expected output:**
```
[HOOK CALLED] for TEST 1 (/workspace/test.txt)
[HOOK CALLED] for TEST 2 (/tmp/hook_test/test.txt)
```

**Actual output:**
```
[HOOK CALLED] for TEST 2 only (/tmp/hook_test/test.txt)
```

## Environment

- **Claude Code**: 2.0.35 (latest)
- **claude-agent-sdk**: 0.1.6 (latest - tested on 0.1.4, 0.1.5, 0.1.6)
- **Python**: 3.11
- **OS**: Linux

## Impact

This bug breaks:
1. **Path translation hooks** - Cannot translate paths like `/workspace/*` to actual locations before validation
2. **Custom file resolution** - Cannot implement custom file lookup logic
3. **Input sanitization** - Cannot normalize/validate file paths before they're checked
4. **Audit logging** - Cannot log all Read attempts, only successful ones

The `updatedInput` feature is essentially useless for file path modification because hooks don't fire early enough.

## Workaround

None found. The only way to make hooks work is to ensure files exist at the exact paths Claude uses, which defeats the purpose of path translation hooks.

## Related Issues

Similar to #7082 but different - that issue was about permission deny rules, this is about hooks not being called at all for non-existent paths.

Hướng dẫn đóng góp

Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.