- SOUL.md funk-ai : tableaux détaillés system vs monitor (quand appeler chaque agent avec exemples concrets), section delegate_task vs ask-agent - SOUL.md system : rôle clarifié (traitement texte, PAS analyse santé), format de réponse explicite (verdict direct, pas de préambule) - hermes-agent.service : SupplementaryGroups=systemd-journal pour que journalctl fonctionne sans sudo depuis le Terminal de Hermes - Ansible common : admin_user (alkatrazz) ajouté au groupe systemd-journal - admin/hermes.md : section SOUL.md complète (déploiement, contenu, profils) - admin/ask-agent.md : distinction system vs monitor documentée avec tableau et exemples, note /no_think, monitor réservé supervision Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
8.6 KiB
Délégation inter-agents — ask-agent + skill agent-delegation
Le cluster Funk dispose de 4 agents spécialisés accessibles via la commande ask-agent.
Le skill funk/agent-delegation enseigne à Hermes (profil funk-ai) comment et quand
les utiliser pour décomposer des tâches.
Architecture
funk-ai (Qwen3-8B GPU — profil principal)
│
│ Terminal: ask-agent <agent> "question"
▼
ask-agent (/usr/local/bin/ask-agent)
│ POST http://127.0.0.1:4000/v1/chat/completions
▼
LiteLLM Proxy (:4000)
├── ask-agent system → qwen3-1.7b-system (CPU :1236)
├── ask-agent monitor → qwen3-1.7b-monitor (CPU :1237)
├── ask-agent brain → claude-sonnet-4-6 (API Anthropic)
└── ask-agent funk-ai → qwen3-8b (GPU :1234)
Agents disponibles
| Agent | Modèle | Vitesse | Coût | Usage idéal |
|---|---|---|---|---|
system |
Qwen3-1.7B CPU (:1236) | ~21 tok/s | Gratuit | Traitement de texte : résumés, formatage, parsing, calculs, questions Linux |
monitor |
Qwen3-1.7B CPU (:1237) | ~21 tok/s | Gratuit | Évaluation de santé : logs systemd, métriques, état des services |
brain |
Claude Sonnet 4.6 (API) | Variable | Payant | Raisonnement complexe, architecture, revue |
funk-ai |
Qwen3-8B GPU (:1234) | ~35 tok/s | Gratuit | Tâches générales (agent principal lui-même) |
system vs monitor — la distinction clé
| Critère | system |
monitor |
|---|---|---|
| Type de question | "Qu'est-ce que ça veut dire ?" / "Résume ça" | "Y a-t-il des erreurs ?" / "Ce service est-il sain ?" |
| Input attendu | Texte brut, sortie de commande quelconque | Logs systemd, métriques, systemctl status |
| Output produit | Réponse directe, liste de faits | Verdict OK/WARNING/ERROR + actions correctives |
| Notion de seuils | Non | Oui — évalue par rapport à ce qui est normal |
# → system : traitement de texte
ask-agent system "que signifie cette sortie df -h : <texte>"
ask-agent system "résume l'utilisation disque : <texte>"
ask-agent system "convertis 8192 MiB en GiB"
# → monitor : évaluation de santé
ask-agent monitor "logs litellm : <texte> — erreurs ?"
ask-agent monitor "status llama-server : <texte> — service sain ?"
ask-agent monitor "services failed : <texte> — que faire ?"
Commande ask-agent
# Syntaxe
ask-agent <agent> "<question>"
ask-agent <agent> "<question>" [--max-tokens N] [--system "<prompt système>"]
# Exemples
ask-agent system "quelle commande pour lister les ports en écoute ?"
ask-agent monitor "analyse ces logs systemd : <coller logs>"
ask-agent brain "architecture optimale pour ce schéma k8s : <contexte>"
ask-agent system "calcule la taille totale en Go de ces fichiers : <ls -lh output>"
# Avec prompt système personnalisé
ask-agent monitor "est-ce que ces métriques sont normales ?" \
--system "Tu es expert Linux AlmaLinux, réponds en 1 phrase max."
# Max tokens (défaut : 1000)
ask-agent brain "revois ce manifest k8s" --max-tokens 3000
Skill Hermes — agent-delegation
Le skill funk/agent-delegation est installé dans le profil funk-ai.
Il charge automatiquement le contexte suivant dans chaque session Hermes :
- La liste des 4 agents et leurs spécialités
- Le pattern "collecter localement → déléguer"
- La règle "tu tournes sur storage-01, ne pas SSH vers toi-même"
Localisation du skill
/srv/data/hermes/skills/funk/agent-delegation/SKILL.md ← source (Git)
/srv/data/hermes/profiles/funk-ai/skills/funk/agent-delegation/SKILL.md ← profil actif
Le fichier source est versionné dans le repo lab :
hermes-skills/funk/agent-delegation/SKILL.md
Utilisation depuis Hermes TUI
Hermes utilise ask-agent via l'outil Terminal — pas un appel API direct.
Le skill lui indique d'utiliser exactement :
Terminal: ask-agent system "ta question"
Terminal: ask-agent monitor "ta question"
Terminal: ask-agent brain "ta question"
Pattern typique (Hermes collecte en local, délègue l'analyse) :
Terminal: systemctl --state=failed --no-pager
Terminal: ask-agent monitor "voici les services en erreur : <résultat> — résume les problèmes"
Gestion des skills dans Hermes
Pourquoi le skill doit être dans le profil
Hermes charge les skills depuis $HERMES_HOME/profiles/<profil>/skills/.
Un skill placé uniquement dans $HERMES_HOME/skills/ n'est pas chargé par le profil.
# Vérifier les skills du profil funk-ai
sudo -u hermes env HERMES_HOME=/srv/data/hermes hermes skills list | grep -i funk
# État attendu :
# │ agent-delegation │ funk │ local │ local │ enabled │
Ajouter un skill custom à un profil
# 1. Créer le skill dans le repo (versionné)
mkdir -p hermes-skills/funk/<nom-skill>
vim hermes-skills/funk/<nom-skill>/SKILL.md
# 2. Déployer dans le répertoire global HERMES_HOME
sudo mkdir -p /srv/data/hermes/skills/funk/<nom-skill>
sudo cp hermes-skills/funk/<nom-skill>/SKILL.md /srv/data/hermes/skills/funk/<nom-skill>/
# 3. Copier dans le profil cible
sudo mkdir -p /srv/data/hermes/profiles/funk-ai/skills/funk/<nom-skill>
sudo cp /srv/data/hermes/skills/funk/<nom-skill>/SKILL.md \
/srv/data/hermes/profiles/funk-ai/skills/funk/<nom-skill>/
sudo chown -R hermes:hermes /srv/data/hermes/profiles/funk-ai/skills/funk
# 4. Redémarrer le service
sudo systemctl restart hermes-agent
# 5. Vérifier
sudo -u hermes env HERMES_HOME=/srv/data/hermes hermes skills list | grep funk
Mettre à jour un skill existant
# Modifier le source dans le repo
vim hermes-skills/funk/agent-delegation/SKILL.md
# Synchroniser vers les deux emplacements
sudo cp hermes-skills/funk/agent-delegation/SKILL.md \
/srv/data/hermes/skills/funk/agent-delegation/SKILL.md
sudo cp hermes-skills/funk/agent-delegation/SKILL.md \
/srv/data/hermes/profiles/funk-ai/skills/funk/agent-delegation/SKILL.md
sudo chown hermes:hermes /srv/data/hermes/profiles/funk-ai/skills/funk/agent-delegation/SKILL.md
sudo systemctl restart hermes-agent
Script ask-agent — référence technique
Déployé sur storage-01 : /usr/local/bin/ask-agent
Source versionnée : ansible/roles/litellm/files/ask-agent
# Déployer manuellement (si pas via Ansible)
scp ansible/roles/litellm/files/ask-agent s01:/tmp/
ssh s01 "sudo cp /tmp/ask-agent /usr/local/bin/ask-agent && sudo chmod +x /usr/local/bin/ask-agent"
# Redéployer via Ansible
ansible-playbook -i inventory.yml playbooks/storage-01.yml --tags litellm
Paramètres hardcodés dans le script :
| Paramètre | Valeur |
|---|---|
| LiteLLM URL | http://127.0.0.1:4000/v1/chat/completions |
| API key | lm-studio (= master_key LiteLLM) |
| Timeout | 120s (curl) |
| stream | false |
Dépannage
ask-agent retourne du garbage
Le modèle GGUF est peut-être corrompu (signe d'une erreur disque précédente).
ssh g01 "sudo systemctl status llama-server-system"
ssh g01 "md5sum /mnt/models/<chemin-vers-gguf>"
ask-agent timeout
LiteLLM ou llama-server ne répond pas.
ssh s01 "curl -s http://localhost:4000/health -H 'Authorization: Bearer lm-studio'"
ssh g01 "systemctl status llama-server-system llama-server-monitor"
Le skill n'est pas chargé dans Hermes
Vérifier la présence dans le profil :
sudo ls /srv/data/hermes/profiles/funk-ai/skills/funk/agent-delegation/
Si absent → copier depuis /srv/data/hermes/skills/funk/agent-delegation/ et redémarrer.
Hermes fait du SSH vers storage-01
Le skill lui dit "tu es déjà sur storage-01" — mais si une ancienne session Hermes est ouverte, le skill chargé est l'ancienne version. Fermer la session TUI et en ouvrir une nouvelle après chaque modification du skill.
Points d'attention
| Sujet | Détail |
|---|---|
| Deux emplacements | Modifier le skill dans le repo ET dans le profil — sinon désynchronisé |
| Restart obligatoire | systemctl restart hermes-agent requis après ajout/modif skill |
| brain coûteux | Claude Sonnet API — réserver aux analyses que system/monitor ne peuvent pas faire |
| system et monitor isolés | Tournent sur 14 CPUs dédiés — ne bloquent pas le GPU ni Hermes principal |
/no_think automatique |
Le script ask-agent préfixe automatiquement /no_think pour system et monitor — évite que Qwen3 consomme tous les tokens en raisonnement interne |
| monitor réservé supervision | Ne pas modifier monitor pour d'autres usages — sera intégré à l'outil de supervision cluster |
| ask-agent est shell | Dans le skill, toujours écrire Terminal: ask-agent ... — pas une API interne |