Test bench · 2026-06-18

Hermes Agent (NousResearch)

Agent self-improving + messaging gateway multi-plateforme + hub 85 722 skills + MCP first-class. 196 852 ⭐ MIT, push aujourd'hui. Testé en sandbox 100 % contenu, puis branché en live sur Anthropic Sonnet 4.6 pour piloter maritime-atlas depuis Telegram.

Pourquoi le tester

Le repo NousResearch/hermes-agent propose une couche d'agent self-improving avec un angle unique : un messaging gateway qui expose l'agent sur Telegram / Discord / Slack / WhatsApp / Signal / email. Le pitch "l'agent qui pousse avec toi" couvre les classiques (skills, MCP, mémoire) mais le vrai différenciateur c'est la possibilité de piloter sa stack à distance depuis n'importe quelle plateforme messaging — alors que Claude Code Remote tourne sur l'infra Anthropic et ne peut pas atteindre mon kubectl --context mini-blue. À voir en pratique.

Ce qu'on a testé

  • Sandbox 100 % contenu dans ~/projects/developpeur/hermes-sandbox/ via les flags --hermes-home / --dir / --skip-setup / --skip-browser / --no-skills / --non-interactive. Snapshot md5 de ~/.claude/CLAUDE.md et settings.json avant/après — strictement identiques.
  • Commandes de surface : hermes doctor, hermes security, hermes mcp catalog, hermes skills browse, hermes uninstall --help.
  • Round-trip live Ollama llama3.1:8b en local via le custom provider OpenAI-compatible — pour valider le pipe avant de cramer des tokens cloud.
  • Setup bot Telegram complet : création via @BotFather, token dans .env chmod 600, allowlist user_id récupéré depuis les logs, hermes gateway run --replace en background.
  • Switch provider Ollama → Anthropic Sonnet 4.6 en 4 commandes hermes config set pour valider une qualité Claude réelle depuis Telegram, sans vendor lock.

Verdict

Ce qui fonctionne

  • • Install curl|bash mais respecte rigoureusement --hermes-home → sandbox propre
  • uninstall.py 39 KB de vraie logique (issue #46359 ouvre un mode --dry-run)
  • • 16 providers LLM supportés, switch en 4 lignes hermes config set
  • • Round-trip Telegram → Big-Blue → Anthropic → Sonnet 4.6 → réponse Claude en ~3 s
  • • Hub 85 722 skills + 100 official Nous browsable via hermes skills browse
  • • Allowlist TELEGRAM_ALLOWED_USERS bloque tout user_id inconnu
  • • Prompt caching activé par défaut (cache TTL 5 min) → coût réel bien sous le théorique

Ce qui pète

  • • Footprint sandbox 1,8 GB même avec --skip-browser --no-skills
  • • Compat agentskills.io partielle : frontmatter Claude Code n'est pas auto-importé, conversion mécanique nécessaire (version / author / license / platforms à ajouter)
  • ~/.local/bin/hermes launcher 165 B reste après hermes uninstall --full (mineur)
  • hermes config set agent.modelmodel.default — la première forme passe sans erreur mais ne fait rien
  • • Pas de --dry-run sur l'installer (red flag curl|bash partiel)
  • • Setup wizard pousse OAuth Nous Portal — skippable via --skip-setup mais à savoir

Décision

Adopt-conditional. Hermes ne remplace pas Claude Code pour le dev pur (80 % overlap, Claude Code reste plus tight côté CLI). Mais il complète sur un angle où Claude Code Remote ne peut pas : tourner sur ma propre infra avec accès kubectl / git / ssh natif, pilotable depuis Telegram. Adopté pour le pilotage maritime-atlas depuis mobile. Provider Anthropic Sonnet 4.6, budget alarmé à $10 / mois côté console.

Le use case unique : Claude Code mobile sans Anthropic vendor lock

Le pattern résume bien la différence entre Claude Code Remote (cloud Anthropic, sandbox géré, pas d'accès à ta stack locale) et Hermes self-hosted (tourne sur Big-Blue, accès kubectl --context mini-blue / ssh nas / repo gitops natif). Pour quelqu'un avec une homelab ou un VPS, ça change le ratio :

Claude Code Remote Hermes + Telegram
Tourne sur Cloud Anthropic (sandbox) Ta machine (Big-Blue / NAS / Mini-Blue / VPS)
Accès stack locale Limité (sync git) Total (kubectl, git, ssh, docker, /coverage GS)
Pilotage App Claude Code mobile/desktop DM Telegram (ou Discord/Slack/WhatsApp/Signal/email)
Coût Tier Anthropic Pro/Max Ta clé API (estim. $1–5 / mois en usage casual)
Provider Anthropic only 16 providers (Anthropic / OpenRouter / Ollama local / etc.)

Pour mon cas concret : je DM @aetherwx_bot "lance le smoke maritime", l'agent qui tourne sur Big-Blue exécute /maritime-layer-smoke-all, me renvoie le résultat. Je réponds "redeploy frontend si tout green", il bumpe le tag dans developpeur-gitops et push. Claude Code Remote ne peut pas faire ça : il n'a ni mon kubeconfig Mini-Blue ni mon ssh NAS.

Leçons à reprendre (8)

Hermes adopté ne ferme aucune des leçons — au contraire, le patterns d'install propre, de provider switch, et de bot security sont à reprendre dans nos propres tools.

  1. 01

    Flag --hermes-home pour sandboxer un installer global

    Hermes utilise le pattern `curl|bash` (red flag classique) mais expose `--hermes-home` + `--dir` qui redirigent TOUT dans un dossier de ton choix. Le `md5sum ~/.claude/CLAUDE.md` avant/après est strictement identique. Pattern à exiger de tout installer qui propose un `curl|bash` : si t'as pas de redirect-prefix, t'installes pas.

  2. 02

    Messaging gateway = mobile-first sans rebuild d'app

    Le pattern bot Telegram (token BotFather → DM bot perso → réponses) résout le problème 'pilotage dev/prod depuis mobile' sans coder d'app native. 5 min de setup vs des semaines de React Native + push notifications + auth. Réutilisable pour TOUT outil CLI qu'on voudrait piloter à distance.

  3. 03

    Self-host > cloud quand t'as une stack à toi

    Claude Code Remote tourne sur AWS Anthropic et n'a pas accès à mon `kubectl --context mini-blue`, mon `ssh nas`, mon repo gitops. Hermes tourne sur Big-Blue et a tout ça nativement. Pour quiconque a une homelab ou un VPS, self-host gagne sur l'accès à la stack locale.

  4. 04

    agentskills.io 'standard' = compat partielle

    Hermes ET Claude Code revendiquent agentskills.io. En vrai les frontmatter divergent : Hermes attend `version` + `author` + `license` + `platforms` + `metadata.hermes.tags`, Claude Code attend `argument-hint` + `allowed-tools`. La conversion est mécanique mais c'est PAS plug-and-play. Standard à durcir.

  5. 05

    Provider switch en 4 lignes config.yaml

    Le `hermes config set model.default / model.provider / model.base_url` permet de basculer Ollama local ↔ Anthropic ↔ OpenRouter ↔ DeepSeek en 30s. Vendor lock = ZÉRO. Architecture à reprendre pour tout outil qui touche à un LLM : 1 fichier config, providers interchangeables.

  6. 06

    Allowlist par user_id Telegram = sécu publique propre

    Bots Telegram sont accessibles par username public mais Hermes blacklist tout user_id qui n'est pas dans TELEGRAM_ALLOWED_USERS. Premier message d'un user non-autorisé → log warning + reject silencieux. Pattern simple pour exposer un bot LLM sans risque d'usage par des tiers.

  7. 07

    Doctor + Security comme commandes first-class

    `hermes doctor` (SSL/Python/deps/configs/auth) + `hermes security` (OSV.dev audit sur venv + plugins + MCP) ne sont pas des plugins, c'est dans le core. À reprendre quand on shippe un outil maintenant — la dette ops démarre dès le commit 1.

  8. 08

    Hub massif = écosystème > tooling solo

    85 722 skills sur le hub Nous + 100 official = 100× plus qu'une marketplace Claude Code typique. Le multiplicateur réseau écrase la qualité individuelle. Patterns observables : skills `email/himalaya`, `software-development/python-debugpy`, `software-development/systematic-debugging` — tooling dev complet déjà fait.

Ressources

  • ✓ Setup live exécuté sur Big-Blue (WSL2 Ubuntu, RTX 4080 pour Ollama)
  • ✓ Bot Telegram @aetherwx_bot opérationnel
  • ✓ Provider Anthropic Sonnet 4.6 (clé API dédiée, billing isolé via Console workspace)
  • ✓ Memory note détaillée hermes_agent_test_2026_06_18.md indexée dans MEMORY.md