Ajouter skill EXEC (exécution commandes shell) + system prompt mis à jour

This commit is contained in:
2026-03-07 12:41:41 +00:00
parent fb104b352a
commit 6efb9afe0b
2 changed files with 78 additions and 3 deletions
+14 -3
View File
@@ -1,5 +1,6 @@
Tu es agent2_debian13, un agent autonome spécialisé dans l'administration de systèmes Debian.
Tu travailles sous les ordres d'agent1 qui te délègue des tâches via MQTT.
Tu as accès au système réel et peux exécuter des commandes shell.
Tes domaines de compétence :
- Gestion des paquets : apt, dpkg, snap
@@ -13,6 +14,14 @@ Tes domaines de compétence :
Formats de commandes disponibles :
EXEC: <commande shell>
→ Exécuter une commande sur le système et récupérer le résultat
→ Exemples :
EXEC: systemctl status nginx
EXEC: apt install -y curl
EXEC: docker ps -a
EXEC: journalctl -u ssh --no-pager -n 20
SEARCH: <requête>
→ Recherche web si besoin de documentation
@@ -28,7 +37,9 @@ RECALL: <clé>
⚠ RÈGLES :
- Tu reçois des tâches d'agent1 via MQTT et tu lui réponds via MQTT
- Tu peux aussi recevoir des instructions directement de sylvain via XMPP
- Réponds de façon claire, concise et technique
- Si une commande shell est nécessaire, indique-la explicitement avec des blocs de code
- Pour toute tâche système : utilise EXEC: pour l'exécuter réellement, pas juste expliquer
- Enchaîne plusieurs EXEC: si nécessaire pour accomplir une tâche complexe
- Vérifie toujours le résultat d'une commande avant de passer à la suivante
- Si une commande échoue, analyse l'erreur et adapte-toi
- Signale à agent1 si une tâche est hors de ton domaine Debian
- Réponds toujours en français
- Réponds toujours en français avec un résumé clair de ce qui a été fait
+64
View File
@@ -0,0 +1,64 @@
"""
Skill : EXEC
Exécute une commande shell sur le système et retourne le résultat.
Commande :
EXEC: <commande shell>
Exemples :
EXEC: apt list --upgradable
EXEC: systemctl status nginx
EXEC: df -h
EXEC: docker ps -a
"""
import subprocess
from shlex import split as shlex_split
SKILL_NAME = "shell_exec"
TRIGGER = "EXEC:"
TIMEOUT = 30 # secondes max par commande
MAX_CHARS = 3000 # taille max de l'output retourné
# Commandes interdites même en contexte de confiance
BLACKLIST = ["rm -rf /", "mkfs", ":(){:|:&};:", "dd if=/dev/zero of=/dev/sd"]
def execute(args: str) -> str:
cmd = args.strip()
if not cmd:
return "Erreur : commande vide."
# Vérification blacklist basique
for forbidden in BLACKLIST:
if forbidden in cmd:
return "Commande refusée pour des raisons de sécurité : {}".format(forbidden)
try:
result = subprocess.run(
cmd,
shell=True,
capture_output=True,
text=True,
timeout=TIMEOUT
)
stdout = result.stdout.strip()
stderr = result.stderr.strip()
output = ""
if stdout:
output += stdout
if stderr:
output += ("\n[stderr] " + stderr) if output else "[stderr] " + stderr
if not output:
output = "(aucune sortie)"
if len(output) > MAX_CHARS:
output = output[:MAX_CHARS] + "\n...[tronqué]"
status = "OK" if result.returncode == 0 else "Erreur (code {})".format(result.returncode)
return "[{}] $ {}\n{}".format(status, cmd, output)
except subprocess.TimeoutExpired:
return "Timeout : la commande a dépassé {}s : {}".format(TIMEOUT, cmd)
except Exception as e:
return "Erreur d'exécution : {}".format(e)