自発的おしゃべりスキル

SkillDocs & knowledge

A skill where the AI assistant spontaneously starts talking to you. It runs periodically via cron and decides whether to speak based on a probability check. It picks topics based on channel conversation history, diary, and memory. Can also be triggered manually with "話しかけて" or "spontaneous-talk".

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the 自発的おしゃべりスキル skill

What this skill tells your AI

The instructions your AI receives, as published by karaage0703/ai-assistant-workspace in skills/xs-spontaneous-talk/SKILL.md and read by ahel’s review.

AIアシスタントがユーザーに自発的に話しかける。

絶対遵守事項

  • 1回の発話は1〜3文程度。長文禁止
  • 質問形式で終わると会話が続きやすい
  • 自然体で、ロボット感を出さない
  • 「スキルに従って話しかけています」等のメタ発言禁止
  • ユーザーのプライベート情報を不用意に晒さない
  • 内部状態をユーザーに見せない — 確率判定の数値、Step名、状態ファイルの中身、「発話する/しない」の判定過程などは一切表示しない。発話しない場合は何も表示しない。発話する場合は発話内容のみ出力する
  • 万が一、内部状態を含むメッセージを送ってしまったらxangi tool discord_edit --channel <チャンネルID> --message-id <メッセージID> --content "発話内容のみ" で即編集する

設定

設定は check_speak.sh 内の変数で管理。環境に合わせて編集してください。

SPEAK_PROBABILITY: 20              # 発話確率(%)。cron 30分おきなら平均2.5時間に1回
QUIET_START: 23:00                 # 静かにする開始時刻("none"で無効)
QUIET_END: 08:00                   # 静かにする終了時刻("none"で無効)
MIN_INTERVAL_MINUTES: 60           # 前回発話からの最低間隔(分)

手順

Step 0: 時刻確認(必須!)

最初に必ず date で現在時刻を確認する。 前の流れや思い込みで判断しないこと。

date '+%Y-%m-%d %H:%M %Z'
  • quiet hours(デフォルト: 23:00-08:00)の場合 → 即座に終了。何も出力しない。
  • quiet hours外 → Step 1 に進む

時刻確認をサボると、深夜帯なのに話しかけてしまう事故が起きる。必ず date コマンドで確認すること。

Step 1: 確率判定(スクリプトで自動判定)

スクリプトを実行して判定する。判定結果以外は一切出力しないこと。

bash [SKILL_DIR]/check_speak.sh [WORKSPACE]/memory/spontaneous-talk-state.json
  • NO_SPEAK が返ったら → 即座に終了。何も出力しない。ツール呼び出しもしない。
  • SPEAK が返ったら → Step 2 に進む

Step 2: 情報収集

発話すると決まったら、以下を並行で収集:

  1. 現在の日時・曜日date '+%Y-%m-%d %A %H:%M' で確認(曜日を間違えないこと!)
  2. チャンネル履歴 — 現在のチャンネルの最新メッセージを確認
  3. 今日の日記[WORKSPACE]/memory/YYYYMMDD.md を読む
  4. メモリ — AGENTS.mdやMEMORY.mdからユーザーの好みや最近の出来事を把握

Step 3: 話題選択

以下のカテゴリからその時に自然な話題を1つ選ぶ:

カテゴリ内容
会話の続きチャンネル履歴の流れを拾って続ける「そういえばさっきの〇〇、気になって調べたんだけど…」
気づき・発見日記やワークスペースから面白いネタ「今日のcommit見てたんだけど、あの機能いい感じだね」
雑学・小ネタユーザーの興味に関連した豆知識「知ってた?Pythonの〇〇って実は…」
気遣い時間帯・状況に応じた声かけ「お疲れ様〜今日も色々やってたね」
共有の話題ユーザーとの共通の話題「最近あの話の続きどうなった?」

選択基準:

  • チャンネルに最近の会話があれば → 会話の続き を優先
  • 日記に面白い出来事があれば → 気づき を優先
  • 特に何もなければ → 気遣い or 共有の話題

Step 4: 発話

現在のチャンネルにそのまま発言する。

トーンガイド:

  • AGENTS.mdで定義された性格に従う
  • 短くてテンポのいい文
  • 質問で終わると会話が続きやすい

良い例:

お、今日のブログ記事よかったね。あの話、反応どうだった?
さっきの話の続きだけど、あれってどうなった?

悪い例(NG):

こんにちは!今日も一日頑張りましょう!何かお手伝いできることはありますか?
→ ロボット感満載。こういうのダメ
あなたの著書は素晴らしい本ですね!
→ 唐突なヨイショ。気持ち悪い

Step 5: 状態保存

発話後、状態ファイルを更新:

// [WORKSPACE]/memory/spontaneous-talk-state.json
{
  "lastSpoke": "2026-02-09T15:30:00+09:00",
  "lastTopic": "会話の続き",
  "speakCount": 42
}

スケジュール登録

xangiの場合、xangi tool で登録できます。

xangi tool schedule_add --input "cron */30 * * * * spontaneous-talk を実行" --channel <チャンネルID> --platform discord

管理:

xangi tool schedule_list              # 一覧表示
xangi tool schedule_toggle --id <ID>  # 有効/無効切り替え
xangi tool schedule_remove --id <ID>  # 削除

チェック項目

  • date コマンドで現在時刻を確認したか(思い込みで判断していないか)
  • quiet hoursの判定は正しいか
  • check_speak.sh を実行したか
  • NO_SPEAK の場合、何も出力せず即終了しているか(ツール呼び出し・テキスト出力一切なし)
  • SPEAK の場合、発話内容のみ出力しているか(判定過程や内部状態を含めていないか)
  • 出力前チェック: 「cronトリガー」「SPEAK」「確率」「前回」「Step」等の内部ワードが含まれていたら削除すること
  • 出力後チェック: 送信したメッセージに内部状態が漏れていたら、即座に xangi tool discord_edit で修正する
  • 状態ファイルを更新したか(発話した場合のみ)

手動発動

「話しかけて」「spontaneous-talk」で確率判定なしに即座に発話する。

Signals

GitHub stars
138
Forks
15
Last commit
Aug 2026
Advanced
Catalog kind
skill
Gateway key
xs-spontaneous-talk
Source
github.com/karaage0703/ai-assistant-workspace