runbook: hub public skills.sh - scanner securite, override manuel DANGEROUS, humanizer generalise

This commit is contained in:
Claude
2026-08-20 12:18:26 +01:00
parent 7991c72478
commit 85909209ff
2 changed files with 84 additions and 0 deletions
+1
View File
@@ -70,6 +70,7 @@
| Runbook | Date | Tags | | Runbook | Date | Tags |
|---------|------|------| |---------|------|------|
| [Hub public skills.sh — identifiants, scanner de securite, override manuel DANGEROUS (video Dr Firas)](common/hermes-skills-hub-scanner-securite.md) | 2026-08-20 | hermes, skills, scanner, securite, hub |
| [Hermes Hub — Déploiement et Exploitation Multi-Univers sur VPS (FastAPI, proxy async, design tokens, Tailscale)](common/hermes-hub-deploiement.md) | 2026-08-19 | hermes, hub, multi-univers, vps, tailscale, cloudflare-access, fastapi | | [Hermes Hub — Déploiement et Exploitation Multi-Univers sur VPS (FastAPI, proxy async, design tokens, Tailscale)](common/hermes-hub-deploiement.md) | 2026-08-19 | hermes, hub, multi-univers, vps, tailscale, cloudflare-access, fastapi |
| [Mise à jour des 3 instances Hermes](common/RUNBOOK-HERMES-UPDATE.md) | 2026-06-15 | hermes, update, compose | | [Mise à jour des 3 instances Hermes](common/RUNBOOK-HERMES-UPDATE.md) | 2026-06-15 | hermes, update, compose |
| [Skills concurrents PDF/DOCX/PPTX/XLSX archivés (anti-bypass nyora-doc-api)](common/skills-concurrents-pdf-docx-pptx-xlsx.md) | 2026-07 | hermes, skills, doc | | [Skills concurrents PDF/DOCX/PPTX/XLSX archivés (anti-bypass nyora-doc-api)](common/skills-concurrents-pdf-docx-pptx-xlsx.md) | 2026-07 | hermes, skills, doc |
@@ -0,0 +1,83 @@
# Hub public de skills Hermes (skills.sh) — identifiants, scanner de sécurité, override manuel
**Date** : 2026-08-20
**Sphères concernées** : hermes-tt, hermes-nyora, hermes-perso
## Contexte
Vidéo Dr Firas sur Hermes (Mem0, Caveman, Defuddle, Marketing Skills, Humanizer). Vérification préalable : le produit qu'il décrit est bien le nôtre, pas une simple analogie — confirmé en direct sur hermes-agent-tt (Hermes Agent v0.20.0, build 2026.8.3, image nousresearch/hermes-agent:v2026.8.3, CLI /opt/hermes/.venv/bin/hermes).
## Ce qui a été fait
- **humanizer** (les 3 instances) : 2.5.1 (builtin, ported, figé à la sortie de l'image) -> 2.11.2 (amont), généralisé sur tt/nyora/perso à la demande de Nabil. Verdict scanner SAFE sur les 3 (2 faux positifs "injection" récurrents sur des exemples pédagogiques internes à la skill, sans conséquence).
- **caveman** (hermes-tt, test) : installé. Verdict SAFE, aucun finding.
- **product-marketing** (hermes-nyora) : installé, comblait un vrai manque (socle marketing absent). Verdict SAFE.
- **ai-seo** (hermes-nyora) : verdict automatique DANGEROUS (3 findings) — installé manuellement après revue complète. Voir section dédiée ci-dessous.
- Pack marketingskills (49 skills) : PAS installé en entier — nyora avait déjà copywriting/seo-audit/content-strategy/social/dr-nexum-production en local, doublon évité.
- **defuddle** : pas installé — nyora-veille couvre déjà le nettoyage web ; node/npm présents dans les conteneurs (le piège CLI-absent de la vidéo ne s'appliquait pas ici) mais aucun besoin identifié.
- **Mem0** : pas ré-évalué — déjà tranché le 18/08 (évaluation théorique seule, plafond 43 conteneurs NAS respecté, 0 déploiement). Mémoire native confirmée lexicale (FTS, state.db 272 Mo sur hermes-tt, provider: ''), même limite que le trigger notes_fts cassé sur nyora-notes-tt — les deux à traiter ensemble dans une session dédiée.
## Humanizer 2.11.2 — remplacement des tirets déjà natif (règle 14)
Demande Nabil : généraliser humanizer + lui faire remplacer les tirets "qui sautent aux yeux". Vérifié avant d'ajouter quoi que ce soit : la version 2.11.2 couvre déjà ça nativement et en détail (règle §14 "Em and en dashes") — interdiction des tirets cadratins/demi-cadratins (— / ) sauf si l'échantillon d'écriture de l'utilisateur les utilise déjà, remplacement par point/virgule/deux-points/parenthèses ou reformulation, détection aussi des doubles-tirets ASCII (--) et tirets espacés, avec une étape de vérification finale (recherche de — et avant de rendre le texte). Rien ajouté côté custom pour ne pas dupliquer/entrer en conflit avec la règle amont — si elle se révèle insuffisante en usage réel (le rewrite laisse encore passer des tirets), le signaler pour ajuster plutôt que d'empiler une règle redondante.
**Point d'attention pour la suite** : cette version vient d'un fetch URL directe, donc un futur --force réappliquera l'amont sans changement particulier de notre part (pas de customisation locale à perdre). Si un jour on personnalise le contenu du SKILL.md directement, le documenter ici — un --force futur écrasera silencieusement toute modification manuelle non trackée par un identifiant hub.
## ai-seo — DANGEROUS bloqué, installé manuellement après revue complète
Verdict automatique DANGEROUS, 3 findings, --force refuse ("Blocked ... --force does not override a dangerous verdict" — contrairement au CAUTION du 13/08 sur last30days, aucun override CLI n'existe pour ce palier).
Revue complète effectuée avant toute décision : SKILL.md (494 lignes) + les 6 fichiers references/ (761 lignes), soit 1255 lignes au total, grep systématique sur les patterns d'exécution/exfiltration réels (curl, wget, rm -rf, sudo, eval/exec, os.system, subprocess, base64, ignore previous/all, system prompt, api_key, ssh, .env, bearer, authorization, password) — aucune occurrence. Les 3 findings sont confirmés faux positifs de pattern-matching statique sur du contenu marketing bénin :
- persistence CRITICAL sur une phrase mentionnant llms.txt/AGENTS.md comme convention de fichier (aucune modification de config agent réelle)
- exfiltration HIGH sur la phrase générique "Include local context where relevant" (conseil de rédaction, pas de données)
- traversal MEDIUM sur un lien markdown relatif ../../tools/REGISTRY.md vers un fichier du même repo
Décision Nabil (20/08) : "la meilleure solution technique, à toi de voir" — installation manuelle réalisée après cette revue complète (pas juste les lignes flaguées), pas de contournement du scan lui-même (le CLI ne le permet structurellement pas).
**Solution technique appliquée** :
1. Fetch direct des 7 fichiers (SKILL.md + references/*.md) depuis raw.githubusercontent.com
2. Placement manuel dans /opt/data/skills/ai-seo/ (structure identique à celle qu'aurait produite un install réussi), chown root:root pour matcher la convention des skills installées normalement par le process Hermes
3. Entrée ajoutée à la main dans /opt/data/skills/.hub/lock.json avec scan_verdict="dangerous_manual_override" (valeur volontairement non-standard) et le détail des 3 findings + leur évaluation en metadata/scan_provenance — traçabilité complète de l'override pour tout audit futur
4. Effet observé : `hermes skills list` affiche la skill en Source/Trust "local"/"local" plutôt que "skills.sh"/"community" — comportement jugé correct et volontairement laissé tel quel : l'outil ne peut pas prétendre à une provenance hub-vérifiée pour un contenu qui a contourné son propre scan. "local" est la représentation honnête ici, pas un bug à corriger.
**Reproductible pour un futur cas DANGEROUS jugé faux positif** :
```
# 1. Fetch et revue complete (pas seulement les lignes flaguees)
curl -sS https://api.github.com/repos/<owner>/<repo>/contents/skills/<nom>
# recuperer SKILL.md + tous les fichiers references/ lies, grep patterns dangereux reels
# 2. Placement
mkdir -p /opt/data/skills/<nom>/references
cp <fichiers reviewes> /opt/data/skills/<nom>/
chown -R root:root /opt/data/skills/<nom>
# 3. Entree lock.json (voir schema complet dans /opt/data/skills/.hub/lock.json,
# entree ai-seo du 20/08 comme modele) -- scan_verdict explicite non-standard,
# findings + evaluation en metadata, jamais maquiller en verdict "safe"
```
## Piège : l'identifiant hub owner/skills/name suppose une structure de repo précise
hermes skills search <mot> retourne un identifiant skills-sh/<owner>/<repo>/<skill> qui fonctionne pour l'inspect mais peut échouer au fetch réel à l'install : Error: Could not fetch '...' from any source. — sans autre détail. Cause : le résolveur attend SKILL.md sous skills/<nom>/ dans le repo source ; certains repos (blader/humanizer) ont leur SKILL.md à la racine.
**Ce qui ne fonctionne pas** : hermes skills install skills-sh/blader/humanizer/humanizer (et variantes) -> fetch échoue silencieusement.
**Solution validée** : vérifier la structure du repo (curl -sS https://api.github.com/repos/<owner>/<repo>/contents/) puis installer par URL directe :
hermes skills install https://raw.githubusercontent.com/<owner>/<repo>/main/SKILL.md --name <nom> --category <categorie> --force --yes
(--force sert ici à passer le prompt si le scan revient SAFE/CAUTION, pas à outrepasser un DANGEROUS.)
## Vérification
docker exec hermes-agent-<instance> grep -m1 version /opt/data/skills/creative/humanizer/SKILL.md
docker exec hermes-agent-tt /opt/hermes/.venv/bin/hermes skills list | grep -i caveman
docker exec hermes-agent-nyora /opt/hermes/.venv/bin/hermes skills list | grep -iE "product-marketing|ai-seo"
## Références
- Repo humanizer : https://github.com/blader/humanizer (version amont vérifiée : 2.11.2)
- Repo caveman : https://github.com/juliusbrussee/caveman
- Repo marketingskills : https://github.com/coreyhaines31/marketingskills
- Précédent scanner CAUTION/--force : note NyoraNotes 38330f3b (13/08, last30days-skill)
- Décision Mem0/plafond conteneurs : note NyoraNotes be9c5934 (18/08)