{
 "batch": "deep-45",
 "setup": "Hermes cloned from github.com/NousResearch/hermes-agent (main, depth 1) into test/scratch and built with `uv sync --locked --python 3.14` (uv and CPython 3.14.10 installed under test/scratch); `hermes plugins --help` lists install/validate/doctor. Each plugin was run at its pinned commit with the gist's tryit.py (catalog validate, enable, doctor, then an in-process AIAgent chat against tests/fakes/fake_llm_provider.py), first with an empty plan, then with 3-5 planned calls including a bad input. Plugin tools do not show in the first request's tool list (Hermes defers them behind tool_search/tool_call), so tryit reports 'added tools none' for all six, but every planned call reached the plugin's handler. Plugin tests ran with the Hermes venv Python plus pytest (and playwright + chromium-headless-shell for hallway-test). For fluent I used a copy of tryit that adopts ls/git/tar/rm into the plugin's store before the chat, standing in for `/fluent adopt`, which a scripted chat cannot type. Approval-gated calls were refused because no user was present to approve, which is the expected behaviour.",
 "plugins": [
  {
   "pr": 152755,
   "name": "hermes-drawbridge",
   "validate": "passed: hermes plugins validate --install-deps exit 0, every check ok (manifest, fields, requires_hermes, config schema, requires_env, oauth, loadable)",
   "inside": "Loaded; doctor: 1 tool (drawbridge_folder), 2 hooks (pre_tool_call, post_approval_response). list_folders -> {ok:true, folders:[]}; read '../etc/passwd' with no share -> {ok:false, error:'invalid-request'} (refused, but the error is a bare code); request_access -> ok with a requestId and a ::drawbridge-access directive for Desktop. The core path (a live Desktop share and reviewed writes) needs Hermes Desktop, which this machine does not have.",
   "tests": "not completed: the only suite is tests/smoke.mjs, which the README calls a Windows smoke suite (Node 24). On Linux with Node 24.21 it started its broker fixture and then stalled on an unsettled top-level await at line 283; no Python unit tests",
   "useful": 4,
   "reliable": 3,
   "polish": 4,
   "creative": 4,
   "beyond": 5,
   "total": 25,
   "rank": 5,
   "best": "Lets a remote or VPS Hermes read, and with per-diff approval edit, one folder that Desktop shares into one chat, with expiry, size ceilings and approval wired into Hermes's own approval hooks; only a plugin can do this.",
   "worst": "It only proves itself on Windows Desktop: its one test suite is Windows-oriented and stalled here, errors come back as bare codes like 'invalid-request', and the README is thin (76 lines) for a security-sensitive feature.",
   "blocked": null
  },
  {
   "pr": 150353,
   "name": "fluent",
   "validate": "passed: hermes plugins validate --install-deps exit 0, every check ok (manifest, fields, requires_hermes, config schema, requires_env, oauth, loadable)",
   "inside": "Loaded; doctor: 0 tools, 3 hooks (pre_tool_call, post_tool_call, transform_terminal_output). With nothing adopted, it stays silent: `ls --colour-bogus /` ran normally. After ls/git/tar/rm were adopted: `ls --colour-bogus /` was blocked before running, with the message 'fluent: `--colour-bogus` is not an option of `ls` (ls 9.4), checked against the help of the version installed here'; `git --version` passed; `git log --onelin` was let through (prefix matches count as ambiguous, by design) and git rejected it; `git clean -fdx` went to Hermes's approval and, with no user present, never ran.",
   "tests": "passed: 442 passed, 100 skipped (pytest, 5.7 s)",
   "useful": 5,
   "reliable": 5,
   "polish": 5,
   "creative": 4,
   "beyond": 4,
   "total": 27,
   "rank": 1,
   "best": "A silent guard on every terminal call: it checks options against the help and man pages of the version installed on this machine, stops invented flags and names the real one, and sends destructive subcommands to Hermes's own approval prompt.",
   "worst": "It does nothing until the user runs /fluent adopt for each program, and it only checks long options, so it misses short flags and prefix typos like `git log --onelin`.",
   "blocked": null
  },
  {
   "pr": 152914,
   "name": "culprit",
   "validate": "passed: hermes plugins validate --install-deps exit 0, every check ok (manifest, fields, requires_hermes, config schema, requires_env, oauth, loadable)",
   "inside": "Loaded; doctor: 3 tools, 3 hooks. culprit_timeline ran (show_step=2 -> 'There is no step 2 in this folder', a clear error). It recorded 0 steps after two write_file calls, because in tryit the workspace is the fresh Hermes home and errors there are only logged at debug level. culprit_bisect and culprit_revert(step 999) were held for approval with a clear description of exactly what would run (correct, since no user was present). Driving its Engine directly on a project folder: baseline + 3 steps, bisect named step 2 (the edit that broke add()), revert undid only that step and kept the later edit.",
   "tests": "passed: 29 passed, 1 skipped",
   "useful": 4,
   "reliable": 4,
   "polish": 4,
   "creative": 5,
   "beyond": 4,
   "total": 25,
   "rank": 4,
   "best": "'git bisect for your agent': it snapshots each file-changing tool call into a separate git store, binary-searches those snapshots with your test command in temp copies, and undoes only the guilty step; it worked end to end when driven directly.",
   "worst": "Snapshot failures are logged only at debug level, so a session can quietly record nothing (as happened inside tryit), and check_command accepts '' and 'rm -rf /', which leaves Hermes's approval prompt as the only guard.",
   "blocked": null
  },
  {
   "pr": 154078,
   "name": "harness-story",
   "validate": "passed: hermes plugins validate --install-deps exit 0, every check ok (manifest, fields, requires_hermes, config schema, requires_env, oauth, loadable)",
   "inside": "Loaded (Hermes warns: unknown capability 'filesystem:write'); doctor: 5 tools, 12 hooks. harness_story_list returned the live session from state.db; harness_story_generate(session 'latest', use_llm false) built a story and headline; harness_story_inspect(section tools) returned the tool tally; inspect of a story that does not exist -> clear 'not found' error.",
   "tests": "passed: 5 passed, 1 skipped (only 6 tests collected; the skip needs a real state.db)",
   "useful": 3,
   "reliable": 3,
   "polish": 4,
   "creative": 4,
   "beyond": 3,
   "total": 20,
   "rank": 6,
   "best": "It reconstructs a session from state.db and live hooks into a causal story (context-window growth, tool tallies, pivots) with an animated HTML viewer and Desktop page, and it works offline.",
   "worst": "It ships with the author's LAN endpoint (http://192.168.1.12:8080) and a private model name as defaults, declares a capability Hermes does not know, and has only 6 tests for about 4,000 lines.",
   "blocked": null
  },
  {
   "pr": 152475,
   "name": "hallway-test",
   "validate": "passed: hermes plugins validate --install-deps exit 0, every check ok (manifest, fields, requires_hermes, config schema, requires_env, oauth, loadable)",
   "inside": "Loaded; doctor: 1 tool (hallway_test), 0 hooks, plus the /hallway command. file:///etc/passwd -> refused (only http/https); http://169.254.169.254/ -> refused as a link-local or cloud-metadata address; url 'demo' -> failed cleanly inside tryit's isolated runtime because no browser was installed there ('Run python -m playwright install chromium ...'). The persona loop itself needs a real model, which the scripted test model cannot play.",
   "tests": "passed: 35 passed once playwright + chromium-headless-shell were installed (before that: 15 passed, 19 skipped, 1 failed, all for lack of playwright); run from tests/, because pytest at the repo root trips over the package __init__",
   "useful": 4,
   "reliable": 5,
   "polish": 5,
   "creative": 5,
   "beyond": 4,
   "total": 27,
   "rank": 2,
   "best": "Five simulated testers whose limits are enforced in code (low vision, screen reader on keyboard only, colour blindness, tremor) each drive a real browser, and you get findings, replays, a summary card and a live Desktop page; its network guard is careful.",
   "worst": "Each run costs many model calls, takes minutes and needs Playwright browsers, and running pytest from the repo root fails to import the tests.",
   "blocked": null
  },
  {
   "pr": 153024,
   "name": "home-3d-workshop",
   "validate": "passed: hermes plugins validate --install-deps exit 0, every check ok (manifest, fields, requires_hermes, config schema, requires_env, oauth, loadable)",
   "inside": "Loaded; doctor: 14 tools, 4 hooks. Simulator backend: home3d_status returned printer state with AMS trays; home3d_queue list -> empty; home3d_household who -> owner; home3d_upgrades list -> empty; home3d_start(9999) -> BLOCKED 'queue item 9999 not found'; home3d_find_models with a bad link -> a clear error plus a hint; home3d_customize -> clean 'OpenSCAD is not installed'; calls with wrong argument names were stopped by Hermes's schema check.",
   "tests": "1 failed, 958 passed, 13 skipped (test_cli::test_plugin_keys_and_state expects 'unknown' and gets 'disabled')",
   "useful": 3,
   "reliable": 4,
   "polish": 5,
   "creative": 5,
   "beyond": 5,
   "total": 27,
   "rank": 3,
   "best": "It makes a 3D printer a member of the household chat (find or design, slice, queue, typed owner approval to start, a zero-token watcher, a photo to whoever asked), with the API key in Hermes's secret store, a simulator, a Desktop page and 958 passing tests.",
   "worst": "Real use needs a Bambu Lab printer behind Bambuddy (plus OpenSCAD for designs), so few Hermes users can use it; the scope is huge (a 730-line README) and one test fails at this commit.",
   "blocked": null
  }
 ]
}