Guide des agents personnalisés
Installation, instrumentation, les méthodes d’événements, un exemple concret et les problèmes courants.
Vous utilisez un framework ?
LangChain, CrewAI, LlamaIndex et Pydantic AI s’instrumentent eux-mêmes en un seul appel.
Installation
failproofai-sdk et importé 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 le wheel de base.
Connexion au daemon Failproof
- Dashboard
- CLI
-
Accédez à Admin → Keys et créez une clé avec
events:add. - Connectez le daemon Failproof au Cloud sur la machine de l’agent.
- Lancez une session instrumentée, puis retrouvez son ID exact sous Observe → Events.
-
Allez dans Observe → Sessions, sélectionnez le même environnement et ouvrez la trace reconstruite.

Configuration
Configurable via 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 flush final à la sortie de l’interpréteur. Un processus tué brutalement perd tout ce qui n’avait pas encore été écrit.
Identité
Chaque événement appartient à une session et à un agent. Les scopes remplissent les deux, vous n’avez donc rarement besoin de les passer :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 une TypeError plutôt que d’émettre un événement que Cloud ignorerait silencieusement.
L’identité est portée par des variables de contexte. Elle suit automatiquement les tâches
asyncio, mais pas les nouveaux threads — enveloppez un worker dans failproofai_sdk.propagate() sinon ses événements se retrouvent sans rattachement.Catalogue d’événements
Quinze méthodes. La plupart se présentent en paires — vous appelez l’ouvreur, puis le fermeur, et le SDK mesure l’intervalle.
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 scopes remplissent pour vous. Tout ce qui est laissé à None est omis plutôt qu’envoyé en JSON null, et chaque méthode retourne None.Appariement et durée
Une seule règle : donnez à l’événement fermant le même id que son ouvreur. C’est ce qui les apparie et ce qui permet au SDK de mesurer l’intervalle.
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 latence réelle du fournisseur. Passez un nombre entier de millisecondes — un float lève une exception, car la colonne est un entier 32 bits et serait sinon vide.
Cas limites
Cas limites
- Les ids n’ont besoin d’être uniques que par type et par session. Un appel d’outil et un hook peuvent partager le même ; deux sessions s’exécutant simultanément peuvent réutiliser les mêmes ids 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 mise en correspondance — ce qui est le cas normal dans du 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, donc deux appels concurrents dans le même agent peuvent être mal appariés.- Une paire répartie sur plusieurs processus est toujours mise en correspondance dans Cloud, mais le SDK ne peut pas la chronométrer — aucun processus n’a vu les deux moitiés.
- Au maximum 10 000 ouvreurs attendent un fermeur à la fois. Au-delà, le plus ancien est abandonné, de sorte qu’une fuite ne peut pas 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 rejetés d’emblée : timestamp, session_id, agent_id, type, environment.
Livraison et vérification
- Dashboard
- CLI
Dans Observe → Events, vérifiez que
agent_start existe en premier et agent_end en dernier. Ouvrez ensuite Observe → 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’ID 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 en croissance indique un problème de configuration du daemon ou de livraison, tandis qu’un spool vide indique un problème d’instrumentation ou de durée de vie du processus.
N’inspectez le spool que lorsque le daemon est arrêté. Pendant son fonctionnement, il collecte et supprime chaque lot en quelques millisecondes, donc un listage de répertoire est en concurrence avec le collecteur et affiche bien moins d’événements que ce qui a été émis.

