{
  "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\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.\n\nLives under `plugins/done-bell/` so it stays separate from debug-desk.\n\nRepo: https://github.com/aydnOktay/hermes-done-bell-\n\n## Install (dev)\n\n```powershell"
    },
    {
      "url": "https://raw.githubusercontent.com/aydnOktay/hermes-done-bell-/3fa519a291d91b0e6c44bd42762190363ce80c39/tests/test_bell.py",
      "quote": "def test_cli_notify_gate() -> None:\n    bell_store.patch_settings({\"muted\": True, \"os_notify\": True})\n    assert bell_store.should_os_notify_cli(\"cli\") is False\n    bell_store.patch_settings({\"muted\": False, \"os_notify\": True})\n    assert bell_store.should_os_notify_cli(\"cli\") is True\n    assert bell_store.should_os_notify_cli(\"gateway\") is False\n    assert bell_store.should_os_notify_cli(\"desktop\") is False\n\n"
    },
    {
      "url": "https://raw.githubusercontent.com/NousResearch/hermes-official-plugins/e7a218f26db88426ab3e7376f0e000b6e356f5e7/homeassistant/README.md",
      "quote": "ha_call_service` refuses service domains that allow arbitrary code execution on the Home Assistant\nhost or requests to your local network. Home Assistant has no service-level access control, so this\nblocklist is the only guard:\n\n- `shell_command`: arbitrary shell commands\n- `command_line`: sensors/switches that execute commands\n- `python_script`: scripted Python execution\n- `pyscript`: broader scripting integration"
    },
    {
      "url": "https://raw.githubusercontent.com/vgenev/ros2-console/6075de670b65985dc1f966c2f3ceebad97cc66ef/README.md",
      "quote": "Every **tool** is read-only: the\nplugin does not publish to a topic, does not call `ros2 param set`, and does not start, stop, kill\nor restart a node.\n\nThat is a limit of the tools, not of the documentation. The bundled `ros2-edge-node-ops` skill\ndescribes running, restarting and supervising nodes over SSH — `tmux`, `pgrep`, redirects, `systemd`."
    },
    {
      "url": "https://raw.githubusercontent.com/c6zks4gssn-droid/hermes-elevenlabs-convai/9a34782a216bbf36e942ae51729202418501d652/convai_client.py",
      "quote": "def api_key() -> str:\n    \"\"\"ElevenLabs API key: profile secret first, environment as fallback.\"\"\"\n    try:\n        from agent.secret_scope import get_secret  # type: ignore\n\n        value = get_secret(\"ELEVENLABS_API_KEY\", \"\") or \"\"\n    except Exception:  # pragma: no cover - outside Hermes\n        value = \"\"\n    return (value or os.environ.get(\"ELEVENLABS_API_KEY\", \"\")).strip()\n\n"
    },
    {
      "url": "https://raw.githubusercontent.com/c6zks4gssn-droid/hermes-elevenlabs-convai/9a34782a216bbf36e942ae51729202418501d652/tools.py",
      "quote": "def _handle_voice_test(args: Dict[str, Any]) -> str:\n    try:\n        agent_id = args[\"agent_id\"]\n        turns = [str(t) for t in (args.get(\"turns\") or []) if str(t).strip()]\n        if not turns:\n            return tool_error(\"turns must contain at least one user utterance\")\n\n        override = {key: args[key] for key in (\"llm\", \"tts_model_id\", \"voice_id\") if args.get(key)}\n        original = None\n        if override:"
    },
    {
      "url": "https://raw.githubusercontent.com/raitoxlol/hermes-session-signal/838bb895798626a6f4368ba9635979047042f1c0/README.md",
      "quote": "Counts include mounted row contributions only. Collapsed groups, filtered-out rows, unloaded history, and Bot Mode roster rows are excluded. Labels are currently English.\n"
    },
    {
      "url": "https://raw.githubusercontent.com/harukaxxxx/hermes-session-crew/6fa9883b1842ca0db01ca05aa4f3e662387b9c69/README.md",
      "quote": "The backend echoes the project ID and owner but does not independently authenticate project ownership. Owner RPC and REST filesystem routing, including connection changes, remain unverified live; a request already sent can race a scope change. If creation finishes after a connection change, the dialog preserves the known project and text without saving across scopes.\n\n## Development\n"
    },
    {
      "url": "https://raw.githubusercontent.com/freemanconsulting/hermes-flightdeck/0b3be1cda40df18cb2d8739bbf83cd0ba4695fbc/README.md",
      "quote": "**Opt-in capacity routing.** A routing strip at the top of By model shows armed, blocked by\n`<backend>`, off or unavailable, plus the last five placements (from → to, reason, goal). A\nsubagent row carries a placement chip naming the lane it actually ran on.\n\n![Routing](docs/img/routing.png)\n\nFour subagents filled ds4 (4/4); the fifth and sixth were placed on GN100.\n"
    },
    {
      "url": "https://raw.githubusercontent.com/freemanconsulting/hermes-flightdeck/0b3be1cda40df18cb2d8739bbf83cd0ba4695fbc/config.py",
      "quote": "def _read_yaml_config(path: Path) -> dict:\n    \"\"\"Parse one config.yaml read-only; unreadable or non-mapping files are {}.\n\n    PyYAML is a Hermes dependency, so it is the only parser used. If it is ever\n    missing, skip the YAML profiles rather than importing Hermes core (catalog\n    rule 9: public surfaces only).\n    \"\"\"\n    try:\n        text = path.read_text(encoding=\"utf-8\")\n    except Exception:\n        return {}\n    try:"
    },
    {
      "url": "https://raw.githubusercontent.com/blok-hamster/hermes-plugin-openloft-memory/8edd526d822f6514dc2f8f4a97d960d0fe7d9e55/README.md",
      "quote": "Automatic recall | Relevant memory injected as context before every LLM turn (fail-open: an unavailable backend degrades to \"no memories\", never a failed turn) |\n| Automatic ingest | Every completed turn is persisted on a background thread; extraction runs server-side; at most one ingest in flight, queued turns never block the agent |\n| `loft_recall(query)` | On-demand read-only retrieval |"
    },
    {
      "url": "https://raw.githubusercontent.com/blok-hamster/hermes-plugin-openloft-memory/8edd526d822f6514dc2f8f4a97d960d0fe7d9e55/provider.py",
      "quote": "    def _ingest(self, payload: list, session_id: str, previous: threading.Thread | None) -> None:\n        if previous is not None:\n            try:\n                previous.join(timeout=_SYNC_JOIN_TIMEOUT)\n            except RuntimeError:\n                pass\n        if not self._ready():\n            return\n        assert self._client is not None\n        started = time.monotonic()\n        try:\n            res = self._client.remember("
    },
    {
      "url": "https://raw.githubusercontent.com/skeptical-agency/shorts-factory/291df7fabe603336083fd342c76ba69df015c15b/README.md",
      "quote": "**Seven tools, all local. Zero credentials, zero cloud, zero accounts.**\n\n| Tool | What it does |\n|---|---|\n| `sf_status` | ffmpeg/ffprobe + Python deps + font health check |\n| `sf_loudness` | ebur128 measure · two-pass loudnorm to -14 LUFS/-2 dBTP · music ducking under VO (sidechain, `amix normalize=0`) · atempo speed changes |"
    },
    {
      "url": "https://raw.githubusercontent.com/skeptical-agency/shorts-factory/291df7fabe603336083fd342c76ba69df015c15b/engine_video.py",
      "quote": "    n = len(segs)\n    parts.append(\"\".join(vlabels) + (\"\".join(alabels) if has_audio else \"\") +\n                 f\"concat=n={n}:v=1:a={1 if has_audio else 0}[vout]\" + (\"[aout]\" if has_audio else \"\"))\n    fc = \";\".join(parts)\n\n    cmd += [\"-filter_complex\", fc, \"-map\", \"[vout]\"]\n    if has_audio:\n        cmd += [\"-map\", \"[aout]\"]\n    cmd += [\"-c:v\", \"libx264\", \"-preset\", \"fast\", \"-crf\", \"19\", \"-pix_fmt\", \"yuv420p\","
    },
    {
      "url": "https://raw.githubusercontent.com/Terahertz-Inc/ndaa-mcp/ae126e817732839b00c80c51097449e274a06cfa/README.md",
      "quote": "| Endpoint | `https://mcp.ndaa.ai/mcp` |\n| Transport | Streamable HTTP |\n| Auth | None. Public, read-only |\n| npm (stdio) | [`ndaa-mcp`](https://www.npmjs.com/package/ndaa-mcp) |\n| Registry name | `io.github.tera-sarah/ndaa-ai` (see [`server.json`](server.json)) |\n\n## Tools\n\n| Tool | What it does |\n|---|---|\n| `get_status` | Current FY2027 NDAA bill status: headline, summary, next steps, stage tracker and as-of date |"
    },
    {
      "url": "https://api.github.com/repos/NousResearch/hermes-agent/pulls/153399/reviews/5865897338",
      "quote": "but Hermes only ships `ruamel.yaml` and the plugin doesn't declare PyYAML."
    },
    {
      "url": "https://raw.githubusercontent.com/BigBossRabbit/pow-tracker/d57be8fcbed69f39bd735de41540ff04a4bbc30f/README.md",
      "quote": "Multi-client **proof-of-work time tracking** for the Hermes dashboard — live\ntimers, file-activity **auto-capture**, **invoicing** and per-client SQLite\nbilling.\n\nEvery client gets its own SQLite time DB inside its own folder under the\nconfigured clients root (`<clients-root>/<client-slug>/.pow-time/time.db`),\nso billable data travels with the client folder. Time entries are either"
    },
    {
      "url": "https://raw.githubusercontent.com/BigBossRabbit/pow-tracker/d57be8fcbed69f39bd735de41540ff04a4bbc30f/dashboard/plugin_api.py",
      "quote": "SKIP_DIRS = {\".git\", \"node_modules\", \"__pycache__\", \".spd-time\"}\n\n# ── Live event hub ────────────────────────────────────────────────────────────\n# Subscribers live on the asyncio event loop; producers may be daemon threads,\n# so publishing bridges through the captured loop (thread-safe).\n_SUBS: \"set[asyncio.Queue]\" = set()\n_MAIN_LOOP: Optional[asyncio.AbstractEventLoop] = None\n\n"
    },
    {
      "url": "https://raw.githubusercontent.com/alext8900/borrowed-hands/5a09950d4531b2736ecfce451c171b10723c1129/borrowed-hands/README.md",
      "quote": "A leak needs no access to the host: a prompt-injected reply\nthat names the key's path (which is predictable) attaches the key in Hermes's default media mode, with no tool\ncall and no approval. In a single-owner DM it lands in the owner's own chat, and the default terminal tool is\nalready a stronger route to the file. In a group chat, or where terminal and file tools were turned off or moved"
    },
    {
      "url": "https://raw.githubusercontent.com/alext8900/borrowed-hands/5a09950d4531b2736ecfce451c171b10723c1129/borrowed-hands/keys.py",
      "quote": "def load_or_create(data_dir: Path):\n    path = Path(data_dir) / KEY_FILE\n    with _locked(data_dir):  # first-run creation by two processes must agree on one key\n        if not path.exists() and not path.is_symlink():\n            _write_new(path, (bhproto.b64u(os.urandom(32)) + \"\\n\").encode(\"ascii\"))\n        raw = _read(path)\n    try:\n        seed = bhproto.unb64u(raw.decode(\"ascii\").strip())"
    }
  ]
}
