From 3cb81f899f4ebefb29766a1fd7ac8ed2eecd8ce2 Mon Sep 17 00:00:00 2001 From: bolbol Date: Mon, 27 Jul 2026 15:58:31 +0000 Subject: [PATCH] infra: approvals.mode smart + deny rules sur les 4 instances Hermes (27/07/2026) --- _INDEX.md | 2 + common/PROTOCOL-INFRA.md | 4 + .../smart-approvals-deny-rules-4-instances.md | 73 +++++++++++++++++++ 3 files changed, 79 insertions(+) create mode 100644 common/smart-approvals-deny-rules-4-instances.md diff --git a/_INDEX.md b/_INDEX.md index ce8542f..8dadd2c 100644 --- a/_INDEX.md +++ b/_INDEX.md @@ -160,3 +160,5 @@ - [common/vision-auxiliaire-routing-text-only-modeles.md](common/vision-auxiliaire-routing-text-only-modeles.md) -- auxiliary.vision `auto` casse sur modeles text-only (deepseek-v4-flash), route explicite vers google/gemini-2.5-flash via bifrost-proxy, applique hermes-perso + hermes-tt (27/07/2026) - [common/anti-hallucination-benchmarks-recherche-chiffree.md](common/anti-hallucination-benchmarks-recherche-chiffree.md) -- Garde-fou anti-invention sur rapports chiffres : chiffre = page lue en entier ou "non verifie", verifier variante exacte du modele avant attribution (27/07/2026) +- [common/smart-approvals-deny-rules-4-instances.md](common/smart-approvals-deny-rules-4-instances.md) -- approvals.mode smart + deny rules sur les 4 instances Hermes, auxiliary.approval route vers deepseek-v4-flash (jamais mimo-v2.5), exception documentee hermes-nabil VPS (27/07/2026) + diff --git a/common/PROTOCOL-INFRA.md b/common/PROTOCOL-INFRA.md index 0910eef..972b739 100644 --- a/common/PROTOCOL-INFRA.md +++ b/common/PROTOCOL-INFRA.md @@ -177,3 +177,7 @@ Avant de presenter un chiffre (benchmark, prix, score) dans un rapport : le chif `auxiliary.vision.provider: auto` resout vers le modele principal -- casse systematiquement sur deepseek-v4-flash (text-only). Toute instance avec un modele principal text-only DOIT router `auxiliary.vision` explicitement vers `google/gemini-2.5-flash` via bifrost-proxy (meme base_url/api_key que le modele principal). Applique sur hermes-perso et hermes-tt le 27/07/2026. Detail : common/vision-auxiliaire-routing-text-only-modeles.md. +## FIX -- approvals.mode: smart + deny rules sur les 4 instances Hermes (2026-07-27) + +Passage de manual/auto (valeur invalide sur tt) a `smart` sur hermes-perso, hermes-tt, hermes-nyora, hermes-nabil. `cron_mode: deny` inchange (un job planifie qui tombe sur une commande signalee reste bloque, jamais auto-approuve). Ajout de `approvals.deny` (patterns absolus, bloques avant meme le jugement du modele auxiliaire ou un /yolo) -- rm -rf /*, dd vers /dev/*, redirection vers .env/credentials/secrets, git push --force, docker volume rm/system prune, DROP TABLE/DATABASE ; + TRUNCATE et DELETE Baserow en plus sur hermes-tt. `auxiliary.approval` route explicitement vers deepseek-v4-flash (jamais mimo-v2.5, meme quand c'est le modele principal de l'instance) -- le juge de securite doit etre le modele le plus fiable des deux, pas le defaut. Exception : hermes-nabil (VPS) n'a aucune route deepseek disponible, laisse en auto (mimo-v2.5), ecart documente. Detail : common/smart-approvals-deny-rules-4-instances.md. + diff --git a/common/smart-approvals-deny-rules-4-instances.md b/common/smart-approvals-deny-rules-4-instances.md new file mode 100644 index 0000000..216fbef --- /dev/null +++ b/common/smart-approvals-deny-rules-4-instances.md @@ -0,0 +1,73 @@ +# Passage a approvals.mode: smart + deny rules sur les 4 instances Hermes + +**Instance auteur** : Claude (session Nabil) +**Date** : 2026-07-27 +**Tags** : [infra, securite, approvals, transverse] +**Statut** : valide + +--- + +## Contexte + +hermes-perso et hermes-nyora tournaient en `approvals.mode: manual` (chaque commande signalee attend une validation humaine). hermes-tt tournait en `approvals.mode: auto` -- valeur non documentee dans le schema officiel (manual|smart|off), probablement un residu pre-0.19. hermes-nabil (VPS) n'avait meme pas de cle `mode` dans son bloc `approvals:`. + +La 0.19 introduit le mode `smart` : un modele auxiliaire (`auxiliary.approval`) juge chaque commande signalee dans son contexte precis -- auto-approuve si risque faible (uniquement pour cette commande exacte, pas de blanc-seing sur un pattern), refuse si risque reel, escalade a l'utilisateur si ambigu. Combine avec `approvals.deny` (nouveau) : des patterns definis par l'utilisateur qui bloquent de facon absolue, avant meme le jugement du modele auxiliaire et avant un `/yolo` eventuel. + +Point de vigilance souleve par Nabil avant d'appliquer : s'assurer que `/yolo` (accepter tout pour la session) et l'approbation ponctuelle (accepter une fois, sur escalade) restent disponibles. Reponse : oui -- le mode smart ne retire aucune des deux. `/yolo` reste un toggle de session independant du mode par defaut. L'escalade vers l'utilisateur en cas d'ambiguite declenche exactement le meme flux d'approbation manuel qu'avant (dialogue CLI ou message en attente cote messagerie). + +## Ce qui a ete change + +Sur les 4 instances (hermes-perso, hermes-tt, hermes-nyora sur NAS ; hermes-nabil sur VPS Contabo) : + +```yaml +approvals: + mode: smart # etait: manual (perso, nyora) / auto (tt, valeur invalide) / absent (nabil) + timeout: 60 + cron_mode: deny # inchange -- un cron qui tombe sur une commande signalee reste bloque net, jamais auto-approuve + mcp_reload_confirm: true + destructive_slash_confirm: false + deny: + - "rm -rf /*" + - "dd if=* of=/dev/*" + - "*>*.env*" + - "*>*credentials*" + - "*>*secrets*" + - "git push --force*" + - "git push -f *" + - "docker volume rm*" + - "docker system prune*" + - "*DROP TABLE*" + - "*DROP DATABASE*" +``` + +hermes-tt recoit 3 regles deny supplementaires (enjeux achats/AO) : +```yaml + - "*TRUNCATE*" + - "*-X DELETE*baserow*" + - "*--request DELETE*baserow*" +``` + +`auxiliary.approval` -- le modele qui juge les commandes en mode smart -- route explicitement vers **deepseek-v4-flash** (pas le modele principal de l'instance quand celui-ci est mimo-v2.5) : +- hermes-perso, hermes-tt : deja `auto` -> deepseek-v4-flash (modele principal), aucun changement necessaire. +- hermes-nyora : `auto` aurait resolu vers mimo-v2.5 -- patche explicitement vers deepseek-v4-flash via bifrost-proxy (meme base_url/api_key que le modele principal). Raison : les 24 tool_calls casses trouves sur mimo-v2.5 en 12 jours (cf. common/vision-auxiliaire-routing-text-only-modeles.md et l'incident hermes-nabil du 26/07) disqualifient ce modele comme juge de securite -- le juge doit etre le plus fiable des deux, pas le principal par defaut. +- hermes-nabil (VPS) : **laisse en auto (mimo-v2.5)**, aucune alternative disponible -- ce VPS n'a aucune route configuree vers deepseek-v4-flash (pas de Bifrost local, pas de cle/provider deepseek dans son config.yaml). Ecart documente, a corriger si une route deepseek est ajoutee un jour sur ce VPS (ex: cle OpenRouter directe). + +## Ce qui NE fonctionne PAS + +| Tentative | Erreur / limite | Raison | +|-----------|------------------|--------| +| Router auxiliary.approval de hermes-nabil vers deepseek-v4-flash comme sur les 3 autres | Aucune route existante | hermes-nabil VPS n'a ni Bifrost local ni cle/provider DeepSeek configure -- son seul modele accessible est mimo-v2.5 via opencode.ai/zen/go | +| Modifier /home/claude-oversight/hermes-nabil/data/config.yaml directement depuis le shell VPS (hors container) | `Permission denied` | Fichier `-rw------- root:root`, non lisible par l'utilisateur claude-oversight (uid 1000) meme membre du groupe docker -- passer par `docker exec` | + +## Verification + +```bash +docker exec hermes-agent- grep -A20 '^approvals:' /opt/data/config.yaml # mode: smart + deny presents +docker inspect -f '{{.State.Health.Status}}' hermes-agent- # healthy +``` +Prochaine commande signalee (heredoc, docker restart, etc.) sur une instance : verifier dans les logs qu'elle est jugee par le modele auxiliaire plutot que de toujours attendre une validation manuelle, ou confirmer qu'un cas ambigu remonte bien a Nabil comme avant. + +## References + +- common/vision-auxiliaire-routing-text-only-modeles.md (meme logique de routing auxiliaire explicite) +- Hermes Agent v0.19.0 changelog (Quicksilver Release), section Delegation/approvals