ターミナルで動くAIエージェントは強力ですが、毎回Macの前に座るとは限りません。そこでDiscordを、外出先から状況を確認し、必要な指示だけを出す窓口にしました。
Discord Botを使う理由
Discordへ一方向に通知するだけならWebhookが簡単です。一方、Hermes Agentと会話し、応答や承認を返したい場合はBotとGatewayが必要になります。私は「通知だけの処理」と「対話が必要な処理」を分けました。
- Webhook向き:定型レポート、障害通知、一方向の投稿
- Bot向き:質問への応答、コマンド、承認、会話の継続
Hermes Agentの公式説明では、単一のGatewayプロセスからDiscordを含む複数のメッセージ基盤へ接続できます。
最小権限でBotを作る
Discord Developer PortalでアプリとBotを作り、専用のテストサーバーへ追加します。最初から管理者権限を付けず、利用するチャンネルの閲覧と投稿など、必要な権限だけにします。
メッセージ内容を受け取る用途ではMESSAGE_CONTENTが関係します。Discord公式ではこれはPrivileged Intentに分類され、Developer Portal側で有効化が必要です。不要なIntentは有効にしません。
認証情報と利用者制限
Botトークンはブログ、ソースコード、スクリーンショットへ入れません。環境変数やHermesの秘密情報管理へ保存し、漏れた可能性があればDeveloper Portalで再発行します。
さらに、Botへ話しかけられる利用者を制限します。Hermes AgentのGatewayにはプラットフォーム別allowlistやDMペアリングがあります。公開サーバーでallow allにするのではなく、自分のDiscordユーザーIDだけを許可するところから始めます。
動作確認は専用チャンネルで
本番チャンネルへ入れる前に、次を確認しました。
- 許可した利用者のメッセージにだけ応答する
- 許可していない利用者を拒否する
- 長い処理中でも停止指示を送れる
- 秘密情報が返信やログへ出ない
- Gateway停止時に無言で止まらず、監視で分かる
Gatewayは便利ですが、動いていることが前提です。後の回で扱うcronもGateway停止中は自動実行されません。窓口を作ることと、窓口の稼働を監視することはセットです。
再現チェック
- [ ] テスト用サーバーと専用チャンネルを使った
- [ ] Botへ管理者権限を与えていない
- [ ] 必要なIntentだけを有効にした
- [ ] Botトークンを秘密情報として保存した
- [ ] 利用者allowlistまたはDMペアリングを設定した
- [ ] Gateway停止を検知する方法を決めた
次回は、このDiscord窓口へ「重要メールだけ」を送る小さな自動化を作ります。
