Skill Vetter
一个面向 Security 场景的 Agent 技能。原始说明:Security-first skill vetting for AI agents. Use before installing any skill from ClawdHub, GitHub, or other sources. Checks for red flags, permission scope, and suspicious patterns.
name: essential-tools
description: Catalogue ferme de packages npm et pip pre-audites, installables a la demande avec versions pinnees et --ignore-scripts par defaut. Utilise quand l'utilisateur tape /tools ou demande l'installation d'un package du catalogue.
version: 2.0.0
author: qapten
metadata: { "openclaw": { "requires": { "bins": ["npm", "pip"] }, "os": ["linux"] } }
Catalogue ferme de packages npm et pip pre-audites, installables a la demande par categorie ou individuellement. Toutes les installations utilisent des versions pinnees exactes et --ignore-scripts par defaut pour bloquer l'execution automatique de code post-install.
Portee du skill :
Les fonctionnalites hors-portee (tunnels Cloudflare, envoi de fichiers via messagerie, connecteurs OAuth) sont documentees dans la section "Extensions" comme skills separes a installer au besoin.
Declares dans metadata.openclaw.requires.bins — OpenClaw verifie leur presence au chargement :
npm — installation des packages JavaScript du cataloguepip — installation des packages Python du catalogueAucune. Le skill ne requiert aucun token ni credential.
L'operateur du conteneur doit imposer une allowlist d'egress limitee a :
registry.npmjs.org (npm)pypi.org, files.pythonhosted.org (pip)Aucun autre domaine n'est necessaire au fonctionnement de ce skill.
--ignore-scriptsToutes les commandes npm install du catalogue utilisent --ignore-scripts, ce qui bloque techniquement l'execution automatique des scripts preinstall, install, postinstall. Cela neutralise le principal vecteur de compromission des packages npm (typosquatting, packages compromis en amont).
Derogation unique et tracee : sharp@0.33.5 (categorie images) necessite ses scripts pour compiler libvips. L'agent doit annoncer la derogation et obtenir une confirmation explicite de l'utilisateur avant installation. Toutes les autres categories utilisent --ignore-scripts sans derogation.
Les installations pip utilisent des versions pinnees (==). Un fichier requirements-locked.txt avec hashes SHA256 pre-calcules peut etre utilise avec pip install -r requirements-locked.txt --require-hashes --no-deps pour garantir l'integrite des telechargements.
Seuls les packages listes section 4 sont autorises. Toute installation hors catalogue necessite la procedure explicite de la section 6.
| Commande | Action |
|----------|--------|
| /tools | Afficher le catalogue + statut des packages installes |
| /tools install \<categorie\> | Installer une categorie complete |
| /tools install \<package\> | Installer un package individuel du catalogue uniquement |
| /tools status | Packages installes |
Toute commande d'installation hors catalogue est refusee sans procedure section 6.
Chaque package est pinne a une version exacte, auditee a la date de publication du skill. Toutes les commandes npm utilisent --ignore-scripts par defaut, sauf derogation explicitement marquee.
npm install --save-exact --ignore-scripts \
pptxgenjs@3.12.0 docx@9.5.0 exceljs@4.4.0 \
pdfkit@0.16.0 pdf-parse@1.1.1 \
csv-parse@5.6.0 csv-stringify@6.5.2
⚠️ Derogation au controle --ignore-scripts : sharp necessite la compilation de bindings natifs (libvips) via ses scripts d'installation. C'est la seule exception du catalogue.
Confirmation utilisateur obligatoire avant installation. L'agent doit annoncer :
"Cette categorie necessite l'execution des scripts d'installation de
sharppour compiler des bindings natifs (libvips). C'est la seule derogation a la regle--ignore-scriptsdu catalogue. Confirmer ?"
# qrcode : sans scripts (regle par defaut)
npm install --save-exact --ignore-scripts qrcode@1.5.4
# sharp : DEROGATION, avec scripts (compilation libvips)
npm install --save-exact --foreground-scripts sharp@0.33.5
npm install --save-exact --ignore-scripts \
cheerio@1.0.0 axios@1.7.9 rss-parser@3.13.0 xml2js@0.6.2
npm install --save-exact --ignore-scripts \
lodash@4.17.21 dayjs@1.11.13 archiver@7.0.1 \
json2csv@6.0.0-alpha.2 turndown@7.2.0 form-data@4.0.1
Mode standard (versions pinnees) :
pip install pandas==2.2.3 matplotlib==3.10.0 openpyxl==3.1.5 requests==2.32.3 beautifulsoup4==4.12.3
Mode durci (recommande pour haute securite) : utiliser requirements-locked.txt avec hashes SHA256 :
pip install -r requirements-locked.txt --require-hashes --no-deps
Version 2.0.0 — audit du 16 avril 2026 :
sharp@0.33.5 (scripts natifs necessaires)requirements-locked.txt avec hashes SHA256 fourni pour le mode durci pipRe-audit :
npm audit --package-lock-only
pip-audit -r requirements.txt
Refus systematique. Si l'utilisateur demande un element non liste :
--ignore-scripts par defaut--save-exact (npm), == (pip)--ignore-scripts par defaut pour npm sauf derogation documentee (sharp)L'envoi de fichiers sur Telegram se fait via la CLI OpenClaw :
openclaw message send --channel telegram --target <CHAT_ID> --media <CHEMIN_FICHIER>
OpenClaw restreint l'accès aux fichiers locaux pour éviter l'exfiltration. Seuls les fichiers situés sous le répertoire d'état du gateway (/tmp/openclaw/) sont autorisés pour l'envoi de médias.
Toute tentative d'envoi depuis un autre chemin renvoie :LocalMediaAccessError: Local media path is not under an allowed directory
# 1. Copier le fichier sous /tmp/openclaw/
cp /home/node/.openclaw/workspace/mon-fichier.tar.gz /tmp/openclaw/
# 2. Envoyer via Telegram CLI
openclaw message send --channel telegram --target 6392160016 \
--media /tmp/openclaw/mon-fichier.tar.gz
# 3. (optionnel) Nettoyage
rm /tmp/openclaw/mon-fichier.tar.gz
| Option | Usage |
|--------|-------|
| --force-document | Envoie images/GIF en document (pas de compression Telegram) |
| --reply-to <msg_id> | Répond à un message spécifique |
| --media <url> | Envoie un fichier depuis une URL distante (passe par le registry HTTP) |
| --buttons '[[...]]' | Boutons inline (voir docs Telegram inlineKeys) |
channels.telegram.mediaMaxMb par défaut)/tmp/openclaw/ via cp avant d'appeler la CLI# Envoyer une archive compressée
tar czf /tmp/openclaw/skill.tar.gz -C /home/node/.openclaw/workspace/skills/ma-skill SKILL.md
openclaw message send --channel telegram --target 6392160016 --media /tmp/openclaw/skill.tar.gz
# Envoyer une image sans compression
openclaw message send --channel telegram --target 6392160016 \
--media /tmp/openclaw/diagram.png --force-document
# Envoyer depuis une URL
openclaw message send --channel telegram --target 6392160016 \
--media https://example.com/fichier.pdf
Les fonctionnalites suivantes ne font pas partie de ce skill et sont volontairement exclues pour maintenir un profil de securite minimal :
qapten-infra-tunnels (a installer uniquement si necessaire, profil de risque plus eleve)qapten-messaging (a installer uniquement si necessaire, profil de risque plus eleve avec controles d'exfiltration)openclaw config et les variables d'environnement du conteneur — pas de skill necessaireCette separation permet aux operateurs d'installer ce skill dans des contextes haute-securite sans exposer de canaux d'exfiltration ou de capacites d'execution de binaires externes.
infra (cloudflared / tunnels) et send (openclaw message send). Le skill est maintenant un pur catalogue de packages npm/pip sans capacite d'execution de binaires externes, sans tunneling, sans canal d'exfiltration. Ces fonctionnalites sont deplacees dans des skills separes optionnels. Objectif : eliminer le tag "suspicious" en retirant les capacites a risque intrinseque, conformement au principe de moindre privilege.npm install --ignore-scripts par defaut, wrapper send-file.sh obligatoire pour les envois de fichiers, mode durci pip avec --require-hashesTUNNEL_TOKEN retire de requires.env, openclaw dans anyBins