{
  "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."
    },
    {
      "url": "https://raw.githubusercontent.com/NousResearch/hermes-official-plugins/e7a218f26db88426ab3e7376f0e000b6e356f5e7/homeassistant/README.md",
      "quote": "By default, **no events are forwarded**. Configure at least one of `watch_domains`, `watch_entities`"
    },
    {
      "url": "https://raw.githubusercontent.com/MKempler/docket/16aecc5a9c02635ba7911ca6a5aa4db9a4066b11/README.md",
      "quote": "Docket ships a fictional demo company, **Copperline Plumbing & Drain**, so you can try the whole loop with no signups, keys or messaging apps. Everything runs on your machine."
    },
    {
      "url": "https://raw.githubusercontent.com/catalystberry842-alt/excubitor/eb6112150f219ef4d799366f1d420a571c6089c7/README.md",
      "quote": "Fail-open on every hook — an internal error never takes Hermes down. Default notifier is `log` (offline). Optional `ntfy` / `webhook` only if you opt in. Requires Hermes `>=0.21.0`."
    },
    {
      "url": "https://raw.githubusercontent.com/KyaniteLabs/Epoch/36de521a89501c2b68b70251d50d32027ad96f2b/plugins/epoch-hermes/README.md",
      "quote": "Node >= 22 and `npx` on PATH. No API key or secret. The first claim may take a few seconds while"
    },
    {
      "url": "https://raw.githubusercontent.com/jollyroger1480/muster/d02a2d4775ff6cee77b686101f0778d8e13e15eb/README.md",
      "quote": "- **Workers hermes started itself are watched only.** Muster never touches"
    },
    {
      "url": "https://raw.githubusercontent.com/stupidburgers/pinpoint/06b911e1c66908ebf340c6cb981028bc45b89c73/README.md",
      "quote": "- No session or window correlation: any authenticated Desktop window can claim a request (issue #18); completion is checked by the server-minted token only."
    },
    {
      "url": "https://raw.githubusercontent.com/ASV-Labs/hermes-helm/0f68da9b485870059be2bef71f284a81ad771fdd/README.md",
      "quote": "The redesign layer is CSS supplied through the SDK's theme `customCSS`. It selects the app's `data-slot` names in CSS only. helm never queries, observes or rewrites the app's DOM. The layer switches off when you switch to another theme."
    },
    {
      "url": "https://raw.githubusercontent.com/Lyfae/hermes-retouch/1a5ac4346b991754a25a5dc14745f533341c8c95/README.md",
      "quote": "  several times the model usage of one. These are ordinary Hermes sessions with your usual tools"
    },
    {
      "url": "https://raw.githubusercontent.com/borealBytes/hermes-wearos-plugin/2991d28fa7aeeb86d52be77680f4be7c1d80a41a/README.md",
      "quote": "- **Background.** The door and lane daemon threads run while the gateway runs, plus a voice prewarm thread at boot. Once the TTS engine is installed, **one resident `air_runner.py --serve` worker** (~3.4 GB RSS) stays loaded (`WEARKIT_TTS_IDLE_S=900` restores idle exit). To keep a single copy, the plugin scans `/proc` and **SIGKILLs any other `air_runner.py --serve` on the machine**."
    },
    {
      "url": "https://raw.githubusercontent.com/bettersandeep/grimoire/4824773040b131f3179e5896d71d1435908758a7/README.md",
      "quote": "- The check reads digits only. Number words (\"three\") and text claims (names, rankings) are not checked."
    },
    {
      "url": "https://raw.githubusercontent.com/rapha18th/tickover/45ebd2bd447504fb6229088fda1b3cab052aa982/README.md",
      "quote": "Tickover is strong on loud, obvious change: a belt, a misfire, a machine that stopped. It is weak on the subtle factory anomalies DCASE designs. Read the tables before you rely on it."
    },
    {
      "url": "https://raw.githubusercontent.com/MKempler/docket/16aecc5a9c02635ba7911ca6a5aa4db9a4066b11/__init__.py",
      "quote": "def _make_gate(ctx):\n    def pre_tool_call(tool_name=None, args=None, **kwargs):\n        if tool_name not in GATED_TOOLS:\n            return None\n        try:"
    },
    {
      "url": "https://raw.githubusercontent.com/catalystberry842-alt/excubitor/eb6112150f219ef4d799366f1d420a571c6089c7/spend.py",
      "quote": "def over_cap(cfg: dict[str, Any], *, session_id: str = \"\") -> str | None:\n    day = ledger.utc_day()\n    day_spend = ledger.spend_for(\"day\", day, day)\n    day_cap = float(config.budget(cfg, \"day_budget_usd\", 5.0))\n    if day_spend >= day_cap:"
    },
    {
      "url": "https://raw.githubusercontent.com/stupidburgers/pinpoint/06b911e1c66908ebf340c6cb981028bc45b89c73/_core.py",
      "quote": "    \"\"\"Exclusive claim of a request. Returns a server-minted claim token for the first caller, else None.\n\n    The token exists only in the ack file and in this return value: never in pending(), events or logs.\n    \"\"\"\n    if not isinstance(rid, str) or not _ID_RE.match(rid) or not _p(rid, \"req\").exists():"
    },
    {
      "url": "https://raw.githubusercontent.com/Lyfae/hermes-retouch/1a5ac4346b991754a25a5dc14745f533341c8c95/retouch/composite.py",
      "quote": "def outside_changed_px(before: Image.Image, after: Image.Image, hard_mask: Image.Image) -> int:\n    \"\"\"Number of pixels that differ between ``before`` and ``after`` outside the mark. Must be 0.\"\"\"\n    outside = ImageChops.invert(_binary(hard_mask))\n    return _count(ImageChops.multiply(changed_mask(before, after), outside))\n"
    },
    {
      "url": "https://raw.githubusercontent.com/borealBytes/hermes-wearos-plugin/2991d28fa7aeeb86d52be77680f4be7c1d80a41a/tts_air.py",
      "quote": "            os.kill(pid, signal.SIGKILL)\n        except (OSError, ValueError):\n            continue                 # raced/permission — best effort\n\n"
    },
    {
      "url": "https://raw.githubusercontent.com/bettersandeep/grimoire/4824773040b131f3179e5896d71d1435908758a7/verify.py",
      "quote": "        if whole and number >= 10 and str(int(number)).strip(\"0\") == \"1\":\n            # ponytail: powers of ten (100, 1000) are usually unit factors (\"÷ 100\"); a real\n            # count of exactly 100 is skipped too. Tighten with context if that ever matters.\n            continue\n        mult = _MULT.get(unit, 1.0)"
    },
    {
      "url": "https://raw.githubusercontent.com/ASV-Labs/hermes-helm/0f68da9b485870059be2bef71f284a81ad771fdd/desktop/plugin.js",
      "quote": "async function refreshInbox() {\n  if (inboxInflight || typeof host.request !== 'function') return\n  inboxInflight = true\n  try {\n    const crew = $crew.get()"
    },
    {
      "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."
    }
  ]
}
