Skip to content

Latest commit

 

History

History
291 lines (198 loc) · 10.3 KB

File metadata and controls

291 lines (198 loc) · 10.3 KB

使い方ガイド

xangiの詳細な使い方ガイドです。

目次

基本操作

メンションで呼び出し

@xangi 質問内容

専用チャンネル

AUTO_REPLY_CHANNELS に設定したチャンネルではメンション不要で応答します。

チャンネルトピック注入

Discordチャンネルのトピック(概要)が設定されている場合、その内容がプロンプトに自動注入されます。

チャンネルごとに異なるコンテキストや指示をAIに渡すことができます。

設定方法

Discordのチャンネル設定 → 「トピック」に自然言語で指示を記述します。

活用例

  • 作業前に必ず ~/project/README.md を読むこと
  • このチャンネルでは日本語で返答すること
  • 常にmemory-RAGを検索してから返答すること

トピックが空の場合は何も注入されません。

タイムスタンプ注入

プロンプトの先頭に現在時刻(JST)を自動注入します。AIが時間経過を認識でき、経過時間の把握や時間に関連する判断が正確になります。

デフォルトで有効です。無効にするには:

INJECT_TIMESTAMP=false

注入フォーマット: [現在時刻: 2026/3/8 12:34:56]

セッション管理

コマンド 説明
/new, !new, new 新しいセッションを開始
/clear, !clear, clear セッション履歴をクリア

スケジューラー

定期実行やリマインダーを設定できます。AIが自然言語を解釈して !schedule コマンドを自動実行します。

コマンド一覧

コマンド 説明
/schedule スラッシュコマンドでスケジュール操作
!schedule <時間> <メッセージ> スケジュール追加
!schedule list / !schedule 一覧表示(全チャンネル)
!schedule remove <番号> 削除(複数可: remove 1 2 3
!schedule toggle <番号> 有効/無効切り替え

💡 /schedule スラッシュコマンドでも同様の操作ができます。

時間指定の書き方

単発リマインダー

30分後 〇〇をリマインド
1時間後 会議の準備
15:30 今日の15時半に通知

繰り返し(自然言語)

毎日 9:00 朝の挨拶
毎日 18:00 日報を書く
毎週月曜 10:00 週次レポート
毎週金曜 17:00 週末の予定確認

cron式

より細かい制御が必要な場合はcron式も使えます:

0 9 * * * 毎日9時
0 */2 * * * 2時間ごと
30 8 * * 1-5 平日8:30
0 0 1 * * 毎月1日
フィールド 説明
0-59
0-23
1-31
1-12
曜日 0-6 0=日曜, 1=月曜, ...

CLI(コマンドライン)

# スケジュール追加
npx tsx src/schedule-cli.ts add --channel <channelId> "毎日 9:00 おはよう"

# 一覧表示
npx tsx src/schedule-cli.ts list

# 削除(番号指定)
npx tsx src/schedule-cli.ts remove --channel <channelId> 1

# 複数削除
npx tsx src/schedule-cli.ts remove --channel <channelId> 1 2 3

# 有効/無効切り替え
npx tsx src/schedule-cli.ts toggle --channel <channelId> 1

データ保存

スケジュールデータは ${DATA_DIR}/schedules.json に保存されます。

  • デフォルト: /workspace/.xangi/schedules.json
  • 環境変数 DATA_DIR で変更可能

Discordコマンド

AIがDiscord操作を実行するためのコマンドです。

コマンド 説明
!discord send <#channel> メッセージ 指定チャンネルにメッセージ送信
!discord channels サーバーのチャンネル一覧表示
!discord history [件数] [<#channel>] チャンネルの最新メッセージを取得(デフォルト10件、最大100件)
!discord search キーワード 現在のチャンネルでメッセージ検索
!discord delete <メッセージID> 指定メッセージを削除
!discord delete <メッセージリンク> リンク先のメッセージを削除(別チャンネルも可)
!discord edit <ID/リンク/last> 内容 自分のメッセージを編集(last で直前のメッセージ)

使用例

# 別チャンネルに投稿
!discord send <#1234567890> 作業完了しました!

# チャンネル一覧を確認
!discord channels

# チャンネル履歴を取得(結果はAIのコンテキストに返る)
!discord history              # 現在のチャンネル最新10件
!discord history 50           # 現在のチャンネル最新50件
!discord history 20 <#1234>   # 指定チャンネル20件
!discord history 30 offset:30 # 30〜60件目を取得(遡り)

# メッセージを検索
!discord search PR

# メッセージIDを指定して削除
!discord delete 123456789012345678

# メッセージリンクで削除(別チャンネルのメッセージもOK)
!discord delete https://discord.com/channels/111/222/333

# 直前の自分のメッセージを編集
!discord edit last 修正後の内容

# メッセージIDを指定して編集
!discord edit 123456789012345678 新しい内容

許可確認のスキップ

デフォルトではAIはファイル作成やコマンド実行時に許可確認を求めます。 !skip プレフィックスまたは /skip スラッシュコマンドで許可確認をスキップできます。

環境変数 SKIP_PERMISSIONS=true を設定すると、デフォルトで全メッセージがスキップモードになります。

!skip プレフィックス

メッセージの先頭に !skip を付けると、そのメッセージだけスキップモードで実行します。

/skip スラッシュコマンド

/skip メッセージ で、許可確認をスキップしてメッセージを実行します。!skip プレフィックスと同じ動作です。

使用例

@xangi !skip gh pr list
!skip ビルドして                    # 専用チャンネルではメンション不要
/skip ビルドして                    # スラッシュコマンド版

ランタイム設定

${WORKSPACE_PATH}/settings.json にランタイム設定が保存されます。

{
  "autoRestart": true
}
設定 説明 デフォルト
autoRestart AIエージェントによる再起動を許可 true

設定の確認・変更

コマンド 説明
/settings 現在の設定を表示
/restart ボットを再起動

AIによる自律操作

設定変更(ローカル実行時のみ)

AIは .env ファイルを編集して設定を変更できます:

「このチャンネルでも応答して」
→ AIが AUTO_REPLY_CHANNELS を編集 → 再起動

システムコマンド

AIが出力する特殊コマンド:

コマンド 説明
SYSTEM_COMMAND:restart ボットを再起動

再起動の仕組み

  • Docker: restart: always により自動復帰
  • ローカル: pm2等のプロセスマネージャが必要
# pm2での運用例
pm2 start "npm start" --name xangi
pm2 logs xangi

pm2で環境変数を変更する場合

xangiは node --env-file=.env で環境変数を読み込みます。環境変数を変更したい場合は .env ファイルを編集してから pm2 restart してください。

# 正しい方法: .envを編集してrestart
vim .env  # TIMEOUT_MS=60000 を追加
pm2 restart xangi

⚠️ pm2 restart --update-env は使わないこと! --update-env はシェルの全環境変数をpm2に保存します。複数のxangiインスタンスを動かしている場合、別インスタンスの DISCORD_TOKEN 等が混入し、同じbotトークンで二重ログインする原因になります。 node --env-file=.env は既存の環境変数を上書きしないため、pm2が先にセットした値が優先されてしまいます。

トラブルシューティング

「Prompt is too long」エラー

症状: 特定のチャンネルで全てのメッセージに対して「❌ エラーが発生しました: Prompt is too long」と返される。

原因: セッションの会話履歴がClaude Code(Agent SDK)のコンテキスト上限を超えた。通常はAgent SDKが自動でコンテキストを圧縮するが、セッションが異常終了した場合など、状態が壊れて回復できなくなることがある。

対処法:

  1. 該当チャンネルで /new コマンドを実行してセッションをリセットする
  2. それでも解消しない場合は、xangiを再起動する(pm2 restart xangi