{
  "sources": [
    {
      "url": "https://raw.githubusercontent.com/aydnOktay/hermes-done-bell-/3fa519a291d91b0e6c44bd42762190363ce80c39/README.md",
      "quote": "## Install (dev)\n\n```powershell\nhermes plugins install C:\\Users\\aydin\\Desktop\\nous-puling\\plugins\\done-bell\nhermes plugins enable done-bell\n```\n\nCopy the pane (Hermes 0.21 installer may skip it):\n\n```powershell\nNew-Item -ItemType Directory -Force -Path \"$env:LOCALAPPDATA\\hermes\\desktop-plugins\\done-bell\" | Out-Null\nCopy-Item \"$env:LOCALAPPDATA\\hermes\\plugins\\done-bell\\desktop\\plugin.js\" \"$env:LOCALAPPDATA\\hermes\\desktop-plugins\\done-bell\\plugin.j"
    },
    {
      "url": "https://raw.githubusercontent.com/NousResearch/hermes-official-plugins/e7a218f26db88426ab3e7376f0e000b6e356f5e7/homeassistant/README.md",
      "quote": "Official [Hermes Agent](https://github.com/NousResearch/hermes-agent) plugin for\n[Home Assistant](https://www.home-assistant.io/). It provides two things:\n\n1. **Gateway platform `homeassistant`**: subscribes to Home Assistant's WebSocket event bus and\n   forwards `state_changed` events to the agent, with domain/entity filters and per-entity cooldowns.\n   The agent's replies show up as Home Assistant persistent notifications titled \"Hermes Agent\"."
    },
    {
      "url": "https://raw.githubusercontent.com/muhammadsalihu/tupliq-launchpad/3870f4e2769008cded30338cc42b8779438624a4/tools.py",
      "quote": "def _resolve_project_id():\n    \"\"\"Return the configured project id, or auto-discover the first project.\"\"\"\n    if _cfg.get(\"project_id\"):\n        return _cfg[\"project_id\"], None\n    status, body = _rc_get(\"/projects\")\n    if status != 200:\n        return None, body\n    projects = body.get(\"projects\") or []\n    if not projects:\n        return None, {\"error\": \"No RevenueCat projects visible to this API key.\"}\n    return projects[0].get(\"id\"), None"
    },
    {
      "url": "https://raw.githubusercontent.com/bonesnasty/hermes-theta-edge-node/2f1e976752a49f69340056c1bcd216b8dde54a08/theta_core/installer.py",
      "quote": "def verify_installer(path: Path) -> tuple[bool, dict[str, Any], str]:\n    info = authenticode(path)\n    if info.get(\"status\") != \"Valid\":\n        return False, info, f\"signature status: {info.get('status') or 'unknown'}\"\n    subject = str(info.get(\"subject\") or \"\")\n    if \"theta\" not in subject.lower():\n        return False, info, f\"signer does not look like Theta Labs: {subject or 'unknown signer'}\"\n    return True, info, \"\"\n\n\ndef download_and_i"
    },
    {
      "url": "https://raw.githubusercontent.com/bonesnasty/hermes-theta-edge-node/2f1e976752a49f69340056c1bcd216b8dde54a08/dashboard/plugin_api.py",
      "quote": "@router.post(\"/wallet/export\")\nasync def export_wallet(request: Request) -> Any:\n    if not _client_is_local(request):\n        return _error(\"private-key export is available only from a local desktop connection\", 403)\n    now = time.time()\n    with _EXPORT_LOCK:\n        if _EXPORT_FAILURES[\"until\"] > now:\n            return _error(\"too many failed attempts; wait a minute\", 429)\n    body = await request.json()\n    password = str(body.get(\"password"
    },
    {
      "url": "https://raw.githubusercontent.com/timioni001/morph-hermes/1a3a8bce10d5d5b14bd3ae3cddc908199fe2f90c/README.md",
      "quote": "## What can be changed\n\nMORPH only offers an operation when it can check the result afterwards.\n\n| Connection | Operations |\n|---|---|\n| **GitHub issues** | close, close as not planned, reopen, set labels, set title, assign to me, unassign |\n| **OpenAPI** | derived from the schema: one per enum value, a set/clear pair per boolean, one per other writable field |\n\nPosting a comment is deliberately missing: its effect is an addition, so there is nothing\nexact to verify. Labels are set as"
    },
    {
      "url": "https://raw.githubusercontent.com/DrFreeman001/shared-memory-domains/8502b8c909100f673a74b50c3519014088efa4f4/README.md",
      "quote": "What it is **not**:\n- **Not an OS sandbox.** The plugin runs inside the Hermes process. Anything running as the same\n  OS user can open the SQLite file directly.\n- **An agent that has `terminal` or code-execution tools can do anything you can do on this\n  machine, including administering this plugin** (for example by editing the database, or by starting\n  another Hermes process on an admin surface). The admin-surface rule protects you from *people who\n  message your bot*, not from *the"
    },
    {
      "url": "https://raw.githubusercontent.com/flabanabba8/creator-studio/5267dc72bc2a9267e4a93ea208e5e90385694f74/README.md",
      "quote": "## What the suite does\n\nCreator Studio bundles four plugins that research, script, narrate, caption or record media. They keep their own tool names, rules and skills; installing one entry gives you all of them.\n\n| Part | What it is for | Skill | Tools |\n|---|---|---|---|\n| **YouTube Studio** | Research a topic, draw charts, tables, flowcharts and slides, and assemble a narrated, captioned lesson video from sources and pictures you select. Makes the file; does not upload it. | `create-y"
    },
    {
      "url": "https://raw.githubusercontent.com/flabanabba8/creator-studio/5267dc72bc2a9267e4a93ea208e5e90385694f74/VERIFICATION.md",
      "quote": "NOT checked: a real `hermes auth add creator-studio:google` sign-in and a real signed speech request. The earlier live\nGemini runs recorded in the parts' own files used the old login route. Treat the signed-in route as untested against\nGoogle until someone has run the four setup steps in the README."
    },
    {
      "url": "https://raw.githubusercontent.com/valenciayuna/hermes-plugin-blastradius/5cba6578af0e80c5eec29bda423fb11870d653be/README.md",
      "quote": "### 4. Restore with conflict detection\n\n```\n/blast restore last            # plan only\n/blast restore last confirm    # apply, then verify\n```\n\nRefuses to restore from a snapshot that fails its own verification.\n\nA file that changed after the snapshot is a **conflict**, and conflicts are skipped, not written\nover: the newer file is usually the work you were doing. The plan and the result both report the\ncount and the first ten paths. Replacing th"
    },
    {
      "url": "https://raw.githubusercontent.com/valenciayuna/hermes-plugin-blastradius/5cba6578af0e80c5eec29bda423fb11870d653be/blastradius_core/hooks.py",
      "quote": "if pol.get_policy() == \"strict\":\n        analysis = measure(command)\n        if not analysis.get(\"measured\") or analysis[\"files\"] == 0:\n            return (\"[blastradius] strict policy: cannot measure this command, so no grant was \"\n                    \"issued. Narrow the target first.\")\n        created = snap.create_snapshot(analysis, command)\n        if not created.get(\"ok\") or not created.get(\"verified\"):\n            return (f\"[blastradius] strict policy: snapshot failed \""
    },
    {
      "url": "https://raw.githubusercontent.com/valenciayuna/hermes-plugin-blastradius/5cba6578af0e80c5eec29bda423fb11870d653be/blastradius_core/recovery.py",
      "quote": "def grant_allow(command: str, ttl_s: int = ALLOW_TTL_S) -> dict:\n    entries = [e for e in _load_allow() if e.get(\"command\") != command]\n    entries.append({\"command\": command, \"expires\": time.time() + ttl_s, \"ttl_s\": ttl_s})\n    _write_allow(entries)\n    return {\"command\": command, \"ttl_s\": ttl_s, \"pending\": len(entries)}\n\n\ndef consume_allow(command: str) -> bool:\n    entries = _load_allow()\n    for i, entry in enumerate(entries):\n        if entry.get(\"command\") == command:"
    },
    {
      "url": "https://raw.githubusercontent.com/rahlquist/goneby/c7cc997ee7fde0629daf0ddf79cd65093b6e98b6/README.md",
      "quote": "## How It Works\n\n1. **Capture (WAL):** Every turn is appended to an encrypted per-project\n   Write-Ahead Log at `pre_llm_call` boundaries — before the host compacts\n   the transcript, so nothing is lost to the rewrite. No filtering, no LLM\n   calls — just append.\n2. **Filter (Backward Walk):** At project close, walk backward through the WAL using the shipped product as the oracle to determine which entries were actually relevant.\n3. **Store (Embed + Vector DB):** Embed the surviving en"
    },
    {
      "url": "https://raw.githubusercontent.com/rahlquist/goneby/c7cc997ee7fde0629daf0ddf79cd65093b6e98b6/plugin/adapter.py",
      "quote": "flags = self._judge(mvp_text, entries)\n            from goneby.walk.backward import BackwardWalker\n\n            async def judge(_mvp, batch):\n                return flags\n\n            result = self._run_async(BackwardWalker(judge).walk(mvp_text, entries))\n\n            return json.dumps(\n                {\n                    \"status\": \"ok\",\n                    \"project\": project,\n                    \"kept_count\": result.kept_count,\n                    \"discarded_count\": result.discarded"
    },
    {
      "url": "https://raw.githubusercontent.com/rahlquist/goneby/c7cc997ee7fde0629daf0ddf79cd65093b6e98b6/src/goneby/walk/backward.py",
      "quote": "# Walk backward: reverse the entries\n        reversed_entries = list(reversed(entries))\n\n        # Ask the judge which entries are relevant\n        relevance_flags = await self._judge_fn(mvp_text, reversed_entries)\n\n        # Keep entries marked as relevant (in original order)\n        kept = []\n        discarded = 0\n        seen_contents: set[str] = set()\n        dedup_count = 0\n\n        for entry, is_relevant in zip(reversed_entries, relevance_flags):\n            if not is_relevant:"
    },
    {
      "url": "https://raw.githubusercontent.com/bigmantech001/Faultline/d0c2b43c2b6aa7c4fed4295a47bf9c8ad87f0616/README.md",
      "quote": "## Disclosures\n\nWhat you should know before installing:\n\n- **Network.** The proxy listens on `127.0.0.1` only. It forwards to the `target_url` you or the agent provide. That is normally a local service, but it can be any `http(s)` host, and traffic then leaves your machine as it would without the proxy. A target URL may not carry a query string, fragment or credentials, and link-local, cloud-metadata (`169.254.169.254`, `metadata.google.internal`, …) and reserved addresses are refused"
    },
    {
      "url": "https://raw.githubusercontent.com/bigmantech001/Faultline/d0c2b43c2b6aa7c4fed4295a47bf9c8ad87f0616/proxy_engine.py",
      "quote": "headers_to_send: Dict[str, str] = {}\n    for k, v in (orig.get(\"request_headers\") or {}).items():\n        if k.lower() not in _HOP_BY_HOP_HEADERS and v != \"[REDACTED]\":\n            headers_to_send[k] = str(v)\n    if override_headers:\n        for k, v in override_headers.items():\n            headers_to_send[str(k)] = str(v)\n\n    body_str = override_body if override_body is not None else (orig.get(\"request_body\") or \"\")\n    body_bytes = body_str.encode(\"utf-8\") if body_str else None"
    },
    {
      "url": "https://raw.githubusercontent.com/tuancookiez-hub/hermes-plant/f387648461b12488a48d703e918d283cafe7402a/README.md",
      "quote": "## Development\n\n`desktop/plugin.js` is generated from `desktop-src/`. The garden's rules exist twice, in `desktop-src/src/engine.js` for Desktop and `plantcore/engine.py` for the agent tools, and `desktop-src/test/parity.json` keeps the two in step. Shapes and drawing are Desktop only, in `shape.js` and `art.js`.\n\n```bash\nnpm ci --prefix desktop-src\n```\n\n```bash\nnpm test --prefix desktop-src\n```\n\n```bash\nnpm run build --prefix desktop-src\n```\n\n```bash\npython -m pytest\n```\n\nAfter changi"
    },
    {
      "url": "https://raw.githubusercontent.com/r0b0tlab/hermes-r0b0t-vibeCAD/6dfa363dd26dc53518f363592c7a012ad959bf6e/README.md",
      "quote": "This binds only the top-level script bytes, not imported modules, data files, interpreter, working directory or subsequent filesystem changes. Approved Python is **not sandboxed**: it can read or write outside the workspace, access credentials on disk, and use the network. The plugin does not itself initiate network calls, telemetry or printer connections; model code can. The subprocess environment is minimized, not a security boundary. Direct Python calls to `runtime.execute_and_expor"
    },
    {
      "url": "https://raw.githubusercontent.com/NousResearch/hermes-agent/main/plugin-catalog/README.md",
      "quote": "11. **Credentials come through Hermes, never from files.** A plugin gets\n   secrets only through Hermes's routes. Its declared `requires_env` and\n   `config_schema` secrets are read with `agent.secret_scope.get_secret(NAME)`,\n   which honours the active profile (a bare `os.environ` read can pick up another\n   profile's key under multiplexing). A subscription sign-in (Codex / ChatGPT\n   today) is used only through `credentialed_provider_request` with\n   `requires_auth`, so Hermes attach"
    }
  ]
}