{
  "sources": [
    {
      "url": "https://gist.githubusercontent.com/gtmcknight/594c47336546c8763e641b46cf9af4ec/raw/RUN.md",
      "quote": "A plugin that needs an account, a key or a device you lack should fail cleanly and say what it needs; that counts for it. Judge what you could not run by reading."
    },
    {
      "url": "https://gist.githubusercontent.com/gtmcknight/594c47336546c8763e641b46cf9af4ec/raw/field.json",
      "quote": "150251,\"name\":\"gemini-live\",\"repo\":\"https://github.com/cineglobe/hermes-gemini-live\",\"sha\":\"b6c2f24354aeed1a8b5651b62944d14ed96a472d\",\"subdir\":\"\"},{\"pr\":150254,\"name\":\"aegis-gate\",\"repo\":\"https://gith"
    },
    {
      "url": "https://raw.githubusercontent.com/NousResearch/hermes-agent/8ec227311bbbe7863d3982ce8f35012d6a59e7d7/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://raw.githubusercontent.com/SebaWag/hermes-samskara/d807e875da3176301db9955e0352c9c8adb6cb01/README.md",
      "quote": "# Samskara — memory that admits doubt\n\n**Relational memory for Hermes Agent.** Where a vector store answers *\"what looks\nsimilar?\"*, Samskara answers *\"what depends on this, and why\"* — and when two\nmemories contradict each other, it says so instead of picking one.\n\n[![CI](https://github.com/SebaWag/hermes-samskara/actions/workflows/ci.yml/badge.svg)](https://github.com/SebaWag/hermes-samskara/actions/workflows/ci.yml)"
    },
    {
      "url": "https://raw.githubusercontent.com/SebaWag/hermes-samskara/d807e875da3176301db9955e0352c9c8adb6cb01/__init__.py",
      "quote": "def register(ctx) -> None:\n    \"\"\"Hermes entry point for a memory-provider plugin.\"\"\"\n    global _CTX\n    _CTX = ctx\n    ctx.register_memory_provider(SamskaraMemoryProvider())\n"
    },
    {
      "url": "https://raw.githubusercontent.com/SebaWag/hermes-samskara/d807e875da3176301db9955e0352c9c8adb6cb01/samskara_core/embedded.py",
      "quote": "\"\"\"An in-process graph, so Samskara runs with nothing installed.\n\n**Scope, stated up front, because it is the whole point.** This is not a SPARQL\nengine. It answers the three query shapes Samskara itself issues — label search,\noutgoing neighbourhood, incoming neighbourhood — plus the liveness probe used by\n`samskara_status`. Any other query raises `SparqlError` instead of guessing,\nbecause a wrong answer from memory is worse than an honest refusal."
    },
    {
      "url": "https://raw.githubusercontent.com/cineglobe/hermes-gemini-live/b6c2f24354aeed1a8b5651b62944d14ed96a472d/README.md",
      "quote": "# Gemini Live for Hermes\n\n![Gemini Live for Hermes](docs/assets/banner.png)\n\nFull-duplex voice calls with your Hermes agent, powered by the Gemini Live API. Talk naturally,\ninterrupt any time, and let the voice hand real work to Hermes while you keep talking. It can watch\nand steer your other threads, bot chats and subagents, recall your memory, check the server, and"
    },
    {
      "url": "https://raw.githubusercontent.com/cineglobe/hermes-gemini-live/b6c2f24354aeed1a8b5651b62944d14ed96a472d/dashboard/plugin_api.py",
      "quote": "\"\"\"Gemini Live backend routes, mounted at ``/api/plugins/gemini-live/``.\n\nShared by the Desktop half (``ctx.rest``) and the web dashboard tab (``fetchJSON``). Every\nrequest runs inside the requesting profile's scope (the dashboard mount binds it), so the key,\nsettings and memory all resolve per profile. The Gemini key never leaves this process: the client\ngets a single-use ephemeral token whose constraints lock the whole voice session.\n\"\"\""
    },
    {
      "url": "https://raw.githubusercontent.com/cineglobe/hermes-gemini-live/b6c2f24354aeed1a8b5651b62944d14ed96a472d/glive_core.py",
      "quote": "def resolve_api_key() -> tuple[str, str]:\n    \"\"\"``(key, env_name)`` for the active profile; ``(\"\", \"\")`` when none is set. Never logged.\"\"\"\n    from agent.secret_scope import get_secret\n    for name in KEY_ENV_NAMES:\n        try:\n            value = (get_secret(name) or \"\").strip()\n        except Exception as exc:  # UnscopedSecretError outside a "
    },
    {
      "url": "https://raw.githubusercontent.com/dotv-7/salts-secrets-plugin/09c1b426b08e41380a47233c4f3cead36a017ecf/salts_secrets/README.md",
      "quote": "# Salt's Secrets\n\n> What if the Hermes you've spent thousands of hours growing with could talk to everyone, without giving away a single secret?\n\n### Identity-based context isolation for Hermes Agent\n\n[![tests](https://github.com/dotv-7/salts-secrets-plugin/actions/workflows/tests.yml/badge.svg)](https://github.com/dotv-7/salts-secrets-plugin/actions/workflows/tests.yml)"
    },
    {
      "url": "https://raw.githubusercontent.com/dotv-7/salts-secrets-plugin/09c1b426b08e41380a47233c4f3cead36a017ecf/salts_secrets/notes.py",
      "quote": "\"\"\"Owner profile: tell guests something from chat, a voice message included.\n\nThe owner agent may only queue a note (``salt_propose_public``); it never publishes. A note crosses when the\nowner sends ``/salt approve <id>`` from their own DM, a command the gateway hands to this plugin directly, so\nno model output can approve one. Approved notes are ordinary Context items: logged with ``decided_via=chat``,\nrevocable on the Context page like everything else.\n\"\"\""
    },
    {
      "url": "https://raw.githubusercontent.com/dotv-7/salts-secrets-plugin/09c1b426b08e41380a47233c4f3cead36a017ecf/salts_secrets/gate.py",
      "quote": "\"\"\"Public profile: refuse every tool call outside the guest allowlist.\n\nThe public profile already exposes only safe toolsets; this hook is the second line of defence against\nmisconfiguration, plugin/MCP tools and background forks. Allowed tools only get http(s)\nlocations: any argument that names a local path is refused, whatever the tool. The allowlist comes from ``tier.json`` (written\nby ``hermes salts-secrets sync``) and is always capped by ``CEILING``: nothing that can re"
    },
    {
      "url": "https://raw.githubusercontent.com/rapha18th/tickover/45ebd2bd447504fb6229088fda1b3cab052aa982/README.md",
      "quote": "# Tickover\n\n**Hermes can switch things on. Now it can hear whether they started.**\n\nAn agent that acts on the physical world works blind. It flips a relay, runs a job, moves an arm, and trusts the return code. Tickover gives Hermes ears. It listens before and after an action and says whether the sound changed. It remembers how a machine sounds when healthy and says when that drifts. It runs on the computer Hermes runs on, with no keys and no cloud.\n\n![A verify card: the pump "
    },
    {
      "url": "https://raw.githubusercontent.com/rapha18th/tickover/45ebd2bd447504fb6229088fda1b3cab052aa982/tickover_core/encoder.py",
      "quote": "\"\"\"Frozen audio encoder: CED (Apache-2.0, mispeech) run through onnxruntime.\n\nCED is a ViT distilled on AudioSet. Its published ONNX graph takes a raw 16 kHz\nwaveform and returns 527 AudioSet class probabilities. On first use Tickover\ndownloads the graph from Hugging Face at a pinned commit, checks its sha256, and\nadds the transformer's patch tokens as extra graph outputs. Those tokens form a\ntime x frequency grid (4 mel bands x 62 frames per 10 s), which is what the drift"
    },
    {
      "url": "https://raw.githubusercontent.com/rapha18th/tickover/45ebd2bd447504fb6229088fda1b3cab052aa982/tickover_core/tools.py",
      "quote": "\"\"\"Hermes tools. Handlers return one JSON document; heavy imports happen inside handlers.\"\"\"\nfrom __future__ import annotations\n\nimport json\nimport os\nimport tempfile\nimport time"
    },
    {
      "url": "https://raw.githubusercontent.com/EconLearn/hermes-heats/2bcee10e9ca6489b7fd23bb0362a36eacdae269f/README.md",
      "quote": "# Heats\n\n**Your tests, not the model, decide when a fix is done.**\n\nWhen the Hermes agent edits code and is about to say \"done\", Heats runs your tests. If they fail, the agent\ngoes back to work with the real output. If one attempt still can't get them green, Heats races several\nattempts in separate git worktrees and you apply the one that passes. Each attempt is called a *heat*."
    },
    {
      "url": "https://raw.githubusercontent.com/EconLearn/hermes-heats/2bcee10e9ca6489b7fd23bb0362a36eacdae269f/__init__.py",
      "quote": "def _heats_run_approval(args: Optional[dict], in_attempt: bool = False) -> Optional[dict]:\n    \"\"\"heats_run runs a shell check in the repo and in every attempt worktree, outside Hermes's terminal\n    approval. Ask the human first whenever the model chose the check, or the repo is not on the owner's\n    trusted list (an auto-detected check still runs repo code: test scripts, conftest.py, Makefiles)"
    },
    {
      "url": "https://raw.githubusercontent.com/Siioh/hermes-own-compute/97522db41e7f6352089bd350df45bc64267a71e6/README.md",
      "quote": "# Own Compute\n\n**Bring your own compute.**\n\nOwn Compute lets a Hermes agent start compute on demand, on machines the user owns. Ask in chat for a sandbox, a Slurm batch job, an EC2 machine or an agent run, and Hermes starts it after an approval card. A Compute page in Hermes Desktop shows every machine and what runs on it.\n\nIt works with SSH hosts, Slurm login nodes, the Docker or Podman on this computer, and EC2 machines that the plugin starts in an AWS account the user owns"
    },
    {
      "url": "https://raw.githubusercontent.com/Siioh/hermes-own-compute/97522db41e7f6352089bd350df45bc64267a71e6/plugin.yaml",
      "quote": "manifest_version: 2\napi_version: 1\nname: cloud-compute\nversion: \"0.1.0\"\ndescription: \"Bring your own compute: Hermes sandboxes, Slurm jobs and agents on machines you already have (SSH hosts, Slurm login nodes, local Docker/Podman, EC2 in your AWS account), with a Desktop page, terminals, remote screens and chat tools. It runs commands on your SSH/Slurm hosts in containers, opens local SSH tunnels, starts remote compute (billed AWS EC2 instances) after your approval, cost on t"
    },
    {
      "url": "https://raw.githubusercontent.com/Siioh/hermes-own-compute/97522db41e7f6352089bd350df45bc64267a71e6/core/hosts_api.py",
      "quote": "\"\"\"Host routes, the ``compute_status`` tool and the host background tasks.\n\nRoutes: ``GET/POST /hosts``, ``POST /hosts/test``, ``GET/PATCH/DELETE\n/hosts/{host_id}`` and ``POST /hosts/{host_id}/probe``. Probing is delegated\nto ``services.prober``; when that module is missing the routes that need it\nanswer ``503`` while saving a host still works (its state stays ``null``).\n"
    }
  ]
}