- 通知: Droidがユーザーの入力や実行許可を待機している際の通知方法をカスタマイズします。
- 自動フォーマット: ファイル編集後に.tsファイルに対して
prettierを、.goファイルに対してgofmtを実行します。 - ログ記録: コンプライアンスやデバッグのために、実行されたすべてのコマンドを追跡・カウントします。
- フィードバック: Droidがコードベースの規約に従わないコードを生成した際に、自動フィードバックを提供します。
- カスタム権限: 本番ファイルや機密ディレクトリへの変更をブロックします。
重要: フックコマンドでスクリプトを参照するときは、相対パスではなく必ず絶対パスを使用してください。
フックはDroidの現在の作業ディレクトリから実行されますが、それがプロジェクトルートとは限りません。
プロジェクト相対のスクリプトには
$FACTORY_PROJECT_DIRを使用します(例: "$FACTORY_PROJECT_DIR"/.factory/hooks/script.sh)
グローバルスクリプトには完全パスを使用します(例: /usr/local/bin/my-hook.shまたは~/.factory/hooks/script.sh)。フックイベント概要
Droidは、ワークフローの異なる段階で実行される複数のフックイベントを提供します:- PreToolUse: ツール呼び出し前に実行(ブロック可能)
- PostToolUse: ツール呼び出し完了後に実行
- UserPromptSubmit: ユーザーがプロンプトを送信し、Droidが処理する前に実行
- Notification: Droid が通知を送信する際に実行
- Stop: Droidが応答を終了する際に実行
- SubagentStop: サブDroidタスクが完了する際に実行
- PreCompact: Droidがコンパクト操作を実行しようとする前に実行
- SessionStart: Droidが新しいセッションを開始するか、既存のセッションを再開する際に実行
- SessionEnd: Droidセッションが終了する際に実行
クイックスタート
このクイックスタートでは、Droidが実行するシェルコマンドをログ記録するフックを追加します。前提条件
コマンドラインでのJSON処理のためにjqをインストールしてください。
ステップ1: フック設定を開く
/hooks スラッシュコマンドを実行し、PreToolUseフックイベントを選択します。
PreToolUseフックはツール呼び出し前に実行され、異なる対応についてDroidにフィードバックを提供しながらツール呼び出しをブロックできます。
ステップ2: マッチャーを追加
+ Add new matcher…を選択して、Executeツール呼び出しのみでフックを実行します。
マッチャーにExecuteと入力します。
すべてのツールに一致させるには
*を使用できます。ステップ3: フックを追加
+ Add new hook…を選択し、以下のコマンドを入力します:
ステップ4: 設定を保存
ストレージの場所については、ホームディレクトリにログ記録しているためUser settingsを選択します。これにより、フックは現在のプロジェクトだけでなく、すべてのプロジェクトに適用されます。
その後、REPLに戻るまでEscを押します。フックが登録されました!
ステップ5: フックを確認
再度/hooksを実行するか、~/.factory/hooks.jsonを開いて設定を確認します:
ステップ6: フックをテスト
Droidにlsのような簡単なコマンドを実行するよう依頼し、ログファイルを確認します:
その他の例
コードフォーマットフック
編集後にTypeScriptファイルを自動フォーマット:Markdownフォーマットフック
markdownファイルの言語タグの欠落やフォーマットの問題を自動修正:.factory/hooks/markdown_formatter.pyを作成:
- ラベルなしコードブロックのプログラミング言語を検出します
- シンタックスハイライト用に適切な言語タグを追加します
- コード内容を保持しながら過剰な空行を修正します
- Markdownファイル(
.md、.mdx)のみを処理します
カスタム通知フック
Droidが入力を必要とするときにデスクトップ通知を受け取ります:ファイル保護フック
機密ファイルへの編集をブロックします:詳細情報
- フックのリファレンスドキュメントについては、フックリファレンスを参照してください。
- 包括的なセキュリティのベストプラクティスと安全ガイドラインについては、フックリファレンスドキュメントのセキュリティ上の考慮事項を参照してください。
- トラブルシューティング手順とデバッグテクニックについては、フックリファレンスドキュメントのデバッグを参照してください。
