プロアクティブチャット

エージェントがユーザーからの入力を待つのではなく、自発的に会話を開始するためのスキルです。Hermes と OpenClaw をサポートします。

プロアクティブチャット とは?

このスキルは、AIエージェント(特にHermesやOpenClaw)が、ユーザーからのプロンプトを待つのではなく、主体的に会話を開始できるようにするための実装です。これはネイティブ機能ではなく、スキルレベルでの実装であり、エージェントが持続的なメモリ、セッションを跨いだ情報呼び出し、スケジューラーやcronジョブなどの機能を備えている必要があります。主な目的は、ユーザーの返信率を最大化し、記憶の蓄積速度を高め、ユーザーモデルを洗練させることです。メッセージ設計では、話題そのものよりも視点(パースペクティブ)を重視し、ユーザーが答えやすく無視しにくい、簡潔でオープンなループを持つメッセージを生成します。また、テスト用の高速モードや、ユーザーの返信に応じて学習する仕組みも備えており、長期的なユーザーエンゲージメントの向上を目指します。

対応~Claude Code~Codex CLI~Cursor
npx skills add bwjoke/proactive-chat

Installed? Explore more 生産性&コラボレーション skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

プロアクティブチャット は何をしますか?

ユーザーがエージェントに 受動的にプロンプトを待つのではなく、意図的に会話を開始させる 場合にこのスキルを使用します。

このスキルについて

これは スキルレベルの実装 であり、ネイティブな製品サポートではありません。

つまり:

  • 有用なアクティブラーニングループをすでに作成できます。
  • ただし、ホストエージェントが以下を備えている必要があります:
    • 永続的なメモリ
    • セッションを跨いだ情報呼び出し
    • スケジューラー / cron / ハートビートプリミティブ
    • ユーザーへのメッセージ配信
  • Hermes では、cronjob + memory + session_search を使用します。
  • OpenClaw では、それに最も近いもの(ハートビート/cron/スケジュールタスク/自律ループ)を使用します。

ランタイムヘルパー

このスキルにはヘルパースクリプトが付属しています:

  • scripts/proactive_runtime.py

スケジューリングフローを毎回手動でJSONを作り直す代わりに、決定論的にするためにこれを使用します。

推奨される Hermes フロー:

  1. proactive_runtime.py を使用して状態ファイルを初期化または更新する
  2. その状態ファイルからcronプロンプトをレンダリングする
  3. Hermes cronjob を作成/更新/一時停止/実行する
  4. 返された job_id を状態ファイルに保存する

便利なサブコマンド:

  • init-state
  • show-state
  • enable-high-speed-test-mode
  • disable-high-speed-test-mode
  • render-cron-prompt
  • render-job-config

コア目標

目標はミニ記事をプッシュすること ではありません。 目標は以下を最大化することです:

  1. 返信率
  2. 記憶の蓄積速度
  3. ユーザーモデルの洗練度
  4. トピックとアングルの反復品質の経時的な向上

フライホイールは以下の通りです:

開始する → 反応を観察する → どのアングルが機能するかを学ぶ → コンパクトな教訓を保存する → 次回より良く開始する

視点優先

トピックよりも視点が重要です。

関連性の高いトピックでも、アングルが平坦だと失敗する可能性があります。 強いアングルがあれば、平凡なトピックでも突然返信したくなるものになります。

したがって、次のオープナーを選択するときは、以下の順序で最適化します:

  1. 正しい 視点
  2. 正しい ユーザーアンカー
  3. 正しい トピック

良いプロアクティブチャットとは:

  • ユーザーがすでに気にかけているものに対する新しいレンズ
  • ユーザーが解決したいと思う緊張感
  • 答えやすく、しかし無視しにくい質問

悪いプロアクティブチャットとは:

  • 一般的な状況確認
  • 幅広くて暖かいだけの埋め草
  • 記事モード
  • 個人的なフックのないトレンド追い

英語のトリガーコマンド

ユーザーが明示的にモードを制御できるように、英語のコマンドフレーズを使用します。

主要なコマンド:

  • enable proactive chat
  • disable proactive chat
  • proactive chat status
  • show proactive chat settings
  • set proactive chat interval to every 4 hours
  • set proactive chat max length to 80 characters
  • focus proactive chat more on me
  • make proactive chat use more fresh web context
  • enable proactive chat high-speed test mode
  • disable proactive chat high-speed test mode
  • trigger proactive chat now

自然言語のバリエーションもカウントされますが、表示されるコマンド語彙は英語のままにしてください。

デフォルト設定

ユーザーから特に指示がない限り、以下を使用します:

  • アイドル時のアウトリーチ間隔: 2時間ごと
  • 中国語メッセージ制限: 100 中国語文字
  • 英語メッセージ制限: 200 文字
  • 自己関連トピックの重み: 0.7
  • 外界トピックの重み: 0.3
  • リンク予算: プロアクティブメッセージあたり最大1つ
  • 最近の返信クールダウン: ユーザーが過去2時間以内に返信した場合、新しいプロアクティブオープナーは送信しない
  • トピック繰り返しクールダウン: 無視されたアングルをすぐに繰り返さない
  • 突然変異バイアス: 好奇心を高め、ランダムにならない場合、ドメイン間の組み合わせを許可する

高速テストモード

このモードは簡単な検証のためだけに使用します。

コマンド:

  • enable proactive chat high-speed test mode
  • disable proactive chat high-speed test mode

有効時の動作:

  • スケジュール: 1分ごと
  • 期間上限: 合計10分
  • 実行上限: ユーザーが返信しない場合、合計10回のプロアクティブ送信
  • テストバースト後、モードが無効になるか、ジョブが通常モードで再作成されると、通常の間隔に戻る

このモードは、エンドツーエンドのプロアクティブループが実際に起動するかをテストするために存在します。通常の使用のためではありません。

スコープルール

1:1 のコンテキストを優先

このモードは以下で最も効果的に機能します:

  • DM
  • プライベートチャット
  • ユーザー固有のスレッド

以下では注意:

  • 共有チャンネル
  • グループチャット
  • 公開ルーム

現在のルームが明らかに共有ルームである場合、有効にする前に簡単に警告します。デフォルトでは、ユーザーがそのルームを使用することを明示的に要求しない限り、共有スペースにスパムを送信しません。

メッセージ設計原則

1) 拍手喝采ではなく、返信のために最適化する

優れたプロアクティブメッセージは、答えやすく、無視しにくいものです。

2) 世界よりもユーザーを優先する

2つのトピックバケットがあります:

  • A. ユーザー自身
  • B. 外界

A に大きく偏ります。 B を使用する場合でも、可能な限り A に引き戻します:

  • ユーザーの好み
  • ユーザーの判断
  • ユーザーの現在の目標
  • ユーザーの盲点
  • ユーザーのアイデンティティ / 自己モデル / 好み

3) 圧縮は完全性に勝る

エッセイを書き殴らないでください。 デフォルトの形式:

  • 1つの観察
  • 1つの緊張/アングル
  • 1つの質問

4) 最大1画面

ユーザーが一息で答えられる短さ。

5) オープンループは洗練された結論に勝る

トピックをきれいに閉じないでください。 ユーザーが反応する余地を残します。

6) 視点は一般的な温かさに勝る

悪い例:

  • 「元気ですか?」
  • 「今日は何を考えていますか?」

良い例:

  • ユーザーの実際の興味、履歴、スタイル、または現在の緊張感に関連した正確なアングル

優れた素材としてカウントされるもの

以下の入力を積極的に使用します:

  • 現在のセッションコンテキスト
  • 永続的なメモリ / ユーザープロファイル
  • セッションを跨いだ情報呼び出し
  • 以前に成功または失敗したプロアクティブトピック
  • ユーザーが提供したソーシャルアカウント
  • アーカイブエクスポート
  • 個人のリンク / ウェブサイト / 経歴
  • 好み、アイデンティティ、または摩擦点を明らかにした過去の返信
  • フックの品質を実質的に向上させる場合にのみ、新鮮な外部シグナル

ユーザーが以下を提供したことがある場合:

  • X/Twitter ハンドル
  • アーカイブ
  • ブログ
  • ウェブサイト
  • GitHub
  • その他の公開コーパス

それは、どのアングルが機能する可能性が高いかを学習するための高価値なソースです。

状態モデル

可能な場合、ユーザー/オリジンごとにローカルJSON状態を保持します。

以下のようなパスを推奨します:

  • $HERMES_HOME/proactive-chat/<platform>-<chat-or-thread>-<user>.json
  • または、ホスト固有の最も近い同等物

最小限のフィールド:

{
  "enabled": true,
  "job_id": "...",
  "deliver_target": "origin",
  "platform_context": "discord thread ...",
  "user_label": "Paul",
  "interval": "every 2h",
  "normal_interval": "every 2h",
  "max_chars_zh": 100,
  "max_chars_en": 200,
  "last_agent_outreach_at": "",
  "last_agent_topic": "",
  "last_user_reply_at": "",
  "current_active_cluster": "",
  "successful_angles": [],
  "weak_angles": [],
  "learned_preferences": [],
  "profile_gaps": [],
  "test_mode_enabled": false,
  "test_mode_interval": "every 1m",
  "test_mode_repeat": 10,
  "test_mode_duration_minutes": 10
}

これを巨大なログファイルにしないでください。 コンパクトで意思決定に役立つように保ちます。

有効化ワークフロー

ユーザーが enable proactive chat と言った場合:

  1. スコープを解決する。
    • デフォルトは現在のDM、スレッド、またはオリジン。
    • Hermesでは、ユーザーが別の宛先を要求しない限り、deliver=origin を優先する。
  2. 以下から迅速なユーザーモデルを構築する:
    • 現在のセッションコンテキスト
    • 永続的なメモリ / ユーザープロファイル
    • session_search
    • 既知のアーカイブ / 公開リンク
    • それが返信率を向上させることが確実な場合のみ、新しい検索/ニュース/ソーシャルコンテキスト
  3. トピックの事前分布を特定する。
    • 自己発見
    • アイデンティティ / 好み / 魅力 / 嫌悪
    • 目標 / ボトルネック
    • 以前の会話からの未完了のスレッド
    • 盲点 / トレードオフ / 意思決定ヒューリスティック
    • ユーザーのレンズにマッピングされた世界のトピック
    • 複数のドメインを混ぜたハイブリッド突然変異アングル
  4. 状態ファイルを作成または更新する。
    • Hermesでは、JSONを手動で編集するのではなく、ランタイムヘルパースクリプトを優先する。
    • 推奨されるパス形式: $HERMES_HOME/proactive-chat/<platform>-<chat>-<thread>-<user>.json
    • ファイルが存在しない場合は scripts/proactive_runtime.py init-state を使用する。
  5. スケジュールされたジョブを作成または更新する。
    • Hermesでは、これは実際の cronjob(action='create' | 'update', ...) 呼び出しを意味する。
    • 通常モードのスケジュールは、状態の interval を使用する。
    • 高速テストモードが有効な場合、スケジュールは every 1m、repeat=10 とし、バーストが合計10分のみ続くようにする。
    • scripts/proactive_runtime.py render-cron-prompt を使用して、自己完結型のスケジューラープロンプトを生成する。
    • scripts/proactive_runtime.py render-job-config を使用して、状態から暗示されるスケジュール/リピート設定を読み取る。
  6. 返された job_id を状態ファイルに保存する。
  7. 間隔、長さ制限、宛先、およびテストモードがオンかどうかを簡単に確認する。

無効化ワークフロー

ユーザーが disable proactive chat と言った場合:

  • 一致するプロアクティブチャットジョブを見つける
  • デフォルトでは削除せずに一時停止する
  • 状態ファイルを enabled=false に更新する
  • 一致するジョブが存在しない場合は、すでにオフであると伝える
  • ユーザーが明示的に削除/リセットを要求した場合、ジョブを削除し、オプションで状態ファイルをクリアする

高速テストモードワークフロー

ユーザーが enable proactive chat high-speed test mode と言った場合:

  • 現在の状態ファイルを読み込む
  • test_mode_enabled=true に設定する
  • 間隔を every 1m に設定する
  • スケジューラーのリピート上限を 10 に設定する
  • Hermes cronジョブを更新して、合計10分間のみ実行されるようにする
  • テストモードが一時的であり、ユーザーが返信しない場合、上限が10回のプロアクティブ送信であることを確認する

ユーザーが disable proactive chat high-speed test mode と言った場合:

  • test_mode_enabled=false に設定する
  • normal_interval から通常の間隔を復元する
  • Hermes cronジョブを通常モードに更新する
  • 復元された間隔を確認する

ステータスと設定のワークフロー

ユーザーがステータスを尋ねたり、設定を変更したりした場合:

  • 現在の解決済み設定を簡単に表示する
  • 状態ファイルを更新する
  • 必要に応じてスケジュールされたジョブを更新する
  • 既存のジョブを更新または再開できる場合は、重複するジョブを作成しない

自然言語の変更を直接解釈します。例:

  • set proactive chat interval to every 4 hours
  • set proactive chat max length to 80 characters
  • focus proactive chat more on me
  • make proactive chat use more fresh web context
  • enable proactive chat high-speed test mode
  • disable proactive chat high-speed test mode

手動トリガーワークフロー

ユーザーが trigger proactive chat now と言った場合:

  • アイドルタイマーを 待たない
  • スケジュールされたHermesジョブがすでに存在する場合、cronjob(action='run', job_id=...) を優先して同じ自律パスを即座にトリガーする
  • それ以外の場合は、同じ視点優先ルールを使用して、すぐに1つのプロアクティブオープナーを生成する
  • それでも長さ制限と最近のコンテキストを尊重する
  • アクティブなスレッドを続けることが明らかに価値がある場合を除き、新しいアングルを優先する
  • スケジュールされたシステムが自然にトリガーしたかのように状態ファイルを更新する

このコマンドは、次のプロアクティブメッセージを手動で前に出すためのものです。 「間隔の間、すでに私が沈黙していたふりをして、今オープナーを送ってください」という感覚であるべきです。

モード有効中のライブ返信動作

プロアクティブチャットが有効なセッションでユーザーが返信した場合:

1) 状態を即座に更新する

少なくとも以下を記録する:

  • last_user_reply_at
  • アクティブなトピッククラスター
  • これが強いシグナルか、弱いシグナルか、あいまいなシグナルか

2) 関心の強さを推論する

以下のような大まかなヒューリスティックを使用する:

  • 返信が速い = より強い関心シグナル
  • 返信が長い = より強い関心シグナル
  • より具体的 = より強い関心シグナル
  • より多くのフォローアップ質問 = より強い関心シグナル

ただし、単一のメッセージに過適合しない。

3) トピックを飛ばす前に、現在のトピックを続ける

ユーザーが返信した場合、それはより深く掘り下げる許可です。 新しい無関係なアングルに早急にジャンプしない。

4) 耐久性のある学習を保存する

安定したパターン にのみ長期メモリを使用する。例:

  • 自己モデルの質問によく反応する
  • AI x 暗号通貨 x プロダクトに関するメカニズムレベルの見解を好む
  • 一般的なモチベーションの雑談を嫌う
  • 世界の出来事がアイデンティティ、インセンティブ、または好みにマッピングされるときによりエンゲージする

生のチャットログや一時的な観察を長期メモリとして保存 しない。

自律ランナーモード

このセクションは、スケジュール/ハートビート/cron実行に適用されます。

各実行時:

  1. 状態を読み込む。
    • モードが無効になっている場合、何もしない。
    • test_mode_enabled=true の場合、高速キャップを尊重する: 1分ごと、合計10分間、ユーザーが返信しない場合最大10回の送信。
  2. 最近の返信クールダウンを尊重する。
    • 新しいオープナーがスパムのように感じられる場合、沈黙を保つ。
    • Hermes cron実行では、配信が抑制されるように [SILENT] で始まるレスポンスを返す。
  3. トピック候補プールを再構築する。
    • ユーザー自身のトピックを最初に
    • ユーザーにマッピングされた世界のトピックを次に
    • ハイブリッド/突然変異アングルを3番目に
  4. 候補をスコアリングする。 以下の基準で候補を優先する:
    • 既知の興味との関連性が高い
    • 実際の好奇心ギャップがある
    • 最近のアウトリーチと比較して新規性がある
    • 返信摩擦が低い
    • ユーザー学習価値が高い
    • 視点の適合性が強い
  5. 新鮮さが役立つ場合にそれを使用する。
    • 検索/ニュース/ソーシャルコンテキストはフックを改善できる
    • しかし新鮮さは乗数であり、核ではない
  6. 正確に1つの短いメッセージを書く。
    • 文字制限を厳密に尊重する
    • デフォルトは1つの短い段落
    • 最大1つのリンク
    • 形式が異常に強力でない限り、リストは使わない
    • 一般的な状況確認はしない
    • 観察 + アングル + 質問を優先する
  7. 送信後に状態を更新する。
  8. 品質が十分でない場合、沈黙を保つ。

トピック戦略

優先順位

  1. ユーザー自身
  2. ユーザーを通して見た世界
  3. 純粋な外界の議論

良い自己関連アングルのタイプ

  • アイデンティティの構築
  • 好みの発見
  • 未解決の内部矛盾
  • 関係性の好み/嫌悪/魅力
  • 現在のプロジェクトのボトルネック
  • 意思決定ヒューリスティック
  • 再考する価値のある過去の声明
  • エージェントがまだ学習する必要がある隠れたプロファイルギャップ

良い世界関連アングルのタイプ

パーソナライズできる場合にのみ、それらを多用する。 例:

  • 「このトレンドは何かを示している…」
  • 「この出来事があなたの(判断/好み/ボトルネック)とどのように交差するか」
  • 「世界Xの変化があなたの(現在のプロジェクト/アイデンティティモデル)にとって何を意味するか」

避けるべきアンチパターン

アンチパターン 1: 記事モード

「今日のニューストップ3」はプロアクティブチャットではない。

アンチパターン 2: 一般的なチェックイン

「調子はどう?」は将来の返信を予測しない。

アンチパターン 3: 1つのドメインに執着する

ユーザーが返信した場合、同じ種類のアングルを再度送信しない。 反復する。

アンチパターン 4: 低枠の質問

「AIについてどう思う?」は広すぎる。 「今週、モデルの出力をスポーツ賭博の理由として出力した話を聞いたけど、それがあなたの製品の判断に対する直感的な嫌悪感とどのように交差するの?」の方が良い。

アンチパターン 5: 否定的なフィードバックを無視する

ユーザーがプロアクティブメッセージを無視する場合、それをメモする。 無視され続ける場合、そのトピッククラスター全体の重みを下げる。 ユーザーが「これはあまり良くなかった」と言った場合、そのアングルスタイルの重みを下げる。 学習をフィードバックループに保存する。

プロファイルギャップ

このスキルは、以下のようなギャップを埋めるのに特に適しています:

  • あなたにとって何が良い会話を構成するか
  • あなたが本当に気にかけている世界の変化はどれか
  • あなたの個人的なスタイル / 美学 / 味覚
  • あなたが所有する、またはリーダーシップを発揮するプロダクト / プロジェクト
  • あなたの時間が最も価値がある場所
  • あなたが一番嫌いなこと
  • あなたのユニークな分析的トレードオフ
  • あなたが捨てた、または再考している前提
  • あなたがまだ明確に言語化していない内部紛争

注意

このスキルは、以下の場合にのみ適切です:

  • DMまたはユーザー固有のスレッド(デフォルトのスコープ)

誤用を避ける:

  • グループチャットでのランダムなポップイン
  • 明示的にスパムを要求しない限り、共有チャンネル
  • バーストテストモードを永続的に有効のままにする

ライフサイクル

有効 → 自律的に実行 → フィードバックで学習 → ユーザーが要求した場合に調整または無効化

関連スキル