Mattermost Hermes Agent — セルフホスト型チームチャット
HermesとMattermostを連携する方法:ボットアカウントを有効にし、ユーザーIDを取得して環境変数を設定すれば、DMやチャンネルでエージェントと会話できます。
Mattermost Hermes Agent — セルフホスト型チームチャット
チームで Mattermost を使っているなら、その魅力はすでにご存じでしょう。見た目も使い心地も Slack そっくりなのに、サーバーとデータは自社のインフラに留まります。Hermes Agent はボットとしてそこに接続します。Mattermost の REST API (v4) とリアルタイムイベント用の WebSocket を介してつながるので、アシスタントは DM やチームチャンネルで応答でき、しかもデータはネットワークの外に出ません。
追加でインストールするライブラリはありません。アダプターは Hermes に同梱されている aiohttp を使います。Mattermost Team Edition (無料) でも Enterprise Edition でも動作します。
Mattermost での Hermes の振る舞い
| 話しかける場所 | 何が起きるか |
|---|---|
| DM | Hermes はすべてのメッセージに応答します — @mention は不要です。DM ごとに独立したセッションになります。 |
| チャンネル | @mention したときだけ Hermes が応答します。メンションがなければ、メッセージは無視されます。 |
| スレッド | MATTERMOST_REPLY_MODE=thread にすると、返信があなたのメッセージの下にネストされ、親チャンネルから切り離されます。 |
| 共有チャンネル | セッション履歴はデフォルトでユーザーごとに分離されるので、同じチャンネルの2人が会話履歴を共有することはありません。 |
この最後の動作は config.yaml の group_sessions_per_user で制御します:
group_sessions_per_user: true # each person keeps their own context
チャンネル全体で1つの会話を意図的に共有したい場合にだけ false にしてください。セッションを共有すると、コンテキストの増加とトークンコストを全員で負担することになり、誰かのツールを多用する長いタスクが、別の誰かの実行を肥大化させたり中断させたりする可能性があります。
ステップ 1: ボットアカウントを有効にする (管理者側)
ボットアカウントを作成する前に、サーバー側でボットアカウントを有効にする必要があります:
- システム管理者として Mattermost にログインします。
- システムコンソール → 統合 → ボットアカウント に移動します。
- ボットアカウントの作成を有効にする を true に設定し、保存 をクリックします。
管理者権限がない場合は、Mattermost の管理者にボットアカウントの有効化と作成を依頼してください。
ステップ 2: ボットアカウントを作成する
- 左上の ☰ メニュー → 統合 → ボットアカウント → ボットアカウントを追加 をクリックします。
- 詳細を入力します: ユーザー名 は
hermesなど、表示名 はHermes Agentなど、ロール はメンバーで十分です。 - ボットアカウントを作成 をクリックし、すぐにトークンをコピー してください — 表示されるのは一度だけです。紛失すると、ボットアカウントの設定から再生成する必要があります。
⚠️ トークンを共有したり Git にコミットしたりしないでください。トークンを保持している人は誰でもボットを完全に制御できます。
別のボットではなく、自分のユーザーとしてエージェントに投稿させたい場合は、プロフィール → セキュリティ → 個人用アクセストークン → トークンを作成 で 個人用アクセストークン を作成してください。
ステップ 3: ボットをチャンネルに招待する
ボットは、自分が所属するチャンネルでのみ応答します:
- チャンネルを開く → チャンネル名をクリック → メンバーを追加 を選択します。
- ボットのユーザー名 (たとえば
hermes) を検索して追加します。
DM の場合は、ボットとのダイレクトメッセージを開くだけです — 招待は不要です。
ステップ 4: Mattermost のユーザー ID を確認する
Hermes は、誰がボットと話せるかを判断するために、ユーザー名ではなく ユーザー ID を使用します:
- 左上の アバター をクリック → プロフィール を選択します。
- ダイアログにユーザー ID が表示されます:
3uo8dkh1p7g1mfk49ear5fzs5cのような26文字の英数字文字列です。クリックするとコピーできます。
API から読み取ることもできます:
curl -H "Authorization: Bearer YOUR_TOKEN" \
https://your-mattermost-server/api/v4/users/me | jq .id
あなたのユーザー ID は、メッセージに表示される
@usernameでは ありません。ユーザー名を貼り付けてしまうのが、ボットが沈黙したままになる最もよくある原因です。
ステップ 5: Hermes を設定する
ガイド付きセットアップを実行し、プロンプトで Mattermost を選択します — サーバー URL、ボットトークン、あなたのユーザー ID を尋ねられます:
hermes gateway setup
または ~/.hermes/.env で手動設定します:
# Required
MATTERMOST_URL=https://mm.example.com
MATTERMOST_TOKEN=your-bot-token
MATTERMOST_ALLOWED_USERS=3uo8dkh1p7g1mfk49ear5fzs5c
# Multiple allowed users (comma-separated)
# MATTERMOST_ALLOWED_USERS=3uo8dkh1p7g1mfk49ear5fzs5c,8fk2jd9s0a7bncm1xqw4tp6r3e
# Optional: reply in a thread instead of flat messages (default: off)
# MATTERMOST_REPLY_MODE=thread
# Optional: respond without an @mention (default: true = mention required)
# MATTERMOST_REQUIRE_MENTION=false
# Optional: channels where no @mention is needed (comma-separated channel IDs)
# MATTERMOST_FREE_RESPONSE_CHANNELS=channel_id_1,channel_id_2
次にゲートウェイを起動します:
hermes gateway
ボットは数秒以内に Mattermost サーバーに接続します。DM を送るか、ボットが追加されているチャンネルで @mention してテストしてください。
ステップ 6: オプションの動作スイッチ
| 設定 | 何をするか |
|---|---|
MATTERMOST_REPLY_MODE |
off (デフォルト) はフラットなメッセージを投稿します。thread は返信をあなたのメッセージの下にネストし、賑やかなチャンネルを整理された状態に保ちます。 |
MATTERMOST_REQUIRE_MENTION |
デフォルトは true です。すべてのチャンネルメッセージに応答させたい場合は false に設定します (DM は常に動作します)。 |
MATTERMOST_FREE_RESPONSE_CHANNELS |
メンションが必要な場合でも、メンション要件をスキップするチャンネル ID です。 |
MATTERMOST_HOME_CHANNEL |
プロアクティブメッセージの送信先 — cron の出力、リマインダー、通知など。チャンネルで /sethome と入力することもできます。 |
mattermost.allowed_channels |
ボットをチャンネル ID のリストに制限します。それ以外の場所からのメッセージは破棄されます。DM は対象外です。 |
mattermost.channel_prompts |
チャンネルごとに一時的なシステムプロンプトを注入します — 毎ターン適用され、会話履歴には保存されません。 |
ボットが @mention されると、処理前にメッセージからメンションが取り除かれるので、@hermes summarize this thread はクリーンな指示として届きます。
トラブルシューティング
| 症状 | 考えられる原因 | 対処法 |
|---|---|---|
| チャンネルでボットが無視する | ボットがチャンネルにいない、またはあなたのユーザー ID が MATTERMOST_ALLOWED_USERS にない |
ボットをチャンネルに追加し、26文字のユーザー ID を確認し、ゲートウェイを再起動する |
| ボットが投稿できない | トークンが無効、またはそのチャンネルでボットに権限がない | MATTERMOST_TOKEN を確認し、アカウントが有効でチャンネルメンバーであることを確認する |
| 頻繁に切断される | WebSocket の切断、サーバーの再起動、またはプロキシ/ファイアウォールの問題 | アダプターは指数バックオフ (2秒 → 60秒) で再接続します。nginx の場合は、WebSocket アップグレードヘッダーが設定されていることを確認してください |
| まったく何も起きない | ゲートウェイが実行されていない、または URL/トークンが間違っている | hermes gateway の出力を確認し、MATTERMOST_URL に https:// が含まれ、末尾にスラッシュがないことを確認する |
トークンを直接テストするには:
curl -H "Authorization: Bearer YOUR_TOKEN" \
https://your-server/api/v4/users/me
ボットのセキュリティ保護
必ず MATTERMOST_ALLOWED_USERS を設定してください。これがないと、安全対策としてゲートウェイはデフォルトですべてのユーザーを拒否します — そして許可されたユーザーは、ツール使用やシステムアクセスを含むエージェントの機能に完全にアクセスできるので、リストは厳密に保ってください。デプロイの堅牢化についてより広く知りたい場合は、公式のセキュリティガイダンスを参照してください。
次は何?
ゲートウェイが起動すれば、Mattermost は他の Hermes チャンネルとまったく同じように動作します: スラッシュコマンド、ファイルアップロード、ボイスノート、ホームチャンネルに配信される cron 出力 — すべてあなたが管理するインフラ上で。ホスト型オプションを使いたい場合は、Slack 統合 が Socket Mode のルートをカバーしています。複数のマシンでゲートウェイを実行する場合は、Hermes Relay がそれらをつなぎます。
📖 公式ドキュメント
この記事は Hermes Agent の公式ドキュメントに基づいています:公式ドキュメント › user-guide/messaging/mattermost