You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Per devagentic#203 (canonical fusion contract) + this rotation operating-doctrine:
Devagentic = the orchestration intelligence (intent classify, role route, preamble shape, cascade recovery, runaway detection, operating-mode selection)
Hermes-cli = the transport client (HTTP + SSE + local tool execution + terminal rendering)
The architectural goal: hermes-cli trends toward barebones so devagentic is the prominent driver. Today hermes carries opinions (persona, retry heuristics, clarify modals, summary fallbacks) that fight devagentic-side orchestration. Each layered opinion creates a surface where mode-confusion can happen.
Active thinning targets
Each below is a candidate hermes-agent issue. Sequence behind any in-flight work; ship as separate PRs so the refactor can be reverted granularly if needed.
T1. Persona / identity → defer to devagentic by default
Today: hermes ships "Hermes Agent by Nous Research" identity baked into the system prompt. Sandbox profile uses HERMES_DEFER_PERSONA=1 to strip it.
Ask: make HERMES_DEFER_PERSONA=1 the default. Persona is opt-in via HERMES_DEFER_PERSONA=0 for legacy users. Devagentic-controlled clients (provider=devagentic-local) auto-defer regardless. Justification: when devagentic owns the model role + preamble, hermes-side identity is a conflicting voice; devagentic-emitted system prompts should win.
T2. Empty-content recovery / retry-on-empty -> remove from hermes
Today: v0.18.4 added empty-content recovery (re-prompt model with "Your previous response was empty"). This is hermes-side recovery logic.
Ask: remove the empty-content recovery loop entirely. Devagentic-side cascade (NousResearch#324, NousResearch#345, NousResearch#346) handles this layer with full context (intent, role, dispatch trace). Hermes does NOT need to retry — if a response arrives empty, surface it; devagentic decides what to do next.
T3. Clarify-tool default-out
Today: clarify-tool emits a TUI input modal regardless of context. Even with --yolo, clarify still pops a "Type your answer" prompt.
Ask: remove clarify from the default tool subset for sessions with provider=devagentic-local. Devagentic-side intent classifier knows when clarification is actually needed (and can surface it via an OpenAI-shaped assistant message). Hermes does not need to own this UX.
Ask: when provider=devagentic-local, hermes consults devagentic for the tool list. New endpoint or pre-flight query. The 50-tool default exposes attack surface + confuses small models. devagentic-controlled list = 5-10 tools curated per user/intent.
Today: hermes hardcodes max 90 tool-call iterations per turn, then emits "Reached maximum iterations" fallback.
Ask: make the iteration cap a per-dispatch parameter devagentic sets. Devagentic-side runaway-detector (NousResearch#345/NousResearch#346/NousResearch#348) decides when to break a loop — hermes does not need its own 90-iteration cap.
Today: hermes has fallback paths that synthesize a "summary" response when something goes wrong (e.g. v0.18.6 "I reached the maximum iterations but could not summarize. Error: ...").
Ask: replace with deterministic devagentic-side response synthesis. Hermes does not author content; it transports.
Two-issue rule applies
For T1-T6, each ship needs:
A hermes-agent issue (the removal/refactor)
A devagentic issue if the capability migrates over (the cascade owns the recovery, the classifier owns clarify, etc.)
Some can be hermes-only removals (T2, T3, T6 — devagentic already does these). T1, T4, T5 may need devagentic-side wiring to fill the gap.
Why now
This rotation surfaced 3 root causes that all stem from hermes owning too much:
v2 preamble forced mode 2 -> fabrication risk -> cannot fix with text alone, need devagentic-side mode selection
_real_completion_stream silently discarded tool_calls (hermes saw nothing -> triggered its empty-content recovery -> looped) — symptom of hermes having recovery to trigger in the first place
Each fix has been devagentic-side. The hermes thinning is the complementary direction: remove the opinions hermes ships that fight devagentic authority.
Sequencing
Recommend T2 first (remove empty-content recovery — least scope, biggest immediate win — devagentic-side cascade already covers it). Then T3 (clarify default-out — easy + cleans up sandbox UX). Then T1 (persona default-flip). T4-T6 are larger refactors and can wait until T1-T3 prove the pattern.
hermes-agent: scope toward thin-client architecture
Premise
Per devagentic#203 (canonical fusion contract) + this rotation operating-doctrine:
The architectural goal: hermes-cli trends toward barebones so devagentic is the prominent driver. Today hermes carries opinions (persona, retry heuristics, clarify modals, summary fallbacks) that fight devagentic-side orchestration. Each layered opinion creates a surface where mode-confusion can happen.
Active thinning targets
Each below is a candidate hermes-agent issue. Sequence behind any in-flight work; ship as separate PRs so the refactor can be reverted granularly if needed.
T1. Persona / identity → defer to devagentic by default
Today: hermes ships "Hermes Agent by Nous Research" identity baked into the system prompt. Sandbox profile uses HERMES_DEFER_PERSONA=1 to strip it.
Ask: make HERMES_DEFER_PERSONA=1 the default. Persona is opt-in via HERMES_DEFER_PERSONA=0 for legacy users. Devagentic-controlled clients (provider=devagentic-local) auto-defer regardless. Justification: when devagentic owns the model role + preamble, hermes-side identity is a conflicting voice; devagentic-emitted system prompts should win.
T2. Empty-content recovery / retry-on-empty -> remove from hermes
Today: v0.18.4 added empty-content recovery (re-prompt model with "Your previous response was empty"). This is hermes-side recovery logic.
Ask: remove the empty-content recovery loop entirely. Devagentic-side cascade (NousResearch#324, NousResearch#345, NousResearch#346) handles this layer with full context (intent, role, dispatch trace). Hermes does NOT need to retry — if a response arrives empty, surface it; devagentic decides what to do next.
T3. Clarify-tool default-out
Today: clarify-tool emits a TUI input modal regardless of context. Even with --yolo, clarify still pops a "Type your answer" prompt.
Ask: remove clarify from the default tool subset for sessions with provider=devagentic-local. Devagentic-side intent classifier knows when clarification is actually needed (and can surface it via an OpenAI-shaped assistant message). Hermes does not need to own this UX.
T4. Tool subset defaults -> devagentic-controlled tool list, not bundled zoo
Today: hermes ships ~50 built-in tools (browser, computer_use, cronjob, delegation, discord, ...). Sandbox profile uses HERMES_TOOLS_SUBSET to narrow. Default behavior is "expose everything".
Ask: when provider=devagentic-local, hermes consults devagentic for the tool list. New endpoint or pre-flight query. The 50-tool default exposes attack surface + confuses small models. devagentic-controlled list = 5-10 tools curated per user/intent.
T5. Conversation loop max-iterations -> devagentic-controlled
Today: hermes hardcodes max 90 tool-call iterations per turn, then emits "Reached maximum iterations" fallback.
Ask: make the iteration cap a per-dispatch parameter devagentic sets. Devagentic-side runaway-detector (NousResearch#345/NousResearch#346/NousResearch#348) decides when to break a loop — hermes does not need its own 90-iteration cap.
T6. Summary / final-text synthesis fallback -> remove
Today: hermes has fallback paths that synthesize a "summary" response when something goes wrong (e.g. v0.18.6 "I reached the maximum iterations but could not summarize. Error: ...").
Ask: replace with deterministic devagentic-side response synthesis. Hermes does not author content; it transports.
Two-issue rule applies
For T1-T6, each ship needs:
Some can be hermes-only removals (T2, T3, T6 — devagentic already does these). T1, T4, T5 may need devagentic-side wiring to fill the gap.
Why now
This rotation surfaced 3 root causes that all stem from hermes owning too much:
Each fix has been devagentic-side. The hermes thinning is the complementary direction: remove the opinions hermes ships that fight devagentic authority.
Sequencing
Recommend T2 first (remove empty-content recovery — least scope, biggest immediate win — devagentic-side cascade already covers it). Then T3 (clarify default-out — easy + cleans up sandbox UX). Then T1 (persona default-flip). T4-T6 are larger refactors and can wait until T1-T3 prove the pattern.
Standing by for sequence approval.