Skip to content

原文(日本語に翻訳)

  • フック対応スキルがモデルによって呼び出された際に、スキルフックがイベントごとに2回発火する問題を修正

原文(英語)

  • Fixed skill hooks firing twice per event when a hooks-enabled skill is invoked by the model

概要

フック(hooks)が定義されたスキルがClaude(モデル)によって呼び出された場合に、各イベントに対してフックが2回実行されてしまうバグが修正されました。例えば、PreToolUseフック付きのスキルをモデルが自動的に呼び出すと、そのフックが1回のツール呼び出しに対して2回発火していました。この修正により、フックはイベントごとに正確に1回だけ実行されます。

基本的な使い方

フックを含むスキルを通常通り使用できます。修正後はフックが正しく1回だけ実行されます:

yaml
# スキルのfrontmatterでフックを定義
---
hooks:
  PreToolUse:
    - matcher: "Bash"
      command: "echo 'ツール実行前の処理'"
---

# スキルの本文...

実践例

ログ記録フック付きスキル

ツール使用をログに記録するフックが正しく1回だけ記録されるようになりました:

yaml
---
hooks:
  PostToolUse:
    - matcher: "*"
      command: "echo \"$(date): $TOOL_NAME executed\" >> /tmp/claude-tool-log.txt"
---

このスキルはツール使用をログに記録します。

以前は1回のツール実行で2行のログが記録されていましたが、修正後は正しく1行だけ記録されます。

バリデーションフック付きスキル

セキュリティバリデーションを行うフックが二重実行されなくなりました:

yaml
---
hooks:
  PreToolUse:
    - matcher: "Bash"
      command: "validate-command.sh"
---

安全なコマンドのみ実行を許可するスキルです。

バリデーションスクリプトが1回だけ実行されるため、パフォーマンスの無駄やログの重複が解消されます。

注意点

  • この問題は「モデルによって呼び出された」場合にのみ発生していました。ユーザーがスラッシュコマンドで直接スキルを呼び出した場合は影響していませんでした
  • フック内で副作用を伴う処理(ファイル書き込み、API呼び出しなど)を行っている場合、二重実行が解消されたことで結果が変わる可能性があります
  • 非同期フック(async hooks)でも同様に修正されています

関連情報