mcpField
H
hermes-onboarding

hermes-onboarding

github.com/moonlight-lupinクラウド・DevOps113122 回インストール1 日前に更新
リポジトリ

hermes-onboarding について

hermes-onboarding は、正常に会話できる Hermes Agent を運用向けに設定する手順を案内するスキルです。ゲートウェイ、サービス、セキュリティ、メモリ、検索バックエンド、スキル作成の指針を扱い、DonSeTch を MCP サーバーとして設定します。

主な機能

  1. 01環境と Hermes の設定を検出
  2. 02プロフィール、SOUL.md、メッセージングゲートウェイを設定
  3. 03ゲートウェイとダッシュボードを systemd サービス化
  4. 04承認、ターミナルバックエンド、コンテキスト圧縮を設定
  5. 05DonSeTch MCP サーバーと検索フォールバックを導入
  6. 06メモリとスキル作成のガードレールを設定

活用シーン

  1. 01新しいマシンで Hermes Agent を構成
  2. 02本番向けにゲートウェイとダッシュボードを設定
  3. 03Hermes のウェブ検索とコンテンツ抽出を構成
  4. 04メモリを有効化しスキル検索・作成を調整

MCP 対応

DonSeTch MCP サーバーの導入と登録を案内し、Hermes から検索、取得、クロールのツールを利用できるようにします。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/moonlight-lupin/agent-skills --skill hermes-onboarding

インストール後、Claude Code で/hermes-onboardingを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

evals/
routing-fixtures.json
references/
setup-details.md
scripts/
donsetch_update.sh
weekly_health_check.sh

詳細

Hermes のオンボーディング

動作する基本的なチャット環境から、本番環境に対応したデプロイメントへ、初期状態の Hermes Agent を構成します。

前提条件: Hermes がインストールされ、メインモデルとプロバイダーが構成済みであること。hermes doctor で確認してください。エージェントが通常のチャットを完了できない場合は、ここで中断して、まずプロバイダーを修正してください。

先頭の語: onboard — セットアップの完了を宣言する前に、すべてのレイヤーを構成します。

使用する場合

  • 動作する基本的なチャット環境を備えた Hermes を新規インストールした顧客が、完全な構成を必要としている場合
  • オペレーターが本番環境で使用するために、新しい VPS またはマシンで Hermes をセットアップする場合
  • 顧客が「動作する」状態から「セキュリティが確保され、メモリが有効で、常時稼働し、保守されている」状態を目指す場合

メインモデルがまだ構成されていない場合は使用しないでください。まずプロバイダーを修正してください。

ステップ 0 — リファレンスを読み込む

references/setup-details.md を読み込みます。設定スニペット、systemd テンプレート、DonSeTch MCP の設定、スキルのガードレールの原則、詳細度の例が記載されています。

完了: リファレンスファイルをコンテキストに読み込み済みです。

ステップ 1 — 環境を検出する

references/setup-details.md § Detection の検出ブロックを実行します。以下を収集します。

項目方法
OSuname -a
systemdsystemctl --version
Dockerdocker --version
root かユーザーかwhoami
コンテナーかベアメタルかhead -5 /proc/1/cgroup
Hermes のパスwhich hermes
Hermes のバージョンhermes --version
メインモデルのビジョン対応状況プロバイダーのドキュメントでモデルの機能を確認するか、vision_analyze でテストする

完了: 8 項目すべてを検出して記録済みです。ユーザー入力は必要ありません。

ステップ 2 — 最初に質問する

顧客に3つの質問をまとめて行います。

  1. 顧客名 — プロファイル名と soul.md の識別情報に使用します
  2. タイムゾーン — IANA タイムゾーン(例:Asia/Singapore、America/New_York)
  3. ゲートウェイプラットフォーム — Telegram、Discord、WhatsApp、Slack、Signal。ボットトークンまたはペアリング情報を収集します。トークンは ~/.hermes/.env に保存します(chmod 600)。チャットの記録にトークンを貼り付けないでください。

ステップ 1 でメインモデルがビジョンに対応していないと検出された場合は、4つ目の質問を追加します。

  1. ビジョン対応の補助モデル — ビジョンタスク用のモデルとプロバイダーを確認します。デフォルト:メインモデルと同じプロバイダー。

完了: 最初の質問すべてに回答済みです。ビジョンに関する質問は必要な場合のみ行います。

ステップ 3 — 代替プロバイダーと補助モデル

タスクコマンドデフォルト
補助ビジョンモデルhermes config set agent.aux_models.vision <model>メインモデルと同じプロバイダー
埋め込みモデルNVIDIA_API_KEY を ~/.hermes/.env に設定NVIDIA NIM (nemotron-3-embed-1b)
委任デフォルトのままにする(メインモデルに従う)操作不要
フォールバックプロバイダーhermes config set fallback_providers '[...]'顧客から希望がない限りスキップ

NVIDIA_API_KEY がない場合は、https://build.nvidia.com/nvidia/nemotron-3-embed-1b で無料キーを取得できるよう顧客をサポートします。代替手段:既存の OPENROUTER_API_KEY を使用した OpenRouter bge-m3。

完了: 補助ビジョンモデルを構成済み(必要な場合)。NVIDIA_API_KEY を設定済みです。委任がメインモデルに従うことを確認済みです。

ステップ 4 — プロファイルと soul.md

  1. 単一のプロファイルを作成します:hermes profile create <customer-name>
  2. 顧客に soul.md に記載する内容を確認します。
    • エージェント名(デフォルト:「Hermes」)
    • 使用言語(デフォルト:英語)
    • 性格(デフォルト:ビジネス向け)
    • ドメイン固有の指示(任意)
  3. 顧客からの入力に基づいて ~/.hermes/SOUL.md を作成します。references/setup-details.md § Soul.md template を参照してください。

複数のプロファイルを使用するのは、顧客が別々のプロファイルを必要としていると明確に述べた場合のみです。

完了: プロファイルを作成済みです。顧客の入力に基づいて soul.md を作成済みです。

ステップ 5 — ゲートウェイとサービス

  1. ゲートウェイを設定します:hermes gateway setup — お客様が選択したプラットフォームを選び、トークンを入力します
  2. ゲートウェイを systemd サービスとしてデプロイします。references/setup-details.md の「Gateway systemd unit」にあるテンプレートを使用します:
    • ルートモード:/etc/systemd/system/hermes-gateway.service
    • ユーザーモード:~/.config/systemd/user/hermes-gateway.service + loginctl enable-linger $USER
    • TimeoutStopSec=240 を設定します
  3. ダッシュボードを systemd サービスとしてデプロイします。references/setup-details.md の「Dashboard systemd unit」にあるテンプレートを使用します:
    • HERMES_DASHBOARD_TUI=1 を設定します
    • HERMES_PYTHON に venv の Python パスを設定します
    • バインド方法 — お客様に確認します:
      • ループバック(デフォルト): 127.0.0.1 にバインドします。SSH トンネル経由でアクセスします:ssh -L 9119:127.0.0.1:9119 user@host。最も安全です。ファイアウォールの変更は不要です。
      • LAN(0.0.0.0): --host 0.0.0.0 を指定して、すべてのインターフェースにバインドします。同じネットワーク上の任意のデバイスから http://<host-ip>:9119 で直接アクセスできます。すべてのデバイスが信頼できる社内 WiFi/LAN に適しています。ダッシュボードが無保護にならないよう、基本認証(ステップ 5b)を設定してください。
  4. 両方のサービスを有効化して起動します
  5. タイムゾーンを設定します:hermes config set timezone '<customer-timezone>' + timedatectl set-timezone '<tz>'

完了: ゲートウェイとダッシュボードが systemd サービスとして稼働しています。ゲートウェイ経由でテストメッセージを送信済みです。ダッシュボードには SSH トンネル経由、または基本認証を設定した LAN 経由でアクセスできます。

ステップ 5b — ダッシュボードの基本認証(LAN モードでは必須、すべてのモードで推奨)

Hermes には基本認証プロバイダーが組み込まれています。ダッシュボードが無保護にならないよう、ユーザー名とパスワードを設定します。

  1. パスワードをハッシュ化します:
    python3 -c "from plugins.dashboard_auth.basic import hash_password; print(hash_password('customer-password'))"
    
  2. config.yaml に設定します(hermes config set はネストされた値を文字列化するため、直接編集してください):
    dashboard:
      basic_auth:
        username: admin
        password_hash: <hash-from-step-1>
    
  3. ダッシュボードを再起動します:systemctl restart hermes-dashboard
  4. 確認します:ブラウザーでダッシュボードの URL を開くと、ログインページが表示されます

ループバックのみのデプロイでは省略可能です(SSH トンネルによってすでにアクセスが制限されます)。LAN へのデプロイでは必須です。

完了: 基本認証が設定されています。アクセスするとダッシュボードにログインページが表示されます。

ステップ 6 — 承認とターミナルバックエンド

設定値コマンド
承認smarthermes config set approvals.mode smart
ターミナルバックエンドdocker(検出された場合)または localhermes config set terminal.backend docker

完了: 承認が smart に設定されています。Docker の検出結果に基づいて、ターミナルバックエンドが設定されています。

ステップ 7 — 圧縮

モデルのコンテキスト長に基づいて圧縮を設定します:

コンテキスト長しきい値目標比率
64K–128K0.350.20
200K+0.500.20
hermes config set compression.enabled true
hermes config set compression.threshold <value>
hermes config set compression.target_ratio 0.20

完了: モデルのコンテキスト長に合わせたしきい値で圧縮が有効になっています。

ステップ 8 — 検索と取得バックエンド(DonSeTch + フォールバック)

プライマリ:DonSeTch MCP サーバー(mcp_donsetch_web_search/web_fetch/web_crawl)。調査向けのクエリ、ボットによってブロックされたページ、JavaScript でレンダリングされたコンテンツに対応します。インストールして接続した後、単一の事実を調べる用途向けに軽量なフォールバックを設定します。

8a — DonSeTch をインストールする
npm install -g donsetch
8b — MCP サーバーとして登録する

~/.hermes/config.yaml の mcp: に追加します(hermes config set はネストされた値を文字列化するため、直接編集してください):

  donsetch:
    command: /usr/local/lib/node_modules/donsetch/binaries/donsetch
    args:
      - mcp
      - --supervised
    env:
      DONGHOST_CHROME: /usr/bin/google-chrome-stable
      DONGHOST_NO_SANDBOX: '1'
    enabled: true

確認します:hermes plugins list またはセッション情報に、donsetch と接続済みの 3 つのツールが表示されます。mcp_donsetch_web_search 経由でクエリを実行してテストします。

8c — フォールバックバックエンド(キー不要の Firecrawl)

設定ファイルで web.search_backend: firecrawl を設定します。FIRECRAWL_API_KEY が設定されていない場合、Hermes は Firecrawl の匿名パブリッククラウドモード(api.firecrawl.dev、認証ヘッダーなし)を使用します。確認済みです。明示的に選択して認証情報がない場合は、インストール手順なしでキー不要モードにルーティングされます。検索と抽出の両方に対応しています。

顧客が後で Firecrawl のプランを購入した場合は、FIRECRAWL_API_KEY を設定するだけで、同じバックエンドが自動的にキー認証モードに切り替わります。設定変更は不要です。

顧客が匿名クラウドへの呼び出しに異議を唱えた場合に限り、次の代替手段を使用します。

  • Docker が利用可能な場合:SearXNG をデプロイし(references/setup-details.md § SearXNG のデプロイを参照)、web.search_backend: searxng を設定します
  • Docker が利用できない場合:pip install ddgs を実行し、web.search_backend: ddgs を設定します

フォールバックは、単一の事実を素早く調べる用途(URL 1 件、バージョン 1 件、価格 1 件)に対応し、DonSeTch がダウンしている場合もカバーします。

8d — SOUL.md のウェブルーティングルール

ウェブルーティングのセクションは後回しにせず、ステップ 4(soul.md の書き込み)で顧客の SOUL.md に記述します。references/setup-details.md § Web ツールのルーティング(SOUL.md テンプレート)のテンプレートを使用します。基本ルールは次のとおりです。

  • 調査、精度重視の検索、比較、複数ソースによる検証 → 最初に mcp_donsetch_web_search
  • 組み込みの web_search = 単一の事実を素早く調べる場合のみ
  • ボット対策、CAPTCHA があるページ、または JavaScript で描画される URL → mcp_donsetch_web_fetch。組み込みの web_extract = 通常のページのみ
  • サイト全体の情報収集 → mcp_donsetch_web_crawl
  • 認証が必要なサイト、ファイルのアップロード、インタラクティブな操作 → browser_exec
  • スキャンされた PDF/OCR → pdftoppm + tesseract。donsetch は使用しない
  • LAN/ループバック URL → 組み込み機能(donsetch は SSRF 対策によりブロックします)
8e — DonSeTch の週次アップデート cron

リリースバイナリの自動更新機能をインストールします(ソースからのビルドは行いません。依存関係を軽くできます)。

# Script ships with the onboarding skill
cp ~/.hermes/skills/agent-ops/hermes-onboarding/scripts/donsetch_update.sh ~/.hermes/scripts/
chmod +x ~/.hermes/scripts/donsetch_update.sh
hermes cron create --name "DonSeTch weekly update" --schedule "0 9 * * 1" --mode no_agent ~/.hermes/scripts/donsetch_update.sh

このスクリプトはタグではなく、GitHub の releases/latest(アセット付きで公開されたリリース)を基準に判定します。アセットを公開していないタグでは donsetch update が 404 になるためです。最新の場合は無出力(標準出力が空)で終了します。no_agent cron は失敗または更新があった場合のみ通知します。

顧客が Nous Portal を利用している場合、Tool Gateway の検索はすでに有効です。それでも DonSeTch とフォールバックをインストールします。Tool Gateway の検索では、ボット対策が施されたページを取得できないためです。

完了: DonSeTch をインストールし、MCP サーバー(3 つのツール)として接続しました。フォールバックバックエンドを設定しました。ウェブルーティングルールを SOUL.md に記述しました。アップデート cron を有効にしました。テストクエリで検索を検証しました。

ステップ 9 — 抽出

キー不要の抽出が機能することを確認します。ステップ 1 で記録した Hermes のバージョンを確認し、キー不要の MCP リング(exa、parallel、tavily、firecrawl、keenable)に対応する 0.20.5 以上であることを確かめます。

hermes chat -q "Extract the content from https://example.com"

抽出に成功した場合、対応は不要です。顧客がバックエンドを固定したい場合は、web.extract_backend: firecrawl を設定します。匿名のキー不要モードは API キーなしで動作します(ステップ 8c と同じ仕組みです)。後で FIRECRAWL_API_KEY を設定すれば、キー認証モードに切り替わります。

完了: キー不要の抽出が機能することを確認しました。

ステップ 10 — メモリ(Mnemosyne)

  1. Mnemosyne を有効にします:hermes memory setup → Mnemosyne を選択します
  2. NVIDIA_API_KEY(ステップ 3 で設定)が設定されていることを確認します。Mnemosyne は埋め込みにこれを使用します
  3. メモリが機能することを確認します:mnemosyne_recall({"query": "test", "limit": 1})

完了: Mnemosyne を有効にしました。埋め込み用のキーを確認しました。メモリの呼び出しを検証しました。

ステップ 11 — スキル作成のガードレール

自己生成スキルに Matt Pocock の 7 つの原則を適用します。references/setup-details.md § スキルのガードレールを参照してください。エージェントは、作成したスキルをこれらの原則に照らして確認する必要があります。

スキル作成の完全な検証には、同梱のスキルを読み込みます:skill_view(name='hermes-agent-skill-authoring')。これは Hermes に同梱されているスキルで、すべてのインストールに software-development カテゴリーとして含まれています。

完了: ガードレールの原則を読み込みました。エージェントは、スキル作成の完全な検証方法を把握しています。

ステップ 12 — スキル検索プラグイン(BM25)

agent-skills リポジトリからスキル検索プラグインをインストールします。このプラグインは、システムプロンプト内のスキル一覧全体を名前のみのコンパクトなインデックスに置き換え、pre_llm_call フックを介して、各ターンで関連性の高い上位 K 件の説明を挿入します。名前付きプロファイル、skills.external_dirs、無効化リスト、プラットフォーム/条件によるゲートを尊重し、Hermes 自体が解決するものと同じコーパスを対象にします。無効な状態でインストールしてください。スキル数またはトークンのオーバーヘッドを踏まえて必要な場合にのみ有効化します。

12a — インストール(無効)
hermes plugins install moonlight-lupin/agent-skills/plugins/skill-retrieval --no-enable
12b — 有効化の必要性を評価する

評価を実行して、スキル数とオーバーヘッド比率を測定します。

python3 -c "
import yaml, pathlib, glob, os, re, sys

# Count skills the way Hermes resolves them: discovery helpers when importable
# (honors named profiles, external_dirs, plugin-bundled skills, symlinks),
# glob fallback for standalone contexts.
count = 0; total_chars = 0
try:
    from hermes_constants import get_skills_dir
    from agent.skill_utils import get_all_skills_dirs, get_project_skills_dirs, iter_skill_index_files
    from agent.prompt_builder import _parse_skill_file, _skill_should_show, extract_skill_conditions, _current_session_platform_hint
    hint = _current_session_platform_hint() or None
    seen = set()
    for root in list(get_project_skills_dirs()) + list(get_all_skills_dirs()):
        for f in iter_skill_index_files(root, 'SKILL.md'):
            try:
                ok, fm, desc = _parse_skill_file(f)
                if not ok or not desc: continue
                name = fm.get('name', '')
                if name in seen: continue
                if not _skill_should_show(extract_skill_conditions(fm), None, None, hint): continue
                seen.add(name); count += 1
                total_chars += min(len(desc), 200)
            except Exception: pass
    # Plugin-bundled skills also occupy the system prompt (keyed prefix:name)
    from hermes_constants import get_hermes_home
    plugins_root = get_hermes_home() / 'plugins'
    if plugins_root.is_dir():
        for pdir in sorted(plugins_root.iterdir()):
            pskills = pdir / 'skills'
            if not pdir.is_dir() or pdir.name.startswith('.') or not pskills.is_dir(): continue
            for f in iter_skill_index_files(pskills, 'SKILL.md'):
                try:
                    ok, fm, desc = _parse_skill_file(f)
                    if not ok or not desc: continue
                    name = fm.get('name', '')
                    if name in seen: continue
                    if not _skill_should_show(extract_skill_conditions(fm), None, None, hint): continue
                    seen.add(name); count += 1
                    total_chars += min(len(desc), 200)
                except Exception: pass
except ImportError:
    for f in glob.glob(os.path.expanduser('~/.hermes/skills/**/SKILL.md'), recursive=True):
        try:
            text = pathlib.Path(f).read_text()
            m = re.match(r'^---\n(.*?)\n---\n', text, re.DOTALL)
            if not m: continue
            fm = yaml.safe_load(m.group(1))
            if not fm: continue
            desc = fm.get('description', '')
            if desc:
                count += 1
                total_chars += min(len(desc), 200)
        except Exception: pass

desc_tokens = total_chars // 4

# Context window: provider-aware resolution when Hermes is importable
# (covers OpenRouter probing and cached per-model metadata), else config,
# else 128K default.
ctx = 0
try:
    from model_tools import _resolve_active_context_length
    ctx = int(_resolve_active_context_length() or 0)
except Exception:
    pass
if not ctx:
    try:
        with open(os.path.expanduser('~/.hermes/config.yaml')) as fh:
            cfg = yaml.safe_load(fh) or {}
        ctx = int(cfg.get('model', {}).get('context_length', 0))
    except Exception:
        pass
if not ctx:
    ctx = 128000

skill_ratio = desc_tokens / ctx if ctx else 0
SKILL_COUNT_THRESHOLD = 50
SKILL_RATIO_THRESHOLD = 0.05  # 5% of context from skill descriptions alone

print(f'Skills: {count}')
print(f'Skill description tokens: ~{desc_tokens} ({skill_ratio:.1%} of {ctx} context)')
print(f'Thresholds: skill count > {SKILL_COUNT_THRESHOLD} OR skill ratio > {SKILL_RATIO_THRESHOLD:.0%}')

if count > SKILL_COUNT_THRESHOLD or skill_ratio > SKILL_RATIO_THRESHOLD:
    print('RECOMMEND: enable skill-retrieval plugin')
else:
    print('RECOMMEND: keep disabled — overhead within healthy range')
"

推奨の判断には、次の 2 つのしきい値を使用します。

  • スキル数が 50 を超える場合 — システムプロンプト内のスキル一覧全体が約 2.5K トークンを超えます。プラグインのコンパクトなインデックス(約 2.3K)は、それ自体のコストを上回る節約になります。
  • スキルの説明によるオーバーヘッドがコンテキストウィンドウの 5% を超える場合 — スキルの説明だけで 5% に達すると、固定コスト(ツールスキーマ、システムプロンプト、動作ルール)と合わせて、オーバーヘッド全体が 15% を超えます。15% というしきい値は、input-token-overheads スキルが示す健全な範囲の上限です。顧客がより詳しい分析を希望する場合は、そのスキルを読み込み、オーバーヘッドを詳しく監査してください。
12c — 推奨された場合に有効化する
hermes plugins enable skill-retrieval

プラグインを有効にするには、セッションを再起動してください。各ターンへの挿入は pre_llm_call フックから実行され、名前のみの圧縮はプロンプトの構築時に適用されます。

推奨されない場合、プラグインはインストールされたまま無効になります。スキルを追加した後にこの評価を再実行してください。顧客は後から有効にできます。

12d — 有効化しない場合はメモリーに記録する

プラグインを有効にしなかった場合は、アップグレード方法があることをエージェントが記憶できるよう、Mnemosyne のメモリーを保存します。

mnemosyne_remember(
    content="Skill-retrieval plugin (BM25) is installed but disabled. Enable with `hermes plugins enable skill-retrieval` if skill count exceeds 50 or input token overhead from skill descriptions exceeds 5% of context window. Re-run the Step 12b assessment after adding skills.",
    importance=0.6,
    scope="global",
    source="onboarding",
    veracity="stated"
)

完了: スキル検索プラグインをインストールしました(無効)。有効化を推奨するのは、スキル数が 50 を超える場合、またはスキルのオーバーヘッドがコンテキストウィンドウの 5% を超える場合のみです。無効にした場合、Mnemosyne のメモリーにアップグレード方法が記録されます。

ステップ 13 — ライト RAG(library-rag)

  1. agent-skills リポジトリから library-rag スキルをインストールします
  2. library-rag のオンボーディングワークフロー(ディレクトリ、NVIDIA API キー、最初のインデックス作成)に従います
  3. 顧客が検索ツールの自動利用を希望する場合は、config.yaml に MCP サーバーを登録します

注:インデックスはチャンクごとに約 8KB 増加します。小さなコーパスから始めてください。50 冊の蔵書で約 100MB です。研究用の蔵書全体では 1GB を超える場合があります。

完了: library-rag をインストールしました。最初のドキュメントのインデックスを作成しました(顧客が希望した場合は MCP サーバーを登録済み)。

ステップ 14 — ブラウザー自動化(CDP)

  1. Chromium があるか確認します:which chromium-browser || which chromium || which google-chrome
  2. 見つからない場合はインストールします:apt install -y chromium-browser(またはプラットフォームに相当するコマンド)
  3. ブラウザーのバックエンドを設定します:hermes config set browser.cdp_url http://127.0.0.1:9222
  4. メモリーのガードレールと、アイドル状態のタブを整理する機能を備えた chrome-cdp systemd サービスを、references/setup-details.md § "CDP browser systemd service" に従ってインストールします。ヘッドレス Chrome は数週間にわたってレンダラーメモリーを消費し続けます。上限設定と 6 時間ごとの整理、週次の再起動により、ホストのリソース不足を防ぎます。
  5. 確認します:エージェントがブラウザーのタブを開いて移動できます
  6. 整理機能を確認します:journalctl -t chrome-cdp-drain -n 1 に動作が表示されます(defer でも問題ありません)。systemctl list-timers 'chrome-cdp*' に両方のタイマーが設定済みとして表示されます

検出回避やクラウドブラウザーが必要な場合のアップグレードとして、Browserbase と Firecrawl を紹介しています。

完了: CDP ブラウザーを systemd サービス、メモリー上限、整理・再起動タイマーとともに設定しました。Chromium を利用できます。ブラウザーテストに合格しました。整理タイマーが設定済みです。

ステップ 15 — ツールセットの監査

  1. hermes tools list を実行します
  2. ツールセットを次のように分類して提示します。
カテゴリツールセット
必須(維持)terminal, file, web, search, browser, code_execution, memory, session_search, todo, skills, cronjob, clarify
任意(確認)vision, image_gen, tts, delegation, messaging, kanban
高度(デフォルトでオフ)spotify, homeassistant, discord, discord_admin, feishu_doc, feishu_drive, yuanbao, rl, debugging, x_search, video
  1. 維持する任意のツールセットを顧客に確認します
  2. 不要なものを無効にします:hermes tools disable <name>

注:messaging はクロスプラットフォームでのメッセージ送信です(複数プラットフォームのセットアップでのみ使用します)。rl は強化学習ツールです。debugging は Hermes 開発向けの追加の内部情報確認機能です。

完了: ツールセットを監査しました。不要なツールセットを無効にしました。顧客が任意の選択を確認しました。

ステップ 16 — 詳細度の確認

references/setup-details.md § Verbosity の例を使って、4 つの tool_progress モードを提示します。顧客に確認を求めます。

モード表示内容
off最終応答のみ。ツールの出力は表示されません
newツールごとに 1 行表示し、連続する繰り返しは省略します
allツール呼び出しごとに所要時間を含む 1 行を表示します(デフォルト)
verboseall と同じ内容に加え、ツールの引数全体を表示します

支出を追跡するには、show_cost: true を推奨します。

hermes config set display.tool_progress all
hermes config set display.show_cost true

完了: 詳細度を確認しました。show_cost を有効にしました。

ステップ 17 — Cron フリートのデフォルトモデル

プロバイダーの切り替え時にドリフトガードのエラーが発生しないよう、Cron フリートのデフォルトを設定します。

hermes config set cron.model_provider <main-provider>
hermes config set cron.model <main-model>

完了: Cron フリートのデフォルトを設定しました。今後、モデルが固定されていない Cron ジョブは、プロバイダーの切り替え時に失敗しません。

ステップ 18 — メンテナンス用 cron

スケジュール設定する cron を 4 つ作成し、トリガーで実行する手順を 1 つ記載します。

Cronスケジュールモード内容
メモリの統合4 日ごと、02:00no_agentmnemosyne_sleep.sh — 作業メモリ → エピソード記憶。完了時は通知しません。
バックアップ + 更新 + ヘルスチェック毎週(日曜、03:00)Agenthermes backup(コピーは最大 2 つ)を実行し、続いて hermes update を実行した後、更新後のヘルスチェックを実施します(必要に応じて LAN パッチを再適用)。失敗時に通知します。
週次ヘルスチェック毎週(日曜、06:00)no_agentweekly_health_check.sh — ホストの状態、ディスク使用量、ログの異常、入力トークンのオーバーヘッドをまとめたレポートを作成します。正常時は通知しません。いずれかのチェックで問題が見つかった場合は、内訳付きで通知します。
入力トークン監査30 日ごと、09:30Agentinput-token-overheads スキルの集計監査(scripts/audit.py --days 30)を実行します。利用元を順位付けし、事前チェック項目を確認し、前回のベースラインとの差分を報告して、検証済みの設定値とともに変更案を提示します。実行のたびに詳細なレポートを作成します。週次チェックでは一部しか確認しない項目を詳しく監査します。input-token-overheads スキルのインストールが必要です(ステップ 20 を参照)。
DonSeTch の週次更新毎週(月曜、09:00)no_agentdonsetch_update.sh — リリースバイナリの自動アップデーターです。タグではなく、GitHub の releases/latest を基準にします。すでに最新の場合は通知しません。ステップ 8e を参照してください。

バックアップ + 更新の cron は no_agent ではなく、エージェントモードで実行します。更新後のヘルスチェックで、hermes update によって上書きされたダッシュボードパッチを再適用する必要が生じる場合があるためです。no_agent のスクリプトでは、パッチを再適用したり skill_view を実行したりできません。

週次ヘルスチェックスクリプト(~/.hermes/scripts/weekly_health_check.sh)は、4 つのチェックをまとめて 1 つのレポートを作成します。

  1. ホストの状態 — systemd-detect-virt と /proc/device-tree/model を使ってホストの種類(Raspberry Pi、VM、ベアメタル、Mac、Windows/WSL)を検出します。稼働時間とロードアベレージを報告します。
  2. ディスク使用量 — すべてのマウントを対象に df -h を実行します。いずれかのマウントの使用率が 80% を超えると通知します。
  3. ログの異常 — log-analyzer のスキャン(analyze_logs.py --since 7d --quiet)と state_failures.py --quiet --days 7 を実行します。エラーの集中、レート制限、タイムアウト、ツールの失敗、クラッシュ、セッションの失敗を報告します。
  4. 入力トークンのオーバーヘッド — スキルの数を数え、スキルの説明がコンテキストウィンドウに占めるトークンのオーバーヘッドを測定します。スキル数が 50 を超えるか、スキルのオーバーヘッドがコンテキストの 5% を超えると通知します。skill-retrieval プラグインの有効化を推奨します。

スクリプトは常にレポートを出力します(問題がない場合も含む)。通知が見つかった場合は、具体的な対処手順を含む 推奨アクション セクションも追加します。cron はレポートを顧客のホームチャネルに配信します。

推奨アクションは、各チェックの結果に応じて生成されます。

通知推奨アクション
高負荷(CPU 容量の 80% 超)top または htop で暴走プロセスを確認します
ディスク使用率が 80% 超ディスククリーンアップスキルを実行します(skill_view(name='disk-cleanup'))
ログでエラーが集中最も頻度の高いエラーを確認し、インフラストラクチャの問題であれば修正を予定します
レート制限への到達プロバイダーのクォータを確認するか、~/.hermes/.env の API キーをローテーションします
タイムアウトが集中影響を受けるエンドポイントへのネットワーク接続を確認します
ツールの成功率が 95% 未満失敗したツール呼び出しを確認し、設定をチェックします
スキルのオーバーヘッドがしきい値を超過skill-retrieval プラグインを有効にします(hermes plugins enable skill-retrieval)

すべてのチェックに合格した場合、推奨アクションのセクションには「対応は不要です。すべてのチェックに合格しました。」と表示されます。

オンボーディング中にスクリプトをインストールします。

# Script ships with the onboarding skill at scripts/weekly_health_check.sh
cp ~/.hermes/skills/agent-ops/hermes-onboarding/scripts/weekly_health_check.sh ~/.hermes/scripts/
chmod +x ~/.hermes/scripts/weekly_health_check.sh

トリガー実行(スケジュール設定なし):更新後のヘルスチェック — hermes doctor を実行し、ゲートウェイとダッシュボードの状態を確認して、必要に応じてパッチを再適用します。references/setup-details.md の § 更新後のヘルスチェックを参照してください。週次 cron 以外で hermes update を実行した後にも手動で実行します。

入力トークン監査の cron を作成します(skill_view と推論が必要なため、エージェントモードで実行します)。

Prompt skeleton (adapt to the customer):

"You are the input-token auditor. Load the `input-token-overheads` skill and run
its scripts/audit.py for the last 30 days. Compare against the previous audit's
baseline (read it from the prior cron output if available, else establish this
run as the first baseline). Pre-check every lever before proposing changes:
read current values with `hermes config get`, confirm mechanisms against
config_defaults.py or the Hermes docs, mark unverifiable claims UNVERIFIED.
Report under 600 words: (1) total vs baseline with % change, (2) breakdown by
task, (3) verdict on any previously applied changes with proving numbers,
(4) top 3 remaining consumers, (5) one recommended next tweak citing the
pre-checked current value."

Schedule: every 30 days. Delivery: customer's home channel.

完了: cron を 4 つ作成しました。週次ヘルスチェックスクリプトをインストールしました。更新後の手順を記載しました。

ステップ 19 — 検証の概要

  1. hermes doctor を実行します
  2. 各項目を確認します:
項目確認内容
ゲートウェイsystemctl status hermes-gateway + テストメッセージ
ダッシュボードsystemctl status hermes-dashboard + URL にアクセス可能
ダッシュボード認証ブラウザーにログインページが表示される(LAN モード)、または SSH トンネルが機能する(ループバック)
メモリmnemosyne_recall が結果を返す
検索(プライマリ)mcp_donsetch_web_search のテストクエリが結果を返す。セッション情報に donsetch が 3 つのツールとともに接続済みと表示される
検索(フォールバック)web_search のテストクエリが、キー不要の firecrawl 経由で結果を返す
ウェブのルーティングSOUL.md にウェブのルーティングに関するセクションが含まれている(donsetch を優先し、単一事実の検索には組み込み機能を使用)
抽出web_extract のテスト URL がコンテンツを返す
ブラウザーCDP ブラウザーが起動し、ページに移動する
Cronhermes cron list に 5 件のジョブが表示される(DonSeTch の週次更新を含む)
週次ヘルスチェック~/.hermes/scripts/weekly_health_check.sh が存在し、実行可能である
入力トークン監査hermes cron list に 30 日間の監査ジョブが表示される。input-token-overheads スキルがインストールされ、scripts/audit.py が実行される
タイムゾーンhermes config get timezone が顧客の入力と一致する
承認hermes config get approvals.mode が smart を返す
ターミナルバックエンドhermes config get terminal.backend が検出結果と一致する
圧縮hermes config get compression.threshold がモデルのコンテキストに一致する
Cron フリートのデフォルトhermes config get cron.model が設定されている
ツールセットhermes tools list に、必要なツールセットのみが有効として表示される
詳細度hermes config get display.tool_progress が顧客の選択と一致する
show_costhermes config get display.show_cost が true を返す
プロファイルhermes profile list に顧客のプロファイルが表示される
Soul.md~/.hermes/SOUL.md が存在し、顧客の入力が含まれている
スキルのガードレール参照資料から 7 つの原則が読み込まれている
スキル検索プラグインhermes plugins list に skill-retrieval がインストール済みと表示される(評価に応じて有効または無効)
Library-raghermes skills list に library-rag が表示される(オプトインした場合)
ユースケース顧客が回答し、スキルが推奨されている
  1. 設定スナップショットを提示します:プロバイダー、モデル、補助モデル、ゲートウェイプラットフォーム、メモリバックエンド、検索バックエンド、ブラウザーバックエンド、圧縮設定、Cron ジョブ、soul.md のパス、プロファイル名
  2. 各項目の合格/不合格を提示します

完了条件: すべての検証項目を確認済み。設定スナップショットを提示済み。不合格項目にはトラブルシューティングの手順を提示済み。

ステップ 20 — ユースケースとスキルの推奨

「Hermes は何に使う予定ですか?」と尋ねます。

回答に基づいて、Skills Hub から 3~5 個のスキルを推奨します:

hermes skills search <use-case-keyword>

顧客が選んだスキルをインストールします:hermes skills install <id>

このリポジトリの input-token-overheads スキル(agent-ops/input-token-overheads)もインストールします。ステップ 18 の 30 日間の監査 Cron は、このスキルに依存しています。

完了条件: ユースケースを記録済み。関連するスキルを推奨し、インストール済み。ステップ 18 の監査 Cron 用に input-token-overheads スキルをインストール済み。

よくある落とし穴

  • --replaceによるゲートウェイのクラッシュループ: 複数のプロファイルで、systemd のユニットファイルに--replaceを使用しないでください。他のゲートウェイプロセスに SIGTERM を送信します。
  • TimeoutStopSec の設定が短すぎる: 必ず 240s に設定してください。デフォルトの 90s では、WhatsApp/Telegram ブリッジの終了処理中に SIGKILL が発生します。
  • cron のずれを防ぐガード: グローバルモデルが変更されると、モデルを固定していない cron ジョブはフェイルクローズします。早い段階で cron フリートのデフォルトを設定してください(Step 17)。
  • SearXNG の IP レピュテーション: Google/Brave はデータセンターの IP をブロックすることがあります。設定では解決できません。住宅用プロキシを使うか、DDG へのフォールバックを受け入れてください。これはフォールバックバックエンドのみに影響します。主な検索経路は DonSeTch です。
  • library-rag での二重インデックス化: 生ファイルは LIBRARY_ROOT の外に置いてください。LIBRARY_ROOT の下には構造化された Markdown のみを置いてください。
  • plugins.enabled の文字列化: hermes config set plugins.enabled '["a"]'を実行すると、YAML リストではなく JSON 文字列として保存されます。プラグインリストを設定するには、config.yaml を直接編集してください。
  • LAN 上の Dashboard TUI: HERMES_PYTHON 環境変数と、CORS/ループバックのパッチが必要です。hermes-service-deployment スキルのリファレンスを参照してください。

検証

Step 19 の検証テーブルが、セットアップの完了状況を確認する唯一の基準です。ここに重複して記載しないでください。

オンボーディングの完了を宣言する前に、すべての項目に合格する必要があります。不合格の項目については、「よくある落とし穴」セクションの手順に従ってトラブルシューティングしてください。

コメント