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式も使えます:
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=月曜, ... |
# スケジュール追加
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で変更可能
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 プレフィックスと同じ動作です。
@xangi !skip gh pr list
!skip ビルドして # 専用チャンネルではメンション不要
/skip ビルドして # スラッシュコマンド版
${WORKSPACE_PATH}/settings.json にランタイム設定が保存されます。
{
"autoRestart": true
}| 設定 | 説明 | デフォルト |
|---|---|---|
autoRestart |
AIエージェントによる再起動を許可 | true |
| コマンド | 説明 |
|---|---|
/settings |
現在の設定を表示 |
/restart |
ボットを再起動 |
AIは .env ファイルを編集して設定を変更できます:
「このチャンネルでも応答して」
→ AIが AUTO_REPLY_CHANNELS を編集 → 再起動
AIが出力する特殊コマンド:
| コマンド | 説明 |
|---|---|
SYSTEM_COMMAND:restart |
ボットを再起動 |
- Docker:
restart: alwaysにより自動復帰 - ローカル: pm2等のプロセスマネージャが必要
# pm2での運用例
pm2 start "npm start" --name xangi
pm2 logs xangixangiは 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」と返される。
原因: セッションの会話履歴がClaude Code(Agent SDK)のコンテキスト上限を超えた。通常はAgent SDKが自動でコンテキストを圧縮するが、セッションが異常終了した場合など、状態が壊れて回復できなくなることがある。
対処法:
- 該当チャンネルで
/newコマンドを実行してセッションをリセットする - それでも解消しない場合は、xangiを再起動する(
pm2 restart xangi)