Human-in-the-loop für Hermes

Menschliche Entscheidungen für Hermes-Agenten, auf dem Handy.

Ein Aufruf in deinem riskanten Hermes-Tool reicht: Es wartet, bis dein Nutzer auf dem Handy zustimmt.

Was Hermes mitbringt

Freigabe gefährlicher Befehle und pre_tool_call

Hermes erkennt gefährliche Befehle bereits und fragt vor der Ausführung: einmal erlauben, für die Sitzung erlauben, immer erlauben oder ablehnen. Standardmäßig wartet diese Frage im Terminal. Plugins können außerdem einen pre_tool_call-Hook registrieren, der vor jedem Tool läuft.

Wo es nicht weitergeht

  • Die integrierte Freigabe fragt die Person, die Hermes ausführt, nicht den Nutzer, den die Aktion betrifft.
  • Hermes bricht einen pre_tool_call-Hook standardmäßig nach 30 Sekunden ab und sperrt den Aufruf.
  • Im Gateway-Modus nutzen viele Nutzer denselben Agenten. Eine Sitzungs-ID bezeichnet ein Gespräch, keine Person.

Die Lösung

Pushary holt die Antwort deines Nutzers ein.

Ein Hermes-Tool-Handler ist eine normale Python-Funktion. Ein decisions.ask()-Aufruf darin schickt die Frage auf das Handy deines Nutzers, wartet auf Freigabe oder Ablehnung und speichert die Antwort.

Das Plugin registriert ein ask_human-Tool, dessen Handler decisions.ask() aufruft. Die Frage geht auf das Handy deines Nutzers. Der Handler wartet auf die Antwort, standardmäßig 55 Sekunden. Alles außer einem ausdrücklichen Ja kommt als nicht genehmigt zurück.

bash
pip install pushary
zwei Aufrufe
import os
from pushary import PusharyServer

px = PusharyServer(api_key=os.environ["PUSHARY_API_KEY"])

def ask_human(params, **kwargs):
    d = px.decisions.ask(
        question=params["question"],
        external_id=current_user_id(),  # your own user id, never the model's
        type="confirm",
    )
    return "approved" if d["approved"] else f"not approved ({d['status']})"

def register(ctx):
    ctx.register_tool(
        name="ask_human",
        toolset="approvals",
        schema={"type": "object", "properties": {
            "question": {"type": "string"},
        }, "required": ["question"]},
        handler=ask_human,
        description="Ask a real person to approve before acting.",
    )

Oder installiere das Pushary-Plugin aus dem Hermes-Katalog

Das Pushary-Plugin steht im Hermes Agent-Plugin-Katalog. Hermes installiert dadurch die von Nous geprüfte Version. Das Plugin leitet Hermes' eigene Freigaben für gefährliche Befehle auf dein Handy weiter und ergänzt pushary_ask und pushary_notify. Im Partner-Tarif fragt pushary_ask_end_user einen deiner eigenen Nutzer. Setze deinen API-Schlüssel einmal und führe keinen zweiten Installer über die Kataloginstallation aus.

Installation aus dem Katalog
hermes plugins install pushary
export PUSHARY_API_KEY="pk_xxx.xxx"

# ~/.hermes/config.yaml
security:
  approval:
    transport: pushary

So funktioniert es

Von der Installation zur ersten Antwort

Verbinde deinen Nutzer einmal. Sichere den riskanten Schritt mit einer Freigabe ab. Pushary schickt die Frage, wartet auf die Antwort und speichert sie.

  1. 01

    Python-SDK installieren

    Hermes v0.21.6 und neuer verwalten ihr eigenes Python und unterstützen darin keine pip-Installationen. Nutze dort stattdessen das Pushary-Plugin (npx pushary@latest setup --agents hermes): pushary_enroll und pushary_ask_end_user fragen deine eigenen Nutzer. Bei älterem Hermes führst du pip install pushary mit dem Python aus dessen virtualenv aus. Setze PUSHARY_API_KEY.

  2. 02

    Nutzer einmal verbinden

    Ein SDK-Aufruf pro Nutzer liefert einen Verbindungslink. Dein Nutzer öffnet ihn mit der kostenlosen Pushary-App auf seinem Handy. Kein Konto, keine Zahlung.

  3. 03

    Ein ask_human-Tool registrieren

    Rufe in register(ctx) deines Plugins ctx.register_tool mit einem Handler auf, der px.decisions.ask() aufruft. Nimm die Nutzer-ID aus deinem eigenen Nutzermodell, niemals aus den Argumenten des Modells.

  4. 04

    Auf die Antwort reagieren

    Gib für alles außer einem ausdrücklichen Ja „nicht genehmigt“ zurück. Bei Nein, abgelaufener Anfrage oder fehlender Antwort handelt der Agent nicht.

Eine Frage kann ein Ja oder Nein verlangen, eine Auswahl aus einer Liste oder eine Texteingabe. Jede Antwort wird gespeichert.

Vor der Veröffentlichung

Stolperfallen bei Hermes

Eine Sitzung ist keine Person
Im Gateway-Modus nutzen viele Nutzer denselben Agenten. Eine Sitzungs-ID bezeichnet ein Gespräch. Sie weicht von der Person ab, sobald jemand einen zweiten Tab öffnet oder morgen wiederkommt. Ordne jede Freigabe deiner eigenen Nutzer-ID zu. So bleibt sie an die für die Aktion verantwortliche Person gebunden.
Hooks haben 30 Sekunden Zeit
Fragst du aus einem pre_tool_call-Hook statt aus einem Tool, bricht Hermes den Hook nach plugins.hook_callback_timeout ab, standardmäßig nach 30 Sekunden, und sperrt den Aufruf. Halte die Wartezeit innerhalb dieses Limits oder erhöhe die Einstellung.
Ein optionales Tool erzwingt keine Freigabe
ask_human ist ein Tool, dessen Aufruf das Modell selbst wählt. Es ist daher optional. Ein Prompt mit „erst fragen“ verhindert keine Erstattung. Rufe decisions.ask() direkt im Handler des Erstattungs-Tools auf und führe die Erstattung nur aus, wenn approved true ist.

Der Partner-Tarif

Dein Agent fragt deine Nutzer, nicht nur dich

Stelle deinen Nutzern deinen Agenten bereit. Jeder gibt dessen riskante Aktionen vom eigenen Handy aus frei, unter deiner Marke.

$99/ Monat, alle Frameworks enthalten
Start free

Deine Nutzer brauchen kein Pushary-Konto und zahlen nichts an uns.

Deine Nutzer antworten auf ihren eigenen Handys

Verbinde jeden Nutzer einmal über einen Link. Er installiert die kostenlose Pushary-App und antwortet vom Sperrbildschirm aus, ohne eigenes Konto.

Keine Antwort heißt Nein

Führe die Aktion nur nach einer ausdrücklichen Freigabe aus. Eine wartende, abgelaufene oder abgebrochene Anfrage zählt nie als Ja. Pushary behält jede Anfrage, damit dein Code sie nach einem Neustart wieder aufnehmen kann.

Erreicht sie auf dem Handy

Die App kommt zuerst, denn nur sie zeigt „Genehmigen“ und „Ablehnen“ auf dem Sperrbildschirm. Browser-Benachrichtigungen folgen danach. Du musst kein Zustellsystem bauen.

Jede Antwort gespeichert

Zu jeder Antwort wird gespeichert, wer wann geantwortet hat. Du kannst sie durchsuchen und exportieren. Mit einer Callback-URL geht jede Antwort außerdem als signierter Webhook an deinen Server.

FAQ

Fragen und Antworten

Gibt es ein eigenes Pushary-Paket für Hermes?
Ja. Das Pushary-Hermes-Plugin schickt Hermes' eigene Freigaben für gefährliche Befehle auf dein Handy. Im Partner-Tarif ergänzt es Tools zum Verbinden und Fragen deiner eigenen Nutzer. npx pushary@latest setup --agents hermes schreibt es nach ~/.hermes/plugins/pushary. Für volle Kontrolle darüber, welche Person welche Aktion beantwortet, registrierst du bei Hermes vor v0.21.6 mit pip install pushary dein eigenes Tool, wie oben gezeigt.
Wie wartet der Agent auf die Antwort?
decisions.ask() hält den Tool-Handler offen, bis dein Nutzer antwortet oder die Wartezeit endet, standardmäßig nach 55 Sekunden. Hermes hält währenddessen den Tool-Aufruf offen. Der Agent macht danach mit der Antwort deines Nutzers weiter. Pushary behält die Anfrage anschließend, sodass auch eine späte Antwort gespeichert wird.
Kann jeder Endnutzer Freigaben auf seinem eigenen Handy erhalten?
Ja. Übergib die eigene ID jedes Nutzers aus deinem Nutzermodell. Verwende dafür im Gateway-Modus nicht die Hermes-Sitzungs-ID. Eine Sitzung bezeichnet ein Gespräch, nicht die für die Aktion verantwortliche Person.
Was sieht der Agent bei Ablehnung oder Zeitüberschreitung?
Der Handler gibt „nicht genehmigt“ mit dem Status zurück. Das Modell weiß dadurch, dass die Aktion verweigert statt übersprungen wurde; die Antwort wird gespeichert. Die Unterscheidung zählt: Eine Ablehnung enthält Informationen, die das Modell berücksichtigen sollte. Bei einer Zeitüberschreitung muss meist jemand anderes gefragt werden.
Kann eine Hermes-Installation Freigaben für viele Kunden abwickeln?
Ja. Dafür nutzt du den Gateway-Modus und deine eigene Nutzer-ID bei jedem Aufruf. Ein Agentenprozess bedient alle. Jeder decisions.ask()-Aufruf erreicht die Person, deren Daten oder Geld die Aktion betrifft. Sie verbindet sich ohne Konto über einen Link und die kostenlose Pushary-App. Die Entscheidungsseite zeigt deinen Namen und dein Logo.

Lass deinen Hermes-Agenten fragen, bevor er handelt.

Verbinde einen Nutzer einmal, frage mit einem Aufruf und führe die Aktion nur bei einem Ja aus. Jede Antwort wird gespeichert.

Start free

Partner-Tarif, $99 im Monat. Deine Nutzer brauchen kein Pushary-Konto und zahlen nichts an uns.