{
  "sources": [
    {
      "url": "https://gist.githubusercontent.com/gtmcknight/594c47336546c8763e641b46cf9af4ec/raw/RUN.md",
      "quote": "# Run a plugin inside real Hermes\n\nFor seats in rounds 3 and 4. Everything lives under `test/scratch/`. Nothing here needs a model, a key or an account: the model is Nous's own scripted test stand-in, `tests/fakes/fake_llm_provider.py` in the Hermes source, which answers with the tool calls you plan and records everything Hermes sends.\n\n## 1. Hermes, once\n\n    git clone --depth 1 https://github.co"
    },
    {
      "url": "https://gist.githubusercontent.com/gtmcknight/594c47336546c8763e641b46cf9af4ec/raw/field.json",
      "quote": "\"pr\":153851,\"name\":\"foreman\",\"repo\":\"https://github.com/PedValme/foreman\",\"sha\":\"c15453cb2fc07fa674d6f7b548a553b3ce9e6f5d\",\"subdir\":\"plugin\"},{\"pr\":153852,\"name\":\"templeos\",\"repo\":\"https://github.com/"
    },
    {
      "url": "https://raw.githubusercontent.com/NousResearch/hermes-agent/fdde27e7dae174cb4ba842589e92508852b7dd9f/plugin-catalog/README.md",
      "quote": "6. **Declared capabilities must match reality.** The `capabilities:` block\n   (tools, hooks, middleware, env vars) must match what the plugin actually\n   registers at the pinned commit. Validation fails the entry otherwise \u2014\n   undeclared capability creep is treated as a security issue.\n7. **The install scanner runs at admission.** `hermes plugins validate` includes\n   the `security scan` check: `dangerous` fails the entry; `caution` findings\n   "
    },
    {
      "url": "https://raw.githubusercontent.com/PedValme/foreman/c15453cb2fc07fa674d6f7b548a553b3ce9e6f5d/plugin/README.md",
      "quote": "Foreman is a [Hermes Agent](https://github.com/NousResearch/hermes-agent) plugin for people who let Hermes write\ncode in a git repository. A coding agent under pressure can make the check pass by skipping a test, deleting it,\nloosening an assertion or editing what the check runs. Foreman reads the real diff before every commit, push, pull\nrequest and merge, and blocks those shortcuts; a second mod"
    },
    {
      "url": "https://raw.githubusercontent.com/PedValme/foreman/c15453cb2fc07fa674d6f7b548a553b3ce9e6f5d/plugin/__init__.py",
      "quote": "def register(ctx):\n    board.bind(ctx)   # ask_choice and dispatch_tool, from /foreman use, merge and reject only\n    gate.bind(ctx)    # ctx.session_cwd(), to find the session's repository\n    review.bind(ctx)  # ctx.llm: /foreman review, /foreman merge (auto_review: merge) and foreman_review (finish)\n    review.register_task(ctx)  # \"Foreman review\" in Hermes's auxiliary-model pickers; default: the first fallback\n    ctx.register_hook(\"pre_tool"
    },
    {
      "url": "https://raw.githubusercontent.com/jpaulupshaw/hermes-say-do-gate/03402ba924f9db0dbdcfd807df7cd7f3cd131664/README.md",
      "quote": "Agents say they ran the tests. Sometimes they didn't. Say-Do Gate checks every final reply against what actually ran in the turn and flags the gap.\n\nIt is a Hermes plugin. Deterministic. No model call, zero tokens.\n\n```\nAll tests pass.\n\n[say-do] Claimed: tests pass. Ledger: 0 test commands run.\n```\n\n## Quickstart\n\n```bash\n# once the catalog entry lands:\nhermes plugins install say-do-gate --enable\n"
    },
    {
      "url": "https://raw.githubusercontent.com/jpaulupshaw/hermes-say-do-gate/03402ba924f9db0dbdcfd807df7cd7f3cd131664/gate.py",
      "quote": "def on_transform(self, response_text=None, session_id=None, turn_id=None, **kw) -> str | None:\n        \"\"\"Evaluate claims in the response against the ledger. Annotate or store nudge.\"\"\"\n        if not isinstance(response_text, str) or not response_text:\n            return None\n\n        session_id = session_id or \"\"\n        turn_id = turn_id or \"\"\n\n        # If tool recording failed this turn, the ledger is unreliable: skip annotating.\n        wit"
    },
    {
      "url": "https://raw.githubusercontent.com/samirsawarkar/lumina/aaced5beb7bdb93cf7267060bb81fb49d4762c67/README.md",
      "quote": "## The three protections\n\n### 1. Privacy check-up \u2014 find them\n\n> \"What sensitive documents are in my photos?\"\n\nLumina reports how many passports, payment cards, passwords and ID documents are in your library. The model gets counts and kinds, never the values.\n\n![Privacy check-up in Hermes Desktop](docs/img/checkup.png)\n\n### 2. Safe Send \u2014 share a copy that is proven clean\n\n> \"Send my passport to t"
    },
    {
      "url": "https://raw.githubusercontent.com/samirsawarkar/lumina/aaced5beb7bdb93cf7267060bb81fb49d4762c67/leakguard.py",
      "quote": "def check(tool_name, args, session_id=\"\"):\n    \"\"\"pre_tool_call for non-Lumina tools: a block directive, or None.\"\"\"\n    try:\n        if _off(session_id) or not outbound(tool_name, args):\n            return None\n        for p in image_paths(args, tool_name in (\"terminal\", \"execute_code\")):\n            if name := sensitive(p):\n                return {\"action\": \"block\", \"message\": (\n                    f\"Lumina Leak Guard stopped this call: an imag"
    },
    {
      "url": "https://raw.githubusercontent.com/helenn-szn/undo-send/10d388c951245ceeabc1101bb8ff65e75f4f6737/README.md",
      "quote": "When Hermes is about to do something that leaves your machine and can't be\ntaken back (post to a team chat, call a webhook, write to a connected app,\n`git push`), undo-send holds it for a short grace window. Cancel it in that\nwindow and it never happens. Leave it, and it runs normally.\n\n```\n\u23f3 14s  message to telegram: I'm quitting, goodbye everyone \ud83d\udc4b   [Undo] [Send now]\n```\n\n## Why a plugin\n\nHerme"
    },
    {
      "url": "https://raw.githubusercontent.com/helenn-szn/undo-send/10d388c951245ceeabc1101bb8ff65e75f4f6737/undo_send/hold.py",
      "quote": "if not self.store.claim(aid):  # lost the race to an Undo\n            return cancelled_result(summary)\n        try:\n            result = next_call(args)\n        except Exception as exc:\n            self.store.finish(aid, ok=False, detail=str(exc)[:300])\n            raise\n        self.store.finish(aid, ok=True)\n        return result\n"
    },
    {
      "url": "https://raw.githubusercontent.com/1lpredest1nato/hermes-design-studio/e317ae8e8594a68e7a41ee45a888048d069a44f0/README.md",
      "quote": "## Architecture and limits\n\n`studio_core/` is a Hermes-independent Python state/catalog/filesystem core. `core/` is a Hermes-independent WebGL2 renderer, metrics and diagnostics core. Thin Python and Desktop adapters connect them through revision-checked commands, durable file requests/responses, events and polling. The backend is the source of truth; JavaScript does not reimplement command semant"
    },
    {
      "url": "https://raw.githubusercontent.com/1lpredest1nato/hermes-design-studio/e317ae8e8594a68e7a41ee45a888048d069a44f0/studio_core/catalog.py",
      "quote": "def approve_draft(self, id, expected_shader_sha=None, expected_manifest_sha=None) -> dict[str, Any]:\n        \"\"\"Human-only adapter route; never expose this method as an agent tool.\"\"\"\n        with self._lock():\n            entry = self._draft(id)\n            self._expect_snapshot(entry, expected_shader_sha, expected_manifest_sha)\n            check = entry.get('check')\n            if (not isinstance(check, dict) or check.get('shader_sha') != _sha("
    },
    {
      "url": "https://raw.githubusercontent.com/gtmcknight/hermes-summon/ccfc8c4163fa736785b4f0cd7322742f39c6d435/README.md",
      "quote": "Tag your bot under any post and ask it something. Your Hermes reads the thread, its photos and the posts it quotes, then answers in the thread with your model, your memory and the tools you allow. Say \"learn this\" under a how-to thread and your agent keeps it as a skill, once you approve it.\n\nOnly you can summon it. A stranger tagging your bot never reaches your agent or your X bill.\n\n## Try it in"
    },
    {
      "url": "https://raw.githubusercontent.com/gtmcknight/hermes-summon/ccfc8c4163fa736785b4f0cd7322742f39c6d435/adapter.py",
      "quote": "async def connect(self, *, is_reconnect: bool = False, http: Any = None, data_dir: Optional[Path] = None) -> bool:\n        if not self.own_keys and not self.relay:\n            return self._fail(\"x_config\", \"Connect a bot first: hermes gateway setup, then choose X (free trial, or your \"\n                                          \"own X keys)\", retryable=False)\n        if not self.owner:\n            return self._fail(\"x_config\", \"Set X_BOT_OWNER to "
    },
    {
      "url": "https://raw.githubusercontent.com/PedValme/foreman/c15453cb2fc07fa674d6f7b548a553b3ce9e6f5d/tests/test_sarif_gate.py",
      "quote": "self.assertIn(\"results.sarif\", text)\n        self.assertNotIn(\"No skipped, deleted\", text)\n        self.assertEqual(json.loads(commands.foreman_check_tool({\"path\": self.root}))[\"verdict\"], \"INCOMPLETE\")\n\n    def test_the_hook_asks_instead_of_passing(self):\n        self.setup_repo(sarif=\"results.sarif\")\n        self.write(\"app.py\", \"x = 2\\n\")\n        self.git(\"add\", \"-A\")\n        d = terminal(\"git "
    },
    {
      "url": "https://raw.githubusercontent.com/1lpredest1nato/hermes-design-studio/e317ae8e8594a68e7a41ee45a888048d069a44f0/tests/p1-ui.test.mjs",
      "quote": "const require=createRequire('/home/destino/.hermes/hermes-agent/apps/desktop/package.json');\nconst React=require('react');\nconst {transformSync}=require('esbuild');\nconst {JSDOM}=require('jsdom');\nconst {createRoot}=require('react-dom/client');\nconst {act}=React;\nconst root = new URL('../', import.meta.url);\n// Test-only in-memory JSX transform: no bundle or installed plugin is changed.\nasync func"
    },
    {
      "url": "https://raw.githubusercontent.com/gtmcknight/hermes-summon/ccfc8c4163fa736785b4f0cd7322742f39c6d435/tests/test_summon.py",
      "quote": "async def test_strangers_and_added_tags_are_ignored(self):\n        a = await self.adapter()\n        stranger = post(\"601\", \"@taybotfyi do my homework\", author=\"66\", mentions=[bot_mention(\"@taybotfyi do\", 0)])\n        added = post(\"602\", \"@taybotfyi @x nice\", typed_from=14, mentions=[bot_mention(\"@taybotfyi @x\", 0)])\n        self.fx.searches.append({\"data\": [stranger, added], \"meta\": {\"newest_id\": "
    },
    {
      "url": "https://raw.githubusercontent.com/helenn-szn/undo-send/10d388c951245ceeabc1101bb8ff65e75f4f6737/undo_send/classify.py",
      "quote": "_PUBLISH_PATTERNS = [\n    (re.compile(r\"\\bgit\\s+push\\b\"), \"git push\"),\n    (re.compile(r\"\\bgh\\s+(pr|issue|release)\\s+(create|merge|close|comment)\\b\"), \"GitHub change\"),\n    (re.compile(r\"\\bgh\\s+repo\\s+delete\\b\"), \"delete GitHub repo\"),\n    (re.compile(r\"\\bnpm\\s+publish\\b\"), \"npm publish\"),\n    (re.compile(r\"\\btwine\\s+upload\\b\"), \"PyPI upload\"),\n    (re.compile(r\"\\bcurl\\b.*\\s-X\\s*(POST|PUT|PATCH|DELETE)\\b\", re.I), \"HTTP write\"),\n    # Hermes' own way of messaging people: `herm"
    },
    {
      "url": "https://raw.githubusercontent.com/PedValme/foreman/c15453cb2fc07fa674d6f7b548a553b3ce9e6f5d/tests/test_gate.py",
      "quote": "def test_adversarial_inputs_stay_linear(self):\n        \"\"\"Every regex applied to whole commands, diffs, diff lines or messages, on 300 KB inputs built to make a\n        backtracking pattern quadratic. Each must finish well inside the hook's budget.\"\"\"\n        from foreman import review\n        n = 300_000\n        cases = {\n            \"command of >\": lambda: gate.parse_actions(\"git commit \" + \">\" * n, os.sep),\n            \"command of gh pr\": lamb"
    }
  ]
}
