Replace prompt-based stop hook with Sonnet-powered analysis (#2331)
## Summary
- Replace broken prompt-based Stop hook with command-based hook using
Claude Sonnet
- Add .claude/hooks/stop-hook.py that reads conversation transcript and
uses Sonnet to analyze task completion
- Includes infinite loop prevention via stop_hook_active check
- Add unit tests for the stop hook
## Test plan
- [x] Run pytest .claude/hooks/tests/test_stop_hook.py -v - all 9 tests
pass
- [ ] Manual testing: verify stop hook fires and correctly analyzes task
completion
#skip-bugbot
<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Replaced the broken prompt-based stop hook with a command-based hook
that blocks when tasks remain and uses Sonnet analysis as a fallback.
Adds loop protection and tests.
- **New Features**
- Added .claude/hooks/stop-hook.py that blocks when
TaskCreate/TaskUpdate show remaining tasks, returning
{"decision":"block","reason":...}. If none remain, it analyzes a 32k
transcript (middle truncation) with Sonnet.
- Added unit tests and a stop_hook_active guard to prevent infinite
loops.
- **Refactors**
- Updated .claude/settings.json to use the command-based hook (30000 ms
timeout) instead of the prompt hook.
- Added --no-session-persistence to Claude CLI calls in stop-hook.py and
permission-request-hook.py.
<sup>Written for commit 575426cee9efb0fa7e1f4be64a8405ae2e717a3b.
Summary will update on new commits.</sup>
<!-- End of auto-generated description by cubic. -->
<!-- devin-review-badge-begin -->
---
<a href="https://app.devin.ai/review/dyad-sh/dyad/pull/2331">
<picture>
<source media="(prefers-color-scheme: dark)"
srcset="https://static.devin.ai/assets/gh-open-in-devin-review-dark.svg?v=1">
<img
src="https://static.devin.ai/assets/gh-open-in-devin-review-light.svg?v=1"
alt="Open with Devin">
</picture>
</a>
<!-- devin-review-badge-end -->
---------
Co-authored-by:
Claude Opus 4.5 <noreply@anthropic.com>
正在显示
.claude/hooks/stop-hook.py
0 → 100755
请
注册
或者
登录
后发表评论