Huit agents IA, un seul boîtier AMD : ma stack d'agents locaux (OpenClaw)
- Catégorie
- IA et LLM locaux
- Publié
- 11 juillet 2026
- Par
- Jacob Lloyd — rédigé avec l'aide de l'IA, une fois le projet terminé
- Temps de lecture
- 11 min de lecture
En clair : Une visite guidée des huit assistants IA qui tournent sur un seul petit ordinateur chez moi, chacun avec son propre nom et son propre rôle — répondre aux questions de la famille, rédiger des brouillons d'e-mails. La majorité du travail ne coûte rien car il tourne en local, et les conversations privées ne quittent jamais la maison. Un aperçu de ce à quoi peut ressembler une installation d'IA domestique sans frais mensuels.
Il y a en ce moment huit agents IA nommés qui vivent sur un mini PC chez moi. Ils ont des rôles, une hiérarchie, et un chat de groupe que toute ma famille peut ouvrir depuis un téléphone. Les faire tous tourner coûte environ 24 $ par mois — l'API pas chère de DeepSeek assure la réflexion du quotidien, et les tâches qui ne doivent pas sortir de la maison tournent sur des modèles locaux gratuits.
tl;dr
- Ce que c'est : OpenClaw, une passerelle d'agents IA auto-hébergée, qui fait tourner 8 agents nommés — chacun avec son rôle, son routage de modèle et ses permissions d'outils — derrière une appli de chat que j'ai construite.
- Ce que ça coûte : environ 24 $/mois d'API DeepSeek pour le travail quotidien ; 0 $ pour les modèles locaux qui couvrent la vision et le travail privé.
- Ce qu'il vous faut : une machine avec beaucoup de mémoire (la mienne : 128 Go unifiés, 64 Go en VRAM), Linux, et de la patience pour systemd.
- Ce que vous obtenez : une seule URL de chat pour toute la maison, des agents qui se passent le travail et qui vont chercher ceux qui se taisent, de la génération d'images en local, et des brouillons d'e-mails que rien n'envoie sans moi.
Ce qu'on obtient
Le quotidien d'abord. Voici DisPatch, l'appli de chat que j'ai construite devant la passerelle — les captures sont des données de démo en bac à sable tirées de cet article, mes vrais fils de discussion restent les miens.



| Quoi | Le chiffre |
|---|---|
| Agents nommés | 8 (Bits, Flash, Brains, Hermes, Doxy, Charley, Alpha, Beta) |
| Modèles cloud dans la table de routage | 2 (DeepSeek flash et pro) |
| Entrées de modèles locaux | ~7 sur le boîtier principal, 6 de plus sur un second PC pour le débordement |
| Plus gros modèle local | un MoE à 120 milliards de paramètres, tournant sur un GPU intégré |
| Facture cloud mensuelle mesurée | environ 24 $ (DeepSeek, le principal poste) |
| Port de la passerelle | 18789 |
| Port du chat | 8765, sur le réseau domestique |
| Sauvegarde nocturne | 02:17 |
| Battement de cœur de la passerelle | toutes les 2 heures |
| Fenêtre du chien de garde | 5 minutes, puis un travailleur silencieux se fait relancer |
Le boîtier
Tout ça tourne sur une seule machine. Pas de rack, pas de location de GPU cloud, pas de deuxième hypothèque.
- AMD Ryzen AI Max+ 395 (« Strix Halo ») — 32 threads, GPU intégré Radeon 8060S
- 128 Go de mémoire unifiée, dont 64 Go réservés comme VRAM du GPU (l'OS voit environ 62 Go restants)
- 1 To de NVMe, avec Bazzite Linux (immuable, basé sur Fedora Atomic)
- ROCm, pas CUDA — se comporte un peu différemment de ce que supposent les tutoriels, mais ça marche
Ce prélèvement de 64 Go, c'est le point important : de quoi faire tourner localement un modèle mixture-of-experts de 120 milliards de paramètres, à une vitesse utilisable, sur un GPU intégré. Un second PC sur mon réseau sert de débordement et de modèles de secours.
La distribution
Plutôt qu'un seul onglet de chat qui parle à un seul modèle, j'ai un petit bureau. Chacun a un rôle et un modèle adapté — le cloud DeepSeek pas cher pour l'essentiel du travail, des modèles locaux gratuits là où la confidentialité ou la vision comptent. (Les modèles locaux étaient le plan de départ ; en pratique, leurs temps de chargement et leur plafond plus bas en ont fait le palier de secours, pas celui par défaut.)
| Agent | Rôle | Modèle principal | Tourne sur |
|---|---|---|---|
| Bits | Accueil. Me parle, n'exécute elle-même aucun outil, délègue tout | DeepSeek (cloud, palier flash) | cloud |
| Flash | Tâches rapides — résumés, recherches, modifications de routine. Zéro personnalité, outil pur | DeepSeek (cloud, palier flash) | cloud |
| Brains | Réflexion de fond — architecture, débogage, relecture de code | DeepSeek (cloud, palier pro) | cloud |
| Hermes | Déploiements et codage, relié via un runtime d'agent séparé. Dry-run par défaut ; les vrais déploiements ont besoin de mon feu vert explicite | DeepSeek (cloud, palier pro) | cloud |
| Doxy | Travail de fond en masse. Aucun compteur d'API sur un modèle local, donc ça tourne toute la nuit gratuitement | MoE 120B (local) | ce boîtier |
| Charley | Vision — regarde vraiment les captures d'écran, les diagrammes, les fenêtres d'erreur | Gemma-4 31B, compatible vision (local) | ce boîtier |
| Alpha / Beta | Bots d'« accueil » sûrs pour les appareils de la famille, outils en lecture seule uniquement | flash (cloud) / Gemma-4 26B (local) | mixte |
Chaque agent a des modèles de secours — si le principal est occupé ou en panne, il bascule discrètement sur un modèle de repli, cloud ou local. Beta et Charley sont strictement limités aux outils en lecture seule : chercher des infos, faire des images, jamais toucher aux fichiers ni exécuter de commandes. Exactement ce qu'on veut d'un bot qu'un enfant de dix ans peut ouvrir. La messagerie entre agents est activée, verrouillée par une liste blanche de qui peut parler à qui.
Les pièces
Rien de tout ça n'est un seul programme. Ce sont huit petits services, chacun avec une seule tâche, tous supervisés par systemd plutôt que par un script nounou.
| Service | Ce qu'il fait | Où |
|---|---|---|
openclaw-gateway.service | La passerelle OpenClaw — le cerveau de la stack | port 18789, loopback uniquement, auth par jeton |
local-chat.service | DisPatch, le frontend de chat | port 8765, LAN |
lm-studio.service | Serveur de modèles locaux (un AppImage extrait) qui sert tous les modèles locaux, plus le modèle d'embedding | port 1234, local |
comfyui.service | Génération d'images (ComfyUI + Z-Image Turbo sur l'iGPU) — les agents et le chat peuvent le démarrer et l'arrêter | local, à la demande |
openclaw-email.service | Tri des e-mails — rédige des réponses, n'en envoie jamais | — |
hermes-gateway.service | Une passerelle séparée qui relie l'agent de déploiement/codage | — |
openclaw-backup.timer | Sauvegarde nocturne | se déclenche à 02:17 |
dispatch-tracker-watch.path | Le déclencheur du chien de garde (détails plus bas) | — |
Chaque unité se redémarre toute seule en cas d'échec, réglée pour qu'un crash coûte quelques secondes d'indisponibilité, pas un appel à 2 heures du matin. L'unité LM Studio vérifie l'état de sa propre API avant de se déclarer prête. La config de la passerelle se recharge à chaud, donc la plupart des changements de routage ne demandent aucun redémarrage. La mise à jour automatique est désactivée exprès — une mise à jour a cassé la stack exactement une fois, et depuis, les montées de version se font sur mon calendrier. Pour vérifier tout le zoo :
systemctl --user status openclaw-gateway local-chat lm-studio comfyui
journalctl --user -u openclaw-gateway -f
Comment un message de chat se déplace réellement
Le trajet est celui qu'on devine : navigateur → DisPatch → passerelle → le modèle de l'agent, local ou cloud, et retour par le même chemin. Deux détails comptent : si le modèle principal est occupé ou en panne, un modèle de secours répond à sa place, et la livraison retour vers le navigateur est confirmée par des chemins redondants, donc une connexion coupée ne perd pas le message.
Faire du vrai travail
Les réponses de chat, c'est le cas facile. Le schéma utile, c'est de demander quelque chose de gros et de laisser le roster décider qui s'en occupe.
Le gros du travail — traitement d'images en masse, longs refactorings, tout ce qui est ennuyeux — part chez Doxy sur le 120B local gratuit, qui va broyer pendant une heure pour le prix de l'électricité.
Se surveiller soi-même
Un travail délégué qui meurt en silence est pire qu'un travail jamais commencé — on ne le découvre qu'en allant vérifier. D'où un chien de garde, la seule pièce de cette stack dont je suis vraiment fier.
Ça a remplacé une idée franchement mauvaise : un cron LLM perpétuel toutes les cinq minutes. Il spammait le modèle et provoquait lui-même ses propres dépassements de délai — le chien de garde créait exactement le problème qu'il était censé attraper. La version pilotée par événements ne s'arme que quand il y a un envoi à surveiller, puis s'efface dans tous les cas.
Ce que ça coûte
L'économie, c'est tout l'intérêt de séparer le roster. Tarifs cloud, par million de jetons :
| Modèle | Entrée | Sortie |
|---|---|---|
| DeepSeek palier flash (Bits, Flash, Alpha) | 0,14 $ / M jetons | 0,28 $ / M jetons |
| DeepSeek palier pro (Brains, Hermes) | 0,435 $ / M jetons | 0,87 $ / M jetons |
| 120B local (Doxy), vision locale (Charley), Gemma local (Beta) | 0 $ | 0 $ |
Même le palier « cher » représente des fractions de centime par requête typique. La vraie économie tient à l'endroit où se trouve le volume : les tâches répétitives de plusieurs milliers de jetons partent vers le modèle local gratuit ; le compteur cloud ne tourne que pour les jugements qui comptent. La recherche en mémoire tourne elle aussi sur un modèle d'embedding local, donc les recherches constantes en arrière-plan ne touchent jamais non plus une API payante.
Les règles qu'il ne franchira pas
Une passerelle capable de lancer des agents et d'exécuter des outils a besoin de garde-fous qui ne dépendent pas de la bonne volonté du modèle.
- L'accès à la caméra, l'enregistrement d'écran, les SMS et les commandes contacts/calendrier sont refusés d'office au niveau de la passerelle — pas « l'agent ne devrait pas », vraiment bloqué.
- Beta et Charley n'ont que des outils en lecture seule. Pas d'écriture de fichiers, pas de shell, peu importe la gentillesse de la demande.
- Les plugins suivent une liste blanche stricte de sept éléments : deux fournisseurs de modèles locaux, DeepSeek, la recherche web Brave, un navigateur headless, la mémoire agent-à-agent, et le pont de déploiement. Rien d'autre ne se charge, installé ou non.
- Hermes — le seul agent qui peut toucher la production — fait du dry-run par défaut. Un vrai déploiement a besoin de mon feu vert explicite, et les déploiements de mon site professionnel sont derrière le même verrou.
Pièges à éviter
La liste honnête — ce qui a vraiment cassé, dans l'ordre où ça m'a mordu :
- Les modèles locaux ont besoin de
reasoning: trueexplicite. Les miens émettent un flux de raisonnement séparé avant la vraie réponse ; avec le drapeau mal réglé, la passerelle prenait ça pour un blocage et tuait la requête vers 6,5 minutes. Le modèle n'était pas coincé — il réfléchissait à voix haute sur un canal que la passerelle ne connaissait pas. - Tous les délais par défaut sont calibrés pour la vitesse du cloud. Un 120B sur un iGPU est lent, pas cassé. J'ai relevé les délais de fournisseur, de tour et d'abandon à environ 20, 30 et 35 minutes ; avant ça, les longues tâches se faisaient tuer en plein raisonnement pour le crime d'être locales.
- L'AppImage de LM Studio plantait avec un SIGBUS chaque fois que son point de montage FUSE
/tmpétait recyclé sous pression mémoire — une vraie erreur de bus, pas un kill OOM. Extraire l'AppImage et le faire tourner comme un simple service systemd a réglé le problème. - La liste blanche de messagerie est sensible à la casse, mais la passerelle met les ID d'agents en minuscules en interne. Les envois entre agents échouaient jusqu'à ce que j'ajoute des doublons en minuscules de chaque nom. Aucune erreur, aucune ligne de log — juste rien qui n'arrivait.
- La messagerie entre agents a besoin de deux interrupteurs séparés — le drapeau de fonctionnalité et le réglage de visibilité de session. Activez l'un sans l'autre, et le réglage par défaut bloque silencieusement chaque envoi.
- Un chien de garde LLM planifié est une panne auto-infligée — l'histoire du cron toutes les cinq minutes ci-dessus. Le pilotage par événements a largement battu le planifié.
- Un agent a un jour ressuscité sa propre mauvaise config. Une passe de réconciliation d'identité a réinjecté un fichier d'espace de travail périmé et a fait boucler la passerelle en crash-loop. Une config qu'un agent peut toucher est une config qui peut vous mordre en retour.
- Une liste blanche de plugins non vide est absolue. Marquer une entrée
enabled: truene sert à rien si son ID n'est pas aussi dans la liste blanche. C'est la liste blanche qui gagne, en silence.