hermes research decision-grade Pattern A+B mixed — single trial Fleet-wide adoption arc · 2 sub-agents + main-thread synthesis · 4 deliverables

Fleet-Wide Nous Hermes-Agent Adoption — Decision Report

Status: Decision-grade. Hermes proposes; operator + athena ratify. Author: hermes (research) • Date: 2026-05-26 Source arcs: - T1: T1-pantheon-scheduling-stack.md (Pantheon stack profile) - T2: T2-nous-hermes-fleet-profile.md (nous-hermes fleet profile) - T3: T3-eval-matrix.md (weighted axis matrix + 3 role-framings) - Carry-forward: research/viska-autoresearch-2026-05-25/ (T5/T6/PHASE2/DECISIONS — Viska arc, 5 mandatory guardrails) - Carry-forward: docs/research/2026-05-20_scheduled-tasks-fleet-protocol.md + PRD draft v0 - Carry-forward: research/n8n-mastra-slack-scheduled-task-2026-05-24/REPORT.md Grounding: machine report on K20N0S Hermes runtime (2026-05-26, operator-supplied).


TL;DR

Adopt Pattern A+B mixed. Keep K20N0S Hermes as Slack delivery surface (Pattern B, status-quo). Add ONE trial role under Pattern A — Plutus market-close research loop — bounded by tight scope criteria and gated rollback. Reject Pattern C (full replacement) outright.

Composite eval: Hermes loses the head-to-head against best-of-Pantheon-stack across all three role framings (28pp scheduling, 20–25pp autonomous-research, redundant for delivery). BUT mechanical scoring under-credits the Ralph loop's actively-closed feedback cycle — the one gap-filler Pantheon-stack cannot deliver without 5–10 days of fleet-side wiring around Mastra reflection_text.

Decision posture: - Pattern B (delivery): operate-as-is, light Docker Compose hardening pass. - Pattern A (autonomous-research): single bounded trial. Plutus market-close, NOT atlas governance loop, NOT hermes-fleet-agent YouTube-intel. - 12-plugin Pantheon-authored backlog scoped to 6 minimum-viable plugins for trial (~12–18 person-days). - 90-day trial gate, then promote/retire decision with operator + athena.

Cost envelope (trial scope): - One-time: ~12–18 person-days engineering (~2.5–3.5 weeks one-dev) + K20N0S hardening pass (~3–5 days Hades). - Recurring: ~1–2h/wk maintenance + monthly upgrade triage during trial. - LLM: existing K20N0S OpenRouter line item + Plutus subscription quota.


1. Verdict

1.1 Three patterns considered

Pattern Scope Verdict
A — Autonomous-research executor Hermes runs autonomous loops on K20N0S for selected fleet agents (Plutus/atlas/hermes-fleet-agent) PARTIAL ADOPT — single trial
B — Delivery surface only Maintain current K20N0S Slack gateway as-is CONTINUE
C — Full executor replacement Hermes replaces launchd + Mastra + parts of n8n for fleet scheduling REJECT

1.2 Why reject Pattern C

1.3 Why partial-adopt Pattern A

1.4 Why continue Pattern B unchanged


2. Pattern A — Trial role selection

2.1 Selection criteria

A role qualifies for the Pattern A trial if all four are true:

  1. Existing manual loop — there's a recurring human-driven research/analysis loop today that consumes operator time.
  2. Closed-form success criteria — outcome is measurable (catch-rate, time-savings, false-positive rate), not subjective.
  3. Low blast-radius on failure — autonomous-loop runaway or hallucination doesn't move money, leak PII, or destabilize fleet infrastructure.
  4. Fits in one Hermes process — no need for cross-process orchestration in trial.

2.2 Candidate ranking

Candidate Qualifies? Rationale
Plutus market-close digest loop YES (recommended trial) Existing manual loop (mimir reviews market close 5x/wk). Closed-form (catch-rate vs operator override). Low blast-radius (research only, no broker writes — that's gated stage 2 per Viska D4). Fits one process.
atlas governance-research loop (skill-refresh 4-6w) NO Closed-form weak (governance is subjective). Blast-radius medium (atlas decisions shape fleet protocol). Better-suited for /loop or Routines per PRD §6.
hermes-fleet-agent YouTube-intel NO Already pipelined via existing constellation-hermes (this repo) scripts. Hermes-agent overlap is reinvent-the-wheel. Same surface, different runtime.
Plutus broker-execution loop (stage 2) NO (premature) Trifecta exposure (PII + positions + LLM). Wait for stage 2 broker gates (Viska D4 stage-2 trigger criteria).

Selected trial role: Plutus market-close research loop.

2.3 Trial scope definition


3. Hermes-K20N0S task-boundary proposal

Currently undefined per operator brief. This section establishes the boundary.

3.1 Tenant identity model

One Hermes process per fleet agent identity. No shared multi-agent process.

Rationale: T2 §Axis 7 = in-process trust is full-privilege; plugin discipline is convention not enforcement. Shared process collapses agent identity (same failure mode as Routines per-operator-account, T1 axis-7 Routines score 1).

K20N0S resource posture: - Existing: 1 Hermes daemon (Slack gateway role, currently shared K20N0S identity). - Add: 1 Plutus-identity Hermes daemon (Pattern A trial role). - Cap: 3 Hermes processes max on K20N0S (older hardware per machine report). Beyond 3 → migrate Pattern A scope to alternative host (MacBook fleet or new dedicated machine).

3.2 Network boundary

3.3 Identity and credential boundary

3.4 Filesystem boundary

3.5 Schedule authoring scope

Hermes process invoked via fleet_schedules.executor='hermes' enum value (new). Schedule authorship goes through Themis the same way as any other executor:

# {repo}/schedules/plutus-market-close-digest.yaml
id: plutus-market-close-digest
agent: plutus
executor: hermes              # NEW enum value (D-extension via PRD amendment)
executor_machine: K20N0S
hermes_process: hermes-plutus  # disambiguates within K20N0S
cron: 30 21 * * 1-5
notify_slack: slack-boas
requires_governance_ratification: true
verification_evidence_required: true
freeze_exempt: false

Themis reads → fleet_schedules → on schedule fire, POSTs to Hermes HTTP gateway on K20N0S with run context → Hermes invokes cron-skill or /goal Ralph loop → completion → audit-trail plugin writes evidence.


4. Integration with fleet_schedules SSOT

4.1 PRD amendment requirements

PRD v0 §5 currently has executor enum {launchd, routine, n8n, github-actions}. Pattern A requires:

4.2 New mastra-bridge endpoint (mirrored from n8n integration)

Mirrors the pattern from research/n8n-mastra-slack-scheduled-task-2026-05-24/REPORT.md §1.1.

mastra-bridge :3002
  /api/workflows/schedule-analyze/start          (existing — n8n)
  /api/workflows/hermes-schedule-dispatch/start  (NEW — hermes)

Or alternative: direct Themis → Hermes (no mastra-bridge hop). Adapter path TBD via §6.1 below.

4.3 Rule-18 evidence chain

Themis fire
  → POST to Hermes gateway with schedule_id, run_id, expected_evidence_shape
  → Hermes invokes /goal or cron-skill
  → pantheon-audit-trail plugin (Pantheon-authored) captures:
      - entity_ids[] (Supabase rows touched)
      - api_acks[] (OpenRouter call IDs, Slack ts values)
      - file_paths[] (any written artifacts)
      - commit_shas[] (if vcs_mutating, but trial scope = false)
  → verification-evidence-writer plugin writes JSONB to fleet_schedule_runs
  → CHECK constraint enforces: outcome='success' ⇒ verification_evidence NOT NULL

No native Hermes writeRun step. Plugin discipline is the only enforcer.


5. Risk inventory

5.1 Inherited from Viska arc (PHASE2 §risk-inventory)

  1. Bus factor (teknium1). Mitigated by mirror fork + 4–8 wk hook half-life budget + pinned tag (D13).
  2. Weekly v0.x cadence + no LTS. Mitigated by D13 review-gated rolling + plugin re-test CI fixture (T2 open question 7).
  3. In-process trust full-privilege. Mitigated by D10 hardened Docker Compose stage-1 + D11 Pantheon-only skills.
  4. TM-4 LLM-API-as-exfil at network layer. Mitigated by Envoy egress sidecar (MANDATORY per T6 #7, Pattern A prerequisite).
  5. Plugin hook contract drift. Mitigated by D13 + CI fixture for plugin-vs-Hermes-tag matrix.

5.2 Fleet-specific additions

  1. K20N0S older-macOS constraint. Hermes Docker Compose support on this macOS version unverified — Hades probe required pre-trial. Fallback: operator-signed waiver for "out-of-support" posture per Nous SECURITY.md §2.2 (incompatible with D11 strict-isolation if accepted).
  2. Cron-subsystem wake-catchup semantics undocumented (T2 axis 2). Hermes-internal cron behavior on macOS sleep not specified. Pattern A trial mitigation: launchd-wraps-Hermes posture (Posture A from T2 §coexistence) — launchd is the trigger, Hermes is the payload. Preserves wake-catchup primacy.
  3. Resource cap on K20N0S. Trial = 2 processes (existing Slack-gateway + new Plutus). Adding more agents → 3-process cap. Beyond → migrate to alternative host or reject expansion.
  4. Bridge bus-factor on Themis adapter. Pattern A adds Themis → Hermes adapter to Themis's responsibility surface. Metis owns Themis. New code path = new failure mode. Mitigation: explicit Metis review of adapter design before merge.
  5. Plugin re-test fixture absent. No CI infrastructure today for plugin-vs-Hermes-tag-matrix. Building this is a hard prerequisite to fleet adoption per T2 open question 7. Effort: ~2–3 days. Add to Implementation Order.

6. Open decisions (gating implementation)

6.1 Adapter path

Two options for fleet_schedules.executor='hermes' dispatch:

Option Mechanism Pros Cons
A1 — Mastra-bridge mediated Themis → mastra-bridge :3002 /api/workflows/hermes-schedule-dispatch/start → Hermes HTTP gateway Reuses existing mastra-bridge pattern; tier the Hermes role behind atlas-owned middleware Adds hop latency; mastra-bridge becomes critical-path for Hermes schedules
A2 — Direct Themis → Hermes HTTP Themis posts straight to Hermes gateway on K20N0S Lower latency; Hermes is independent of mastra-bridge availability Adds Hermes endpoint shape to Themis parser; Themis carries adapter for two executor types (currently 4)

Operator/architecture decision needed.

6.2 Docker Compose wrap for K20N0S

Per Hermes SECURITY.md §2.2 + D10 stage-1, hardened Docker Compose wrap is required for D11-compliant posture. K20N0S currently runs launchd-direct daemon (machine report). Pre-trial Hades hardening pass = ~3–5 days.

Two posture options: - B1 — Wrap before trial start (recommended). 5–8 day delay; full D10-D11 compliance. - B2 — Defer wrap, run "out-of-support" stage-0 posture for trial. Operator-signed waiver. Trial begins immediately, hardening lands by trial end-date. Risk: trial outcomes confounded with un-hardened posture.

Operator decision needed.

6.3 Envoy egress sidecar on K20N0S

T6 #7 names Envoy MANDATORY. K20N0S has no sidecar today. Pattern A trial cannot proceed without this network-layer boundary (per 5 mandatory guardrails inheritance from PHASE2).

Effort: Hades-owned, ~3–5 days (Envoy config + allowlist + cert pinning + DNS lockdown).

Allowlist for Plutus-Hermes trial: - OpenRouter API (openrouter.ai) - Pantheon Supabase REST endpoint - Slack API (slack.com) - Deny everything else (including DNS-over-HTTPS, IMDS 169.254.0.0/16 — separate from D7 Railway IMDS probe).

No operator decision needed (mandatory). Just sequencing in Implementation Order.

6.4 Trial duration + promote/retire criteria

Recommended: - Duration: 90 days from trial-start (sufficient cycles to gather catch-rate vs operator-override telemetry). - Promote criteria (ALL must hold): - Plutus catch-rate (Plutus-said-approve, operator agreed) ≥ 90%. - Time saved per market-close digest cycle ≥ 30 min vs manual baseline. - Zero verification_evidence false-positives (plugin gathered correct evidence — measured by operator audit of N=20 sample rows). - Zero security incidents (no Envoy block escalations, no plugin contract breaks). - ≤ 4 hours/week maintenance overhead during trial. - Retire criteria (ANY triggers retirement): - Plutus catch-rate < 75%. - Time savings ≤ 0 min (Hermes adds work). - Any security incident. - Maintenance overhead > 8h/wk. - Upstream hermes-agent breaking change requiring > 2 weeks plugin re-author.

Operator confirmation on numbers needed.

6.5 Bundle with viska-autoresearch implementation?

Viska arc already commits to hermes-agent adoption for Viska client (D9 confirmed). Fleet-wide Pattern A trial is structurally separate (different agent identity, different K20N0S process, different schedule scope) but shares engineering work (audit-trail plugin, verification-evidence-writer, Envoy sidecar pattern).

Two delivery options: - C1 — Bundle. One engineering effort delivers both viska-autoresearch trial + fleet-wide Plutus trial. Saves ~30% effort by sharing plugins/infra. Higher coupling — viska delays land on fleet trial. - C2 — Sequence. Ship viska-autoresearch first (already operator-decided), evaluate, then fleet-wide trial. Less coupling, higher total effort, slower fleet learning.

Operator decision needed. Recommend C1 — bundle.


7. Implementation order (Pattern A trial, assuming C1 bundle)

# Task Owner Effort Prereq
1 Envoy egress sidecar on K20N0S (allowlist + cert pin + DNS lockdown) Hades 3–5d Operator approval §6.3
2 K20N0S Hermes Docker Compose hardening pass (D10 stage-1) Hades 3–5d §6.2 B1 (recommended)
3 Mirror fork setup (fleet-stable branch in boas-dev namespace) Hephaistos + Metis 1d None
4 Plugin re-test CI fixture (plugin-vs-Hermes-tag matrix) Metis 2–3d Mirror fork
5 pantheon-audit-trail plugin (shared viska + fleet) hermes-fleet-agent or atlas 3–5d CI fixture
6 verification-evidence-writer plugin (shared viska + fleet) hermes-fleet-agent or atlas 2–3d audit-trail
7 freeze-flag plugin (fleet kill-switch) hermes-fleet-agent 1d audit-trail
8 iteration-guard plugin (Ralph loop runaway countermeasure) hermes-fleet-agent 3–5d audit-trail
9 slack-template-filter plugin (delivery sanity check) hermes-fleet-agent 1–2d None
10 fleet-schedules-trigger-adapter plugin + Themis parser case for executor='hermes' Metis (Themis) + hermes-fleet-agent (plugin) 3–5d adapter path §6.1 decided
11 PRD amendment (executor enum + hermes_process column + Themis case) atlas → athena ratify 1–2d None
12 Plutus market-close trial schedule authored Plutus + hermes-fleet-agent 1–2d All above
13 Trial begins (T-day) mimir 0 All above
14 Mid-trial check (T+30d) hermes (research) + mimir 0.5d Telemetry
15 Trial close + promote/retire decision (T+90d) mimir + athena 1d Telemetry

Critical path: 1 → 2 → (3 || 4 || 5) → 6 → 10 → 11 → 12 → 13. Estimated calendar time: ~5–7 weeks to trial start. Total trial cycle: ~5–7 weeks setup + 90 days trial + decision week = ~22–25 weeks.


8. Coordination + handoffs

Pattern A trial touches multiple fleet agents. Handoffs needed:

To Subject Trigger
operator Open decisions §6.1 (adapter path), §6.2 (Docker wrap timing), §6.4 (trial criteria numbers), §6.5 (bundle vs sequence) This report ratification
Hades Envoy egress sidecar config + Docker Compose hardening + macOS-Docker-on-older-OS probe §6.3 mandatory pre-trial
Metis Themis parser extension for executor='hermes' + plugin re-test CI fixture After §6.1 adapter path decided
Plutus Trial role scope (market-close digest only); telemetry collection for catch-rate baseline pre-trial Before trial start
atlas PRD v0 amendment for executor enum + hermes_process column After §6.1 adapter path decided
athena PRD amendment ratification + 5 mandatory guardrails fleet-extension review After atlas amendment
Hephaistos Mirror fork setup + fleet-stable branch Independent — can start now
proteus n8n-instance side (no work — informational only that fleet now has 5 executors not 4) At PRD amendment ratification

9. Open questions (T4 cannot resolve)

Bumped to operator + future research:

  1. Cron-subsystem wake-catchup semantics (T2 OQ2). Empirical probe: on K20N0S, sleep machine, miss a Hermes-internal cron fire, wake, observe — does it catch up? If not, launchd-wraps-Hermes (Posture A) is mandatory. Probe before trial start.
  2. Hermes Docker Compose support on older macOS. Hades probe required §6.2.
  3. MacOS-K20N0S Tailscale alternative. Machine report flags Tailscale broken. Future fleet expansion of Pattern A to other machines may need alternative VPN/secure-LAN transport. Not blocking for trial (LAN-only on K20N0S sufficient).
  4. Plutus subscription quota at trial volume. Pattern A trial adds Hermes-driven LLM calls on top of existing Plutus CC subscription. Quota arithmetic: trial volume × OpenRouter cost vs current Plutus monthly LLM line item. Operator should set ceiling pre-trial.
  5. 22-platform messaging breadth — fleet roadmap. Does fleet anticipate Telegram/Discord/Teams/Matrix expansion within 12 months? If yes, Pattern A trial proves the substrate for that expansion. If no, the 22-platform breadth remains latent capability.
  6. Skill-authoring substrate fleet-wide. Hermes lets agents author their own skills at runtime. TokenMix benchmark ~40% time-reduction. Fleet adoption of skill-authoring as a primitive (separate from cron) is a research question downstream of trial — does Pantheon want self-modifying agent loops as a category, or treat the Plutus trial as the only instance?

10. Recommendation summary

Question Answer
Adopt nous-hermes-agent into Pantheon fleet? YES, partial: Pattern A+B mixed.
Replace existing executors (launchd/n8n/Mastra)? NO. Pattern C rejected.
Roll out to all fleet agents? NO. Single trial role: Plutus market-close digest.
Trial duration? 90 days post-setup, ~5–7wk setup → 22–25wk total to decision.
Engineering cost? ~12–18 person-days plugin authoring + ~6–10 days Hades hardening = ~18–28 person-days first-deploy. ~1–4h/wk recurring during trial.
Pre-trial gates (all blocking)? Envoy egress sidecar on K20N0S; Docker Compose wrap (or operator waiver); plugin re-test CI fixture; PRD amendment ratified by athena.
Rollback path? Retire criteria §6.4 ANY trigger → flip freeze-flag plugin → migrate schedules off executor='hermes' → keep K20N0S Hermes Slack-gateway role (Pattern B) intact.

The Ralph loop is the only true gap-filler. The rest is Pantheon-stack already covers. A bounded trial validates whether the Ralph loop pays for the maintenance tax.


11. Cross-references