{
  "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/aydnOktay/hermes-done-bell-/3fa519a291d91b0e6c44bd42762190363ce80c39/README.md",
      "quote": "Hermes plugin: **ring when a turn finishes** so you can leave the window.\n\nOS notification (when away), optional chime, status chip (`busy` / `done` /\n`needs you`). No API keys. Does not send chat, write code, or touch user files."
    },
    {
      "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/koppkvn/details-plugin/ba7651d28bdbecb0e82f431b0c8d6dbc169ad3e0/mcp.json",
      "quote": "    \"details\": {\n      \"type\": \"stdio\",\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"mcp-remote@0.1.49\",\n        \"https://api.details.so/mcp\",\n        \"--transport\",\n        \"http-only\",\n        \"--static-oauth-client-metadata\","
    },
    {
      "url": "https://api.github.com/repos/NousResearch/hermes-agent/pulls/151345",
      "quote": "An authenticated tool call from Hermes itself remains untested."
    },
    {
      "url": "https://raw.githubusercontent.com/NeumannTechTips/hermes-snitchboard/6104d95d461f420bd1b897a9a685f184c332bbea/README.md",
      "quote": "**v0.1.0, tagged and signed.** Both halves are built. The viewer runs inside a Hermes dashboard and has been checked panel by panel against a live instance; the reference collector reads an OpenSnitch database and writes hash-chained records. Demonstration mode needs nothing beyond Hermes, so the plugin can be judged before it is pointed at a real machine."
    },
    {
      "url": "https://raw.githubusercontent.com/cloro-dev/hermes-plugin-cloro/7189fbd9ab14aafaa3fb18f419ca76d46aa1bc4a/provider.py",
      "quote": "    def search(self, query, limit=5):\n        api_key = (get_secret(_KEY_ENV) or \"\").strip()\n        if not api_key:\n            return _failure(f\"set {_KEY_ENV} through hermes tools or the plugin settings\")\n        if not isinstance(query, str) or not query.strip():\n            return _failure(\"query must not be empty\")\n        try:\n            country = self._country()\n        except ValueError as exc:"
    },
    {
      "url": "https://raw.githubusercontent.com/agentworker33-droid/hermes-teamops/39a0858e0d40c5f194ba074ac8b8de69f8791ddc/teamops/server.py",
      "quote": "        self.send_header(\"Access-Control-Allow-Origin\", \"*\")\n        self.send_header(\"Access-Control-Allow-Methods\", \"GET, POST, OPTIONS\")\n        self.send_header(\"Access-Control-Allow-Headers\", \"Content-Type\")\n        self.send_header(\"X-TeamOps-Build\", \"live\")\n        self.end_headers()"
    },
    {
      "url": "https://raw.githubusercontent.com/agentworker33-droid/hermes-teamops/39a0858e0d40c5f194ba074ac8b8de69f8791ddc/teamops/twilio_intake.py",
      "quote": "    vals = _dotenv_values(home_p / \"config\" / \"twilio.env\")\n    for name in ENV_NAMES:  # env wins over dotenv\n        if name in env and env[name]:\n            vals[name] = env[name]"
    },
    {
      "url": "https://raw.githubusercontent.com/violetSoftware/hermes-hostd-plugin/13df9552c44a150e3b602851a1d51a62ea7f2700/README.md",
      "quote": "- **Existing ntfy decisions are unsigned and do not authenticate the human approver.** A party able to publish a matching request ID and approval decision to the response channel can forge approval. Topic obscurity, HTTP/SSH reachability restrictions and ntfy publishing credentials do not prove human intent against a compromised requester. Do not advertise ntfy as a strong authorization boundary."
    },
    {
      "url": "https://raw.githubusercontent.com/violetSoftware/hermes-hostd-plugin/13df9552c44a150e3b602851a1d51a62ea7f2700/__init__.py",
      "quote": "        # timeout=0 means \"no timeout\" — disable both the request-level\n        # subprocess timeout and the transport-level socket timeout.\n        client = _build_client(socket_timeout=(None if timeout == 0 else float(timeout) + 30))\n        request = _client_mod.CommandRequest("
    },
    {
      "url": "https://raw.githubusercontent.com/tylerjharden/hermes-hackathon-ipp/3e2feea4b1216a6b2343b18a6de710ae5b126c46/plugins/agentmail-frontdoor/README.md",
      "quote": "Claim an inbound thread, classify it, and create a draft. The plugin does not send mail. A send still has to pass the Hermes approval gate."
    },
    {
      "url": "https://raw.githubusercontent.com/tylerjharden/hermes-hackathon-ipp/3e2feea4b1216a6b2343b18a6de710ae5b126c46/plugins/agentmail-frontdoor/hooks.py",
      "quote": "def _approval_active(args: dict, kwargs: dict) -> bool:\n    if kwargs.get(\"approved\") is True:\n        return True\n    if args.get(\"approved\") is True:\n        return True\n    return False"
    },
    {
      "url": "https://raw.githubusercontent.com/NehuenD/hermes_coursewright/8f756d4ecb300f20888469ae919bb62e737ca2ef/README.md",
      "quote": "# coursewright\n\ncoursewright builds a self-contained HTML course on any topic. It writes the same material at\nthree depths, novices first, and switches between them in place without a reload. A course has\nfigures, exercises with feedback, recommended videos and reading, and a footer listing every\nsource it read."
    },
    {
      "url": "https://raw.githubusercontent.com/NehuenD/hermes_coursewright/8f756d4ecb300f20888469ae919bb62e737ca2ef/spec.py",
      "quote": "def validate(raw: Any) -> Tuple[Dict[str, Any], List[str]]:\n    \"\"\"Return (clean_spec, warnings). Never raises on bad content.\"\"\"\n    warnings: List[str] = []\n    if not isinstance(raw, dict):\n        return {\"version\": SPEC_VERSION, \"sections\": [], \"resources\": {\"videos\": [], \"reading\": []}}, \\\n            [\"spec is not an object\"]\n\n    slug = _s(raw.get(\"slug\"), 64).strip().lower()"
    },
    {
      "url": "https://raw.githubusercontent.com/MadanChaollaPark/hermes-mailbridge/3aa9d6a41c7e7bd6aeee865b421eb16434a7d8a8/plugin/bridge_plugin/service.py",
      "quote": "    def approve(self, tid, destination, fingerprint):\n        # CLI calls this only after interactive confirmation; never a Hermes tool.\n        with exclusive(self.root / \"locks\" / (valid_id(tid) + \".worker\")):\n            task = self.store.task(tid)\n            current = self.plan_digest(tid)\n            if destination != task[\"config\"][\"destination\"] or fingerprint != current:"
    },
    {
      "url": "https://raw.githubusercontent.com/MadanChaollaPark/hermes-mailbridge/3aa9d6a41c7e7bd6aeee865b421eb16434a7d8a8/plugin/README.md",
      "quote": "One shared engine, **38 documented provider profiles and 12 workflow tools**. Provider-specific behavior lives in a source profile; import, deduplication and verification logic is shared. [The provider catalog](docs/PROVIDERS.md) includes 20 additions across 11 countries and clearly labels POP-only services, paid-plan restrictions, IMAP support and uncertain documentation. None of the 38 provider accounts has been live-tested in this build."
    },
    {
      "url": "https://raw.githubusercontent.com/ivcained/llmux/356118cf7f06dd08352636b2b3cc3795f4cc6e4e/README.md",
      "quote": "Not yet demonstrated: a mid-chat seller switch in the installed desktop app, a paid end-to-end reply through the proxy, and a ledger row from a real reply. The latest card fixes are not yet verified in the installed desktop. Catalog admission, demo publication and the hackathon form are separate submission steps, not test results."
    },
    {
      "url": "https://raw.githubusercontent.com/ivcained/llmux/356118cf7f06dd08352636b2b3cc3795f4cc6e4e/llmux_core/proxy.py",
      "quote": "            def _authorized(self) -> bool:\n                expected = proxy.config.auth_token\n                if expected is None:  # Only explicit in-process test/embedding construction.\n                    return True\n                supplied = self.headers.get(\"Authorization\", \"\")\n                if hmac.compare_digest(supplied.encode(\"utf-8\"), f\"Bearer {expected}\".encode(\"utf-8\")):"
    },
    {
      "url": "https://raw.githubusercontent.com/nyyhao/saascity-mcp/cba6b8a6faa38a9f92b73128f727923d1d139d25/plugin/README.md",
      "quote": "This is a portable Agent Plugins v1 package: `plugin.json`, `mcp.json` and one skill. It holds configuration only, no code. The tools are served by the hosted SaaSCity MCP server at `https://saascity.io/api/mcp` (Streamable HTTP, no account, no API key)."
    }
  ]
}
