{
  "sources": [
    {
      "url": "https://raw.githubusercontent.com/aydnOktay/hermes-done-bell-/3fa519a291d91b0e6c44bd42762190363ce80c39/README.md",
      "quote": "Copy 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.js\" -Force\n```\n\nRestart Hermes. Status bar chip: `busy` while working, `done` when idle.\n\n1. Send a chat, switch to another window"
    },
    {
      "url": "https://raw.githubusercontent.com/NousResearch/hermes-official-plugins/e7a218f26db88426ab3e7376f0e000b6e356f5e7/homeassistant/README.md",
      "quote": "## Security\n\n`ha_call_service` refuses service domains that allow arbitrary code execution on the Home Assistant\nhost or requests to your local network. Home Assistant has no service-level access control, so this\nblocklist is the only guard:\n\n- `shell_command`: arbitrary shell commands\n- `command_line`: sensors/switches that execute commands\n- `python_script`: scripted Python execution\n- `pyscript`: broader scripting integration"
    },
    {
      "url": "https://raw.githubusercontent.com/NousResearch/hermes-official-plugins/e7a218f26db88426ab3e7376f0e000b6e356f5e7/homeassistant/tools.py",
      "quote": "def _get_config():\n    \"\"\"Return the active profile's Home Assistant URL and token; raise ValueError on a URL without a scheme.\"\"\"\n    hass_url = (get_secret(\"HASS_URL\", \"http://homeassistant.local:8123\") or \"\").rstrip(\"/\")\n    if problem := url_scheme_problem(hass_url):\n        raise ValueError(problem)\n    return hass_url, (get_secret(\"HASS_TOKEN\", \"\") or \"\").strip()\n\n\ndef _get_entity_filter_config():"
    },
    {
      "url": "https://raw.githubusercontent.com/samundra0/visor/17a8ba5f24030e8a04f6676168f7f594f46db53c/hermes/plugin/__init__.py",
      "quote": "def _token() -> str:\n    \"\"\"The API token to send to the server. Priority: explicit VISOR_TOKEN\n    (secret scope / env) -> the server's generated per-install token file\n    (v1.9: servers now always carry one).\"\"\"\n    global _token_cache\n    t = _secret(\"VISOR_TOKEN\")\n    if t:\n        return t\n    if _token_cache is not None:\n        return _token_cache\n    # Candidates: the bare-start data dir, and the compose-mounted data dir"
    },
    {
      "url": "https://raw.githubusercontent.com/samundra0/visor/17a8ba5f24030e8a04f6676168f7f594f46db53c/README.md",
      "quote": "## Features\n\n| | |\n|---|---|\n| **Blocks** | `section`, `text` (markdown), `todo` (clickable checklist), `table`, `stat` (KPI cards), `chart` (bar/line/donut/hbar SVG with hover tooltips), `code`, `image`, `audio` (labeled rack + *play in sequence* — built for A/B comparisons), `video`, `html` (raw markup) |\n| **Boards** | named, switchable tabs; create/rename/delete; per-board camera position; block counts in tabs |"
    },
    {
      "url": "https://raw.githubusercontent.com/chaos-xxl/protocol-chaos/cb3f13a51b3d81e224eeadde68e1f55d6b2770d2/integrations/hermes/protocol-chaos/__init__.py",
      "quote": "        thread = threading.Thread(target=run, args=(self.capture, text, before, conversation), daemon=True,\n                                  name=\"protocol-chaos-capture\")\n        self.threads = [item for item in self.threads if item.is_alive()] + [thread]\n        thread.start()\n        return None\n\n    def decide(self, text: str, listed: str, before: str) -> Optional[dict]:"
    },
    {
      "url": "https://raw.githubusercontent.com/lpsmurf/hermes-homelab-watch/a9df6b412c39be91ecac2e2164a6ad34d80b1820/probes.py",
      "quote": "def probe_dns(t: Target) -> ProbeResult:\n    start = time.monotonic()\n    try:\n        addr = socket.gethostbyname(t.host)\n    except Exception as exc:\n        return ProbeResult(False, f\"does not resolve ({_reason(exc)})\")\n    return ProbeResult(True, f\"resolves to {addr}\", _elapsed(start))\n\n\ndef bitaxe_metrics(info: dict) -> dict[str, float]:\n    \"\"\"AxeOS /api/system/info → hashrate (GH/s), chip/VR temperature (°C), power (W), efficiency (J/TH).\"\"\""
    },
    {
      "url": "https://raw.githubusercontent.com/lpsmurf/hermes-homelab-watch/a9df6b412c39be91ecac2e2164a6ad34d80b1820/router.py",
      "quote": "def judge(text: str, *, jev_key: str = \"\", llm=None, price=None) -> Verdict:\n    \"\"\"The best judge available; each failure falls through to the next, ending at local rules.\"\"\"\n    if jev_key:\n        try:\n            return jev_judge(text, jev_key)\n        except Exception:\n            pass\n    if llm is not None:\n        try:\n            return hermes_judge(text, llm, price or (lambda *_: None))\n        except Exception:\n            pass\n    return rules_judge(text)\n\n"
    },
    {
      "url": "https://raw.githubusercontent.com/bystac/hermes-prompt-autocomplete/1421addcfc4bb738baf4eb35f3622a415201c6f6/dashboard/plugin_api.py",
      "quote": "    if direction == \"rtl\":\n        if not _HEBREW_RE.search(s) or _LATIN_RE.search(s):\n            return \"\"\n    return s\n\n\n@router.get(\"/corpus\")\ndef get_autocomplete_corpus() -> dict[str, Any]:\n    \"\"\"Return deduplicated user prompt sentences from SessionDB + warmup LLM pool.\"\"\"\n    _get_llm()\n    phrases: list[str] = []\n    seen: set[str] = set()\n    db = SessionDB()\n    try:\n        sessions = db.search_sessions(limit=25)\n        for sess in sessions:"
    },
    {
      "url": "https://raw.githubusercontent.com/bystac/hermes-prompt-autocomplete/1421addcfc4bb738baf4eb35f3622a415201c6f6/desktop/plugin.js",
      "quote": "function isComposerEditor(el) {\n  if (!el || el.isContentEditable !== true) return false\n  if (el.getAttribute?.('role') === 'textbox') return true\n  return el.dataset?.slot === 'composer-rich-input'\n}\n\nfunction isCaretAtEnd(editor) {\n  if (!editor) return false\n  const sel = window.getSelection()\n  if (!sel || !sel.rangeCount || !sel.isCollapsed) {\n    // No live selection in this document (some IME/focus models never expose"
    },
    {
      "url": "https://raw.githubusercontent.com/FutureInvoked/cash-desk/26d5fabe5f50f250e5dc72c0751adbdb3625f732/__init__.py",
      "quote": "def gate_tool_call(tool_name: str, args: dict[str, Any], task_id: str = \"\", session_id: str | None = None,\n                   **_kw: Any) -> dict[str, Any] | None:\n    \"\"\"pre_tool_call hook. Read-only tools pass; writes never run from a scheduled job; the send\n    tool is escalated to Hermes's human-approval gate with a rule key bound to the draft's hash.\n\n    Fails closed: when Hermes cannot say whether this is a scheduled run, nothing changes. Write tools"
    },
    {
      "url": "https://raw.githubusercontent.com/FutureInvoked/cash-desk/26d5fabe5f50f250e5dc72c0751adbdb3625f732/README.md",
      "quote": "**The model writes the words; the ledger owns the numbers.** The ledger is Cash Desk's own\nrecord of the invoices and payments in your CSVs. The AI may make a reminder warmer or firmer,\nbut Figure Lock refuses any change to an amount, invoice number, due date, IBAN or reference,\nand added wording from a list of known payee, deadline, fee and threat phrases (a list, not a\nguarantee: you still read the text before approving). Your approval is tied to the exact text: if a word"
    },
    {
      "url": "https://raw.githubusercontent.com/sahindemirbas/kokpit/21112512fcb8d5fa24efc1558e9b50195eb031a0/integrations/hermes/kokpit/night.py",
      "quote": "def check_model(v: Vault, raw, allowed_paths: set[str]) -> tuple[list[dict], int]:\n    \"\"\"Keep a model proposal only when its kind is allowed, its text is short, its path is a real vault\n    file that was offered, and its quote is found word for word in that file. Others are only counted.\"\"\"\n    kept, rejected = [], 0\n    items = raw.get(\"proposals\") if isinstance(raw, dict) else None\n    for x in items if isinstance(items, list) else []:\n        try:"
    },
    {
      "url": "https://raw.githubusercontent.com/sahindemirbas/kokpit/21112512fcb8d5fa24efc1558e9b50195eb031a0/integrations/hermes/kokpit/README.md",
      "quote": "## What needs the full Kokpit app\n\nThe vault features above work with the plugin alone. Calendar and weather,\njob listings, events, news and podcast briefings, AI usage and job health come\nfrom the [Kokpit app](../../../README.md) database; the plugin reads it\nread-only when you point `db_path` at it, and says so plainly when it is not\nthere.\n\n## Privacy\n\nNothing leaves your machine. The plugin makes no network calls and no model"
    },
    {
      "url": "https://raw.githubusercontent.com/mojomast/bundlebees/57a6f12cdcfa789c5aba5f22f3f46efd2b8b3d5c/bundlebees_plugin/client.py",
      "quote": "def token_from_agent(\n    agent: Any, name: str = TOKEN_SECRET_NAME\n) -> str | None:\n    \"\"\"Read a secret only through ``agent.secret_scope.get_secret``.\"\"\"\n    scope = getattr(agent, \"secret_scope\", None)\n    if scope is None:\n        return None\n    getter = getattr(scope, \"get_secret\", None)\n    if not callable(getter):\n        return None\n    try:\n        return getter(name)\n    except Exception:  # fail closed; never fall back to env/files\n        return None\n\n"
    },
    {
      "url": "https://raw.githubusercontent.com/mojomast/bundlebees/57a6f12cdcfa789c5aba5f22f3f46efd2b8b3d5c/README.md",
      "quote": "## How it works\n\n```mermaid\nflowchart TD\n  A[Hermes agent] -->|four bundlebees tools| B[bundlebees plugin]\n  B -->|preconfigured adapter| C[Worker launcher]\n  C --> D[Cua sandboxes]\n  D --> E[Attempt result and patch]\n  E -->|user-run CLI| F[\"hermes bundlebees verify\"]\n  F -->|lease, tests, secret scan| G[Feature branch push]\n  G --> H[Open a pull request]\n  B -.->|optional card id| K[Hermes kanban]\n```\n\n1. The agent checks health, capacity, and authorized projects."
    },
    {
      "url": "https://raw.githubusercontent.com/screenrig/plugin/37de9fcb22bd1e7e13f881643ac2328b325cb75b/plugins/screenrig-agents/cli/dist/chunk-D2RLMLYO.js",
      "quote": "async function readConfigFile(configPath, fsLike, options = {}) {\n  return withConfigLog(fsLike, \"config.read\", configPath, async () => {\n    let info;\n    try {\n      info = await fsLike.stat(configPath);\n    } catch (err) {\n      const code = err.code;\n      if (code === \"ENOENT\") {\n        return void 0;\n      }\n      throw err;\n    }\n    if (isWorldOrGroupReadable(modeOf(info))) {\n      if (!options.repair) {"
    },
    {
      "url": "https://raw.githubusercontent.com/dalroot/hermes-droid/cf19137ac7a2525fa2dbd48429f29bf831c1e2f6/plugin/handlers.py",
      "quote": "    # 1. Try companion app screenshot\n    res = bridge.send_request(\"api/v1/device/screenshot\")\n    if res.get(\"success\") and res.get(\"image_base64\"):\n        import base64\n        with open(dest, \"wb\") as f:\n            f.write(base64.b64decode(res[\"image_base64\"]))\n        return json.dumps({\"status\": \"saved\", \"path\": dest})\n\n    # 2. Try ADB exec-out screencap\n    if bridge.adb_bin:\n        try:\n            with open(dest, \"wb\") as f:"
    },
    {
      "url": "https://raw.githubusercontent.com/dalroot/hermes-droid/cf19137ac7a2525fa2dbd48429f29bf831c1e2f6/android/app/src/main/java/com/hermesdroid/service/MqttRelayClient.kt",
      "quote": "                        response.put(\"screenshot_b64\", Base64.encodeToString(bytes, Base64.NO_WRAP))\n                        response.put(\"bytes_length\", bytes.size)\n                    } else {\n                        // Fallback: execute screencap command via shell\n                        val tmpSc = File(context.cacheDir, \"screen_${System.currentTimeMillis()}.png\")\n                        val shRes = terminalModule.executeShell(\"screencap -p ${tmpSc.absolutePath}\")"
    },
    {
      "url": "https://raw.githubusercontent.com/saasagelabs/twring/5a7083e3c9d1cd656f1fd85da771d6eee3d2267a/integrations/hermes/adapter.py",
      "quote": "    async def _send_exec_approval_prompt(self, prompt: ExecApprovalPrompt) -> SendResult:\n        turn = self._turn_for()\n        if turn is None or turn.finished or _turn_key(turn.channel, turn.turn_id) in self._orphan_text:\n            return SendResult(success=False, error=\"No Twring call or chat is open for this approval\")\n        if turn.surface == \"text\":\n            # The Twring app shows approval prompts on calls; in a typed chat Hermes's own text"
    }
  ]
}