Intervention humaine pour OpenClaw

L’approbation humaine des appels d’outils OpenClaw, sur téléphone.

Un hook before_tool_call bloque les outils OpenClaw sensibles jusqu’à l’approbation de votre utilisateur sur son téléphone.

Ce que propose OpenClaw

Le hook before_tool_call

Un plugin OpenClaw peut enregistrer un hook before_tool_call. Il s’exécute avant l’outil ; renvoyer { block: true, blockReason } arrête l’appel et en indique le motif au modèle. C’est le bon emplacement pour une approbation : il bloque l’action au lieu de la signaler après coup.

Le point de blocage

  • Seul, le hook ne joint une personne qu’à travers les approbations d’OpenClaw, par exemple dans une messagerie.
  • Il ne dispose pas d’une attente qui survit à un redémarrage pendant la décision.
  • Il ne conserve aucun historique de ce qui a été autorisé ou bloqué, ni de l’auteur de la décision.

La solution

Pushary recueille la réponse de votre utilisateur.

before_tool_call peut arrêter un outil. Un appel decisions.ask() à l’intérieur envoie la question sur le téléphone de votre utilisateur, attend une approbation ou un refus et enregistre la réponse. Le hook bloque tout résultat autre qu’un oui.

Le plugin protège trois outils : deploy_service, delete_record et send_email. Pour ceux-ci, le hook appelle decisions.ask() et renvoie { block: true } sauf si votre utilisateur approuve. Tous les autres appels passent sans intervention du hook. Chaque réponse est enregistrée.

bash
npm i @pushary/server
deux appels
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." }
      }
    })
  },
})

Fonctionnement

De l’installation à la première réponse

Connectez votre utilisateur une seule fois. Exigez son approbation à l’étape sensible. Pushary envoie la question, attend la réponse et l’enregistre.

  1. 01

    Installez et définissez votre clé

    Exécutez npm i @pushary/server dans l’espace de travail de votre plugin et définissez PUSHARY_API_KEY.

  2. 02

    Connectez votre utilisateur une seule fois

    Un appel SDK renvoie un lien de connexion. La personne qui approuve l’ouvre sur son téléphone avec l’application Pushary gratuite. Sans compte ni paiement.

  3. 03

    Enregistrez le hook

    Dans le point d’entrée de votre plugin, enregistrez un hook before_tool_call qui appelle decisions.ask() pour les noms d’outils protégés.

  4. 04

    Bloquez tout résultat autre qu’un oui

    Renvoyez { block: true } avec un blockReason sauf si la réponse est une approbation explicite, afin qu’un non ou un délai dépassé arrête l’appel.

Une question peut demander un oui ou un non, un choix dans une liste ou une réponse écrite. Chaque réponse est enregistrée.

Avant la mise en production

Les pièges à éviter avec OpenClaw

Posez la question dans le hook, pas dans un outil
Un outil que le modèle choisit d’appeler est facultatif, et une consigne « demander d’abord » n’impose aucun contrôle. before_tool_call s’exécute à chaque appel, que le modèle le veuille ou non : l’approbation doit donc s’y trouver.

L’offre Partner

Votre agent interroge vos utilisateurs, pas seulement vous

Proposez votre agent à vos utilisateurs. Chacun approuve ses actions sensibles depuis son téléphone, sous votre marque.

$99/ mois, tous les frameworks inclus
Start free

Vos utilisateurs ne créent jamais de compte Pushary et ne nous paient rien.

Vos utilisateurs répondent sur leur propre téléphone

Connectez chaque utilisateur une seule fois avec un lien. Il installe l’application Pushary gratuite et répond depuis l’écran verrouillé, sans créer de compte.

Sans réponse, c’est non

Exécutez l’action uniquement après une approbation explicite. Une demande en attente, expirée ou annulée ne vaut jamais un oui. Pushary conserve chaque demande : votre code peut la reprendre après un redémarrage.

Joignez-les sur leur téléphone

L’application passe en premier, car elle seule affiche Approuver et Refuser sur l’écran verrouillé. Les notifications du navigateur viennent ensuite. Vous n’avez aucun système d’envoi à construire.

Chaque réponse est enregistrée

Chaque réponse est enregistrée avec son auteur et sa date. Vous pouvez effectuer des recherches et exporter les réponses. Avec une URL de rappel, chaque réponse est aussi envoyée à votre serveur par webhook signé.

FAQ

Les réponses à vos questions

Existe-t-il un package @pushary/openclaw ?
Non, et vous n’en avez pas besoin. Un hook OpenClaw est une fonction asynchrone ordinaire : appeler decisions.ask() de @pushary/server dans before_tool_call suffit à l’intégration. Le même package connecte le téléphone de chaque utilisateur et les deux mêmes appels fonctionnent avec tout framework.
Comment bloquer un appel d’outil ?
Renvoyez { block: true, blockReason } depuis le hook before_tool_call. Le blocage est définitif : l’outil ne s’exécute pas et le modèle reçoit le motif. Rédigez blockReason en termes simples, par exemple « Votre utilisateur a refusé le déploiement », pour que le modèle s’arrête au lieu de tenter la même action autrement.
Que se passe-t-il si le délai est dépassé ?
L’appel est arrêté. decisions.ask() signale la demande comme non approuvée après 55 secondes par défaut, votre hook renvoie block et l’outil ne s’exécute pas. Pushary conserve la demande et enregistre aussi une réponse tardive.
Puis-je protéger certains outils seulement ?
Oui. Vérifiez event.toolName dans le hook et retournez immédiatement pour les opérations courantes. La plupart des configurations protègent les déploiements, suppressions, paiements et messages sortants, et laissent le reste s’exécuter. Demander à chaque appel habitue les personnes à toucher Approuver sans lire.
Qui approuve l’appel ?
La personne désignée par l’identifiant utilisateur de l’appel. Pour votre propre instance OpenClaw, c’est vous. Pour un agent au service de vos utilisateurs, passez l’identifiant propre à chacun afin que la personne concernée décide. Elle voit le nom de votre produit dans la notification et touche Approuver ou Refuser sur l’écran verrouillé.

Laissez votre agent OpenClaw demander avant d’agir.

Connectez un utilisateur une seule fois, posez une question en un appel et exécutez l’action uniquement après un oui. Chaque réponse est enregistrée.

Start free

Offre Partner, $99 par mois. Vos utilisateurs ne créent jamais de compte Pushary et ne nous paient rien.