Hermes Supervisorを実仕事中心へ縮小する

関連: Hermes-Agent / イリスをユビキタスに動かす

Hermes Supervisorの目的は、Supervisor自身を完成させることではない。

雑な入力を既存task・project・判断へ接続し、低リスクな実仕事を検証まで進める。複数Workerが動いても、人間が個別sessionや通知を巡回せず、成果・異常・判断だけを見られる状態を目指していた。

SHRINK判断

2026-07-30の自然再開試験では、日付変更後のbudget resetとBuilder・Verifierの起動までは成立した。一方で、達成済みcriterionを次attemptでも選び続け、malformedなVerifier結果一件でwatch全体が停止した。

自動実行能力がなかったのではない。何を次の仕事にするかと、失敗をどの粒度で隔離するかが悪かった。

Supervisor Target Stateの収束と回復機構を保守する仕事が実在taskを上回り、人間の監督負荷も減らなかった。このため判定をSHRINKとした。

残す境界

  • Capture原文とsource identity
  • 重複・訂正・撤回
  • Vault・session・repo・既存taskとの関連付け
  • 決定論的なcursorとno-op判定
  • task固有の実行・検証
  • Decision QueueとResult Aggregator
  • 目的・成果単位のbriefing
  • Hermes停止時にも読める監査projection

運用経路から外すもの

  • Supervisor自身のTarget State convergence
  • 全criterionを毎attempt評価するVerifier
  • attemptを重ねる自己収束
  • 複雑なVerifier replacement世代管理
  • 一件のschema不正でwatch全体を停止する経路
  • Workerごとの人間向け通知
  • 日数経過を主な昇格条件にすること

実装とstateは失敗分析・rollbackのため削除しない。ただし通常運用からは切り離す。

反映結果

2026-07-30に旧state・audit・専用DB・unit・journal・source hashを保存した後、Supervisor stateをfrozenへ遷移した。

Home ManagerではTarget State convergence timerを独立opt-in・既定無効へ変更した。ser7でも明示的に無効化した。deterministic briefingとscoped GCは維持し、旧Shadow・budget再開・48h go/no-goのcronは削除した。

詳細な現行設定、test、rollback経路の正本は.dotfilesに置く。

見直し条件

次の場合は機能追加ではなく、さらに縮小する。

  • 実仕事より基盤保守が多くなる
  • 人間が個別sessionや通知を巡回する
  • 同種のfailure mode修正を反復する
  • 一件の異常が他taskやcontrol planeへ波及する
  • 人間のDecision数がWorker数とともに増える

評価軸はSupervisorの機能数ではない。

雑な入力が失われず、既存文脈へ位置付けられ、低リスクな実仕事が追加指示なしで検証まで進み、人間が見る量が適切に圧縮されているか。

縮小経路の稼働(2026-07-30)

  • frozenと旧watch停止を維持したまま、Capture-only ledger、Decision Queue、Result Aggregator、allowlisted executorを独立timerで稼働させた。
  • Hermes DBはmode=roで観測し、canonical ledger・projection・auditはprivate local stateとして保持する。
  • production health executor、5分timerの自然発火、cursor進行、verified result、物理no-opまでliveで確認した。
  • projectionはschema v2でopen decisionとverified resultを各64件、全体を128 KiBに制限し、省略数を明示する。全履歴の正本はledgerに残す。
  • 見直しトリガーは、open decisionの継続的省略、未知task型の増加、health verifier不成立、またはbriefingがprojection schemaを拒否した場合とする。