mcpbeat

Xs Spontaneous Talk

karaage0703/xs-spontaneous-talk

| AIアシスタントが自発的に話しかけてくるスキル。 cronで定期発動し、確率判定で発話するか決める。 チャンネルの会話履歴・日記・メモリをもとに話題を選ぶ。 「話しかけて」「spontaneous-talk」で手動発動も可能。

2k tokens
context cost
the whole folder, loaded on every use
2
files
ships runnable scripts
0
copies elsewhere
how many repositories repackaged it
136
stars on the repo
on the repository, not the skill itself

Install

one command, takes just this skill from the repository
npx skills add https://github.com/karaage0703/ai-assistant-workspace --skill xs-spontaneous-talk

The instruction itself

6 sections, as written by the author

自発的おしゃべりスキル

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

絶対遵守事項

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

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

  • 現在の日時・曜日date '+%Y-%m-%d %A %H:%M' で確認(曜日を間違えないこと!)
  • チャンネル履歴 — 現在のチャンネルの最新メッセージを確認
  • 今日の日記[WORKSPACE]/memory/YYYYMMDD.md を読む
  • メモリ — 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-cmd で登録できます。

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

管理:

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

チェック項目

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

手動発動

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

How to use it

Copy the folder

Take karaage0703/xs-spontaneous-talk from the repository into ~/.claude/skills for personal use, or into .claude/skills inside a project.

Check the name does not clash

The agent identifies a skill by the name field in its header. Two skills with the same name cannot sit side by side — one of them will be ignored.