{
  "sources": [
    {
      "url": "https://gist.githubusercontent.com/gtmcknight/594c47336546c8763e641b46cf9af4ec/raw/field.json",
      "quote": "{\"pr\":153357,\"name\":\"twring\",\"repo\":\"https://github.com/saasagelabs/twring\",\"sha\":\"5a7083e3c9d1cd656f1fd85da771d6eee3d2267a\",\"subdir\":\"integrations/hermes\"},{\"pr\":153363,\"name\":\"phone-senses\",\"repo\":\"https://github.com/LSUDOK"
    },
    {
      "url": "https://gist.githubusercontent.com/gtmcknight/594c47336546c8763e641b46cf9af4ec/raw/RUN.md",
      "quote": "For seats in rounds 3 and 4. Everything lives under `test/scratch/`. Nothing here needs a model, a key or an account: the model is Nous's own scripted test stand-in, `tests/fakes/fake_llm_provider.py` in the Hermes source, which answers with the tool calls you plan and records everything Hermes sends.\n\n## 1. Hermes, once\n\n    git clone --depth 1 https://github.com/NousResearch/hermes-agent test/scratch/hermes"
    },
    {
      "url": "https://raw.githubusercontent.com/KeyArgo/hermes-omniscience/38ea8c249698235836a0aa3f35c480f2d87c93fa/desktop/plugin.js",
      "quote": "async function readKeyFromDisk() {\n  const d = window.hermesDesktop\n  const rootFn = d?.desktopPluginsRoot || d?.fs?.desktopPluginsRoot\n  if (!d?.readFileText || !rootFn) return null\n  const root = String((await rootFn()) || '')\n  const home = root.replace(/[\\\\/]desktop-plugins[\\\\/]?$/, '')\n  if (!home) return null\n  let profile = null\n  try {\n    profile = host.state?.focusedSessionProfile?.get?.() || null\n  } catch {"
    },
    {
      "url": "https://raw.githubusercontent.com/NousResearch/hermes-agent/fdde27e7dae174cb4ba842589e92508852b7dd9f/plugin-catalog/README.md",
      "quote": "11. **Credentials come through Hermes, never from files.** A plugin gets\n   secrets only through Hermes's routes. Its declared `requires_env` and\n   `config_schema` secrets are read with `agent.secret_scope.get_secret(NAME)`,\n   which honours the active profile (a bare `os.environ` read can pick up another\n   profile's key under multiplexing). A subscription sign-in (Codex / ChatGPT"
    },
    {
      "url": "https://raw.githubusercontent.com/saasagelabs/twring/5a7083e3c9d1cd656f1fd85da771d6eee3d2267a/integrations/hermes/README.md",
      "quote": "Twring is a phone app (iPhone and Android) for the AI agents you already run. This plugin makes Twring a Hermes messaging platform, like Telegram, except you can also **talk**:\n"
    },
    {
      "url": "https://raw.githubusercontent.com/saasagelabs/twring/5a7083e3c9d1cd656f1fd85da771d6eee3d2267a/integrations/hermes/adapter.py",
      "quote": "    async def connect(self, *, is_reconnect: bool = False) -> bool:\n        if not self._token:\n            return self._fail(\"config_missing\", \"Twring is not linked: run `hermes twring link`.\", retryable=False)\n        if self._server is None:\n            return self._fail(\"config_invalid\", \"TWRING_SERVER must be an https:// address.\", retryable=False)"
    },
    {
      "url": "https://raw.githubusercontent.com/saasagelabs/twring/5a7083e3c9d1cd656f1fd85da771d6eee3d2267a/integrations/hermes/cli.py",
      "quote": "def link_flow(\n    *,\n    server: Optional[str] = None,\n    computer_name: Optional[str] = None,\n    out: Callable[[str], None] = print,\n    save: Callable[..., None] = _hermes_save,\n    client_factory: Callable[[], httpx.Client] = _default_client,\n    render_qr: Callable[[str], Optional[str]] = _terminal_qr,\n) -> int:\n    \"\"\"Links this Hermes to the owner's Twring account. Returns a process exit code.\"\"\"\n    try:"
    },
    {
      "url": "https://raw.githubusercontent.com/hsyvy/keryx/6c5cd7fc468a314eef0b524a29b1f12c68c0e569/README.md",
      "quote": "Keryx is a [Hermes Agent](https://github.com/NousResearch/hermes-agent) plugin. You tell Hermes what a\ncall should achieve; Hermes writes a brief and asks you to approve the call; your phone dials over\nBluetooth (the laptop acts as a hands-free car kit) and a realtime voice model holds the conversation.\nWhen the call ends, the outcome, details and transcript go back to Hermes, which can act on them.\n\nNo Twilio. No telephony account. Your SIM, your number.\n"
    },
    {
      "url": "https://raw.githubusercontent.com/hsyvy/keryx/6c5cd7fc468a314eef0b524a29b1f12c68c0e569/keryx/tools.py",
      "quote": "Approval flow (enforced in code):\n1. Hermes calls place_call -> our pre_tool_call hook compiles the brief and runs the guardrails.\n   A violation BLOCKS the call outright. Otherwise the hook returns {\"action\": \"approve\"}, which makes\n   Hermes ask the user on whatever surface they are on (CLI, Telegram, Desktop). Denial/timeout blocks.\n2. The handler only dials if the hook saw these exact arguments (one approval = one dial), so a code"
    },
    {
      "url": "https://raw.githubusercontent.com/hsyvy/keryx/6c5cd7fc468a314eef0b524a29b1f12c68c0e569/keryx/guardrails.py",
      "quote": "def check_call(raw_number: str, settings: Settings, *, now: Optional[datetime] = None,\n               calls_last_hour: int = 0) -> GuardrailResult:\n    \"\"\"All pre-dial checks. Never raises; collects human-readable violations.\"\"\"\n    res = GuardrailResult()\n    try:\n        number = normalize_number(raw_number, settings.default_country_code)\n    except GuardrailViolation as e:"
    },
    {
      "url": "https://raw.githubusercontent.com/RaYYeR220/housemate/09c1a1d0a88bfa8762cee6b3ccf94271b0f172c5/README.md",
      "quote": "Most homes have a drawer of old phones. Housemate turns them into room speakers for your own Hermes: the Alexa routine (a pasta timer that rings in the kitchen, \"tell the office dinner's ready\", \"stop\") from an assistant that is actually your agent, with your tools, your memory and your approvals. There is no hardware to buy and no app to install. You need a browser, a QR code and a six-digit pairing code.\n"
    },
    {
      "url": "https://raw.githubusercontent.com/RaYYeR220/housemate/09c1a1d0a88bfa8762cee6b3ccf94271b0f172c5/core/control.py",
      "quote": "async def _op_timer_set(s: HubServices, a: dict) -> dict:\n    seconds = _seconds(a.get(\"seconds\"))\n    label = _text(a, \"label\", max_len=64)\n    room = _resolve_room(s, a.get(\"room\"), a.get(\"session_room\"))\n    timer = _need(s, \"timers\").add(room, seconds=seconds, label=label)\n    return {\"ok\": True, \"timer\": _timer_views(s, [timer])[0]}\n\n\nasync def _op_alarm_set(s: HubServices, a: dict) -> dict:"
    },
    {
      "url": "https://raw.githubusercontent.com/RaYYeR220/housemate/09c1a1d0a88bfa8762cee6b3ccf94271b0f172c5/core/models.py",
      "quote": "\"\"\"Wake-word and VAD models: pinned manifest, verified download, shared ONNX sessions.\n\nopenWakeWord's pre-trained models (melspectrogram, embedding, the stock wake heads) are\nCC BY-NC-SA 4.0, so they are never shipped in this repo. ``ensure_model`` downloads them\nonce from the official openWakeWord release into ``<data_dir>/models/`` and checks each\nfile against a pinned SHA-256. Silero VAD is MIT.\n"
    },
    {
      "url": "https://raw.githubusercontent.com/KeyArgo/hermes-omniscience/38ea8c249698235836a0aa3f35c480f2d87c93fa/README.md",
      "quote": "The graph is live and the replay is deterministic. Other tools import a finished trace or report on cost after the fact. Omniscience maps the run as it unfolds, session to turns to model calls to tools to subagents, then lets you scrub back through that same graph and land on the exact step where something went wrong. It stores metadata only: names, timings, sizes and statuses, never prompts, arguments or outputs.\n\n## Try it in five minutes\n"
    },
    {
      "url": "https://raw.githubusercontent.com/KeyArgo/hermes-omniscience/38ea8c249698235836a0aa3f35c480f2d87c93fa/sanitize.py",
      "quote": "\"\"\"Allowlist normalizers and secret redaction for omni.v1 events.\n\nEverything here is pure and bounded: it never touches the network, disk or\nHermes internals. The allowlist is the contract; unknown payload fields are\ndropped by construction.\n\"\"\"\n\nfrom __future__ import annotations\n\nimport itertools"
    },
    {
      "url": "https://raw.githubusercontent.com/Angerosteles/local-scout/c1e732ba4e9d431a711ea141c0095352a95bd7a2/README.md",
      "quote": "Local Scout is a local privacy layer for Hermes Agent, built for people who handle customer and co-worker data at work: support tickets, inboxes and internal documents. Hermes already redacts secrets such as API keys in file and terminal output. Scout adds masking for **detected personal data and password-like values** in the content the model reads, plus prompt-injection flags and optional local ticket triage.\n"
    },
    {
      "url": "https://raw.githubusercontent.com/Angerosteles/local-scout/c1e732ba4e9d431a711ea141c0095352a95bd7a2/scout/core.py",
      "quote": "    def transform_tool_result(self, tool_name=None, args=None, result=None, session_id='', tool_call_id='', **kwargs):\n        return self._transform_tool_output(result, 'tool_result', session_id, tool_call_id)\n\n    def transform_terminal_output(self, command=None, output=None, returncode=None, task_id='', tool_call_id='', **kwargs):\n        return self._transform_tool_output(output, 'terminal', task_id, tool_call_id)\n\n    def extras(self):"
    },
    {
      "url": "https://raw.githubusercontent.com/Angerosteles/local-scout/c1e732ba4e9d431a711ea141c0095352a95bd7a2/scout/prompt_guard.py",
      "quote": "class PromptGuard:\n    def __init__(self, scout):\n        self.scout = scout\n        self.cache = OrderedDict()\n        self.seen = OrderedDict()\n\n    def scan(self, text, names=False, field=None):\n        if len(text.encode('utf-8', 'surrogatepass')) > MAX_INPUT_CHARS:\n            raise ValueError('oversize')\n        config = self.scout.profile()['config']"
    },
    {
      "url": "https://raw.githubusercontent.com/joelbrilliant/hermes-agent-si/adf7abc1d89b1e1ea686ac2fd29e2b95b454f4fe/README.md",
      "quote": "Sourced, model-free memory. A brain of facts that cite sources and quotes, plus search over your past\nHermes, Claude Code, Codex and Grok sessions on this machine, in one ranked list. No model, no API key, no\nnetwork, no Python dependencies. It refuses to store words you didn't say, and it tells you when sources\ndisagree instead of picking one.\n\n## Install\n\n```bash\nhermes plugins install joelbrilliant/hermes-agent-si"
    },
    {
      "url": "https://raw.githubusercontent.com/joelbrilliant/hermes-agent-si/adf7abc1d89b1e1ea686ac2fd29e2b95b454f4fe/__init__.py",
      "quote": "RULES = \"\"\"Rules for this memory:\n- Facts about the user, their people, plans, systems and past work come from brain_search and brain_get, never from memory or prose. Name the source and its date when it matters.\n- If the brain has nothing on it, say so plainly. Do not guess, and do not agree just to fill the gap.\n- A fact marked disputed has sources that disagree. Say so and ask the person. Do not pick one."
    }
  ]
}