All plugins

deja-fix

Stops the agent from putting back code that already failed. Every version of every file it writes in a session is fingerprinted and judged by the next test or build run, or by the user saying "still broken". An edit that would recreate a failed version is stopped once, naming when it failed and why; a second try goes through. Catches the same code reached by different edits, which Hermes' identical-call guard can't. /deja shows what is tracked. No model calls.

salch-credToolsv0.1.0Updated 1 hour ago

About

Stops the agent from putting back code that already failed. Every version of every file it writes in a session is fingerprinted and judged by the next test or build run, or by the user saying "still broken". An edit that would recreate a failed version is stopped once, naming when it failed and why; a second try goes through. Catches the same code reached by different edits, which Hermes' identical-call guard can't. /deja shows what is tracked. No model calls.

deja-fix

Stops your agent from putting back code that already failed.

Agents go in circles: try A, the tests fail; try B, they fail; try A again. Each attempt is a slightly different edit, so nothing notices, and you watch the same failure come back twenty minutes later.

Déjà Fix remembers every version of every file the agent writes in a session, and what happened after each one. When an edit would put a file back to a version that already failed, it is stopped before it runs:

Deja Fix: this puts calc.py back exactly as it was at 08:11, and that version already failed
(`python -m pytest -q test_calc.py` exited 1). Try a different approach. If you're sure this
version is right and something else was the cause, say so and try again; it will go through.

How it works

  1. Every version is fingerprinted. After each successful write_file or patch, the file on disk is hashed. Trailing spaces and blank lines at the end don't count, so cosmetic changes don't hide a repeat.
  2. Each version gets a verdict:
    • A test or build run marks the files changed since the previous run. A failure means that version failed; exit code 0 means it passed. It reads pytest, npm test, cargo test, go test, tsc and similar. Commands that couldn't run at all (exit 126/127) give no verdict.
    • You saying "still broken", "same error" or "doesn't work" marks the files the agent changed in its last turn as failed.
  3. Edits are checked before they run. For write_file it's the new content; for patch, Déjà Fix applies the patch to the current file to see the result. If that exact version already failed and never passed, the edit is stopped.
  4. The agent can insist. Sometimes the failure was caused by another file. If the agent makes the same edit again after being told, it goes through, and that's counted.

Hermes's own guard stops identical tool calls repeated many times. Déjà Fix catches the same code reached by different edits, which is how agents actually loop.

Use it

/deja      files tracked, versions known to fail, edits stopped and let through
plugins:
  entries:
    deja-fix:
      settings:
        mode: block    # block | warn (record only) | off

What it touches

  • Reads the files the agent edits, to fingerprint them and to predict patches.
  • Stops one edit (through pre_tool_call) when it would recreate a failed version. A second try goes through.
  • Reads your message (through pre_llm_call) only to spot "still broken". It keeps fingerprints and verdicts in memory, per session. Nothing is written to disk.
  • No model calls, no network, no dependencies.

Limits

  • One session at a time. Versions from yesterday's session aren't remembered.
  • Only write_file and patch edits are tracked. Files changed by shell commands aren't.
  • Exact versions only. A version that differs by one character from a failed one is a new version, as it should be.

Development

pytest tests

17 tests cover writes and patches, whitespace, passing versions, versions that later passed, the user saying "still broken", commands that aren't checks, per-file verdicts, sessions, the modes, path resolution and the status command.

License

MIT

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

More by salch-cred

12 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