claude-code-hooks-daemon は何をしますか?
Claude Code 用のデーモンベースフックシステム。遅延起動、自動シャットダウン、プロジェクトレベルのハンドラ拡張性を提供します。
概要
このスキルは、Claude Code のフック機構を拡張し、デーモンプロセスとしてバックグラウンドで永続的に動作するフックハンドラを管理します。従来の各フックイベントごとにスクリプトを起動する方式と比較して、以下の利点があります。
- パフォーマンス: デーモンが常駐しているため、フック呼び出しのオーバーヘッドが低減されます。
- 状態管理: デーモン内で状態を保持できるため、複数のフック呼び出しにまたがる処理が容易になります。
- リソース効率: 必要なときだけデーモンを起動し、不要になれば自動的に終了します。
仕組み
- Claude Code がフックイベント(例:
onToolUse、onTaskStart)を発行します。 - このスキルは、設定されたフックハンドラをデーモンプロセスとして起動します(未起動の場合)。
- デーモンは標準入力(stdin)を介してフックイベントのJSONデータを受け取り、標準出力(stdout)に結果を返します。
- 一定時間(デフォルトでは5分)フック呼び出しがない場合、デーモンは自動的にシャットダウンされます。
設定
プロジェクトのルートに hooks.config.json というファイルを作成し、以下のように設定します。
{
"handlers": {
"onToolUse": "node ./my-handler.js",
"onTaskStart": ["python3", "./my-other-handler.py"]
},
"daemon": {
"idleTimeout": 300000,
"startupDelay": 100
}
}
handlers: フックイベント名と、そのイベントを処理するコマンド(またはコマンド配列)のマッピング。daemon.idleTimeout: アイドルタイムアウト(ミリ秒)。この時間を超えてフック呼び出しがないとデーモンがシャットダウンします。daemon.startupDelay: 起動遅延(ミリ秒)。最初のフック呼び出しから実際にデーモンを起動するまでの待機時間です。
使用例
シンプルなNode.jsハンドラ
// my-handler.js
process.stdin.on('data', (data) => {
const event = JSON.parse(data.toString());
console.log(`フックイベント受信: ${event.type}`);
// イベントを処理...
process.stdout.write(JSON.stringify({ processed: true }));
});
Pythonハンドラ
# my-other-handler.py
import sys
import json
for line in sys.stdin:
event = json.loads(line)
print(f"フックイベント受信: {event['type']}", file=sys.stderr)
# イベントを処理...
print(json.dumps({"processed": True}))
sys.stdout.flush()
開発
このスキル自体の開発に参加するには、リポジトリをクローンし、依存関係をインストールしてください。
git clone https://github.com/Edmonds-Commerce-Limited/claude-code-hooks-daemon.git
cd claude-code-hooks-daemon
npm install
テストを実行するには:
npm test
ライセンス
MIT