SPINEとトリガー
Triggerfishshはエージェントの動作を定義するために2つのmarkdownファイルを使用します: SPINE.mdはエージェントのアイデンティティを制御し、TRIGGER.mdはエージェントが プロアクティブに行うことを制御します。どちらも自由形式のmarkdown — 通常の文章で記述します。
SPINE.md — エージェントアイデンティティ
SPINE.mdはエージェントのシステムプロンプトの基盤です。エージェントの名前、 パーソナリティ、ミッション、知識ドメイン、境界を定義します。Triggerfishshは メッセージを処理するたびにこのファイルを読み込むため、変更はすぐに反映されます。
ファイルの場所
~/.triggerfish/SPINE.mdマルチエージェントのセットアップでは、各エージェントが独自のSPINE.mdを持ちます:
~/.triggerfish/workspace/<agent-id>/SPINE.mdはじめに
セットアップウィザード(triggerfish dive)が回答に基づいてスターターSPINE.mdを 生成します。いつでも自由に編集できます — ただのmarkdownです。
効果的なSPINE.mdの書き方
良いSPINE.mdは具体的です。エージェントの役割について具体的に書くほど、パフォーマンスが 向上します。推奨する構造は以下の通りです:
markdown
# アイデンティティ
あなたはReefです。SarahのパーソナルなAIアシスタントです。
# ミッション
Sarahが整理された状態を保ち、情報を得て、生産的であるよう支援します。
カレンダー管理、メールのトリアージ、タスク追跡を優先します。
# コミュニケーションスタイル
- 簡潔で直接的であること。余計な言葉は不要。
- 3つ以上の項目にはBullet pointを使用する。
- 不確かな場合は、推測するのではなく、そう伝える。
- チャンネルの形式に合わせる:WhatsAppはカジュアル、Slackはプロフェッショナル。
# ドメイン知識
- SarahはAcme Corpのプロダクトマネージャーです。
- 主要ツール: タスク管理のLinear、Google Calendar、Gmail、Slack。
- VIP連絡先: @boss(David Chen)、@skip(Maria Lopez)。
- 現在の優先事項: Q2ロードマップ、モバイルアプリのリリース。
# 境界
- 明示的な承認なしに外部の連絡先にメッセージを送信しないこと。
- 金融取引を行わないこと。
- カレンダーイベントを削除または変更する前に必ず確認すること。
- 個人チャンネルで仕事のトピックを議論する場合は、分類の境界についてSarahに
注意を促すこと。
# レスポンスの好み
- デフォルトは短いレスポンス(2〜3文)。
- 質問に詳細が必要な場合にのみ長いレスポンスを使用する。
- コードには主要な決定を説明する簡単なコメントを含める。ベストプラクティス
パーソナリティについて具体的に書いてください。「役に立ってください」ではなく、
「簡潔で直接的であり、明確さのためにBullet pointを使用してください」と書きましょう。 :::
**オーナーに関するコンテキストを含めてください。**役割、ツール、優先事項を
知ることで、エージェントのパフォーマンスが向上します。 :::
**明示的な境界を設定してください。**エージェントが絶対に行うべきでないことを
定義してください。これはポリシーエンジンの決定論的適用を補完します(ただし代替では ありません)。 :::
SPINE.mdの指示はLLMの動作をガイドしますが、セキュリティコントロールでは
ありません。実施可能な制限には、triggerfish.yamlのポリシーエンジンを使用してください。 ポリシーエンジンは決定論的でありバイパスできません — SPINE.mdの指示は可能です。 :::
TRIGGER.md — プロアクティブ動作
TRIGGER.mdは定期的なウェイクアップ中にエージェントが何を確認・監視・行動すべきかを 定義します。Cronジョブ(スケジュールに固定タスクを実行)とは異なり、トリガーはエージェントに 条件を評価してアクションが必要かどうかを決定する裁量を与えます。
ファイルの場所
~/.triggerfish/TRIGGER.mdマルチエージェントのセットアップでは:
~/.triggerfish/workspace/<agent-id>/TRIGGER.mdトリガーの仕組み
- トリガーループが設定された間隔でエージェントをウェイクアップします(
triggerfish.yamlで設定) - Triggerfishshは
TRIGGER.mdを読み込み、エージェントに提示します - エージェントは各項目を評価して必要に応じてアクションを実行します
- すべてのトリガーアクションは通常のポリシーhookを通過します
- トリガーセッションは分類の上限付きで実行されます(YAMLでも設定)
- 静粛時間が尊重されます — その時間中はトリガーが起動しません
YAMLでのトリガー設定
triggerfish.yamlでタイミングと制約を設定します:
yaml
trigger:
interval: 30m # 30分ごとにチェック
classification: INTERNAL # トリガーセッションの最大taint上限
quiet_hours: "22:00-07:00" # この時間中はウェイクアップしないTRIGGER.mdの書き方
優先度別にトリガーを整理します。何がアクション可能とみなされ、エージェントが それについて何をすべきかを具体的に記述します。
markdown
# 優先チェック
- 1時間以上経過した全チャンネルの未読メッセージ — まとめてプライマリチャンネルに通知。
- 次の24時間のカレンダーの競合 — フラグを立て、解決策を提案。
- Linearの期限切れタスク — 期限超過日数とともにリスト表示。
# 監視
- GitHub: 私のレビュー待ちのPR — 4時間以上経過している場合は通知。
- Email: VIP連絡先(David Chen、Maria Lopez)からのもの — 静粛時間に関わらず
即座に通知のためフラグを立てる。
- Slack: #incidentsチャンネルでのメンション — 未解決の場合は要約してエスカレート。
# プロアクティブ
- 朝(7〜9時)の場合は、カレンダー、天気、最優先事項トップ3のデイリーブリーフィングを準備。
- 金曜日午後の場合は、完了したタスクとオープンアイテムの週次サマリーを下書き。
- 未読数が50を超えた場合は、バッチトリアージを提案。例:最小限のTRIGGER.md
シンプルな出発点が必要な場合:
markdown
# 各ウェイクアップ時にチェック
- 1時間以上経過した未読メッセージ
- 次の4時間のカレンダーイベント
- メールの緊急事項例:開発者向けTRIGGER.md
markdown
# 高優先度
- mainブランチのCI失敗 — 調査して通知。
- 2時間以上経過した私のレビュー待ちPR。
- 過去1時間の「critical」重大度のSentryエラー。
# 監視
- DependabotのPR — パッチ更新は自動承認、minor/majorはフラグを立てる。
- ビルド時間が10分を超えるトレンド — 週次でレポート。
- 3日間更新のない私に割り当てられたオープンIssue。
# デイリー
- 朝: 夜間のCIの実行とデプロイ状況を要約。
- 夕方: 私が開いたPRでまだレビュー待ちのものをリスト表示。トリガーとポリシーエンジン
すべてのトリガーアクションは、インタラクティブな会話と同じポリシー適用の対象となります:
- 各トリガーウェイクアップは、独自のtaint追跡を持つ隔離セッションを生成します
- YAML設定の分類上限によって、トリガーがアクセスできるデータが制限されます
- ライトダウン禁止ルールが適用されます — トリガーが機密データにアクセスした場合、 パブリックチャンネルに結果を送信できません
- すべてのトリガーアクションは監査証跡にログ記録されます
TRIGGER.mdが存在しない場合でも、設定された間隔でトリガーウェイクアップは
発生します。エージェントは一般的な知識とSPINE.mdを使用して、何に注意が必要かを 判断します。最良の結果を得るには、TRIGGER.mdを作成してください。 :::
SPINE.md対TRIGGER.md
| 側面 | SPINE.md | TRIGGER.md |
|---|---|---|
| 目的 | エージェントのアイデンティティを定義 | エージェントが監視するものを定義 |
| 読み込み | すべてのメッセージ | 各トリガーウェイクアップ |
| スコープ | すべての会話 | トリガーセッションのみ |
| 影響 | パーソナリティ、知識、境界 | プロアクティブなチェックとアクション |
| 必須 | はい(diveウィザードで生成) | いいえ(ただし推奨) |
次のステップ
- triggerfish.yamlでトリガーのタイミングとcronジョブを設定します
- コマンドリファレンスですべての利用可能なCLIコマンドを確認します
