キュレーターは、エージェントが作成したスキル のバックグラウンド・メンテナンス処理を行います。各スキルがどれくらいの頻度で閲覧、使用、修正されたかを追跡し、長期間使用されていないスキルを `active → stale → archived` 状態へと移行させ、定期的に補助モデルの短いレビューを実行して、統合やパッチのずれを提案します。
Hermes エージェント☤ 入門 : 機能 – コア : キュレーター
作成 : Masashi Okumura (@classcat.com)
作成日時 : 08/02/2026
バージョン : Hermes Agent v0.19.1 (v2026.7.30)
* 本記事は hermes-agent.nousresearch.com/docs の以下のページを参考にしています :
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。

Hermes エージェント☤ 入門 : 機能 – コア : キュレーター
キュレーターは、エージェントが作成したスキル のバックグラウンド・メンテナンス処理を行います。各スキルがどれくらいの頻度で閲覧、使用、修正されたかを追跡し、長期間使用されていないスキルを `active → stale → archived` 状態へと移行させ、定期的に補助モデルの短いレビューを実行して、統合やパッチのずれを提案します。
これは、自己改善ループを通じて作成されたスキルが際限なく蓄積されないようにするためのものです。エージェントが新しい問題を解決してスキルを保存するたびに、そのスキルは ~/.hermes/skills/ に保存されます。メンテナンスを行わないと、カタログを汚染しトークンを無駄にする、ほとんど同じ内容のスキルが何十個も溜まってしまいます。
デフォルトでは (prune_builtins: true)、キュレーターは、使用されていないバンドルされた組み込みスキル (リポジトリに同梱) を、使用されない archive_after_days 経過後に、主に管理するエージェントが作成したスキルとともにアーカイブできます。ハブからインストールされたスキル (agentskills.io から) は対象外です。`curator.prune_builtins: false` に設定すると、バンドルされたスキルが一切変更されない、エージェント作成スキルのみの以前の動作を復旧します。キュレーターは 自動削除も行いません – 最悪の場合でも ~/.hermes/skills/.archive/ にアーカイブされますが、これは復元可能です。
How it runs
キュレーターは、cron デーモンではなく、非アクティブ状態チェックによって起動されます。CLI セッションの開始時、およびゲートウェイの cron-ticker スレッド内の定期的な実行サイクルで、Hermes は以下を確認します。
- 前回のキュレーター実行から十分な時間が経過しているか (interval_hours、デフォルトは 7日間)、そして
- エージェントが十分な時間アイドル状態であったか (min_idle_hours、デフォルトは 2時間)。
両方の条件が満たされている場合、AIAgent のバックグラウンドフォークが生成されます – これは、メモリやスキルの改善の後押し (nudges) で使用されるのと同じパターンです。フォークは独自のプロンプトキャッシュ内で実行され、アクティブな会話には一切影響を与えません。
実行は2つのフェーズで構成されます :
- 自動遷移 (決定論的、LLM なし)。stale_after_days (30日) 経過しても使用されていないスキルは `stale` (古い) 状態になります; archive_after_days (90日) 経過しても使用されていないスキルは ~/.hermes/skills/.archive/ に移動されます。これは常時有効な剪定 (pruning) 処理で – キュレーターが有効になっている限り実行され、補助モデルのコストは発生しません。
- LLM 統合 (単一の aux-model (補助モデル) パス、max_iterations=8) — デフォルトは OFF。`curator.consolidate: true` の場合、フォークされたエージェントはエージェントが作成したスキルを調査し、skill_view を使用してそれらのスキルを読み取り、スキルごとに保持するか、パッチを適用するか (skill_manage 経由)、重複するものをクラスレベルの包括的な枠組み (umbrellas) に統合するか、ターミナルツールを介してアーカイブするかを決定します。統合では、スキルを完全なパッケージとして扱います: スキルに references/, templates/, scripts/, assets/, またはこれらのパスへの相対リンクがある場合、キュレーターはそれをスタンドアロンのままにするか、必要なサポートファイルを再配置してパスを書き換えるか、パッケージ全体を変更せずにアーカイブする必要があります – SKILL.md だけを別のスキルの references/ ファイルにフラット化することはできません。
ℹ️ 統合 (Consolidation) はオプトイン方式
デフォルトでは、キュレーターはスキルの剪定のみを行います – 決定論的な非アクティブスキルを判定するパスで、スキルが古い (stale) とマークし、長期間使用されていないスキルをアーカイブします。独自の LLM 統合パス (包括的な枠組みの構築、重複するスキルのマージ) は、実行ごとに aux-model (補助モデル) トークンを消費し、ライブラリに広範な構造変更を加えるため、デフォルトでは無効になっています。有効にするには、`curator.consolidate: true` を指定するか、`hermes curator run –consolidate` を必要に応じて一度実行してください。
ピン留めされたスキルは、キュレーターの自動トランジションとエージェント自身の skill_manage ツールの両方から除外されます。See Pinning a skill below.
Configuration
すべての設定は config.yaml の `curator:` 下にあります (.env ではありません – これは機密ではありません)。デフォルトは :
curator:
enabled: true
interval_hours: 168 # 7 days
min_idle_hours: 2
stale_after_days: 30
archive_after_days: 90
consolidate: false # LLM umbrella-building pass — opt-in (prune-only by default)
prune_builtins: true # archive unused bundled built-in skills too (hub skills always exempt)
完全に無効にするには、`curator.enabled: false` を設定します。常時有効な剪定 (pruning) を維持しつつ、LLM 統合にオプトインするには、`curator.consolidate: true` を設定します。
より安価な補助モデルでレビューを実行する
キュレーターの LLM レビューパスは、ビジョン, 圧縮, セッション検索, 等とともに、通常の補助タスク・スロット – auxiliary.curator – です。”Auto” は “use my main chat model” (メインのチャットモデルを使用する) という意味です; このスロットをオーバーライドして、レビューパスに `特定のプロバイダー + モデル` を固定することもできます。
最も簡単 – `hermes model`
hermes model # → "Auxiliary models — side-task routing"
# → pick "Curator" → pick provider → pick model
同じ選択ツール (picker) は、Web ダッシュボードの「モデル」タブからも利用できます。
config.yaml 直接 (同等) :
auxiliary:
curator:
provider: openrouter
model: google/gemini-3-flash-preview
timeout: 600 # generous — reviews can take several minutes
`provider: auto` (デフォルト) をそのままにすると、メインのチャットモデルが何であれ、レビューパスをルーティングし、他のすべての補助タスクの動作と一致させます。
CLI
hermes curator status # last run, counts, pinned list, LRU top 5
hermes curator run # trigger a run now (blocks until done). Prune-only unless curator.consolidate: true
hermes curator run --consolidate # force the LLM consolidation pass on for this run, overriding the config default
hermes curator run --background # fire-and-forget: start the run in a background thread
hermes curator run --dry-run # preview only — report without any mutations
hermes curator backup # take a manual snapshot of ~/.hermes/skills/
hermes curator rollback # restore from the newest snapshot
hermes curator rollback --list # list available snapshots
hermes curator rollback --id # restore a specific snapshot
hermes curator rollback -y # skip the confirmation prompt
hermes curator pause # stop runs until resumed
hermes curator resume
hermes curator pin # never auto-transition this skill
hermes curator unpin
hermes curator restore # move an archived skill back to active
hermes curator list-archived # list skills currently in ~/.hermes/skills/.archive/
hermes curator archive # manually archive a single skill now
hermes curator prune [--days N] # bulk-archive agent-created skills idle >= N days (default 90)
出力例
% hermes curator status curator: ENABLED runs: 3 last run: 9d ago last summary: dry-run auto: no changes; llm: skipped (consolidation off) last report: /Users/xxx/.hermes/logs/curator/20260731-072947 interval: every 7d stale after: 30d unused archive after: 90d unused consolidate: off (prune-only; LLM merge pass opt-in) curator-managed skills: 72 total (agent-created=3 bundled=69) active 72 stale 0 archived 0 unmanaged (no provenance marker): 7 total pre-dates marker 1 foreground-created 6 never auto-staled or archived — `hermes curator adopt` hands one over least recently active (top 5): consumer-product-research activity= 2 use= 0 view= 0 patches= 2 last_activity=32d ago airtable activity= 0 use= 0 view= 0 patches= 0 last_activity=never apple-notes activity= 0 use= 0 view= 0 patches= 0 last_activity=never architecture-diagram activity= 0 use= 0 view= 0 patches= 0 last_activity=never arxiv activity= 0 use= 0 view= 0 patches= 0 last_activity=never most active (top 5): spotify-applescript activity= 28 use= 9 view= 9 patches= 10 last_activity=13d ago hermes-agent activity= 16 use= 8 view= 8 patches= 0 last_activity=9d ago apple-reminders activity= 4 use= 2 view= 2 patches= 0 last_activity=21d ago maps activity= 4 use= 2 view= 2 patches= 0 last_activity=24d ago himalaya activity= 2 use= 2 view= 0 patches= 0 last_activity=7d ago least active (top 5): airtable activity= 0 use= 0 view= 0 patches= 0 last_activity=never apple-notes activity= 0 use= 0 view= 0 patches= 0 last_activity=never architecture-diagram activity= 0 use= 0 view= 0 patches= 0 last_activity=never arxiv activity= 0 use= 0 view= 0 patches= 0 last_activity=never ascii-art activity= 0 use= 0 view= 0 patches= 0 last_activity=never
バックアップとロールバック
Hermes は、実際のキュレーター処理を実行する前に、~/.hermes/skills/ ディレクトリの tar.gz スナップショットを ~/.hermes/skills/.curator_backups/<utc-iso>/skills.tar.gz として作成します。処理によって意図しないファイルがアーカイブまたは統合された場合は、以下のコマンドで処理全体を元に戻す (undo) ことができます :
hermes curator rollback # restore newest snapshot (with confirmation)
hermes curator rollback -y # skip the prompt
hermes curator rollback --list # see all snapshots with reason + size
ロールバック自体を元に戻すことができます (reversible) : スキルツリーを置き換える前に、Hermesは pre-rollback to <target-id> というタグを付けた別のスナップショットを作成しますので、誤ってロールバックしてしまった場合は、`–id` オプションでそのスナップショットに戻すことで元に戻すことができます。
また、hermes curator backup --reason "before-refactor" でいつでも手動でスナップショットを作成することもできます。–reason 文字列はスナップショットの manifest.json に書き込まれ、–list で表示されます。
ディスク使用量を制限するため、スナップショットは curator.backup.keep (デフォルト 5) まで削減されます :
curator:
backup:
enabled: true
keep: 5
自動スナップショットを無効にするには、`curator.backup.enabled: false` を設定してください。バックアップが無効になっている場合でも、`hermes curator backup` コマンドは、最初に `enabled: true` を設定している場合に限り動作します – このフラグは両方のパスを対称的に制御するため、変更実行時に pre-run スナップショットを誤ってスキップしてしまうことはありません。
`hermes curator status` は、最近使用されていないスキル上位 5 つも表示します – 次にどのスキルが古くなる可能性が高いかを素早く確認する方法です。
同じサブコマンドは、実行中のセッション (CLI またはゲートウェイ・プラットフォーム) 内で `/curator` スラッシュコマンドとしても使用できます。
“agent-created” の意味
キュレーターは、~/.hermes/skills/.usage.json で明示的に agent-created としてマークされたスキルのみを管理します。以下のすべての条件を満たす場合に、スキルはその資格を満たします :
- その名前は ~/.hermes/skills/.bundled_manifest (リポジトリに同梱されているバンドル・スキル) に 存在しません。
- その名前は ~/.hermes/skills/.hub/lock.json (ハブでインストールされたスキル) に 存在しません。
- その .usage.json エントリには
"created_by": "agent"または"agent_created": trueがあります。
現在、このマーカーを設定するのは バックグラウンド自己改良レビュのーフォーク のみです – 定期的なレビュー処理 (エージェントのターン ~10 回ごと) 中に新しい包括的なスキルを作成する際です。バックグラウンドフォークは、(tools/skill_provenance.py 経由で) 書き込み元として “background_review” を使用して実行され、これが skill_manage の mark_agent_created() 呼び出しをトリガーする唯一のパスです。
フォアグラウンド・エージェントが会話中に skill_manage(action=”create”) を介して作成したスキルは、agent-created としてマークされません – これらはユーザー主導 (user-directed) のスキルとみなされ、キュレーターは意図的にそれらをそのままにしておきます。
ℹ️ 手書きで作成したスキルはキュレーションされません
手動で SKILL.md を作成した場合や、Hermes に外部スキルディレクトリを指定した場合、そのスキルには `created_by: null` (またはフィールド自体が存在しない) を含む、.usage.json エントリが作成されます。キュレーターはこれらのスキルには手を加えません。フォアグラウンド・エージェントがリクエストに基づいて作成したスキルについても同様です。
キュレーターが実際に管理しているスキルを確認するには、`hermes curator status` コマンドを実行してください。agent-created count が 0 の場合、現在キュレーターの管轄下にあるスキルはありません – LLM レビューはスキップされ、レポートには Model: (not resolved) via (not resolved) with Duration: 0s と表示されます。
管理されていないスキルを採用する (adopt)
`hermes curator status` は、管理されているスキルの数に加えて、管理されていない (unmanaged) スキルの数もレポートします :
curator-managed skills: 43 total (agent-created=43 bundled=0)
active 41
stale 2
archived 0
unmanaged (no provenance marker): 112 total
pre-dates marker 34
foreground-created 78
never auto-staled or archived — `hermes curator adopt ` hands one over
出力例
% hermes curator status curator: ENABLED runs: 4 last run: 19h ago last summary: auto: 60 marked stale; llm: skipped (consolidation off) last report: /Users/xxx/.hermes/logs/curator/20260801-090953 interval: every 7d stale after: 30d unused archive after: 90d unused consolidate: off (prune-only; LLM merge pass opt-in) curator-managed skills: 72 total (agent-created=3 bundled=69) active 12 stale 60 archived 0 unmanaged (no provenance marker): 7 total pre-dates marker 1 foreground-created 6 never auto-staled or archived — `hermes curator adopt` hands one over least recently active (top 5): maps activity= 4 use= 2 view= 2 patches= 0 last_activity=25d ago google-workspace activity= 2 use= 1 view= 1 patches= 0 last_activity=22d ago apple-reminders activity= 4 use= 2 view= 2 patches= 0 last_activity=22d ago systematic-debugging activity= 2 use= 1 view= 1 patches= 0 last_activity=14d ago spotify-applescript activity= 28 use= 9 view= 9 patches= 10 last_activity=14d ago most active (top 5): spotify-applescript activity= 28 use= 9 view= 9 patches= 10 last_activity=14d ago hermes-agent activity= 16 use= 8 view= 8 patches= 0 last_activity=10d ago apple-reminders activity= 4 use= 2 view= 2 patches= 0 last_activity=22d ago maps activity= 4 use= 2 view= 2 patches= 0 last_activity=25d ago himalaya activity= 2 use= 2 view= 0 patches= 0 last_activity=8d ago least active (top 5): docx activity= 0 use= 0 view= 0 patches= 0 last_activity=never inspecting-hermes-desktop-dom activity= 0 use= 0 view= 0 patches= 0 last_activity=never pdf activity= 0 use= 0 view= 0 patches= 0 last_activity=never xlsx activity= 0 use= 0 view= 0 patches= 0 last_activity=never hermes-ssh-backend activity= 1 use= 0 view= 0 patches= 1 last_activity=10d ago
これら (unmanaged) 112 件はキュレーション対象にはなり得るものの、ライフサイクルからは「永久に不可視 (処理対象外)」とされています、理由は以下の 2 つのいずれかです :
- pre-dates marker (マーカー導入前のデータ) – レコードは created_by が存在する以前に作成されたため、由来を示す情報が一切ありません。レコードから作成者を特定することは不可能です。
- foreground-created (フォアグラウンドで作成) – フォアグラウンドの skill_manage(create) によって、仕様上、マーカーが設定されないままでした、これはユーザが要求したスキルはユーザに属するためです。
従って、大規模なライブラリは完全にキュレーションされているように見えても、その大部分はアクセスできない状態です。`adopt` は、宣言によってそのギャップを埋めます :
hermes curator list-unmanaged # itemize them, with reasons
hermes curator adopt [ ...] # hand specific skills over
hermes curator adopt --all-unmanaged --dry-run # preview the full list
hermes curator adopt --all-unmanaged # hand over everything (prompts)
hermes curator adopt --all-unmanaged --yes # skip the prompt
出力例
% hermes curator list-unmanaged unmanaged skills (7): audiocraft-audio-generation activity= 0 last_activity=never (created_by:null) heartmula activity= 0 last_activity=never (created_by:null) hermes-desktop-plugins activity= 0 last_activity=never (created_by:null) himalaya-email activity= 0 last_activity=never (no marker) jupyter-live-kernel activity= 0 last_activity=never (created_by:null) petdex activity= 0 last_activity=never (created_by:null) segment-anything-model activity= 0 last_activity=never (created_by:null) adopt one with `hermes curator adopt <name>`, or all with `hermes curator adopt --all-unmanaged`
採用プロセス (adoption) では、バックグラウンド・レビューのフォークが書き込むのと同じ `created_by: agent` マーカーが書き込まれます。非アクティブ・クロックのカウントは リセットされません – 採用されたスキルは既存の last_activity_at を保持するため、既に使用を停止したライブラリを引き継いでも、新たに 90 日間の期間が与えられるわけではありません。長期間アイドル状態だった採用されたスキルは、次のパスで古く (stale) なる (またはアーカイブされる) ことが想定されます; that is the point.
採用 (adoption) は、自律的な改善を阻害する要因を取り除くものでもあります。バックグラウンドレビュー・フォークは、キュレーターが管理していないスキルにはパッチを適用しないため、スキルが古くなっていることに気づいた場合は、それを編集するのではなく、adoption を推奨します。フォアグラウンド (ユーザー主導) の編集は影響を受けません – ユーザとエージェントは、いつでもリクエストに応じてユーザ自身のスキルを編集できます。
エージェントによって作成されたスキルは、以下の完全なライフサイクルに従います :
- アクティブ → (30日間未使用) stale (放置された) → (90日間未使用) アーカイブされる
- ピン留めされたスキルは、すべての自動遷移をスキップします。
- アーカイブは、`hermes curator restore <name>` で復元可能です。
特定のスキル – 例えば、手動で作成した依存しているスキル – が今後一切変更されないように保護したい場合は、`hermes curator pin <name>` を使用してください。
スキルのピン留め
ピン留めすると – キュレーターによる自動アーカイブ処理とエージェントの skill_manage(action=”delete”) ツール呼び出しの両方から – スキルが削除されるのを防ぎます。スキルがピン留めされると :
- キュレーターは自動遷移 (アクティブ → stale (放置) → アーカイブ)の際にそのスキルをスキップし、LLM レビュー処理でもそのスキルは変更されないように指示されます。
- エージェントの skill_manage ツールは、そのスキルの削除を拒否し、ユーザーに `hermes curator unpin <name>` の実行を促します。パッチと編集は引き続き実行されるため、エージェントはピン留めされたスキルの内容に落とし穴 (pitfalls) が生じた際に、pin/unpin/re-pin ダンス (手順の繰り返し) を行うことなく改善できます。
Pin and unpin with:
hermes curator pin
hermes curator unpin
このフラグは、~/.hermes/skills/.usage.json 内のスキルのエントリに "pinned": true として保存されるため、セッション間で保持されます。
agent-created スキルのみピン留めできます – バンドルされたスキルやハブにインストールされたスキルに `hermes curator pin` を実行しようとすると、説明メッセージとともに拒否します。ハブからインストールされたスキルは、キュレーターによる変更の対象にはなりません。バンドルされた組み込みスキルは、`curator.prune_builtins: true` (デフォルト) の場合にのみ変更され、その場合でも、archive_after_days の間使用されなかった後にアーカイブされるだけです – パッチ適用、統合、削除はされません。バンドルされたスキルを完全に除外するには、`curator.prune_builtins: false` に設定してください。
以上