{
  "sources": [
    {
      "url": "https://raw.githubusercontent.com/aydnOktay/hermes-done-bell-/3fa519a291d91b0e6c44bd42762190363ce80c39/README.md",
      "quote": "hermes 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.js\" -Force\n```\n\nRestart Hermes. S"
    },
    {
      "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/jaxsonsprinkles/standing-orders/1959097a915e53624262c235e9eb102babece01f/README.md",
      "quote": "**Live test result:** 1 firing, 9 of 20 budgeted vision calls used. One take; every decision in it went through the\nmodel rather than the local checks.\n\n## How it works\n\n1. You describe an order in chat: \"if I leave my mug on the desk for 10 seconds after I walk away, tell me\".\n   `so_create_order` compiles it, with one reference frame, into a constrained JSON watch program (never code) and\n   returns a plain-language plan. The order is saved una"
    },
    {
      "url": "https://raw.githubusercontent.com/eightyFJ/session-cassettes/2f52d486367ea2a7a6ab5f4c67a59bd3902baa0d/README.md",
      "quote": "**An unclaimed run is live.** If no session claims the run, the request runs as an ordinary session with real tools. That can happen if another session sends the identical first message at the same moment, if the plugin is disabled between the ping and the request, or if Hermes's `pre_llm_call` hook times out. Hermes then denies flagged commands, because `chat -Q` has nobody to ask. But any tool Hermes doesn't flag still runs. In testing, a delib"
    },
    {
      "url": "https://raw.githubusercontent.com/33hodl/hermes-watchdog/4a565dd3003f1af51f4928b0a81934a90b4259f0/README.md",
      "quote": "## Verification is the point\n\nA repair only counts as `repaired` when Hermes's own record agrees:\n\n1. the incident left `detected`/`alerted` (core resolves it when the job recovers), or\n2. the job's latest execution finished successfully after the attempt started.\n\nSteps that ran but did not clear the failure are recorded as `failed` — never as\nsuccess. Every attempt lands in the plugin's ledger\n(`plugin-data/hermes-watchdog/data.db`) with its pl"
    },
    {
      "url": "https://raw.githubusercontent.com/codepilots/hermes-plugin-passkey-gate/1042d6c379efc1c6aff41d1a43c48d512b73bc4c/README.md",
      "quote": "## Security model\n\n**What it is:** a tamper-evident ceremony for human approval. You read the\nexact action, and the exact call if one is bound. You sign it with a passkey\nthe agent can't use. The signature is verified locally against a key you\npinned, and the record proves what you approved.\n\n**What it isn't:** a fence against an agent that controls the machine the\ngate runs on. An agent that can edit the plugin, its config, the gate's\ndatabase o"
    },
    {
      "url": "https://raw.githubusercontent.com/saatvik333/hermes-skill-court/de53842858cf41a1437eda30ff553d21cbf578f2/skill-court/README.md",
      "quote": "**Does the skill your agent wrote actually help?** Skill Court runs the same tasks twice, once with\nthe skill and once without it, each run in its own Docker sandbox, and compares the results. Skills\nthat make results worse for a model are hidden from that model; hiding never edits their files, and\none command brings them back. An appeal goes one step further: it drafts a fix for the line that\nmisled the model, proves the fix on the same tasks, a"
    },
    {
      "url": "https://raw.githubusercontent.com/hsyvy/dreaming-memory/72387f60c47ea741e32cae265aa1d24c02bd1c48/dreaming/README.md",
      "quote": "Dreaming is a memory provider plugin for [Hermes Agent](https://hermes-agent.nousresearch.com/)\nbuilt on the architecture in Anthropic's\n[The components of agent memory](https://www.anthropic.com/research/components-of-agent-memory):\n**capture in the moment, consolidate offline.** While you work it records every session and lets\nthe agent write quick notes. Between sessions a **dream pass** rereads the sessions in order,\nchecks the notes against"
    },
    {
      "url": "https://raw.githubusercontent.com/PietrangeloManco/hermes-colab/f05cf934fff3b446f2e00cc32e19432e9e41e87b/README.md",
      "quote": "- **Resume on a fresh runtime.** If Colab reclaims the VM (idle timeout, preemption,\n  usage limits), the supervisor assigns a new runtime, re-uploads the code, restores\n  the synced outputs and restarts the job with `HERMES_COLAB_RESUME=1`. A training\n  script that loads its last checkpoint from `$HERMES_COLAB_OUTPUT_DIR` continues where\n  it stopped (see [`examples/lora_t4`](examples/lora_t4/train.py)).\n- **Progress.** Print `HERMES_PROGRESS {\""
    },
    {
      "url": "https://raw.githubusercontent.com/vcruz305/hermes-roam/8b9fba41fea77f2fe2d6d572cffd43039d2da11f/README.md",
      "quote": "- **Never a silent overwrite.** The remote head is signed and compare-and-swap protected; a device that is behind cannot push — it gets exit 2 and `pull first`.\n- **Nothing writes without you.** `hermes roam pull` only prints the plan; `--apply` installs through a journal that backs up every replaced file first and rolls back on failure; the model can never apply or restore without consent (`allow_agent_apply`, default false), and remote-derived"
    },
    {
      "url": "https://raw.githubusercontent.com/yuzuru99/hermes-mcp-pin/f06e0d206af4e259e31c5d5e74692d5f6aebad68/README.md",
      "quote": "## Limits\n\n- It compares definitions, not behaviour: a server that changes what a tool *does* without changing its\n  description or schema is out of reach, and so are annotations (`readOnlyHint` and friends) that\n  Hermes does not hand to the model.\n- A change is noticed when Hermes picks up the new definition (reconnect, `tools/list_changed`, cache\n  expiry). Until then the model is still shown the old one, so nothing unreviewed reaches it.\n- Tr"
    },
    {
      "url": "https://raw.githubusercontent.com/ayinmodeolarewaju-bot/hermes-flowlight/8d6aacb1babc9136316f7b1777d436027771676b/README.md",
      "quote": "Flowlight watches public wallets and draws the money moving through them. Hermes can say what the largest inflow was. A desktop pane, a dashboard tab, and a loopback page all draw the same picture: glowing arcs between addresses, colored by token, thick when the amount is large, with particles running in the direction of the transfer.\n\nIt is read-only. It does not sign, it does not send, and it does not ask for a seed phrase or a private key.\n\n!["
    },
    {
      "url": "https://raw.githubusercontent.com/aydnOktay/hermes-done-bell-/3fa519a291d91b0e6c44bd42762190363ce80c39/tests/test_bell.py",
      "quote": "os.environ[\"DONE_BELL_NO_OS\"] = \"1\"\n\nimport bell_hooks\nimport bell_store\nimport bell_tools\n\n\ndef test_defaults() -> None:\n    snap = bell_store.snapshot()\n    assert snap[\"ok\"] is True\n    assert snap[\"needs_you\"] is False\n    assert snap[\"settings\"][\"muted\"] is False\n    assert snap[\"settings\"][\"sound\"] is True\n    assert snap[\"events\"] == []\n\n\ndef test_record_done() -> None:\n    event = bell_store.record_event(\"done\", session_id=\"s1\", platform="
    },
    {
      "url": "https://raw.githubusercontent.com/NousResearch/hermes-official-plugins/e7a218f26db88426ab3e7376f0e000b6e356f5e7/homeassistant/tests/test_service_policy.py",
      "quote": "def test_custom_script_identity_is_checked_with_explicit_targets(monkeypatch, policy, targets):\n    if policy == \"allow\":\n        set_policy(monkeypatch, allow=[\"sensor.allowed\"])\n    else:\n        set_policy(monkeypatch, deny=[\"script.denied\"])\n    dispatch = AsyncMock(return_value={\"success\": True})\n    monkeypatch.setattr(ha_tool, \"_async_call_service\", dispatch)\n\n    result = json.loads(ha_tool._handle_call_service({\n        \"domain\": \"script"
    },
    {
      "url": "https://raw.githubusercontent.com/33hodl/hermes-watchdog/4a565dd3003f1af51f4928b0a81934a90b4259f0/__init__.py",
      "quote": "    if action == \"save\":\n        raw = args.get(\"playbook\")\n        if not isinstance(raw, dict):\n            return _json({\"success\": False, \"error\": \"playbook must be a JSON object\"})\n        pid = str(raw.get(\"id\") or \"\").strip()\n        if not pid or \"/\" in pid or \"..\" in pid:\n            return _json({\"success\": False, \"error\": \"playbook needs a simple 'id'\"})\n        folder = data_dir / \"playbooks\"\n        folder.mkdir(parents=True, exist_o"
    },
    {
      "url": "https://raw.githubusercontent.com/33hodl/hermes-watchdog/4a565dd3003f1af51f4928b0a81934a90b4259f0/hermes_watchdog/repair.py",
      "quote": "    if verb == \"check\":\n        argv: List[str] = list(step.get(\"argv\") or [])\n        timeout = float(step.get(\"timeout\") or 30)\n        try:\n            proc = subprocess.run(  # noqa: S603 - argv list, no shell, authored by the user\n                argv, capture_output=True, text=True, timeout=timeout, check=False,\n            )\n            tail = (proc.stdout or proc.stderr or \"\").strip().splitlines()\n            return {\n                \"ver"
    },
    {
      "url": "https://raw.githubusercontent.com/hsyvy/dreaming-memory/72387f60c47ea741e32cae265aa1d24c02bd1c48/dreaming/dream.py",
      "quote": "    def _verify_batch(self, report: DreamReport, state: dict, batch: list[str]) -> None:\n        seen: dict[tuple[str, int], str] = {}\n        for rel in batch:\n            for sid, turn, body in self._evidence(self.store.read(rel) or \"\"):\n                seen.setdefault((sid, turn), body)\n        for rel in batch:   # checked now, whatever the outcome; rewritten files are re-stamped in _apply\n            state[\"verified\"][rel] = _digest(self.sto"
    },
    {
      "url": "https://raw.githubusercontent.com/PietrangeloManco/hermes-colab/f05cf934fff3b446f2e00cc32e19432e9e41e87b/colab_api.py",
      "quote": "\"\"\"Colab runtime assignment API (the ``/tun/m`` endpoints the Colab web app and CLIs use).\n\nEvery call goes through Hermes: ``credentialed_provider_request(\"google\", ...)`` attaches the\nuser's own OAuth grant (declared under ``oauth:`` in plugin.yaml) for colab.research.google.com\nonly. This module never sees the access token, refresh token or client secret.\n\"\"\"\n\nfrom __future__ import annotations\n\nimport json\nimport uuid\nfrom collections.abc imp"
    },
    {
      "url": "https://raw.githubusercontent.com/yuzuru99/hermes-mcp-pin/f06e0d206af4e259e31c5d5e74692d5f6aebad68/runtime.py",
      "quote": "    def pre_tool_call(self, tool_name: str = \"\", args: Any = None, **_: Any) -> dict | None:\n        if not self._is_mcp(str(tool_name or \"\")):\n            return None  # non-MCP calls cost nothing\n        held, degraded = self.sync()\n        if degraded:\n            return _block(f\"[mcp-pin] MCP tool '{tool_name}' was not run: {degraded}.\")\n        if tool_name in held:\n            return _block(\n                f\"[mcp-pin] MCP tool '{tool_name}"
    },
    {
      "url": "https://raw.githubusercontent.com/ayinmodeolarewaju-bot/hermes-flowlight/8d6aacb1babc9136316f7b1777d436027771676b/httpclient.py",
      "quote": "        stale = self._stale(key) if ttl > 0 else None\n        if stale is not None:\n            return stale\n        if last_error is None:\n            last_error = HttpError(\"request failed\")\n        raise last_error\n\n    def get_json(self, url: str, **kwargs: Any) -> Any:\n        return self.request_json(\"GET\", url, **kwargs)\n\n    def get_json_once(self, url: str, *, timeout: float = 4) -> Any:\n        \"\"\"Single GET with no retry and no host co"
    }
  ]
}