{
  "sources": [
    {
      "url": "https://gist.githubusercontent.com/gtmcknight/594c47336546c8763e641b46cf9af4ec/raw/field.json",
      "quote": "\"refs\":[{\"name\":\"done-bell\",\"repo\":\"https://github.com/aydnOktay/hermes-done-bell-\",\"sha\":\"3fa519a291d91b0e6c44bd42762190363ce80c39\",\"subdir\":\"\"},{\"name\":\"homeassistant\",\"repo\":\"https://github.com/NousResearch/hermes-official-plugins\",\"sha\":\"e7a218f26db88426ab3e7376f0e000b6e356f5e7\",\"subdir\":\"homeassistant\"}]"
    },
    {
      "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."
    },
    {
      "url": "https://api.github.com/repos/NousResearch/hermes-agent/pulls/152879",
      "quote": "**Understory** draws the family tree of music labels"
    },
    {
      "url": "https://api.github.com/repos/NousResearch/hermes-agent/pulls/151482",
      "quote": "OAuth credentials are managed by Hermes's MCP support; the plugin reads no credential files."
    },
    {
      "url": "https://api.github.com/repos/NousResearch/hermes-agent/pulls/152782",
      "quote": "deterministic record and replay for Hermes sessions."
    },
    {
      "url": "https://api.github.com/repos/NousResearch/hermes-agent/pulls/150658",
      "quote": "Facts only: no verdicts, no trading advice, no transactions, no wallet keys."
    },
    {
      "url": "https://api.github.com/repos/NousResearch/hermes-agent/pulls/152198",
      "quote": "a pre-PR gate plugin (11 checks; FAIL blocks, enforced by a git pre-push hook)."
    },
    {
      "url": "https://api.github.com/repos/NousResearch/hermes-agent/pulls/153993",
      "quote": "shells out to the agent-webmcp CLI and reads the local index (nothing uploaded, plugin never syncs)"
    },
    {
      "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```"
    },
    {
      "url": "https://raw.githubusercontent.com/aydnOktay/hermes-done-bell-/3fa519a291d91b0e6c44bd42762190363ce80c39/desktop/plugin.js",
      "quote": "const busyMap = useValue(host.state.busyBySession) || {}"
    },
    {
      "url": "https://raw.githubusercontent.com/aydnOktay/hermes-done-bell-/3fa519a291d91b0e6c44bd42762190363ce80c39/bell_hooks.py",
      "quote": "def on_pre_approval_request(platform: str = \"\", session_key: str = \"\", **kwargs) -> None:\n    del kwargs\n    try:\n        if not bell_store.get_settings().get(\"needs_you\"):\n            return\n        bell_store.record_event(\n            \"needs_you\",\n            session_id=str(session_key or \"\"),\n            platform=str(platform or \"\"),\n            detail=\"approval\","
    },
    {
      "url": "https://raw.githubusercontent.com/aydnOktay/hermes-done-bell-/3fa519a291d91b0e6c44bd42762190363ce80c39/tests/test_bell.py",
      "quote": "def test_needs_you_cycle() -> None:\n    bell_hooks.on_pre_approval_request(platform=\"cli\", session_key=\"s2\")\n    snap = bell_store.snapshot()\n    assert snap[\"needs_you\"] is True\n    assert snap[\"events\"][-1][\"kind\"] == \"needs_you\"\n    bell_hooks.on_post_approval_response(approved=True)\n    assert bell_store.snapshot()[\"needs_you\"] is False"
    },
    {
      "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\n   (`notify.mobile_app_my_phone` for `target=mobile_app_my_phone`), without a running gateway."
    },
    {
      "url": "https://raw.githubusercontent.com/NousResearch/hermes-official-plugins/e7a218f26db88426ab3e7376f0e000b6e356f5e7/homeassistant/adapter.py",
      "quote": "msg = await self._ws.receive_json()\n        if msg.get(\"type\") != \"auth_required\":\n            return await self._handshake_failed(\"Expected auth_required, got: %s\", msg.get(\"type\"))\n        await self._ws.send_json({\"type\": \"auth\", \"access_token\": self._hass_token})"
    },
    {
      "url": "https://raw.githubusercontent.com/NousResearch/hermes-official-plugins/e7a218f26db88426ab3e7376f0e000b6e356f5e7/homeassistant/tools.py",
      "quote": "if domain in _BLOCKED_DOMAINS:\n        return tool_error(\n            f\"Service domain '{domain}' is blocked for security. \"\n            f\"Blocked domains: {', '.join(sorted(_BLOCKED_DOMAINS))}\")"
    },
    {
      "url": "https://raw.githubusercontent.com/NousResearch/hermes-official-plugins/e7a218f26db88426ab3e7376f0e000b6e356f5e7/homeassistant/tests/test_service_policy.py",
      "quote": "def test_blocked_domain_with_terminal_linefeed_never_dispatches(monkeypatch, domain):\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\": domain + \"\\n\", \"service\": \"test_service\",\n    }))\n\n    assert \"error\" in result\n    assert \"Invalid domain format\" in result[\"error\"]\n    dispatch.assert_not_called()"
    },
    {
      "url": "https://raw.githubusercontent.com/Maxedwolf/solana-token-facts/e88dba91fb34f53a234b93a8b214a63b98c04ae9/README.md",
      "quote": "Ask Hermes *\"is this token safe?\"* and, instead of guessing, it checks the chain: who can still\nmint or freeze, who holds the supply, when and where the token was born, and what the developer\ndid with their last launches. Every answer is a fact with a number and a Solscan link. No\npredictions, no \"buy\" or \"sell\", no trading, no wallet keys."
    },
    {
      "url": "https://raw.githubusercontent.com/Maxedwolf/solana-token-facts/e88dba91fb34f53a234b93a8b214a63b98c04ae9/tools.py",
      "quote": "pattern = f\"{n} {'launch' if n == 1 else 'launches'} checked: {grads} graduated, {n - grads} did not.\""
    },
    {
      "url": "https://raw.githubusercontent.com/Maxedwolf/solana-token-facts/e88dba91fb34f53a234b93a8b214a63b98c04ae9/rpc.py",
      "quote": "from agent.secret_scope import get_secret   # inside Hermes: honours the active profile\n        val = get_secret(SECRET_ENV, None)"
    },
    {
      "url": "https://raw.githubusercontent.com/Maxedwolf/solana-token-facts/e88dba91fb34f53a234b93a8b214a63b98c04ae9/tests/test_offline.py",
      "quote": "def test_revoked_vs_unknown(self):\n        rpc.call = FakeRpc(getAccountInfo=mint_account(info={\"decimals\": 6, \"supply\": \"1000500000\",\n                                                             \"mintAuthority\": None}))\n        r = tools.get_authorities(MINT)\n        self.assertTrue(r[\"ok\"])\n        self.assertIs(r[\"can_mint_more\"], False)        # present and null -> revoked\n        self.assertIsNone(r[\"can_freeze_accounts\"])"
    }
  ]
}
