メインコンテンツへスキップ
Droidフックは、Droidのライフサイクルの様々な段階で実行されるユーザー定義のシェルコマンドです。フックは、Droidの動作を決定論的に制御し、Droidが選択的に実行するのではなく、特定のアクションが常に実行されることを保証します。
フックのリファレンスドキュメントはフックリファレンスを参照してください。
フックの使用例には以下があります:
  • 通知: Droidがユーザーの入力や実行許可を待機している際の通知方法をカスタマイズします。
  • 自動フォーマット: ファイル編集後に.tsファイルに対してprettierを、.goファイルに対してgofmtを実行します。
  • ログ記録: コンプライアンスやデバッグのために、実行されたすべてのコマンドを追跡・カウントします。
  • フィードバック: Droidがコードベースの規約に従わないコードを生成した際に、自動フィードバックを提供します。
  • カスタム権限: 本番ファイルや機密ディレクトリへの変更をブロックします。
これらのルールをプロンプト指示ではなくフックとしてエンコードすることで、提案を実行される度に毎回動作するアプリレベルのコードに変換できます。
フックは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の動作を異なる方法で制御できます。

クイックスタート

このクイックスタートでは、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が入力を必要とするときにデスクトップ通知を受け取ります:

ファイル保護フック

機密ファイルへの編集をブロックします:

詳細情報

  • フックのリファレンスドキュメントについては、フックリファレンスを参照してください。
  • 包括的なセキュリティのベストプラクティスと安全ガイドラインについては、フックリファレンスドキュメントのセキュリティ上の考慮事項を参照してください。
  • トラブルシューティング手順とデバッグテクニックについては、フックリファレンスドキュメントのデバッグを参照してください。