{
  "sources": [
    {
      "url": "https://gist.githubusercontent.com/gtmcknight/594c47336546c8763e641b46cf9af4ec/raw/field.json",
      "quote": "{\"pr\":152850,\"name\":\"ussd-platform\",\"repo\":\"https://github.com/GodlyDeveloper1/hermes\",\"sha\":\"f5f69e215dad54c06d2977320a080ab1c68f10ca\",\"subdir\":\"\"}"
    },
    {
      "url": "https://gist.githubusercontent.com/gtmcknight/594c47336546c8763e641b46cf9af4ec/raw/RUN.md",
      "quote": "# Run a plugin inside real Hermes\n\nFor 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\n"
    },
    {
      "url": "https://raw.githubusercontent.com/GodlyDeveloper1/hermes/f5f69e215dad54c06d2977320a080ab1c68f10ca/README.md",
      "quote": "# Hermes over USSD\n\nTalk to your Hermes agent from any phone by dialling a short code. No app, no data plan, no smartphone: a keypad and one bar of 2G are enough.\n\n![The simulator showing an agent reply paged onto a keypad phone](docs/media/banner.png)\n\n"
    },
    {
      "url": "https://raw.githubusercontent.com/GodlyDeveloper1/hermes/f5f69e215dad54c06d2977320a080ab1c68f10ca/adapter.py",
      "quote": "\"\"\"USSD gateway adapter for Hermes Agent (Africa's Talking wire format).\n\nInbound: the telco gateway POSTs each keypress round of a USSD session to\n``/ussd/<USSD_WEBHOOK_SECRET>`` as form data (``sessionId``, ``phoneNumber``,\n``serviceCode``, ``text``) and shows whatever plain text comes back.\n\nOutbound: agent messages go to a per-number inbox that the next screen reads\nfrom. With Africa's Talking SMS credentials set, messages for a caller who has\n"
    },
    {
      "url": "https://raw.githubusercontent.com/NousResearch/hermes-agent/a84025ade22d2a4085f575d4353072e5b702635d/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\n   today) is used only through `credentialed_provider_request` with\n   `requires_aut"
    },
    {
      "url": "https://raw.githubusercontent.com/harishkotra/hermes-regress/877c6dfdfd5e80bb1dca79a67b3081f9764545b5/README.md",
      "quote": "# hermes-regress\n\nRegression tests for your agent, built from the sessions you already had.\n\nEvery Hermes plugin, prompt tweak, model swap and config change alters how your agent behaves. Nothing tells you whether it still does the things you actually rely on. `hermes-regress` watches your real turns, turns each finished turn into a test case, and replays those cases against a different model or setup with every tool side effect stubbed out.\n\n```\n"
    },
    {
      "url": "https://raw.githubusercontent.com/harishkotra/hermes-regress/877c6dfdfd5e80bb1dca79a67b3081f9764545b5/rg_capture.py",
      "quote": "    redactions = 0\n    if cfg.get(\"redact\", True):\n        for call in calls:\n            text, n = redact(call[\"result\"])\n            call[\"result\"] = text\n            redactions += n\n\n    case_id = store.case_id_for(session_id, turn_id, prompt)\n    return {\n        \"schema\": store.SCHEMA,\n        \"case_id\": case_id,\n        \"created_at\": time.strftime(\"%Y-%m-%dT%H:%M:%S%z\", time.localtime()),\n        \"session_id\": session_id or \"\",\n        \"turn_id\": turn_id or \"\",\n"
    },
    {
      "url": "https://raw.githubusercontent.com/harishkotra/hermes-regress/877c6dfdfd5e80bb1dca79a67b3081f9764545b5/rg_replay.py",
      "quote": "def args_key(args: Any) -> str:\n    if not isinstance(args, dict):\n        return str(args)\n    focused = {k: v for k, v in args.items() if k in (\n        \"command\", \"path\", \"file_path\", \"url\", \"query\", \"cmd\", \"pattern\", \"name\")}\n    pick = focused or args\n    return json.dumps(pick, sort_keys=True, default=str)\n\n\ndef _score(recorded: dict[str, Any], tool: str, args: Any) -> int:\n    \"\"\"3 = same tool and identical args, 2 = same tool and no args to disambiguate.\n\n"
    },
    {
      "url": "https://raw.githubusercontent.com/Bruno-coder21/augur/6e775b23e2a322c8eee32db4074a44cb85e86e89/README.md",
      "quote": "# 🧭 Augur\n\n**Your agent knows your 3 priorities, notices when you drift, parks the detour, and on Friday clears what it can and shows where your attention actually went.**\n\n[![CI](https://github.com/Bruno-coder21/augur/actions/workflows/ci.yml/badge.svg)](https://github.com/Bruno-coder21/augur/actions/workflows/ci.yml)\n· Hermes Agent plugin · `requires_hermes >= 0.23.1` · MIT\n\n## Why\n\n"
    },
    {
      "url": "https://raw.githubusercontent.com/Bruno-coder21/augur/6e775b23e2a322c8eee32db4074a44cb85e86e89/core.py",
      "quote": "    def on_pre_llm_call(\n        self,\n        session_id: str = \"\",\n        user_message: Any = None,\n        conversation_history: Any = None,\n        turn_id: str = \"\",\n        parent_session_id: str = \"\",\n        platform: str = \"\",\n        **_: Any,\n    ) -> Optional[dict[str, str]]:\n        try:\n            if str(platform or \"\").lower() in UNATTENDED_PLATFORMS or os.environ.get(\"HERMES_KANBAN_TASK\"):\n                if self.fridays.current() is None:\n"
    },
    {
      "url": "https://raw.githubusercontent.com/Bruno-coder21/augur/6e775b23e2a322c8eee32db4074a44cb85e86e89/friday.py",
      "quote": "def allowed(tool_name: str, args: Any, drafts_dir: Path) -> bool:\n    \"\"\"The Friday-run tool policy. Pure function, easy to test.\"\"\"\n    if not isinstance(tool_name, str):\n        return False\n    if tool_name in OWN_TOOLS or tool_name in RESEARCH_TOOLS:\n        return True\n    if tool_name in DRAFT_READ_TOOLS or tool_name in WRITE_TOOLS:\n        targets = write_targets(tool_name, args if isinstance(args, dict) else {})\n"
    },
    {
      "url": "https://raw.githubusercontent.com/thebangarang/clearvoice-hermes-plugin/d4bc366ec72d4f2af1a1772b3a94f48bd0e0b156/README.md",
      "quote": "# ClearVoice Hermes Plugin\n\n**A local, private push-to-talk speech bridge for people whose words are hard to\nunderstand — and for anyone who wants their own agent to hear them.**\n\n![version](https://img.shields.io/badge/version-0.7.2-blue)\n![tests](https://img.shields.io/badge/tests-160%20passing-brightgreen)\n![licence](https://img.shields.io/badge/licence-MIT-green)\n![offline](https://img.shields.io/badge/runs-offline-black)\n"
    },
    {
      "url": "https://raw.githubusercontent.com/thebangarang/clearvoice-hermes-plugin/d4bc366ec72d4f2af1a1772b3a94f48bd0e0b156/clearvoice_engine/langs.py",
      "quote": "def _load_index() -> dict:\n    try:\n        return json.loads(_DATA.read_text(encoding=\"utf-8\"))\n    except (OSError, ValueError):\n        return {\"voices\": [], \"defaults\": {}}\n\n\ndef piper_voices(language_code: str | None = None) -> list[dict]:\n    \"\"\"Every Piper voice for a language (or every voice, when no language is given).\n\n    Best first: the language's default voice, then higher quality before lower,\n    so the picker does not open on a `low` model.\n    \"\"\"\n"
    },
    {
      "url": "https://raw.githubusercontent.com/thebangarang/clearvoice-hermes-plugin/d4bc366ec72d4f2af1a1772b3a94f48bd0e0b156/__init__.py",
      "quote": "\"\"\"ClearVoice — the agent half.\n\nRegisters exactly one tool (``clearvoice_speak``) and one slash command\n(``/clearvoice``). Everything else lives behind the plugin's own REST backend\n(``dashboard/plugin_api.py``), which the Desktop pane calls.\n\nWhy the tools cannot speak: a speech bridge that can be told \"just say something\"\nby a model is a way to put words in a disabled user's mouth. So neither tool\n"
    },
    {
      "url": "https://raw.githubusercontent.com/HomunculusLabs/hermes-on-air/d40b6ef97e34cd5bd89e8434cad2538a3c1080c3/README.md",
      "quote": "# On Air\n\nOn Air is a Hermes plugin that adds a guarded AI co-host to your stream.\n\n![A stylized mascot in a room with a co-host caption along the bottom](docs/img/private-show-captions.png)\n\n*A synthetic private practice scene showing the mascot and a caption at 1280×720.*\n\n## What you get\n\n- Guarded co-host replies with captions, optional voice and owner approval.\n- A Live desk for reviewing replies, privacy, mute and Stop.\n"
    },
    {
      "url": "https://raw.githubusercontent.com/HomunculusLabs/hermes-on-air/d40b6ef97e34cd5bd89e8434cad2538a3c1080c3/onair/adapter.py",
      "quote": "\"\"\"On Air platform adapter (lane: core owns the body; the parent owns ``register()``'s shape).\n\nHow a turn reaches the agent and comes back (verified against ``gateway/platforms/base.py``):\n\n1. Chat and support events (subs, gifts, cheers, raids) arrive from the read-only Twitch source;\n   the stage controller gates chat and turns support into overlay alerts plus thank-you turns.\n"
    },
    {
      "url": "https://raw.githubusercontent.com/HomunculusLabs/hermes-on-air/d40b6ef97e34cd5bd89e8434cad2538a3c1080c3/onair/runtime_guard.py",
      "quote": "**The boundary.** For platform ``on_air`` the middleware inspects the provider request in the\nthread that runs the agent, *before* ``next_call``. A request that carries any tool schema or a\nHermes private-context block is refused, so that request never reaches the provider, whichever\nshow or turn it came from. The decision reads the request content only.\n\n**Scope and limits.**\n\n- It covers the main agent-loop provider request (``agent/turn_api_call.py`` is the only caller\n"
    },
    {
      "url": "https://raw.githubusercontent.com/aliiqbal24/workgraph/37c7280a514d3fa23e7193f44b5123d1f9c90163/README.md",
      "quote": "<p align=\"center\"><img src=\"assets/icon.png\" width=\"80\" alt=\"Workgraph branching tree\"></p>\n\n# Workgraph\n\n**Explore freely. Keep what works.**\n\nYour agent builds three directions. You like the board from one, the filter from\nanother, and the way comments worked before either. Workgraph gives those moments\na home: a visual tree of saved products you can recognize, open, branch, and keep\nworking on.\n\n![A tree of actual saved products](docs/images/product-tree.png)\n\n"
    },
    {
      "url": "https://raw.githubusercontent.com/aliiqbal24/workgraph/37c7280a514d3fa23e7193f44b5123d1f9c90163/workgraph/hermes_adapter.py",
      "quote": "def register(ctx):\n    adapter = HermesAdapter(ctx.get_config(\"repository\", default=None))\n    ctx.register_tool(name=\"workgraph\", toolset=\"workgraph\", schema=TOOL_SCHEMA, handler=adapter.tool)\n    ctx.register_hook(\"pre_tool_call\", adapter.guard)\n    ctx.register_hook(\"pre_llm_call\", adapter.context)\n    ctx.register_hook(\"on_session_finalize\", adapter.finalize)\n    ctx.register_middleware(\"tool_request\", adapter.request)\n"
    },
    {
      "url": "https://raw.githubusercontent.com/aliiqbal24/workgraph/37c7280a514d3fa23e7193f44b5123d1f9c90163/workgraph/core.py",
      "quote": "                    unsafe = os.environ.get(\"WORKGRAPH_UNSAFE_LOCAL\") == \"1\"\n                    sandbox = None if unsafe else shutil.which(\"bwrap\")\n                    if not sandbox and not unsafe:\n                        raise WorkgraphError(\"SANDBOX_REQUIRED\", \"Verification requires bubblewrap on Linux. Explicit operator-only unsafe mode is available for cooperative experiments; see the installation guide.\")\n                    if sandbox:\n"
    }
  ]
}
