runbook: hub public skills.sh - scanner securite, override manuel DANGEROUS, humanizer generalise
This commit is contained in:
@@ -70,6 +70,7 @@
|
||||
|
||||
| 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 |
|
||||
| [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 |
|
||||
|
||||
@@ -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)
|
||||
Reference in New Issue
Block a user