{
  "sources": [
    {
      "url": "https://raw.githubusercontent.com/aydnOktay/hermes-done-bell-/3fa519a291d91b0e6c44bd42762190363ce80c39/README.md",
      "quote": "Hermes plugin: **ring when a turn finishes** so you can leave the window.\n"
    },
    {
      "url": "https://raw.githubusercontent.com/aydnOktay/hermes-done-bell-/3fa519a291d91b0e6c44bd42762190363ce80c39/__init__.py",
      "quote": "    ctx.register_hook(\"on_session_end\", bell_hooks.on_session_end)\n    ctx.register_hook(\"pre_approval_request\", bell_hooks.on_pre_approval_request)\n    ctx.register_hook(\"post_approval_response\", bell_hooks.on_post_approval_response)\n    ctx.register_hook(\"agent_loop_stopped\", bell_hooks.on_agent_loop_stopped)"
    },
    {
      "url": "https://raw.githubusercontent.com/NousResearch/hermes-official-plugins/e7a218f26db88426ab3e7376f0e000b6e356f5e7/homeassistant/README.md",
      "quote": "1. **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\".\n   Cron jobs can deliver to `deliver=homeassistant[:target]` through the target's own notify service"
    },
    {
      "url": "https://raw.githubusercontent.com/NousResearch/hermes-official-plugins/e7a218f26db88426ab3e7376f0e000b6e356f5e7/homeassistant/__init__.py",
      "quote": "    ctx.register_platform(**_platform_kwargs())\n    register_tools(ctx)"
    },
    {
      "url": "https://raw.githubusercontent.com/Prasad-PingFederate/hermes-time-machine/9e02342fd088075395e6252699460e73b44b425a/ledger.py",
      "quote": "            subprocess.run([\"git\", \"add\", \"-A\"], cwd=abs_dir, env=env, capture_output=True, timeout=10)\n            tree_res = subprocess.run([\"git\", \"write-tree\"], cwd=abs_dir, env=env, capture_output=True, text=True, timeout=5)\n            if tree_res.returncode == 0 and tree_res.stdout.strip():\n                tree_sha = tree_res.stdout.strip()\n                parent_sha = self._read_snapshot_ref_tip(abs_dir)"
    },
    {
      "url": "https://raw.githubusercontent.com/Prasad-PingFederate/hermes-time-machine/9e02342fd088075395e6252699460e73b44b425a/dashboard/plugin_api.py",
      "quote": "class RestoreRequest(BaseModel):\n    file_path: Optional[str] = None\n    file_paths: Optional[List[str]] = None\n    dry_run: bool = False\n    user_approved: bool = True"
    },
    {
      "url": "https://raw.githubusercontent.com/yogeshchoudhary555/hermes-data-wrangler/c583af21ae5553a04cb7e2fa6600369e3c464f4c/tools.py",
      "quote": "        conn.set_authorizer(_authorizer)\n        start = time.monotonic()\n        conn.set_progress_handler(\n            lambda: 1 if time.monotonic() - start > QUERY_TIME_LIMIT_S else 0, 10_000\n        )\n        try:"
    },
    {
      "url": "https://raw.githubusercontent.com/SilentKnight87/hermes-doom/5f9faadd1ba346c52d79bfd9c07c7f3c1908ff38/README.md",
      "quote": "The plugin adds a **Doom** tab. The first time you open it, one click downloads\n[Freedoom](https://freedoom.github.io/), the free game data, and the game starts. If you own Doom,\nopen your own `DOOM.WAD` instead."
    },
    {
      "url": "https://raw.githubusercontent.com/SilentKnight87/hermes-doom/5f9faadd1ba346c52d79bfd9c07c7f3c1908ff38/dashboard/plugin_api.py",
      "quote": "def extract_freedoom(archive: bytes) -> bytes:\n    if hashlib.sha256(archive).hexdigest() != FREEDOOM_ZIP_SHA256:\n        raise ValueError(\"Freedoom download does not match the pinned checksum\")\n    with zipfile.ZipFile(io.BytesIO(archive)) as bundle:\n        wad = bundle.read(FREEDOOM_MEMBER)\n    if hashlib.sha256(wad).hexdigest() != FREEDOOM_WAD_SHA256:"
    },
    {
      "url": "https://raw.githubusercontent.com/221h0lmes/scopeledger-hermes/1379ee77d77c623b056b0acb83937ecf9e6b9a3e/README.md",
      "quote": "Service teams can finish work, receive approval for extra requests, and still miss an invoice line. They can also invoice work that was never approved or delivered. ScopeLedger compares the scope, delivery, approval, and invoice records you provide, then prepares a review packet showing what needs attention before billing closes.\n\n**ScopeLedger recommends review, not collection.** It does not issue invoices, collect payment, message clients, or establish legal entitlement to payment.\n"
    },
    {
      "url": "https://raw.githubusercontent.com/221h0lmes/scopeledger-hermes/1379ee77d77c623b056b0acb83937ecf9e6b9a3e/tools.py",
      "quote": "def _audit(slug):\n    if not isinstance(slug, str):\n        raise auditor.InvalidProject(\"Project must be a string\")\n    # This gate is enforced by native audit AND draft tools, not merely by prompts.\n    if slug == \"demo\":\n        return auditor.analyze(_directory(slug))\n    from . import intake_gate\n    required = intake_gate.intake_is_required(slug)\n    approved_identity = None\n    if required:\n        status = intake_gate.gate(slug)\n        if not status['passed']:"
    },
    {
      "url": "https://raw.githubusercontent.com/grimmjoww/hermes-rails/25d1e018ced05968af17a348d35ef7a7272e31b1/__init__.py",
      "quote": "MODE = \"shadow\"          # \"shadow\" = decide and show, never block. \"block\" = stop side quests (not yet)."
    },
    {
      "url": "https://raw.githubusercontent.com/yuzuru99/hermes-clearance/40adfd6db365d1279733ca541e8c25383302d74e/runtime.py",
      "quote": "            decision = self.policy().decide(ident, str(tool_name))\n            if decision.allowed:\n                return None\n            keys = sorted(args)[:_ARG_KEYS_MAX] if isinstance(args, dict) else []\n            self._audit(\"tool_denied\", ident, decision.tier, tool=tool_name, arg_keys=keys, rule=decision.rule)\n            return {\n                \"action\": \"block\","
    },
    {
      "url": "https://raw.githubusercontent.com/Bruno-coder21/fluent/182c4301f2437e784e9022f1f38576e1d68c3f5f/README.md",
      "quote": "Hermes already checks the code it writes. **fluent checks the shell commands it runs**,\nagainst the real `--help` and `man` pages of the program installed on *your* machine,\nbefore they run."
    },
    {
      "url": "https://raw.githubusercontent.com/Bruno-coder21/fluent/182c4301f2437e784e9022f1f38576e1d68c3f5f/glue/guard.py",
      "quote": "        local = (env_type or self._backend()) == \"local\"\n        findings: list[tuple[Finding, Card]] = []\n        ask: tuple[Check, Card, str] | None = None\n        used: list[str] = []\n        for inv in split_command(command):"
    },
    {
      "url": "https://raw.githubusercontent.com/mojomast/hermes-plugin-dev/796a35e4d893b985f1b61d8e11b5ae7e4118bf6f/__init__.py",
      "quote": "def _check(args: dict | None = None, **_kw) -> str:\n    \"\"\"Model-facing lint. Ignores any execute/tokens flag the model invents.\"\"\"\n    a = args or {}\n    return json.dumps(_core().check(str(a.get(\"path\") or \"\"), str(a.get(\"catalog_entry\") or \"\"), execute=False))\n"
    },
    {
      "url": "https://raw.githubusercontent.com/sawi57003-ops/evm-token-inspector/df5d0720127991cad9978037ff39d570ae56c96b/__init__.py",
      "quote": "    name_raw = _try_call(rpc_urls, address, \"0x\" + _SEL_NAME)\n    out[\"name\"] = _decode_string(name_raw) if name_raw else None\n    symbol_raw = _try_call(rpc_urls, address, \"0x\" + _SEL_SYMBOL)\n    out[\"symbol\"] = _decode_string(symbol_raw) if symbol_raw else None\n    dec_raw = _try_call(rpc_urls, address, \"0x\" + _SEL_DECIMALS)\n    out[\"decimals\"] = _decode_uint(dec_raw) if dec_raw else None\n    supply_raw = _try_call(rpc_urls, address, \"0x\" + _SEL_TOTAL_SUPPLY)"
    },
    {
      "url": "https://raw.githubusercontent.com/DataGuy-Eterniti/OmniHermes/fbeeabfad0710caeab115d7fe4243208ab1218e2/core/away.py",
      "quote": "    def is_away(self) -> bool:\n        \"\"\"Check if the owner is confirmed away from the desk.\n        \n        Per security policy: away-detection may only revoke an unlock if it actually\n        ran a camera check and saw no face for the configured time. It must NEVER\n        revoke based on 'no data' (elapsed time without camera verification).\n        \"\"\"\n        self._load_state()\n        return bool(self._camera_confirmed_away)"
    },
    {
      "url": "https://raw.githubusercontent.com/DataGuy-Eterniti/OmniHermes/fbeeabfad0710caeab115d7fe4243208ab1218e2/core/policy.py",
      "quote": "        parts = [p.strip(\"\\\"'\") for p in seg.split() if p.strip(\"\\\"'\")]\n        while parts and \"=\" in parts[0] and not parts[0].startswith(\"-\"):\n            parts.pop(0)\n\n        if not parts:\n            return False\n\n        # Extract base executable name\n        base_cmd = parts[0].replace(\"\\\\\", \"/\").split(\"/\")[-1].lower()\n        if base_cmd.endswith(\".exe\"):\n            base_cmd = base_cmd[:-4]\n\n        # Check against allowed commands\n        if base_cmd not in READONLY_TERMINAL_COMMANDS:"
    },
    {
      "url": "https://raw.githubusercontent.com/DataGuy-Eterniti/OmniHermes/fbeeabfad0710caeab115d7fe4243208ab1218e2/omnihermes/crypto.py",
      "quote": "    key_file = base_dir / \".secret_key\"\n    if key_file.exists():\n        key_data = key_file.read_bytes()\n        if len(key_data) == 32:"
    }
  ]
}
