原文(日本語に翻訳)
TaskCreatedフックイベントとそのブロッキング動作をドキュメントに記載しました。
原文(英語)
Documented TaskCreated hook event and its blocking behavior
概要
Claude Codeのフックシステムにおいて、TaskCreated イベントが公式ドキュメントに追加されました。このフックイベントは新しいサブエージェントタスクが作成される際に発火し、ブロッキング動作(フックが完了するまでタスクの実行を待機させる)があることが明記されました。自動化ワークフローやタスク承認システムを構築する際に活用できます。
基本的な使い方
json
// .claude/settings.json での TaskCreated フック設定
{
"hooks": {
"TaskCreated": [
{
"type": "command",
"command": "echo 'New task created' >> /tmp/claude-tasks.log"
}
]
}
}TaskCreated フックはブロッキング動作を持ちます。フックが完了(または失敗)するまで、新しいタスクの実行は開始されません。
実践例
タスク承認システムの構築
bash
#!/bin/bash
# TaskCreated フックスクリプト: タスク作成時に承認を求める
TASK_INFO="$CLAUDE_TASK_DESCRIPTION"
# ユーザーに通知(macOS)
osascript -e "display notification \"新しいタスク: $TASK_INFO\" with title \"Claude Code\""
# タスクの内容をログに記録
echo "$(date): Task created - $TASK_INFO" >> ~/claude-task-log.txt
# 終了コード0で承認、1で拒否
exit 0タスク実行の監査ログ
python
#!/usr/bin/env python3
# TaskCreated フックでタスクを監査ログに記録
import json
import sys
import os
from datetime import datetime
# フックの入力を読み込む
task_data = json.load(sys.stdin) if not sys.stdin.isatty() else {}
log_entry = {
"timestamp": datetime.now().isoformat(),
"event": "TaskCreated",
"task": task_data,
"user": os.getenv("USER"),
"session": os.getenv("CLAUDE_SESSION_ID")
}
with open("/var/log/claude-tasks.jsonl", "a") as f:
f.write(json.dumps(log_entry) + "\n")
print(f"Task logged: {task_data.get('description', 'Unknown')}")
sys.exit(0) # 承認タスクのフィルタリング
bash
#!/bin/bash
# TaskCreated フック: 特定のタスクをブロックする
TASK_DESC="${CLAUDE_TASK_DESCRIPTION:-}"
# 危険なキーワードが含まれる場合はブロック
if echo "$TASK_DESC" | grep -qE "(delete|remove|drop) (database|table|production)"; then
echo "ERROR: Dangerous task blocked: $TASK_DESC" >&2
exit 1 # タスクを拒否
fi
exit 0 # タスクを承認注意点
TaskCreatedフックはブロッキングフックです。フックの実行が完了するまでタスクは開始されません- フックが失敗(非ゼロ終了コード)すると、タスクの作成がブロックされます
- 長時間実行するフックはタスクの開始を遅延させます。タイムアウトを設定することを推奨します
TaskCreatedはサブエージェントタスクが作成されるときに発火します(ユーザーが直接入力するメッセージとは異なります)