2026-05-28 レンタル Mac mini M4 で Hermes Agent Telegram ゲートウェイ(東京 · HK / JP / KR / SG / US)
SSH で iOS アプリをビルドしている同一の Mac mini M4 上で、Hermes Agent を Telegram ボットとして運用できます。ゲートウェイ(hermes gateway)が BotFather トークンを保持し、数値ユーザー ID 許可リストを適用してチャットを Hermes のツールループへ転送します。ノート PC を常時起動しなくても、モバイルから CI 修正の承認やアーキテクチャの質問ができます。
Modal/Daytona の serverless ターミナルと near-idle 構成は Hermes Serverless Modal/Daytona 冬眠ガイド を参照。
ビルダー Mac で Telegram を使う理由
Telegram はヘッドレスリース向きです。ゲートウェイはデフォルトでアウトバウンド long pollingを使い、Mac から Telegram API へ HTTPS を開始するため、共有ビルダーでインバウンドポートを公開する必要はありません(公開 HTTPS が必要な webhook モードとは対照的です)。
リースホストで Hermes を Telegram に接続する主な理由:
- オンコール対応—GitHub Actions や
xcodebuildが夜間に失敗したとき、モバイルから返信し、agent が NVMe 上のログを読み取れます。 - 関心の分離—OpenClaw でリポジトリ自動化、Hermes で個人/運用チャット。ただし2 つのゲートウェイプロセス(RAM とトークン分離)を受け入れる場合に限り並行してください。
- OpenClaw メッセージングからの移行—上流 README に
hermes claw migrateがあります。16 GB ホストで 2 ゲートウェイを同時運用する前に、Hermes vs OpenClaw vs OpenHuman の選定マトリクスをご確認ください。
Apple Mac mini 仕様は 16–24 GB のユニファイドメモリです。Xcode 並列テストを重ねる前に、hermes gateway とモデル作業セットに約 1–2 GB を確保してください。東京ノードを含む HK/JP/KR/SG/US の出口は Telegram ポーリングを安定して支えられます。bot トークンを git にコミットしないでください。
Telegram ゲートウェイの構成
Hermes は CLI チャット(hermes TUI)とメッセージング(hermes gateway)を分離します。Telegram 設定は ~/.hermes/.env(またはウィザード出力)に書き込まれ、ログは ~/.hermes/logs/gateway.log、macOS では任意で launchd サービスです。
| コンポーネント | パス / コマンド | 役割 |
|---|---|---|
| インストール | curl -fsSL …/install.sh | bash | Python 3.11 + hermes CLI |
| モデル / 認証 | hermes setup | プロバイダ API キー(BYO または Nous Portal) |
| Telegram 設定 | hermes gateway setup | Bot トークン + + TELEGRAM_ALLOWED_USERS |
| フォアグラウンドテスト | hermes gateway | long polling bot、Ctrl+C まで |
| サービス | hermes gateway install → hermes gateway start | macOS launchd, ログアウト後も稼働 |
| ヘルスチェック | hermes doctor, hermes gateway status | 設定とプロセス確認 |
データフロー(ポーリングモード):
- Telegram で bot にメッセージを送ります。
- ゲートウェイが Telegram Bot API(アウトバウンド poll)で更新を受信します。
- Hermes agent が設定済みターミナル backend(ローカル、Docker、または同一ホストへの SSH)でツールを実行します。
- 返信テキスト(および任意の
MEDIA:/path添付)がゲートウェイ経由で Telegram に戻ります。
重要なセキュリティデフォルト: 上流は TELEGRAM_ALLOWED_USERS で @ユーザー名ではなく数値ユーザー IDを使います。bot トークンを持つ者は bot をなりすませられます—API キーと同様に扱い、漏洩時は BotFather /revoke でローテーションしてください。
公式:Hermes Telegram ドキュメント(BotFather、プライバシーモード、webhook)。
BotFather とアクセス制御
bot の作成
- @BotFather を開く →
/newbot。 - 表示名(例:
Builder Hermes)とbotで終わるユーザー名を設定します。 123456789:ABCdefGHIjklMNOpqrs…形式のトークンをコピー—パスワードマネージャに保存し、git には入れません。
ユーザー ID を許可リストに追加
@userinfobot にメッセージして数値 ID(例:123456789)を取得します。TELEGRAM_ALLOWED_USERS 設定時、Hermes は見知らぬユーザーを拒否します。
共有リースホストでの任意の強化:
- 単一ユーザー許可リストのみ—ツールスコープを理解するまでワイルドカード「チーム」ID は使わないでください。
- 環境別 bot(ステージング vs 本番リース)—ステージングトークン漏洩が本番 workspace に届かないようにします。
- DM 動作を検証するまでグループアクセスを無効にします。
Telegram 用 Hermes 設定
対話式(推奨)
hermes setup # 新規インストール時は先にモデルプロバイダを設定
hermes gateway setup # Telegram を選択 → トークン貼り付け → 許可ユーザー ID
手動編集 ~/.hermes/.env
TELEGRAM_BOT_TOKEN=123456789:ABCdefGHIjklMNOpqrSTUvwxYZ
TELEGRAM_ALLOWED_USERS=123456789
# 任意のチーム: TELEGRAM_ALLOWED_USERS=111111111,222222222
ファイル権限が 600 であること、信頼しない dotfile 同期先へ含めないことを確認してください。
フォアグラウンドスモークテスト:
hermes gateway
Telegram で hello を送ると数秒以内に返信があるはずです。launchd 導入前に Ctrl+C で停止します。
Mac mini M4 ヘッドレス展開 8 ステップ
- Hermes をインストール — リースユーザーアカウント(root 以外)で公式 install.sh を実行します。
- hermes setup を実行 — モデルプロバイダを設定し、
hermes doctorがクリーンであることを確認します。 - BotFather トークンを作成 — 数値ユーザー ID も取得(上記セクション)。
- hermes gateway setup を実行 — Telegram を選択し、
~/.hermes/.envにトークンと許可リストがあることを確認します。 - フォアグラウンドテスト —
hermes gatewayで bot にメッセージし、無害なツール(例:agent でpwd)を起動;Ctrl+C で停止。 - サービスをインストール —
hermes gateway installの後hermes gateway start(macOS launchd)。 - デーモン用に環境を永続化 —
~/.hermes/.envの API キーが launchd から読めること(インストールと同一ユーザー)を確認;バックグラウンドのみ失敗する場合は OpenClaw launchd PATH の注意 を参照してください。 - 監視 —
hermes gateway status、tail -f ~/.hermes/logs/gateway.log、設定変更後は Telegram/newで異常セッションをリセット。
引用可能な運用ルール:1 つのゲートウェイプロセスが複数プラットフォーム(Telegram、Discord、Slack 等)に対応できます—チャットアプリごとに別デーモンは不要です。
launchd と SSH のみのリース
macOS リースでは hermes gateway install がユーザーレベルの launchd ジョブを登録します—本ブログの OpenClaw openclaw onboard --install-daemon パターンに類似します。
hermes gateway install
hermes gateway start
hermes gateway status
tail -f ~/.hermes/logs/gateway.log
SSH 切断後も、install を実行した同一 Unix ユーザーでゲートウェイが稼働しているはずです。停止した場合は次を確認してください:
launchctl list | grep -i hermes- ログの
TELEGRAM_BOT_TOKEN/ 認証エラー - リースポリシーがログアウト時に長時間ユーザーエージェントを終了するか(専用 M4 では稀、共有 shell ではありがち)
Docker backend の注意: terminal.backend: docker の場合、MEDIA:/path で送るファイルはゲートウェイが読めるホストパスに存在する必要があります(コンテナ内のみでは不可)。上流 telegram.md に従いホストから見えるボリュームをマウントしてください。
グループチャット(任意)
Telegram プライバシーモードはデフォルトON—グループ内では通常 /commands、bot への返信、管理者可視のトラフィックのみ見えます。コンテキストを広げるには BotFather でプライバシーを無効(Bot Settings → Group Privacy → Turn off)し、各グループで bot を削除して再追加するか、グループ管理者に昇格させてください。
「観察するが @ なしでは返信しない」動作には上流の TELEGRAM_OBSERVE_UNMENTIONED_GROUP_MESSAGES と許可 chat ID があります—telegram.md のグループ章を先にお読みください。
トラブルシューティング
症状:bot が返信しない(ポーリング無音)
| 確認項目 | コマンド / 対処 |
|---|---|
| ゲートウェイは稼働中? | hermes gateway status; hermes gateway start で再起動 |
| トークンは有効? | BotFather から再貼り付け;漏洩時は /revoke |
| ユーザーが許可リスト外? | 数値 ID を TELEGRAM_ALLOWED_USERS に追加してゲートウェイ再起動 |
| モデル/認証失敗? | hermes doctor; 先に hermes CLI をローカルでテスト |
| ログ | grep -i error ~/.hermes/logs/gateway.log | tail -20 |
症状:401 Unauthorized または Conflict: terminated by other getUpdates
- 401: 誤ったまたは失効した
TELEGRAM_BOT_TOKEN。 - Conflict: 同一 bot を 2 プロセスがポーリング—重複のフォアグラウンド
hermes gatewayまたは同一トークンの第 2 ホストを停止。
hermes gateway stop
pkill -f "hermes gateway" 2>/dev/null || true
hermes gateway start
症状:フォアグラウンドは動作、launchd では失敗
- launchd は最小環境—
~/.hermes/.envが読めてプロバイダキーがあることを確認。 - SSH と
launchctl print gui/$(id -u)のPATHを比較(macOS);プラグインが shell を呼ぶ場合は Node 等のパスを揃える。
症状:グループで /commands のみ見える
- BotFather プライバシーモードがまだ ON—無効化するか bot を管理者に;グループへ bot を再追加。
よくある質問
hermes claw migrate で設定を移行できますが、同一ホストで両方の bot を動かすと RAM が重複し自動化が競合する可能性があります。リースホストごとにメッセージング所有者は 1 つにしてください。memory_pressure を計測し、大規模 xcodebuild 中はゲートウェイを一時停止することも検討してください。Hermes Telegram ゲートウェイ向けヘッドレス M4
東京ノードを含む HK/JP/KR/SG/US の SSH 優先 Apple Silicon—Telegram ポーリングと launchd で 24/7 運用可能。