AI Frontier

2026年 Mac mini M4:Hermes Agent trajectory_compressor によるメモリとトークン最適化

MacHTML Lab2026.05.28 約18分
Hermes Agent trajectory_compressor メモリ トークン最適化 Mac mini M4 2026

Hermes AgentNousResearch/hermes-agent)は、長時間のエージェント実行をモデルのコンテキストウィンドウ内に収めつつ、オペレーターが直前まで行った作業を丸ごと捨てないための専用ユーティリティ trajectory_compressor.py を同梱しています。ゲートウェイ、cron、数時間に及ぶ調査ループを常時稼働させる Mac mini M4 では、トークン圧力はツール出力の切り捨て、後続ターンの失敗、トランスクリプト全体の再送による想定外の課金として現れます。本 Type C 解説では、上流の既定値、保護ヘッド/要約ミドル/保護テールのモデル、対話型 /compress スラッシュコマンドとバッチ CLI の違い、そして macOS で本番投入前に実行できる 6 ステップの手順を順に説明します。

ハーネス選定がまだの場合は、先に macOS と Mac mini M4 における Hermes Agent と OpenClaw の比較 をお読みください。セッションの置き場所を決めてから圧縮を調整するのが筋です。主な上流参照:main ブランチの trajectory_compressor.pyHermes Agent README、統合メモリ計画用の Apple Mac mini 仕様

開示:以下では、常時稼働エージェント用ステージングとして言及する MacHTML のオプションのクラウド Mac mini レンタルについて簡潔に触れます。

Mac mini でトークン上限が効く理由

エージェントハーネスはチャット UI のように会話を「最後の一文だけ」保持しません。モデル呼び出しのたびに、構造化されたメッセージ列を再生します。Telegram ゲートウェイにローカルツールループを足すと、1 日で system プロンプト、human 指示、assistant 応答、tool JSON が合計数万トークンに達することも珍しくありません。プロバイダーがハードストップしたり、黙って切り捨てたりすると、オペレーターはモデルを責めがちですが、多くの場合は単に transcript が予算を超えただけです。

常時オンラインの Mac mini M4 は、ノート PC のスリープなしにゲートウェイを 24 時間動かせる点で有利です。ただしハードウェアがコンテキストを magically 拡張するわけではありません。圧縮は運用上の制御であり、チップの機能ではありません。Hermes は trajectory_compressor.py でトラジェクトリフォルダをより短い等価表現に書き換え、オペレーターがまだ必要とする意味論を残します。元の system 契約、最初の human 意図、初期 tool グラウンディング、忠実な中間要約、そして修正コストの高い直近ターンです。

既定の予算は、圧縮後 transcript の target_max_tokens=15250、中間要約自体に約 summary_target_tokens=750、末尾 protect_last_n_turns=4 ターンを原文のまま保持、という形です。チューニング可能ですが、実務的な既定値として「中間は大胆に圧縮し、今まさに操縦している会話の末尾は切らない」という方針が込められています。

トークン最適化はコストとも交差します。OpenRouter 経由で推論しても、小さな追質問のために 4 万トークンの trace を再送すると、料金とレイテンシの両方が膨らみます。毎ターンより大きなコンテキストモデルに切り替えるより、ステージング用 Mac mini で圧縮する方が安いことが多いです。来週置き換える予定のゲートウェイ上で transcript を最適化しないよう、上記の比較記事とセットで読んでください。

Apple シリコンのメモリは統合されています。16 GB の Mac mini でも Hermes ゲートウェイと軽量ツールは動きますが、並列サブエージェント、ローカル Ollama サイドカー、巨大な非圧縮ログが同じプールを奪い合います。圧縮の主目的はモデルコンテキストですが、ゲートウェイ fan-out 中の巨大 in-memory メッセージ配列による RAM 圧力も下げられます。非圧縮アーカイブとローカルモデルを同時に載せられると思い込む前に、Apple の Mac mini 仕様 を確認してください。

コア圧縮モデル

上流の trajectory_compressor.py は、事後監査しやすい 3 ゾーンポリシーを実装しています。

  • 保護ヘッド:最初の systemhumangpttool メッセージを保持し、ペルソナ、安全境界、初期 tool スキーマが圧縮後も残ります。
  • 要約ミドル:ヘッドとテールの間は OpenRouter 既定モデルで要約し、おおよそ summary_target_tokens=750 の叙述と重要事実に畳み込みます。
  • 保護テール:末尾 protect_last_n_turns=4 ターンを原文保持し、直近のオペレーター修正と tool エラーを要約から再構成せず参照できます。

既定の target_max_tokens=15250 は圧縮後 transcript の上限です。スキルが追加 system テキストを注入した後でもプロバイダー制限内に収める、ゲートウェイセッション向けのガードレールと考えてください。特定モデル向けにチューニングする際は、料金ページのマーケティング上のコンテキスト長ではなく、tool と completion 用のヘッドルームを差し引いた実用ウィンドウに target_max_tokens を合わせます。

要約の既定は OpenRouter 経由の google/gemini-3-flash-preview です(環境で上書き可能)。古い run のバッチ再生では品質と速度・コストのトレードオフになります。コンプライアンスが厳しいワークロードでは、承認済みモデルに向け、どのトラジェクトリフォルダを圧縮したかログを残してください。要約は設計上ロッシーです。決定事項とブロッカーを残し、すべてのスタックトレース行を残す必要はありません。

圧縮は Hermes のキュレーション済みメモリファイルや FTS5 セッション検索の代替ではありません。単一スレッドがウィンドウを超えたときの緊急ブレーキです。週単位の事実は memory に、今夜のインシデントスレッドがすでに 3 万トークンに達したら trajectory 圧縮、という使い分けが現実的です。

2 つの入口:/compress とバッチ CLI

Hermes は意図的に 2 つの操作感で圧縮を公開しています。

入口使うタイミング動作
/compress スラッシュコマンド稼働中の Hermes TUI またはゲートウェイ接続セッションで、途中でもコンテキストが逼迫していると感じたとき。実行中トラジェクトリに紐づく対話型圧縮。「今まさに溺れている」瞬間向け。
python trajectory_compressor.pydata/ 配下の保存 run、CI フィクスチャ、移行前アーカイブのオフライン保守。サンプリング率、トークン上限、入力ディレクトリを明示するバッチユーティリティ。再現可能な運用向け。

混同しないでください。スラッシュコマンドはオペレーター向け制御面、Python エントリポイントはゲートウェイ更新後や巨大 trace をチケットに添付する前に、履歴フォルダを後から整える手段です。ゲートウェイがまだメッセージを追記している live ファイルに CLI を当てると競合します。セッションを静かにするか、トラジェクトリをスクラッチディレクトリにコピーしてから実行してください。

バッチモードはサンプリングもサポートします。例:--sample_percent=15 で数百 run の圧縮品質をプロファイルし、実験中はすべてを要約課金しない。本番既定を宣言する前に 100% に上げてください。

例と既定値テーブル

パラメータ既定メモ
target_max_tokens15250圧縮後上限。モデルウィンドウが許す場合のみ慎重に引き上げ。
summary_target_tokens750中間要約セグメントの予算。
protect_last_n_turns4末尾に原文保持する直近ターン数。
OpenRouter 要約モデルgoogle/gemini-3-flash-previewポリシー準拠のため env/プロバイダー設定で上書き。

上流の代表的 CLI 例:

python trajectory_compressor.py --input=data/my_run
python trajectory_compressor.py --input=data/my_run --sample_percent=15
python trajectory_compressor.py --input=data/my_run --target_max_tokens=16000

live セッションでは、tool チェーンが長くなったがタスクが未完了のとき—特に別サブエージェントを付ける前や、失敗 tool を新しいモデル呼び出しで再試行する前に /compress を実行します。チーム規範として、単一 tool 成功のたびではなく主要マイルストーン後に圧縮するよう文書化してください。さもないと要約がまだ必要なニュアンスを消します。

6 ステップ手順

  1. Hermes Agent を Mac mini に clone/更新し、リポジトリルートに trajectory_compressor.py があることを確認(ソース)。
  2. OpenRouter(または選択)API キーをエクスポート。バッチ圧縮と同じ shell で。要約はキーなしでは即失敗します。
  3. data/ からステージング用トラジェクトリを選ぶ。トークン膨張が分かっているものを、JSON やメッセージ列の before/after diff 用にコピー。
  4. 既定でドライバッチpython trajectory_compressor.py --input=data/my_run を実行し、ヘッド/テールが intact か確認。
  5. 本番モデルに余裕が必要なら上限を調整—例 --target_max_tokens=16000—設定を昇格する前に --sample_percent=100 で再実行。
  6. live 挙動を検証:Mac mini で Hermes セッションを開始し、意図的にコンテキストを伸ばしたあと /compress を発行し、保護テールの認識が残るか確認。

選んだ既定値は、ゲートウェイポートや LaunchAgent ラベルと並べて内部 runbook に記録し、次のオペレーターが本番障害で「再発見」しないようにしてください。

トラブルシューティング

要約が失敗する、または中間が空

OpenRouter 認証情報、モデル許可リスト、レート制限を確認してください。入力フォルダを小さくして再試行し、トラジェクトリパーサーが不正な tool ペイロードで詰まっていないか切り分けます。google/gemini-3-flash-preview がコンプライアンスで禁止なら、承認モデルに切り替え文書を更新—圧縮を黙って無効にしないでください。

圧縮後にエージェントが直近の修正を「忘れる」

一時的に protect_last_n_turns を増やすか、summary_target_tokens の攻撃性を下げます。メッセージ追記中の live フォルダにバッチ圧縮していないか確認。コピーしたトラジェクトリで再実行し、テールをソースと diff してください。

Mac を起きたままにせず Telegram を常時稼働させるには、低価格 VPS 上の Hermes Agent Docker + Telegram ボット を参照してください。

スコープ付きリポ読取・npm test・ガード付き自動修正が必要なら、2026 Hermes Agent MCP + Claude Opus 4.8:ローカルコードサンドボックス を参照してください。

FAQ

trajectory 圧縮は Hermes メモリファイルを置き換える?

いいえ。圧縮は単一トラジェクトリスレッドを短くするだけです。キュレーション memory とスキルは長期ストアのままです。memory は週単位、圧縮は今夜の暴走セッション、と併用してください。

OpenClaw 利用者もこのスクリプトを使うべき?

ユーティリティは Hermes Agent に同梱です。OpenClaw の transcript 形状は異なります—バッチ前に移行またはエクスポートし、比較ガイドどおりゲートウェイを分離してください。

要約コストはどの程度?

バッチコストは中間ターン数と OpenRouter 単価に比例します。実験では 15% サンプリングで支出を抑え、既定を信頼したら本番は 100% に。

圧縮+ゲートウェイに必要な Mac mini メモリは?

圧縮のみのバッチなら 16 GB で足りることが多いです。同一 Mac mini でゲートウェイ、ローカルモデル、並列サブエージェントも動かすなら 24 GB が安全です(Apple 仕様)。

クラウド Mac mini で Hermes 圧縮を検証

常時稼働の Mac mini M4 を借りて長いトラジェクトリをバッチ圧縮し、/compress の挙動を確認してから本番ゲートウェイのトークン予算を固めます。

Mac 上の Agent 環境
常時稼働ステージング