Intervention humaine pour Hermes

L’intervention humaine pour les agents Hermes, sur téléphone.

Ajoutez un appel dans votre outil Hermes sensible : il attendra l’approbation de votre utilisateur sur son téléphone.

Ce que propose Hermes

Approbation des commandes dangereuses et pre_tool_call

Hermes détecte déjà les commandes dangereuses et demande avant de les exécuter : autoriser une fois, pour la session, toujours, ou refuser. Par défaut, cette question attend dans le terminal. Les plugins peuvent aussi enregistrer un hook pre_tool_call exécuté avant tout outil.

Le point de blocage

  • L’approbation intégrée interroge la personne qui exécute Hermes, pas l’utilisateur concerné par l’action.
  • Hermes abandonne un hook pre_tool_call après 30 secondes par défaut et bloque l’appel.
  • Le mode gateway fait passer de nombreux utilisateurs par un seul agent ; un identifiant de session désigne une conversation, pas une personne.

La solution

Pushary recueille la réponse de votre utilisateur.

Un gestionnaire d’outil Hermes est une fonction Python ordinaire. 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 plugin enregistre un outil ask_human dont le gestionnaire appelle decisions.ask(). La question arrive sur le téléphone de votre utilisateur et le gestionnaire attend la réponse, 55 secondes par défaut. Tout résultat autre qu’un oui explicite revient comme non approuvé.

bash
pip install pushary
deux appels
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.",
    )

Ou installez le plugin Pushary depuis le catalogue Hermes

Le plugin Pushary figure dans le catalogue de plugins Hermes Agent : Hermes installe donc la version examinée par Nous. Il transmet les approbations de commandes dangereuses d’Hermes à votre téléphone, ajoute pushary_ask et pushary_notify et, avec l’offre Partner, pushary_ask_end_user interroge un de vos utilisateurs. Définissez votre clé API une fois et ne lancez pas un second installateur sur la copie du catalogue.

installation depuis le catalogue
hermes plugins install pushary
export PUSHARY_API_KEY="pk_xxx.xxx"

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

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 le SDK Python

    Hermes v0.21.6 et les versions ultérieures gèrent leur propre Python et n’y acceptent pas d’installation pip. Utilisez alors le plugin Pushary (npx pushary@latest setup --agents hermes) : pushary_enroll et pushary_ask_end_user interrogent vos propres utilisateurs. Sur une version plus ancienne, exécutez pip install pushary avec le Python de son virtualenv. Définissez PUSHARY_API_KEY.

  2. 02

    Connectez votre utilisateur une seule fois

    Un appel SDK par utilisateur renvoie un lien de connexion. Votre utilisateur l’ouvre sur son téléphone avec l’application Pushary gratuite. Sans compte ni paiement.

  3. 03

    Enregistrez un outil ask_human

    Dans register(ctx) de votre plugin, appelez ctx.register_tool avec un gestionnaire qui appelle px.decisions.ask(). Prenez l’identifiant utilisateur depuis votre propre modèle utilisateur, jamais depuis les arguments du modèle.

  4. 04

    Agissez selon la réponse

    Renvoyez un résultat non approuvé pour tout résultat autre qu’un oui explicite. Un non, une demande expirée ou l’absence de réponse signifie que l’agent n’agit pas.

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 Hermes

Une session n’est pas une personne
Le mode gateway fait passer de nombreux utilisateurs par un seul agent. Un identifiant de session désigne une conversation et cesse de correspondre à la personne dès qu’elle ouvre un second onglet ou revient le lendemain. Associez chaque approbation à votre propre identifiant utilisateur pour qu’elle reste liée à la personne responsable de l’action.
Les contrôles par hook ont 30 secondes
Si vous posez la question depuis un hook pre_tool_call plutôt qu’un outil, Hermes abandonne le hook après plugins.hook_callback_timeout, 30 secondes par défaut, et bloque l’appel. Gardez l’attente dans ce délai ou augmentez le réglage.
Un outil que le modèle peut ignorer ne bloque rien
ask_human est un outil que le modèle choisit d’appeler : il reste facultatif. Une consigne « demander d’abord » ne bloque pas un remboursement. Appelez decisions.ask() dans le gestionnaire de l’outil de remboursement et exécutez le remboursement uniquement si approved vaut true.

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 spécifique à Hermes ?
Oui. Le plugin Pushary Hermes envoie les approbations de commandes dangereuses d’Hermes à votre téléphone et, avec l’offre Partner, ajoute des outils pour connecter et interroger vos utilisateurs. npx pushary@latest setup --agents hermes l’installe dans ~/.hermes/plugins/pushary. Pour contrôler entièrement qui répond à quelle action sur un Hermes antérieur à v0.21.6, enregistrez votre propre outil avec pip install pushary, comme ci-dessus.
Comment l’agent attend-il la réponse ?
decisions.ask() maintient le gestionnaire d’outil ouvert jusqu’à la réponse de votre utilisateur ou la fin de l’attente, 55 secondes par défaut. Hermes maintient l’appel d’outil ouvert pendant ce temps : l’agent poursuit donc avec la réponse de votre utilisateur. Pushary conserve ensuite la demande et enregistre aussi une réponse tardive.
Chaque utilisateur final peut-il recevoir les approbations sur son téléphone ?
Oui. Passez l’identifiant de chaque utilisateur depuis votre modèle utilisateur. En mode gateway, ne réutilisez pas l’identifiant de session Hermes : une session désigne une conversation, pas la personne responsable de l’action.
Que voit l’agent en cas de refus ou de délai dépassé ?
Le gestionnaire renvoie un résultat non approuvé avec son statut : le modèle sait ainsi que l’action a été refusée plutôt qu’ignorée, et la réponse est enregistrée. La distinction compte : un refus est une information à prendre en compte, tandis qu’un délai dépassé implique généralement de demander à quelqu’un d’autre.
Un seul déploiement Hermes peut-il gérer les approbations de nombreux clients ?
Oui. Le mode gateway associé à votre propre identifiant utilisateur sur chaque appel le permet. Un seul processus d’agent sert tout le monde, et chaque decisions.ask() joint la personne dont l’action concerne les données ou l’argent. Elle se connecte avec un lien et l’application Pushary gratuite, sans compte ; la page de décision affiche votre nom et votre logo.

Laissez votre agent Hermes 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.