はじめに:Mac mini を自律型 AI サーバーに変える
Hermes Agent は、Mac mini 上に構築する常駐型 Discord AI ボットです。OpenAI Codex(gpt-5.3-codex)を思考エンジンとし、Discord Gateway 経由でいつでも対話可能な自律エージェントを実現します。本設計図では、仮想環境の展開から LaunchDaemon によるヘッドレス常駐化まで、確実な手順を解説します。
- Hermes Agent の4層システムアーキテクチャ(Hardware → Environment → Core → Interfaces)
- Phase 1: コアシステムと Python 仮想環境の展開
- 認証無限ループの突破(CLI 先行認証のバイパスルート)
- Phase 2: Discord Bot の Privileged Intents と OAuth2 設定
- Gateway クラッシュの解剖と discord.py の修復
- ログ診断マトリクス:致命傷とノイズの分離
- Phase 4: LaunchDaemon によるヘッドレス常駐化
- ゴールデン・コマンド・ツールキットと最終確認
システム・アーキテクチャの全容
Hermes Agent は単なる CLI ツールではなく、仮想環境、OS のデーモン、外部 API を緻密に連携させる統合システムです。4つのレイヤーが積み重なって動作します。
| レイヤー | 役割 | 主な要素 |
|---|---|---|
| Interfaces | 外部との接続窓口 | OpenAI API (Codex) / Discord Gateway (Bot) |
| Core (Hermes Agent) | AI の推論・記憶・スキル生成を行う心臓部 | hermes_cli.main / エージェントロジック |
| Environment (Python venv) | 隔離された依存関係パッケージ | discord.py / その他 Python パッケージ |
| Hardware (Mac mini) | プロセス管理と常時稼働 | LaunchDaemon によるシステムドメイン管理 |
Phase 1: コアシステムと仮想環境の展開
Hermes のインストールはワンライナーで始まります。スクリプトが uv / Python / Node.js のコア依存関係を自動解決し、~/.hermes/hermes-agent/venv/ に隔離された仮想環境を構築します。
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash
hermes setup
venv ディレクトリ構造
~/.hermes/hermes-agent/venv/
├── bin/
│ ├── python, python3, pip, pip3
│ ├── uv, node, npm
│ └── hermes
├── lib/
│ └── python3.x/
│ └── site-packages/
├── include/
└── pyvenv.cfg
今後のパッケージ追加は必ずこの仮想環境内の Python を指定して行ってください。source activate や単なる pip コマンドではパスが通っていない場合に見失う罠があります。仮想環境のフルパス指定が最も確実です。
Diagnostic Checkpoint: 認証無限ループの突破
推奨モデルはエージェント機能に最適化された gpt-5.3-codex です。ただし hermes model コマンドからブラウザ認証に入ると、認証が無限ループに陥るトラップがあります。
hermes model → ブラウザ認証 → 再度認証を求められる… の繰り返しに陥ります。
以下の手順で先にブラウザ認証を済ませてからモデルを設定します:
@openai/codexをグローバルインストール- パスを通す(
export PATH) codex loginで先行ブラウザ認証hermes model→ 実行・既存トークンのインポート [y/N]: y
Phase 2: Discord Bot インターフェースの要件
Discord 側で Bot を作成し、Privileged Gateway Intents を必ず有効化します。また OAuth2 URL Generator で正しいスコープと権限を設定します。
Privileged Gateway Intents(必須)
| Intent | 状態 | 用途 |
|---|---|---|
| Message Content Intent | ON | メッセージの読み取りに必須 |
| Server Members Intent | ON | メンバー情報の取得 |
| Presence Intent | ON | オンライン状態の監視 |
OAuth2 URL Generator
| 項目 | 設定値 |
|---|---|
| Scopes | bot, applications.commands |
| Permissions | Send Messages, Read Message History, Attach Files |
Token は「Reset Token」押下時に一度だけ表示されます。確実にコピーすること。
Diagnostic Checkpoint: 2FA 画面のフリーズ
Developer Portal で 6 桁の 2FA コードを入力すると画面が固まり、Token が取得できないケースがあります。以下の3ステップで解決します。
| ステップ | 対処法 | 解決率 |
|---|---|---|
| 1. ハードリロード | Cmd + Shift + R(Mac) | 9割解決 |
| 2. シークレットモード | Cmd + Shift + N で拡張機能の干渉を排除 | 残りの多く |
| 3. 時刻同期 | スマートフォンの認証アプリの「時刻の自動設定」をオン | コードのズレを修正 |
Token 取得後、以下のコマンドで Discord Token と User ID を登録します:
hermes gateway setup
Gateway クラッシュの解剖
Gateway が起動直後にクラッシュし、launchd が即座に再起動を試みる無限ループに陥ることがあります。LastExitStatus = 256 が表示される場合、依存パッケージの欠落が原因です。
launchd がプロセス管理 → Gateway を起動 → Discord へ接続を試みる → 依存パッケージ欠落で異常終了 → launchd が即座に再起動… のループが発生します。
フォアグラウンドで直接起動し、真のエラーメッセージを画面に露出させます:
hermes gateway run
失われたピース「discord.py」の修復
hermes gateway run で表示される真のエラーが以下の場合、discord.py がインストールされていません。
WARNING: Discord: discord.py not installed
ERROR: Gateway failed to connect any configured messaging platform
修復手順
1. hermes gateway stop
2. /Users/YOUR_USER/.hermes/hermes-agent/venv/bin/python -m pip install -U discord.py
source activate や単なる pip コマンドでは、パスが通っていない場合に見失う罠があります。仮想環境の Python フルパスを直接指定するのが最も確実な方法です。
ログ診断マトリクス:致命傷とノイズの分離
ログに表示される警告やエラーには、致命的なものと安全に無視できるものがあります。テキスト運用であれば、右列の警告は無視して問題ありません。
| 分類 | ログメッセージ | 対応 |
|---|---|---|
| Fatal Errors (致命的) |
discord.py not installed |
パッケージの直接インストールが必須 |
No adapter available |
パッケージの直接インストールが必須 | |
| Safe Warnings (安全) |
Opus codec not found |
音声チャンネル再生(Voice 機能)が無効になっているだけ。テキスト Bot としての基本動作(Gateway)には一切影響しない。 |
PyNaCl is not installed |
||
davey is not installed |
Phase 4: インフラストラクチャの常駐化(ヘッドレス運用)
Mac mini をヘッドレスサーバーとして運用するには、LaunchDaemon(システムドメイン)での登録が必須です。LaunchAgent との違いを理解しましょう。
| 項目 | LaunchAgent(デフォルト) | LaunchDaemon(目標設定) |
|---|---|---|
| 実行トリガー | ユーザーが GUI (Aqua) にログインした時 | Mac の電源が入った時(OS システム起動時) |
| 適性 | スリープさせないデスクトップ Mac 向け | 画面なし(ヘッドレス)の Mac mini サーバー向け |
| 弱点 / 強み | 再起動後、パスワードを入れてログインするまで Bot が沈黙する | ログイン不要で裏側で完全常駐 |
LaunchDaemon .plist ブループリント
/Library/LaunchDaemons/ai.hermes.gateway.plist に配置する設定ファイルの全容です。3つの重要ポイントに注意してください。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>ai.hermes.gateway</string>
<key>UserName</key>
<string>dirac</string>
<key>ProgramArguments</key>
<array>
<string>/Users/dirac/.pyenv/versions/hermes-venv/bin/python</string>
<string>-m</string>
<string>hermes_cli.main</string>
<string>gateway</string>
<string>run</string>
<string>--replace</string>
</array>
<key>EnvironmentVariables</key>
<dict>
<key>HOME</key>
<string>/Users/dirac</string>
<key>PATH</key>
<string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
<key>LANG</key>
<string>en_US.UTF-8</string>
</dict>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
- UserName: root 権限での暴走を防ぐため、必ず Hermes をインストールしたユーザー名を指定
- ProgramArguments: venv 内の Python フルパスと
hermes_cli.main gateway run --replaceを正確に指定 - EnvironmentVariables: Daemon は環境変数が薄いため、HOME, PATH, LANG (en_US.UTF-8) を明示的に追加し安定化させる
システム・ドメインへのサービス登録シーケンス
plist ファイルを配置した後、4ステップでシステムドメインに登録します。
1. Clean up: 古い Agent の削除
Agent を含み、古い Agent の削除は、それたい Agent の登録を削除してます。
launchctl bootout gui/$(id -u) ~/Library/LaunchAgents/ai.hermes.gateway.plist 2>/dev/null
2. Permissions: 権限の適正化
権限の適正化を通信し、LaunchDaemon に適した権限に適正を出す。
sudo chown root:wheel /Library/LaunchDaemons/ai.hermes.gateway.plist
3. Bootstrap: システムへの登録
システムドメインへの登録を実行します。
sudo launchctl bootstrap system /Library/LaunchDaemons/ai.hermes.gateway.plist
4. Kickstart: プロセスの強制起動
プロセスの強制起動により、プロセスを始められるように起動できます。
sudo launchctl kickstart -k system/ai.hermes.gateway
ゴールデン・コマンド・ツールキット
運用で必要なコマンドを3つのカテゴリに整理しました。
Status Check(状態確認)
sudo launchctl print system/ai.hermes.gateway
state = running が表示されればシステム起動成功。
Log Monitoring(ログ監視)
tail -n 50 ~/.hermes/logs/gateway.error.log
(Note: hermes gateway logs は存在しないため、直接ファイルを tail すること)
Restart & Stop(再起動・停止)
sudo launchctl bootout system /Library/LaunchDaemons/ai.hermes.gateway.plist
停止時は上記を実行。再起動は bootstrap と kickstart のシーケンスを再実行する。
最終確認 - Online への到達
すべてのフェーズが完了したら、以下の3つを確認しましょう。
- ✅ Online Status: メンバーリストで Hermes Agent が緑色(オンライン)になっているか
- ✅ Allowlist Verification: 自分(登録した User ID)のメッセージにのみ反応するか。本番運用は User ID 指定を強く推奨
- ✅ Silence Voice Warnings: 音声警告のログノイズが気になる場合は、Discord 上で
/voice offを実行
これで Mac mini は、再起動後も完全自動で稼働する自己改善型 AI エージェントのホストとなりました。
まとめ:The Blueprint is Complete.
依存関係の迷宮とプロセス管理の壁を越え、
あなただけのパーソナル AI エージェントが常駐化されました。
Hermes はこれより、あなたの指示から新しいスキルを自動生成し、成長し続けます。
- OpenClaw との比較(OpenClaw × Discord 構築プレイブック)
- エージェント設計の基礎(AIエージェント設計図)
- マスターブループリント(AIエージェント・用語大全)
- 公式コミュニティ: discord.gg/NousResearch