- Une architecture qui relie un agent IA basé sur IRC à un site portfolio personnel, afin que les visiteurs puissent obtenir des réponses fondées sur l’analyse réelle du code de dépôts GitHub
- Conçu non pas comme un simple chatbot résumant un CV, mais comme un agent exécutable capable de cloner des dépôts, calculer des tests et vérifier du code
- Le système est séparé en deux agents, nullclaw pour la partie publique et ironclaw pour la partie privée, qui communiquent de façon sécurisée via le réseau Tailscale
- En adoptant le protocole IRC comme couche de transport, il combine auto-hébergement, standardisation et faible coût, tout en répartissant les rôles entre les modèles Haiku 4.5 et Sonnet 4.6 pour limiter les dépenses à 2 $ par jour
- L’ensemble du système fonctionne avec des binaires de moins de 10 Mo et moins de 5 Mo de mémoire, et est présenté comme un exemple d’infrastructure IA légère conciliant sécurité, coût et transparence
Construire un portier numérique
- Une architecture qui déploie un agent IA sur un VPS à 7 $/mois, utilise un serveur IRC personnel comme couche de transport et le relie à des dépôts GitHub
- Les visiteurs peuvent poser des questions à l’IA depuis le site portfolio et recevoir des réponses fondées sur le code réel
- Il ne s’agit pas d’un simple chatbot résumant un CV, mais d’un système fournissant des réponses concrètes grâce à l’analyse de code
Les limites du « chatbot qui parle du CV »
- La plupart des chatbots de portfolio se contentent d’injecter le contenu d’un CV dans le modèle pour le reformuler
- Cette approche n’apporte pas d’informations nouvelles et ne produit qu’une conversation de façade
- À des questions comme « Comment gérez-vous la couverture de tests ? », il faut des réponses concrètes, par exemple cloner le dépôt et calculer le nombre de tests
- Pour cela, une infrastructure permettant un accès direct au code et son analyse a été mise en place
Architecture du système
- L’ensemble est composé de deux agents, deux serveurs et deux périmètres de sécurité
- nullclaw : portier public, binaire Zig de 678 Ko, environ 1 Mo de RAM utilisé
- Accueille les visiteurs, répond aux questions sur les projets, clone les dépôts GitHub et effectue des vérifications fondées sur le code
- ironclaw : agent backend privé, exécuté sur un système distinct
- Peut accéder aux e-mails, au calendrier et au contexte personnel
- Reçoit de nullclaw les demandes complexes via le canal IRC #backoffice
- Les deux systèmes sont reliés via Tailscale, et le serveur public n’a pas accès aux données personnelles
Pourquoi avoir choisi IRC
- Cohérence esthétique : le site portfolio repose sur une interface terminal, donc un client IRC s’y intègre naturellement
- Auto-hébergement complet : le serveur IRC Ergo, le client web gamja et nullclaw fonctionnent tous sur une infrastructure propre
- Protocole simple et standardisé : IRC, vieux de 30 ans, implique zéro dépendance fournisseur et aucun risque de changement d’API
- Le même agent fonctionne à l’identique non seulement avec le client web, mais aussi avec le client terminal irssi
Choix et conception des modèles
- Utiliser un grand modèle partout est inefficace ; les modèles sont donc différenciés selon les rôles
-
Haiku 4.5** : gère la conversation et les requêtes simples,** avec des réponses à très faible latence
- Sonnet 4.6 : utilisé uniquement pour l’analyse de code et le raisonnement complexe
- Plafond de coût : limité à 2 $ par jour et 30 $ par mois
- Cela évite toute explosion des coûts due à un usage malveillant ou à des conversations excessives
- Une structure de raisonnement en couches permet d’obtenir à la fois rapidité et efficacité économique
Conception de la sécurité
- SSH : connexion root désactivée, authentification par clé uniquement, port non standard
- Pare-feu : seuls SSH, IRC (TLS) et HTTPS (WebSocket) sont ouverts
- Proxy Cloudflare : terminaison TLS, limitation de débit et filtrage des bots
- Sandbox de l’agent : uniquement des outils en lecture seule, limite de 10 actions par heure
- Contrôle des coûts : plafond strict de 2 $ par jour et 30 $ par mois
- Journaux d’audit et mises à jour automatiques activés
- Surface d’attaque minimale : seuls les services ergo et nullclaw sont exécutés, sans diffusion directe de contenu web
- En cas de compromission, l’étendue des dégâts est limitée à un bot IRC plafonné à 2 $/jour
Composition de la pile de communication
- Tous les composants sont compacts, auto-hébergés et remplaçables
- Ergo : serveur IRC, binaire Go unique, 2,7 Mo de RAM
- gamja : client web IRC, page statique de 152 Ko, servie derrière Cloudflare
- nullclaw : runtime d’agent IA, binaire Zig de 4 Mo, environ 1 Mo de mémoire utilisée
- L’ensemble du système fonctionne avec moins de 10 Mo de binaires et moins de 5 Mo de mémoire au repos
- Il peut fonctionner sans problème même sur le niveau de VPS le moins cher
Fonctions réelles de nully (agent public)
- Identifier les langages de programmation : via un contexte préchargé et la vérification des dépôts
- Analyser la structure des tests : cloner les dépôts puis lire directement les fichiers de test pour en rendre compte
- Expliquer les projets : par exemple, répondre sur les détails du projet Fracture à partir du code
- Fournir les coordonnées : uniquement des informations de contact exactes, sans inventer de données
- Demandes de prise de rendez-vous : transmises à ironclaw via le protocole Google A2A, avec retour structuré du résultat
- Le visiteur ne perçoit pas le basculement vers le backend
Implémentation A2A
- Prend en charge le protocole Google A2A (v0.3.0) et assure une gestion de l’état des tâches basée sur JSON-RPC
- L’outil
a2a_call envoie des messages à un agent distant et analyse l’état des tâches (terminée / échouée / en cours)
- HTTPS obligatoire, mais HTTP autorisé au sein du réseau interne Tailscale pour faciliter le débogage
-
Structure côté ironclaw
- L’instance nullclaw utilise le passerelle LLM d’ironclaw comme proxy, sans disposer de sa propre clé API
- Une seule clé API et une seule relation de facturation sont conservées
- ironclaw traite toutes les requêtes d’inférence et en assume le coût
Sécurité du handoff
- Le point de terminaison A2A présente un risque d’injection de prompt, d’où des restrictions strictes
- Les demandes pouvant être transmises à ironclaw se limitent au planning, aux coordonnées et aux disponibilités
- La transmission de commandes arbitraires est refusée
- Le point de terminaison A2A d’ironclaw est protégé par un pare-feu réservé à Tailscale
- Les deux agents s’exécutent en mode surveillance avec une liste blanche de commandes autorisées
- nully décide s’il faut ou non faire remonter une demande, afin d’éviter toute exécution incontrôlée de commandes
Enseignements tirés de la mise en place
- Le choix du modèle fait partie de la conception du système et affecte directement le coût, la latence et l’expérience
- La communication, la sécurité et l’infrastructure ont demandé plus de temps que l’agent lui-même
- La simplicité et l’ouverture d’IRC en font une couche de transport idéale pour les agents IA
- La séparation nullclaw–ironclaw est le cœur du modèle de sécurité
- La combinaison du protocole A2A et des canaux de logs IRC apporte à la fois une communication structurée et une visibilité en temps réel
- Éviter la duplication des identifiants : le proxy via la passerelle d’ironclaw permet de conserver une seule clé API et une seule relation de facturation
Comment l’essayer
- Rendez-vous sur georgelarson.me/chat ou tapez
irc dans le terminal de la page d’accueil
- Avec un client IRC :
irc.georgelarson.me, port 6697 (TLS), canal #lobby
- nully est en attente et peut échanger avec les visiteurs en temps réel
Aucun commentaire pour le moment.