Hermes.News

Technical news, guides and deep-dives on Hermes Agent by Nous Research


Core FeaturesSep 10, 2026744 words

Mixture of Agents: How Hermes Combines Multiple Models

Mixture of Agents (MoA) is a virtual model provider in Hermes. Each named MoA preset appears as a selectable model under the moa provider. When you select a preset, the preset's aggregator becomes the acting model — it's the one that writes the assistant response and emits tool calls — while the configured reference models run first and provide analysis for the aggregator to use.

Use MoA when a hard task benefits from multiple model perspectives but still needs Hermes' normal agent loop: tool calls, follow-up iterations, interrupts, transcript persistence, and the same session context as any other message. Because MoA is selected through the normal model system, it composes automatically with /goal, gateway sessions, TUI sessions, and desktop chat.

Selecting a Preset

MoA presets are selectable on every Hermes surface, since MoA is a normal provider in the model system. In the CLI, gateway, and TUI you use /model <preset> --provider moa (or a bare /model picker). The /moa slash command is one-shot convenience sugar: it runs a single prompt through the default MoA preset, then restores whatever model you were on. MoA presets also appear in hermes model, the dashboard model picker, and the desktop GUI's model dropdown.

How It Works in the Agent Loop

For each main model call when provider moa is selected, Hermes:

  1. Resolves the selected preset by name.
  2. Runs the configured reference models without tool schemas — they receive only the conversation's user/assistant text, not the Hermes system prompt or tool-call transcript, so reference calls stay cheap.
  3. Appends the reference outputs as private context for the aggregator.
  4. Calls the configured aggregator with the normal Hermes tool schema.
  5. Treats the aggregator response as the real model response — and if it calls tools, Hermes executes them normally.

On the next model iteration, the same MoA process runs again over the updated conversation, including tool results.

Configuring Presets

Presets are configured from the dashboard (Models → Model Settings → Mixture of Agents), the desktop app, hermes moa configure [name], or directly in config.yaml. Because the config stores explicit provider/model pairs, you can mix providers and use several models from the same provider:

moa:
  default_preset: default
  presets:
    default:
      reference_models:
        - provider: openai-codex
          model: gpt-5.5
        - provider: openrouter
          model: deepseek/deepseek-v4-pro
      aggregator:
        provider: openrouter
        model: anthropic/claude-opus-4.8

Terminal commands cover the lifecycle: hermes moa list, hermes moa configure, and hermes moa delete <name>.

Tuning Cadence, Privacy, and Reasoning

By default the advisors run once per user turn (fanout: user_turn), synthesizing plan-level advice on the first message before the aggregator works through the rest of the tool loop alone — the cheapest cadence. Two alternatives trade cost for advice freshness: fanout: per_iteration re-runs advisors on every tool iteration, and fanout: every_n: 3 re-runs them on the first iteration and then every 3rd. The moa.privacy_filter (off by default) redacts sensitive data like emails and phone numbers from visible surfaces (display) or even from the aggregator prompt (full). Each slot can also set its own reasoning effort — from none to ultra — so the aggregator can think harder than the advisory references.

Does It Actually Help?

On HermesBench, yes. A two-model preset — claude-opus-4.8 aggregating over a gpt-5.5 reference — scored 0.8202, beating either model run on its own (opus-4.8 at 0.7607 and gpt-5.5 at 0.7412) by roughly six points. That confirms aggregating a second perspective lifts quality on hard tasks rather than merely averaging the two models.

Crucially, MoA is built so the main conversation's prompt cache is never broken: selecting a preset doesn't mutate past context, swap toolsets, or rebuild the system prompt. Reference outputs are appended at the tail of the latest user turn as private guidance, below the stable prefix, so the aggregator gets cache hits on everything above the injection. Its only real cost is the extra reference calls per iteration — you pay for multiple model perspectives, but never for broken caches.

Key Takeaways

  • MoA is a virtual model provider: an aggregator writes the response, guided by reference models that run first.
  • Presets are selectable anywhere you'd pick a model, and /moa runs one prompt through the default preset.
  • Configure presets in config.yaml, the dashboard, or the desktop — mixing arbitrary providers and models.
  • Advisor cadence, privacy filtering, and per-slot reasoning effort are all tunable.
  • Benchmarks on HermesBench show MoA outscoring its strongest component model, and it never breaks the prompt cache.