Human-in-the-loop für OpenClaw

Menschliche Freigaben für OpenClaw-Tool-Aufrufe, auf dem Handy.

Ein before_tool_call-Hook hält riskante OpenClaw-Tools an, bis dein Nutzer sie auf dem Handy freigibt.

Was OpenClaw mitbringt

Der before_tool_call-Hook

Ein OpenClaw-Plugin kann einen before_tool_call-Hook registrieren. Er läuft vor dem Tool. Die Rückgabe { block: true, blockReason } stoppt den Aufruf und erklärt dem Modell den Grund. Das ist der richtige Ort für eine Freigabe: Sie sperrt die Aktion, statt sie erst hinterher zu melden.

Wo es nicht weitergeht

  • Der Hook kann keine Person erreichen, die nicht am Gateway sitzt.
  • Er bietet keine Wartezeit, die während der Entscheidung einen Neustart übersteht.
  • Er speichert nicht, was erlaubt oder gesperrt wurde oder wer entschieden hat.

Die Lösung

Pushary holt die Antwort deines Nutzers ein.

before_tool_call kann ein Tool stoppen. decisions.ask() darin schickt die Frage auf das Handy deines Nutzers, wartet auf Freigabe oder Ablehnung und speichert die Antwort. Der Hook sperrt bei allem außer einem Ja.

Das Plugin sichert drei Tools ab: deploy_service, delete_record und send_email. Für sie ruft der Hook decisions.ask() auf und gibt { block: true } zurück, solange dein Nutzer nicht zugestimmt hat. Alle anderen Aufrufe überspringen den Hook und laufen unverändert. Jede Antwort wird gespeichert.

bash
npm i @pushary/server
zwei Aufrufe
import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry"
import { createPusharyServer } from "@pushary/server"

const pushary = createPusharyServer({ apiKey: process.env.PUSHARY_API_KEY! })
const GATED = new Set(["deploy_service", "delete_record", "send_email"])

export default definePluginEntry({
  id: "pushary-approvals",
  name: "Pushary approvals",
  register(api) {
    api.on("before_tool_call", async (event) => {
      if (!GATED.has(event.toolName)) return
      const d = await pushary.decisions
        .ask({ question: `Allow ${event.toolName}?`, externalId: "user_123", type: "confirm" })
        .catch(() => ({ approved: false }))
      if (!d.approved) {
        return { block: true, blockReason: "A person did not approve this action." }
      }
    })
  },
})

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

    Installieren und Schlüssel setzen

    Führe npm i @pushary/server im Workspace deines Plugins aus und setze PUSHARY_API_KEY.

  2. 02

    Nutzer einmal verbinden

    Ein SDK-Aufruf liefert einen Verbindungslink. Die freigebende Person öffnet ihn mit der kostenlosen Pushary-App auf ihrem Handy. Kein Konto, keine Zahlung.

  3. 03

    Hook registrieren

    Registriere im Einstiegspunkt deines Plugins einen before_tool_call-Hook, der decisions.ask() für die abzusichernden Tool-Namen aufruft.

  4. 04

    Bei allem außer einem Ja sperren

    Gib { block: true } mit einem blockReason zurück, wenn die Antwort keine ausdrückliche Freigabe ist. Ein Nein oder eine Zeitüberschreitung stoppen so den Aufruf.

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 OpenClaw

Frage im Hook, nicht in einem Tool
Ein Tool, dessen Aufruf das Modell selbst wählt, ist optional. Ein Prompt mit „erst fragen“ ist keine Sperre. before_tool_call läuft bei jedem Aufruf, ob das Modell will oder nicht. Die Freigabe gehört deshalb dorthin.

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 @pushary/openclaw-Paket?
Nein, und du brauchst keines. Ein OpenClaw-Hook ist eine normale asynchrone Funktion. Die ganze Integration besteht daher aus einem decisions.ask()-Aufruf aus @pushary/server innerhalb von before_tool_call. Dasselbe Paket verbindet das Handy jedes Nutzers. Dieselben zwei Aufrufe funktionieren in jedem Framework.
Wie sperre ich einen Tool-Aufruf?
Gib im before_tool_call-Hook { block: true, blockReason } zurück. Die Sperre ist verbindlich: Das Tool läuft nicht, und das Modell erfährt den Grund. Formuliere blockReason verständlich, etwa „Dein Nutzer hat das Deployment abgelehnt“. So hält das Modell an, statt dieselbe Aktion anders zu versuchen.
Was passiert bei einer Zeitüberschreitung?
Der Aufruf wird gestoppt. decisions.ask() meldet die Anfrage standardmäßig nach 55 Sekunden als nicht genehmigt. Dein Hook gibt block zurück, und das Tool läuft nicht. Pushary behält die Anfrage, sodass auch eine späte Antwort gespeichert wird.
Kann ich nur bestimmte Tools absichern?
Ja. Prüfe event.toolName im Hook und kehre bei Routinevorgängen früh zurück. Die meisten Setups sichern Deployments, Löschungen, Zahlungen und ausgehende Nachrichten ab und lassen alles andere laufen. Wer bei jedem Aufruf fragt, gewöhnt Menschen daran, ungelesen auf „Genehmigen“ zu tippen.
Wer gibt den Aufruf frei?
Die Person, auf die die Nutzer-ID im Aufruf verweist. Bei deiner eigenen OpenClaw-Instanz bist das du. Bei einem Agenten für deine Nutzer übergibst du die jeweilige eigene Nutzer-ID. Dann entscheidet die betroffene Person. Sie sieht den Namen deines Produkts in der Benachrichtigung und tippt auf dem Sperrbildschirm auf „Genehmigen“ oder „Ablehnen“.

Lass deinen OpenClaw-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.