4 points par GN⁺ 2026-03-28 | Aucun commentaire pour le moment. | Partager sur WhatsApp
  • 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.

Aucun commentaire pour le moment.