Hermes Flightplan #1: ゼロから構築する常時稼働 Telegram AI エージェント(コピペ可能な全コード付き)

@witcheer
英語3 週間前 · 2026年6月22日
111K
232
34
5
759

TL;DR

本ガイドでは、Telegram との統合、クラッシュ後の自動復旧、Nous Portal を使用した安全なセットアップなど、Hermes AI エージェントを VPS や Mac にデプロイするための包括的な手順を解説します。

スマホからメッセージを送れて、ラップトップを閉じても動き続け、再起動後も自動で復帰する AI エージェントが欲しいですか? Hermes Agent はそれを実現します。Telegram 経由で対話できるゲートウェイとして動作し、正しく設定すれば、クラッシュや停電後も自動で再起動します。

私は同じセットアップを 2 台のマシン(安価なクラウド VPS とデスク上の Mac Mini)で構築し、全行程を省略せずに書き留めました。これはその 1 つの手順です。マシンによって変わるのは、インストールコマンドとゲートウェイを生かし続ける部分の 2 箇所だけです。それ以外はすべて同じです。

以下の内容はすべて私自身のハードウェアで実行しました。Linux 環境は Hetzner CX23(x86、2 vCPU、4GB RAM、40GB ディスク)上の Ubuntu 24.04.4 LTS、Mac 環境は macOS 15 上の Mac Mini M4 です。どちらも Hermes Agent v0.16.0 を実行しました。

最終的に得られるもの

  • Hermes Agent が root ではなく一般ユーザーとしてインストールされ、実行されている状態
  • スマホからメッセージを送れる Telegram ボット(あなたのアカウントのみに制限)
  • 管理サービスとして動作するゲートウェイ(クラッシュや再起動後も自動復帰)
  • VPS 上では、鍵認証のみの SSH、root ログイン無効、ファイアウォールによる堅牢化済み

マシンを選ぶ

VPS が最も安価な選択肢です。4GB RAM と約 20GB の空きディスクがある x86 マシンなら動作します。私の環境は Hetzner CX23(月額 $7.79、Hetzner US 価格、2026 年 6 月 18 日時点)です。レンタルすれば、定義上常にオンラインです。

もう 1 つの選択肢は、既に所有している Mac です。電源が入ったままの Apple Silicon Mac なら動作し、ランニングコストはゼロです。ただし、耐久性レイヤーが macOS ではより複雑になるため、その点は最後に説明します。

自分のマシンに SSH 鍵(持っていない場合は ssh-keygen -t ed25519 で作成)、Telegram アカウント、そしてエージェント用のモデルが必要です。このガイドでは Nous Portal を指定しています。これは OAuth 認証なので、API キーをファイルに保存する必要はありません。Hermes には少なくとも 64k のコンテキストを持つモデルが必要です。

ステップ 1: マシンを準備する

VPS の場合

プロバイダーでサーバーを作成します。Ubuntu 24.04、x86 インスタンス(Arm ではありません。コストに関する注意事項を参照)、作成時に SSH 公開鍵を貼り付けます。

新しいパブリックサーバーは、エージェントを配置する前に数分間の堅牢化が必要です。レシピ内の secure-box.sh はこれを 1 回で行います。apt upgrade、2GB のスワップファイル、あなたの鍵を持つ root 以外の sudo ユーザー、root ログインを無効にした鍵認証のみの SSH、SSH のみを許可するファイアウォールです。上部の 2 つの変数を編集し、コピーして root で実行します。

bash
1scp secure-box.sh root@<your-vps-ip>:
2ssh root@<your-vps-ip> 'bash secure-box.sh'

この Ubuntu イメージは、SSH 鍵でサーバーを作成したにもかかわらず、PasswordAuthentication が yes に設定されていました。スクリプトでこれを無効にします。root セッションを閉じる前に、別のターミナルを開いて新しいユーザーでログインできることを確認し、ミスでロックアウトされないようにします。

bash
1ssh hermes@<your-vps-ip>

ここからは hermes ユーザーとして作業し、root ではありません。

Mac の場合

堅牢化作業は不要です。パブリックサーバーではなく、自分のネットワーク上の自分のマシンです。Homebrew をまだインストールしていない場合はインストールしてください(インストーラーは次のステップでこれを使用します)。これで準備完了です。

ステップ 2: Hermes をインストールする

インストールは 1 つのコマンドで、両方のマシンで同じです。一般ユーザーとして実行します。

bash
1curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash
2source ~/.bashrc
3hermes --version

インストーラーは OS を検出し、独自のツールチェーン(uv、Python 3.11、Node.js 22、ripgrep、ffmpeg、ブラウザツール用の Playwright Chromium)を ~/.hermes にプルするため、システムの Python には一切影響を与えません。私の Hetzner サーバーでは、Hermes Agent v0.16.0 が Python 3.11.15 上にインストールされました。

これは負荷の高いステップです。VPS では、ディスク使用量が 1.2GB から 7.8GB に増加しました(約 6.6GB 増加)。そのほとんどはブラウザエンジンと Node です。20GB の空き容量を確保しておけば安心です。ターミナルのないプレーンな SSH コマンドで実行すると、インストーラーは「Setup wizard skipped (no terminal available)」と表示しますが、これは問題ありません。セットアップは次のステップです。

Mac でも同じコマンドが実行されますが、1 つ注意点があります。先に Homebrew をインストールしてください。Homebrew が存在すれば、インストーラーはプロンプトなしで git とその依存関係をプルします。Homebrew がない場合、Apple の Command Line Tools にフォールバックし、macOS のダイアログが表示されてクリックが必要になる可能性があります。SSH 経由ではダイアログは操作できません(これはインストーラーの macOS ブランチに該当します)。その後は上記と同じ流れです。

ステップ 3: モデルを指定する

bash
1hermes setup --portal

これは Nous Portal に対する OAuth 認証です。URL とコードが表示されるので、ブラウザで承認します。これで、API キーをファイルに保存することなく、サーバーがモデルと通信できるようになります。Nous Portal には無料枠があり、私は無料モデルで全てを実行しました。独自のプロバイダーを使用したい場合は、hermes model を実行して選択してください。その場合、キーは ~/.hermes/.env に保存されます。

ステップ 4: 対話する

VPS の場合

SSH 接続が切れると、フォアグラウンドのセッションも終了します。tmux を使用するとセッションを維持できます。tmux 内で起動し、デタッチすれば、実行は継続されます。

bash
1sudo apt-get install -y tmux
2tmux new -s hermes # その後、内部で: hermes

Ctrl-b を押してから d でデタッチし、後でどこからでも再接続できます。

bash
1ssh hermes@<your-vps-ip>
2tmux attach -t hermes

インタラクティブエージェントの初回起動には時間がかかります。私の環境では、モデルとスキルの読み込みに約 30 秒かかり、その後プロンプトが表示されました。起動後はスラッシュコマンドが使用できます。

/goal は特に紹介する価値があります。これはエージェントが複数のターンにわたって取り組む継続的な目標を設定し、各ターン後に判定モデルが目標が達成されたかどうかを確認します。

bash
1/goal check this box total RAM and free disk using shell tools, then report both on one line and mark the goal done

私の環境では、エージェントが自身でシェルコマンドを実行し、約 15 秒で「VPS total RAM: 3.7Gi, free disk space: 28G」と返答しました。これはエージェントが自身のツールを使用している例です。

2 つの概念を区別してください。tmux は SSH 接続が切れてもインタラクティブセッションを開いたままにしますが、再起動後は維持しません。再起動後も存続する無人ゲートウェイが必要な場合は、管理サービスを使用します。これがステップ 6 です。

Mac の場合

マシンの前に座っているので、ターミナルで hermes を実行できます。ラップトップから SSH 接続する場合でも tmux は役立ちますが、ここでは必須ではありません。

ステップ 5: Telegram ゲートウェイ

この部分は両方のマシンで同じです。ボットを作成します。Telegram で @BotFather にメッセージを送り、/newbot を実行し、トークンをコピーします。@userinfobot から自分の数値ユーザー ID を取得します。次に、ゲートウェイを設定します。

bash
1hermes gateway setup

Telegram を選択し、トークンを貼り付け、許可ユーザーに自分の数値 ID を設定して、自分だけがボットと通信できるようにします。トークンは ~/.hermes/.env に、その他の設定は ~/.hermes/gateway.json に保存されます。

セットアップは設定を書き込むだけで、何も起動しません。そのためボットは沈黙したままで、これに気づかない人がいます。まだ Telegram をポーリングしていないのです。フォアグラウンドで一度起動して、接続を確認します。

bash
1hermes gateway run

ログに以下が表示されることを確認します。

bash
1gateway.run: Connecting to telegram...
2[Telegram] Connected to Telegram (polling mode)
3gateway.run: ✓ telegram connected

ポーリングモードとは、ゲートウェイが Telegram に接続しに行くことを意味します。誰もあなたのサーバーに接続してくることはないため、ファイアウォールは SSH 以外のインバウンドポートを開く必要がありません。ボットにメッセージを送信し、応答があることを確認します。その後、Ctrl-C でフォアグラウンドのゲートウェイを停止します。同じトークンを同時にポーリングするものが 2 つあってはならないからです。次のステップでサービスとして実行します。

ステップ 6: 再起動後も存続させる

ここが 2 つのマシンで唯一異なる点です。

VPS の場合: systemd

hermes gateway install はゲートウェイを systemd サービスとして登録し、クラッシュ時に再起動し、再起動後も自動復帰するようにします。このバージョンでは、インストーラーが 2 つの [Y/n] 質問をし、それらをスキップするフラグはありません。サーバーをスクリプト化する際に自然な方法である非インタラクティブな SSH コマンドで実行すると、回答が得られず、中断され、何もインストールされません。標準入力から回答を渡します。

bash
1printf 'n\nY\n' | hermes gateway install

2 つの質問は、「今すぐゲートウェイを起動しますか?」と「ログイン時/起動時に自動起動しますか?」です。n の後に Y を指定すると、今すぐ起動はせず、起動時に有効にします。インストーラーはユーザーセッションの滞留も有効にします。これにより、ログイン前でもユーザーサービスが実行できるようになります。これを確認してください。これこそが「再起動後も存続する」を真にし、「ログアウト後も存続する」だけではないものにするものです。

bash
1loginctl show-user $USER -p Linger # 確認: Linger=yes

起動して確認します。

bash
1hermes gateway start
2systemctl --user status hermes-gateway

active (running)NRestarts=0 が表示されることを確認します。私のサーバーでは、ゲートウェイが約 280MB、マシン全体で約 556MB を使用し、4GB で快適に動作しました。

次に、本当のテストです。再起動して、何も操作しません。

bash
1sudo reboot

私の環境では約 15 秒で復帰し、ゲートウェイが自動的に起動し、Telegram に再接続し、再起動前の会話履歴を保持したまま次のメッセージに応答しました。これが全てのポイントです。

Mac の場合: launchd と watchdog

macOS は systemd ではなく launchd を使用しますが、ここに落とし穴があります。macOS 15 と Hermes v0.16.0 では、hermes gateway start が launchd サービスの登録に失敗し、そのことを通知せずに、管理されていないバックグラウンドプロセスにフォールバックする可能性があります。以下のような表示が出ます。

bash
1Bootstrap failed: 5: Input/output error
2⚠ launchd cannot manage the gateway on this macOS version (launchctl exit 5)
3✓ Started gateway as a background process instead
4 It will NOT auto-start at login or auto-restart on crash.

もし以前に動作していた launchd ジョブがあった場合、このコマンドはそれをアンロードし、フォールバックは最初のクラッシュまたは再起動までは正常に動作しますが、その後はエージェントが消え、それを知らせるものは何もありません。CLI が失敗する場合でも、生の launchctl は動作します(SSH 経由でも)。

bash
1launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/ai.hermes.gateway.plist
2launchctl print gui/$(id -u)/ai.hermes.gateway | grep state # 確認: state = running

plist はログイン時にゲートウェイを起動しますが、クラッシュ時に再起動はしません。cron の watchdog が両方のギャップを埋めます。cron はログイン不要で起動時に実行されます。レシピには gateway-watchdog.sh が含まれています。これは 5 分ごとにゲートウェイプロセスが生きているか確認し、生きていなければ再ブートストラップします。スケジュールに組み込みます。

bash
1(crontab -l 2>/dev/null; echo '*/5 * * * * $HOME/scripts/gateway-watchdog.sh >/dev/null 2>&1') | crontab -

私はこのシーケンスが、自身の Mac Mini でダウングレードされたゲートウェイを復旧するのを確認しました。再起動し、ログインしなくても 5 分以内にゲートウェイが復帰することを確認してください。

セットアップを確認する

  1. サービスが起動していること: Linux では systemctl --user status hermes-gatewayactive (running))、macOS では launchctl print gui/$(id -u)/ai.hermes.gateway | grep statestate = running
  2. ボットにメッセージを送信する: 応答があり、許可ユーザーリストにないユーザーからのメッセージは無視すること
  3. Linux では、loginctl show-user [$USER](https://x.com/search?q=%24USER&src=cashtag_click) -p LingerLinger=yes と表示されること
  4. サーバーを再起動し、待ち、再度ログインせずにボットにメッセージを送信する: 応答があること

コスト

VPS の場合、サーバー代のみが費用です。私の環境は Hetzner CX23 で、$0.012/時間、月額上限 $7.79(Hetzner US 価格、2026 年 6 月 18 日時点。EU の CX22 も同じスペックでより安価です)。

Mac の場合、既に所有しているマシンを使用するため、追加のサービス費用はゼロです。どちらの場合も、モデルは Nous Portal の無料枠で無料です。

ここで、メモリは制限要因ではありません。ゲートウェイは約 280MB、サーバー全体で約 556MB を使用するため、1GB の RAM で十分です。ディスクが実際の制限要因です。インストールには約 6.6GB 必要なので、1GB や 10GB のイメージでは不十分です。20GB を割り当ててください。また、x86 を使用してください。安全な選択です。

自分で実行する、そして次に来るもの

両方のマシンに、そのまま実行可能な完全なレシピとスクリプトがあります。

これで、再起動後も存続する、Telegram 上の常時稼働エージェントが手に入りました。

次の Flightplan はこれを基に構築します。重要なことだけを通知するスケジュールジョブ、エージェントが読み書きする git 同期ワークスペース、そしてすべての公開アクションに人間の承認を必要とするドラフト&承認フローです。

お読みいただきありがとうございました。

ワンクリック保存

YouMindでバイラル記事をAI深読み

ソースを保存し、的を絞った質問をし、主張を要約して、バイラル記事を再利用できるノートに変えます。すべてを1つのAIワークスペースで行えます。

YouMindを探索
クリエイターのために

あなたの Markdown をきれいな 𝕏 記事に

自分の長文を投稿するとき、画像・表・コードブロックを 𝕏 向けに整形するのは手間がかかります。YouMind は Markdown 全体を、そのまま投稿できるきれいな 𝕏 記事に変換します。

Markdown → 𝕏 を試す

解読すべきパターンをもっと

最近のバイラル記事

バイラル記事をもっと見る