Guide des agents personnalisés
Installation, instrumentation, méthodes d’événements, exemple complet et problèmes courants.
Vous utilisez un framework ?
LangChain, CrewAI, LlamaIndex et Pydantic AI s’instrumentent automatiquement en un seul appel.
Installation
failproofai-sdk et s’importe en Python sous failproofai_sdk. Les extras de framework tels que failproofai-sdk[langgraph] installent le framework lui-même ; les adaptateurs sont toujours inclus dans la roue de base.
Connecter le démon Failproof
- Tableau de bord
- CLI
-
Allez dans Admin → Clés et créez une clé avec
events:add. - Connectez le démon Failproof au Cloud sur la machine de l’agent.
- Lancez une session instrumentée, puis trouvez son identifiant exact dans Observer → Événements.
-
Allez dans Observer → Sessions, sélectionnez le même environnement et ouvrez la trace reconstruite.

Configuration
Définition par variable d’environnement :
Les événements sont mis en file d’attente en mémoire et écrits en arrière-plan toutes les
flush_interval secondes, avec un vidage final à la sortie de l’interpréteur. Un processus tué brutalement perd ce qui n’avait pas encore été écrit.
Identité
Chaque événement appartient à une session et un agent. Les contextes renseignent les deux, vous n’avez donc rarement besoin de les passer explicitement :session_id ou agent_id explicitement fonctionne toujours et a la priorité. Si ni l’un ni l’autre n’est lié ou passé, l’appel lève TypeError plutôt que d’émettre un événement que Cloud ignorerait silencieusement.
L’identité repose sur des variables de contexte. Elle suit les tâches
asyncio automatiquement, mais pas les nouveaux threads — encapsulez un worker dans failproofai_sdk.propagate() ou ses événements seront non rattachés.Catalogue d’événements
Quinze méthodes. La plupart viennent par paires — vous appelez l’ouvrante, puis la fermante, et le SDK mesure l’écart.
Trois sont autonomes :
error, human_pause, human_interrupt.
Tous les champs, par méthode
Tous les champs, par méthode
Chaque méthode accepte également
session_id et agent_id, que les contextes renseignent pour vous. Tout ce qui est laissé à None est abandonné plutôt qu’envoyé comme null JSON, et chaque méthode retourne None.Appariement et durée
Une seule règle : donnez à l’événement de fermeture le même identifiant que son ouvreur. C’est ce qui les apparie et ce qui permet au SDK de mesurer l’écart.
Ne passez pas
duration_ms vous-même. Le SDK le mesure, et le passer lève une ValueError.
La seule exception est model_response, où seul vous connaissez la vraie latence du fournisseur. Passez un nombre entier de millisecondes — un float lève une exception, car la colonne est un entier 32 bits et resterait sinon vide.
Cas limites
Cas limites
- Les identifiants doivent seulement être uniques par type et par session. Un appel d’outil et un hook peuvent partager le même ; deux sessions simultanées peuvent réutiliser les mêmes identifiants sans collision.
- Ils ne sont pas limités à un agent. Une paire ouverte sous un agent et fermée sous un autre est quand même appariée — ce qui est le cas normal dans le code multi-agents.
request_idest optionnel mais recommandé. Sans lui, les événements de modèle sont appariés dans l’ordre d’arrivée, ce qui peut mener à des erreurs d’appariement entre deux appels simultanés dans le même agent.- Une paire répartie sur plusieurs processus est quand même appariée dans Cloud, mais le SDK ne peut pas la chronométrer — aucun des processus n’a vu les deux moitiés.
- Au maximum 10 000 ouvreurs peuvent attendre un fermant simultanément. Au-delà, le plus ancien est supprimé, ce qui empêche une fuite de croître indéfiniment.
Vos propres champs
Tout mot-clé supplémentaire que vous passez est stocké avec l’événement :Decimal, un set, des bytes, un objet modèle — est stocké sous forme de chaîne.
Ces cinq noms sont réservés et systématiquement rejetés : timestamp, session_id, agent_id, type, environment.
Livraison et vérification
- Tableau de bord
- CLI
Dans Observer → Événements, vérifiez que
agent_start existe en premier et agent_end en dernier. Ensuite, ouvrez Observer → Sessions et confirmez que les événements de modèle, d’outil, humains, de hook et d’erreur apparaissent dans l’ordre prévu. Utilisez l’identifiant de session comme clé principale de dépannage.$FAILPROOFAI_HOME/custom-agents/events, sinon ~/.failproofai/custom-agents/events. Les fichiers JSONL prouvent l’émission par le SDK ; un spool qui grossit indique un problème de configuration du démon ou de livraison, tandis qu’un spool vide pointe vers l’instrumentation ou la durée de vie du processus.
N’inspectez le spool que lorsque le démon est arrêté. Pendant son fonctionnement, il collecte et supprime chaque lot en quelques millisecondes, de sorte qu’un listage du répertoire sera en compétition avec le collecteur et affichera bien moins d’événements que ceux émis.

