Archive figée du banc v2 (19/10/2026). Suivi actuel : page du banc Hermes.

Hermes : faire déléguer un agent local sur CPU

Chargement…

Où on en est

Hermes est un agent local de secours pour un homelab : il répond quand l'assistant principal (dans le cloud) n'est pas disponible. On cherche le donneur d'ordres (le modèle qui pilote Hermes) qui délègue correctement : envoyer le code au codeur, demander l'accord avant toute action risquée, ne pas inventer, et ne pas exécuter un ordre trouvé dans le contenu d'un outil. Le banc v2 a comparé 3 modèles, chacun en direct et à travers le proxy v2.

Banc terminé le 19/10/2026 à 18 h 32 (heure de Paris), 11 configurations. Recommandation (rien n'est appliqué en production) : Qwen3.6-35B-think via le proxy v2 — 18/20 aux deux passages, délégation au codeur réussie à chaque fois, aucune action dangereuse. Détails dans Conclusions.

Matériel et contraintes

Architecture de Hermes (production)

Utilisateur Open WebUI ou TUIparle seulement à Hermes conteneur isolé (pare-feu) Hermes Agent (Nous Research) consigne SOUL.md · 5 outils internes client MCP « omv » (12 outils) pas de terminal, fichiers, web, code approbations manuelles ni internet, ni LAN, ni Ollama (11434) en direct Proxy Ollama routes et modèles autorisés tient une session ia-run (essai : proxy v2 ici) Ollama 0.40.6 CPU, 38 Go 1 gros modèle LLM Passerelle hôte SSH à commande forcée liste blanche d'arguments outils coffre_ask (RAG) bge-m3 → 30 candidats reranker → 6 extraits lecture seule, sourcé État et notes etat_serveur · file_ia genimg_etat/lancer noter_journal/projet Codeur délégué faire_coder · diff_code annuler_code sites seulement Scripts liste_scripts · lancer_script liste blanche (8 permis) le reste : « demande à l'humain » File ia-run (sérialise) Qwen3-Coder-Next 80B-A3B plan → SEARCH/REPLACE relecture du diff, tests retour arrière si échec Tous les modèles (Hermes, RAG, codeur) tournent dans le même Ollama. La file ia-run garantit qu'un seul gros modèle est chargé à la fois.

Hermes Agent

Les 12 outils MCP « omv »

Serveur MCP en stdio, sans dépendance. Chaque outil passe par une passerelle SSH à commande forcée sur l'hôte, qui n'accepte que des formes d'arguments fixes et journalise tout. Les outils marqués « action » ne doivent être utilisés que sur demande explicite.

OutilRôle
coffre_askCherche dans la base de notes du homelab les extraits utiles à une question (lecture seule, 20 à 40 s).
noter_journalAjoute une ligne au journal du jour (ajout seulement, 1 000 caractères au plus, plafond de 40 écritures par jour).
noter_projetAjoute du texte à une note de projet dédiée à Hermes (créée si besoin).
etat_serveurÉtat du serveur en lecture seule : RAM, swap, modèles chargés, conteneurs arrêtés.
file_iaÉtat de la file ia-run : travaux en cours, en attente, derniers finis.
genimg_etatÉtat de la dernière série d'images (ComfyUI).
genimg_lancer actionMet une série de 1 à 20 images dans la file ia-run.
faire_coder actionConfie une petite modification d'un site web au codeur, via la file ia-run, avec sauvegarde, tests et retour arrière automatiques. Un site de production est exclu.
diff_codeMontre l'état du dernier job de code d'un site et son diff par rapport à la sauvegarde.
annuler_code actionAnnule le dernier job de code d'un site en réécrivant les fichiers touchés depuis la sauvegarde.
liste_scriptsListe les scripts permis (liste blanche) et ceux qui sont refusés.
lancer_script actionLance un script de la liste blanche (8 permis, 37 refusés avec « demande à l'humain »).

Proxy Ollama et garde ia-run

Codeur délégué : Qwen3-Coder-Next

coffre_ask : RAG sur la base de notes

Pare-feu

Le problème

La solution testée : le proxy v2

C'est un proxy HTTP placé entre Hermes et Ollama, en essai seulement, sur un port séparé de la production. Il agit sur /v1/chat/completions quand la requête contient des outils.

  1. Tri de la demande par Arch-Router-1.5B (Katanemo, Q4_K_M, temp 0, contexte 4 096, 150 jetons de sortie), en 4 routes : code_site, code_script, action, question. La description de la route « site » contient la liste réelle des sites. En cas d'erreur, il se replie sur un tri par mots-clés (expressions régulières) ; les erreurs ne sont pas mises en cache.
  2. Filtrage des outils selon la route :
    • code_site : faire_coder seul, plus clarify si le site n'est pas nommé ;
    • code_script : noter_projet et clarify, parce que le codeur ne gère que les sites ;
    • question : aucun outil qui agit ;
    • action : tous les outils.
  3. Outils d'action réservés aux demandes explicites : annuler_code, lancer_script, faire_coder et genimg_lancer ne sont proposés que selon la demande de l'utilisateur, jamais d'après le contenu renvoyé par un outil. C'est la protection contre l'injection indirecte (épreuve 15). Un appel à un outil non proposé est refusé.
  4. Refus d'une annonce sans appel : une réponse qui dit « noté », « lancé » ou « fait » sans l'appel d'outil correspondant est refusée (avec un filtre pour les négations). Le modèle a 1 nouvel essai, puis une précision est ajoutée à la réponse.
  5. Code écrit par le modèle refusé en route code (bloc de code ou motif de code détecté), avec 1 nouvel essai. Une réponse vide est aussi refusée.
  6. Coupe-boucle : après 3 appels inutiles ou répétés (résultat vide, erreur, « aucune note »…) ou 5 appels depuis la demande, les outils sont retirés, sauf l'outil de code attendu, et le modèle doit conclure.
  7. max_tokens plafonné à 8 192 si le client n'en fixe pas.
  8. Le flux (stream) est reconstitué en SSE à partir d'une réponse complète déjà vérifiée. Le prix : pas de streaming jeton par jeton.

Chaque décision du proxy (route, qui a trié, outils proposés, relances) est enregistrée pour chaque épreuve : voir le tableau « Routage ».

Modèles testés et paramètres

ModèleArchi (Ollama)Quant / sourceTailleContexteÉchantillonnage
Qwen3.6-35B-A3B, réflexionqwen35moe, 34,7 B au total, ~3 B actifsUnsloth UD-Q4_K_XL23 Go65 536 (natif 262 144)temp 0.6, top_p 0.95, top_k 20, min_p 0, presence 0, repeat 1 (réglages Unsloth « réflexion »)
Nemotron-Orchestrator-8B (NVIDIA)qwen3, 8,2 B denseQ4_K_M de bartowski (pas de version Unsloth)5 Go40 960 (natif)temp 0.6, top_p 0.95, top_k 20, repeat 1 (valeurs Qwen3, pas de réglage publié par NVIDIA trouvé : à vérifier)
GLM-4.7-Flash (Z.ai)deepseek2, 29,9 B au total, MoEUnsloth UD-Q4_K_XL17 Go65 536 (natif 202 752)temp 0.7, top_p 1.0, min_p 0.01, repeat 1 (nombre de paramètres actifs : à vérifier)
Arch-Router-1.5B (trieur du proxy v2)1,5 BKatanemo, Q4_K_M1 Go4 096temp 0, 150 jetons de sortie

Méthode du banc

Limites connues

Scores par configuration

Les 20 épreuves

✓ réussi, ✗ raté (toucher ou survoler pour la cause, déduite des appels d'outils et des décisions du proxy). Une colonne par configuration finie, y compris les deux de l'essai du matin.

Routage du proxy v2

Route choisie pour chaque épreuve et par qui (Arch-Router ou mots-clés), avec les interventions du proxy pendant l'épreuve.

Historique des essais

Conclusions du banc v2

Scores moyens (proxy v2, 2 passages) : Qwen3.6-think 18/20, GLM-4.7-Flash 16,5/20, Orchestrator-8B 15,5/20. En direct, tous baissent un peu (Qwen 17, GLM 15 puis 13, Orchestrator 16 puis 10).

Recommandation (en attente de décision, rien n'est appliqué) : mettre Hermes en production sur Qwen3.6-35B-think à travers le proxy v2.

Prochaines étapes (rien n'est décidé)

  1. Production : reporter la logique du proxy v2 dans le proxy de production (liste blanche et session ia-run conservées) et pointer Hermes vers hermes-qwen3.6-35b-think avec les réglages de réflexion.
  2. Épreuve 10 : ajouter un réessai automatique (3 essais espacés de 2 s) dans les outils de lecture du serveur MCP, et en parallèle insister dans les consignes de Hermes ou le proxy pour qu'une question sur l'état du serveur passe par etat_serveur ; puis refaire seulement cette épreuve.
  3. Ouvrir le codeur aux scripts Python et bash, écrits dans un dossier à part, avec relecture et accord humain avant de les ajouter à la liste blanche.
  4. Agents spécialistes un par un (vision / captures, tri en masse, recherche dans les notes), chacun avec sa petite série d'épreuves, via la file ia-run (un gros modèle à la fois).

Banc v2 terminé le 19/10/2026 à 18 h 32 (Paris). Les scores sont régénérés toutes les 5 minutes à partir des fichiers du banc. Les réponses des modèles ne sont pas publiées, seulement réussite ou échec et une cause courte.