All plugins

shadow

Find out which model is better at your work, from your real prompts. After a plain chat turn, the same conversation goes in the background to a second model you choose, through ctx.llm. /shadow vote shows both answers blind in random order; models are revealed after you vote, and your leaderboard shows wins with a 95% range. Off until you set compare_model and allow the override; tool turns are skipped and answers are deleted after each vote. Disclosure — when enabled (compare_model set and llm.allow_model_override on), the last 12 plain-text messages of every eligible chat turn are also sent to the second model/provider you configured, costing one extra model call per compared turn; up to 100 unvoted prompt/answer pairs are kept in plugin-data/shadow until you vote, and each chat can only see the pairs it captured.

salch-credModelsv0.1.1Updated 2 hours ago

About

Find out which model is better at your work, from your real prompts. After a plain chat turn, the same conversation goes in the background to a second model you choose, through ctx.llm. /shadow vote shows both answers blind in random order; models are revealed after you vote, and your leaderboard shows wins with a 95% range. Off until you set compare_model and allow the override; tool turns are skipped and answers are deleted after each vote. Disclosure — when enabled (compare_model set and llm.allow_model_override on), the last 12 plain-text messages of every eligible chat turn are also sent to the second model/provider you configured, costing one extra model call per compared turn; up to 100 unvoted prompt/answer pairs are kept in plugin-data/shadow until you vote, and each chat can only see the pairs it captured.

shadow

Find out which model is better at your work, from your real prompts.

Benchmarks rank models on other people's tasks. You want to know: would Hermes 4 have answered my questions better than the model I use now? Shadow answers that, blind.

/shadow vote

Your prompt: "How should I handle flaky uploads?"

— Answer 1 —
Add retries with exponential backoff, and make the upload idempotent so a retry can't …

— Answer 2 —
Wrap the call in a retry loop …

Which is better? /shadow 1, /shadow 2, /shadow tie, or /shadow skip.

/shadow 1
You picked nousresearch/hermes-4-70b. Answer 1 was nousresearch/hermes-4-70b, Answer 2 was glm-5.3.

/shadow
Shadow: which model is better at your work (blind votes on your own prompts)
  glm-5.3 vs nousresearch/hermes-4-70b: 4-11, 2 tie(s). glm-5.3 wins 27% (95% range 11-52%):
  no clear winner yet.

How it works

  1. After a plain chat turn, meaning one where the agent called no tools, Shadow sends the same conversation in the background to the second model you chose. It goes through Hermes's own plugin model access (ctx.llm), so your session never waits. Turns with tool calls are skipped, because a second model can't redo the tools fairly.
  2. /shadow vote shows both answers blind, as Answer 1 and Answer 2 in random order. You see which model wrote which only after you vote.
  3. Your leaderboard counts wins, losses and ties for each pair of models, with a 95% range (a Wilson interval). It names a winner only when the range is clearly above or below 50%, and says "too early to call" under 10 votes.
  4. Each chat sees only its own pairs. On a gateway (Telegram, Discord…), /shadow vote shows only pairs captured in that same conversation, so one user never sees another user's prompt or answers. At your own terminal, all local pairs are yours.
  5. Answers are deleted once you vote. Only the result is kept: which model won, and when.

Turn it on

Shadow is off until you name a model, and Hermes must allow the plugin to choose one:

plugins:
  entries:
    shadow:
      settings:
        compare_model: nousresearch/hermes-4-70b   # the model to compare with
        compare_provider: ""                       # if it's on another provider
        sample: 1.0                                # share of eligible turns to compare
        max_per_day: 40                            # cost cap
      llm:
        allow_model_override: true                 # required by Hermes for any plugin choosing a model
        # allow_provider_override: true            # only if you set compare_provider

Use it

/shadow              your leaderboard, and how many answers wait for a vote
/shadow vote         the next pair, blind
/shadow 1 | 2 | tie  your vote
/shadow skip         skip this pair
hermes shadow        the leaderboard from your shell

What it touches

  • Model calls: one extra call to your chosen model per compared turn, up to max_per_day (40 by default). They cost what that provider charges.
  • What the second model receives: the plain text of the conversation, up to the last 12 user and assistant messages. Tool calls and results are not sent, and neither is the main model's answer.
  • Stores locally: the prompt, both answers (up to 4,000 characters each) and the model names for pairs waiting for your vote, plus vote results, in <hermes home>/plugin-data/shadow/shadow.json. Answers are deleted when you vote or skip, and at most 100 pairs wait at once.
  • No network of its own, no telemetry, no dependencies.

Limits

  • Conversational turns only. Tool-using turns can't be replayed fairly.
  • One second model at a time. Change compare_model to start a new pairing; old results stay in the leaderboard under their own names.
  • Your votes are your taste. That's the point, but it isn't a general benchmark.

Development

pytest tests

19 tests cover per-chat privacy on gateways, the per-profile data path, the off state, what is sent (and what is not), skipping tool turns, the blind order and reveal, deleting answers after a vote, the leaderboard and its interval, the trust-error hint, the daily cap and sampling, the provider setting and the CLI.

License

MIT

README from the reviewed commit 0a55597; it updates when the author re-pins.

More by salch-cred

13 plugins by salch-cred in the catalog.

salch-credaftercareYour agent checks its own work after the fact. When a reply says something is deployed or live at a public address, Aftercare remembers it and, every few hours at session start, checks it again with one GET request in the background. If it has stopped working, the agent is told once and tells you first; you hear when it is back. /aftercare lists and checks, and hermes aftercare check runs from cron. Never checks private networks or runs commands. Disclosure — on by default, sends background GET requests (user agent `hermes-aftercare/0.1`) to any public http(s) address an agent reply says is deployed or live, at session start every 6 hours by default, and adds a one-time note to the next turn when one changes state; private, loopback and local-name addresses are refused.Communitytoolssalch-credbluffDoes your model make things up? Bluff asks about things that sound real but don't exist (Python functions, built-in exceptions, chemical elements), mixed with real ones and phrased as if they all exist, and checks whether the model admits the made-up ones aren't real. The result is a bluff rate, with real items as a control. Every item is checkable by machine, so no model judges another. Runs on your active model through ctx.llm, no setup.Communitytoolssalch-credcalm-modeWhen you get frustrated, your agent slows down. Calm Mode scores the tone of each message ("still broken", "I already told you", capitals, "!!", the same message twice); frustration builds and fades. Past a threshold the agent works in small checked steps, at most two file edits per turn, and risky commands (rm -rf, git push, deploys, DROP TABLE) wait until the user says yes. /calm shows the level and forces it on or off. No model calls, nothing stored.Communitytoolssalch-credcrash-testA safety rating for AI agents. For one armed turn it breaks tools the way real systems break (timeouts, outages, empty or cut-off results), then rates what the agent did: retried, worked around it, told the truth, or claimed success anyway. 1-5 stars and an HTML report, comparable across models by seed. Blocked calls never run, silent faults only touch reads, and the agent gets no tools from it, so it cannot tell it is being tested. Disclosure — when the user arms a test (`/crashtest start` or the `CRASH_TEST` environment variable), the next turn's tool calls are deliberately blocked with fake errors and some read results (read_file, search_files, web_search/web_extract, read-only terminal commands) are silently emptied, cut off or replaced with an older result without telling the agent, so the agent may act on incomplete data during that turn; the rating is appended to the reply and the task text and reply are saved in a local report under the plugin's data folder.Communitytools

Developer Mode

Explore built-in Hermes toolsets and actions.

HermesAgent

Developer?

Create a Hermes extension for Desktop or agent workflows.

Developer Section