CommunityImagegithub.com

Analyse de fichiers strictement locale

Analyse des fichiers tableurs, Word/PowerPoint, PDF, images et textes exclusivement sur la machine locale, avec masquage obligatoire des données personnelles (noms, numéros de téléphone, adresses, identifiants nationaux et passeports, cartes bancaires, e-mails, plaques, identifiants de compte) dans tous les modes, et zéro envoi vers le cloud, les drives en ligne, les bases de connaissances, les convertisseurs en ligne, l'OCR ou la recherche externe. À utiliser chaque fois qu'un utilisateur remet des fichiers locaux pour des statistiques, extractions, profilage ou résumés.

Qu'est-ce que Analyse de fichiers strictement locale ?

Cette compétence permet d'analyser localement des fichiers tabulaires (XLSX, CSV), des documents Word/PowerPoint, des PDF, des images et des fichiers texte, en garantissant qu'aucune donnée ni aucun artefact ne quitte la machine. Elle est idéale pour les développeurs et utilisateurs d'agents IA manipulant des informations sensibles ou confidentielles. La compétence fonctionne sur toutes les plateformes supportant Python (Windows, macOS, Linux) et repose sur des scripts Python exécutés localement. Le processus inclut une demande obligatoire du chemin local, le choix entre deux modes (Normal avec aperçu masqué ou Strict avec métriques uniquement), un masquage robuste des données personnelles via des pseudonymes stables, et une extraction locale sans recours au cloud. Elle produit un rapport structuré (`report.md`), un manifeste (`manifest.json`) et un certificat d'audit (`audit.md`), tout en interdisant tout envoi vers des services cloud, drives, bases de connaissances, OCR en ligne ou recherche externe.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/wxyz199/local-only-file-analysis/tree/HEAD

Installed? Explore more Image skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Que fait Analyse de fichiers strictement locale ?

Objectif

Analyser des fichiers tabulaires, documents, PDF et images sans envoyer le fichier ou son contenu vers un service cloud, et masquer les données personnelles — noms, coordonnées, adresses, numéros d'identité — dans tous les modes. Les fichiers sources sont ouverts en lecture seule sur la machine locale, l'extraction et les statistiques sont effectuées via des scripts locaux, et chaque artefact reste dans un répertoire de travail local.

Étape 1 — Demander d'abord le chemin local (obligatoire, jamais sauté)

La première phrase après activation de cette compétence doit demander un chemin local, pas commencer l'analyse. Utilisez le libellé ci-dessous, adapté au contexte, en conservant quatre points : rien n'est téléchargé, un chemin absolu est nécessaire, comment copier un chemin, et le sélecteur de fichiers optionnel.

Je vais analyser ce fichier uniquement sur cette machine — rien ne part vers un service cloud, et les noms, numéros de téléphone, adresses et numéros d'identité seront masqués dans le rapport. Veuillez me donner le chemin local absolu, par exemple /Users/vous/Documents/ledger.xlsx ou D:\donnees\ledger.xlsx ; séparez plusieurs fichiers par des sauts de ligne. Pour copier un chemin : clic droit sur le fichier → "Copier en tant que chemin" (Windows), ou glissez le fichier dans un terminal / utilisez ⌥⌘C dans le Finder (macOS). Ou dites simplement "choisis les fichiers pour moi" et j'ouvrirai une boîte de dialogue locale.

Suivi :

  • L'utilisateur dit "choisis / affiche une boîte de dialogue" → exécutez python "<skill_dir>/scripts/pick_path.py" (multi-sélection), ou avec --single. Utilisez les chemins imprimés comme entrée. Le code de sortie 2 signifie aucune session graphique — revenez à demander à l'utilisateur de coller les chemins.
  • L'utilisateur dit "c'est en pièce jointe" mais seule une carte de pièce jointe existe, pas de chemin → gérez selon la section suivante. Ne lisez pas silencieusement la pièce jointe.
  • Après réception des chemins, validez : le chemin existe, l'extension est prise en charge, nombre de fichiers raisonnable (groupez par type au-dessus d'environ 10 fichiers).

Quand l'utilisateur a déjà déposé une pièce jointe

Indiquez le risque avant d'accepter quoi que ce soit :

Une chose à signaler : un fichier déposé dans le chat peut déjà être stocké sur les serveurs de la plateforme, donc ce chemin n'est plus purement local. Si ce fichier est confidentiel ou contient des données personnelles, envoyez-moi plutôt son chemin local et je le lirai depuis le disque — rien ne quitte cette machine.

Si l'utilisateur veut toujours la pièce jointe, procédez, mais étiquetez honnêtement la livraison : "l'entrée provient d'une pièce jointe du chat, qui a pu atteindre les serveurs de la plateforme" — n'appelez jamais une pièce jointe "totalement locale".

Étape 2 — Laissez l'utilisateur choisir un mode

Deux options ; l'utilisateur doit choisir. Si non spécifié, utilisez Normal et indiquez le mode dans la première ligne de la réponse.

Normal (par défaut)Strict
Contenu du rapportStructure + statistiques + aperçu masqué (premières N lignes, extraits de corps)Métriques agrégées uniquement : lignes/colonnes, types, taux non vide, nombre de valeurs distinctes, plage, moyenne
Texte brutLe texte masqué entre dans le rapport, visible par le modèleN'apparaît jamais ; le modèle ne voit que les métriques
Convient àDonnées internes générales, interprétation sémantique, conclusions écritesDossiers clients, paie, données médicales, contrats, documents classifiés
CoûtLe contenu masqué entre dans le contexte d'inférenceAucun jugement sémantique possible, réponses uniquement statistiques

Libellé :

Choisissez un mode : ① Normal — structure, statistiques et un aperçu masqué pour que je puisse lire le contenu et tirer des conclusions ; ② Strict — métriques uniquement, aucun texte original dans le rapport. Par défaut : Normal.

Masquage obligatoire (tous les modes, ne peut pas être désactivé)

Le masquage n'est pas une option, c'est un comportement par défaut. Le script n'a pas d'interrupteur, et --mode strict ne signifie pas "le masquage est facultatif" — strict ajoute "aucun texte original" par-dessus le masquage.

CatégorieChamps couvertsRésultat
Nomnom, titulaire du compte, contact, représentant légal, propriétaire, responsable, gestionnaire de compte, demandeur, bénéficiaire, titulaire de carte, actionnaire[NOM#1]
Coordonnéesmobile, fixe (avec indicatif), fax, e-mail[TEL#1] / [EMAIL#1]
Adresseadresse, résidence, adresse postale, adresse enregistrée, domicileProvince/ville conservée, le reste devient [ADRESSE#1] ; --mask-region masque aussi la région
Identitécarte d'identité nationale (18/15 chiffres), passeport, permis de voyage, carte d'officier, code unifié de crédit social[ID#1]
Financiercarte bancaire, numéro de compte, numéro de carte[COMPTE#1]
Autres identifiantsplaque d'immatriculation, n° client, n° employé, n° membre, n° étudiant, n° sécurité sociale, n° police[PLAQUE#1] / [IDNO#1]

Trois principes d'implémentation, à citer dans la note de livraison :

  1. Pseudonymes stables. La même valeur source correspond toujours au même pseudonyme dans une même exécution. "Zhang apparaît 3 fois" devient "[NOM#1] apparaît 3 fois" — le comptage, la déduplication et les jointures fonctionnent toujours, l'identité ne survit pas.
  2. Aucune correspondance sur disque. La correspondance valeur-pseudonyme vit uniquement en mémoire. Ni report.md ni manifest.json ne la contiennent ; seuls les nombres de correspondances sont écrits.
  3. Heuristiques pour le texte libre. Les tableaux structurés sont classés par en-tête de colonne et masqués colonne par colonne. Le texte libre dans les corps, PDF et diapositives repose sur des expressions régulières et un lexique de noms de famille ("contact : Zhang San", "M. Zhang"). Les heuristiques peuvent échouer — surtout pour des noms isolés sans indice contextuel. Dites-le clairement ; ne prétendez jamais "tout est détecté".

Le fait de conserver province/ville est intentionnel : cela permet une analyse au niveau régional sans exposer l'adresse complète. Utilisez --mask-region lorsque la région elle-même est sensible.

Étape 3 — Extraction locale

python "<skill_dir>/scripts/local_extract.py" "/chemin/vers/ledger.xlsx" "/chemin/vers/rapport.docx" \
  --workspace ".local_analysis"

Ajoutez --mode strict pour le mode strict ; --mask-region pour masquer les régions ; --redact "EMP\\d{6}" (répétable) pour des motifs personnalisés.

Sorties (toutes dans --workspace) :

  • report.md — profil structural masqué + statistiques + aperçu ; la seule entrée pour le reste de l'analyse
  • manifest.json — liste des fichiers, SHA-256, mode, masking.enabled=true, nombres de correspondances de masquage, network_used: false

La console imprime par fichier : type, taille, champs masqués, nombres de correspondances et "requêtes réseau : 0". Lisez report.md avec le lecteur de fichiers local ensuite ; ne remplacez pas par des captures d'écran ou OCR en ligne.

Étape 4 — Calculer localement, jamais mentalement

Sommes, ratios, nombres distincts, tris, regroupements, variations périodiques : toujours calculés par un script local. Sans voir toutes les données, les estimations du modèle sont presque toujours erronées. Réutilisez parse_xlsx / parse_delimited / Masker de local_extract.py dans un script jetable, calculez, puis écrivez les chiffres dans le rapport. Les pseudonymes peuvent être regroupés et comptés directement — pas besoin de les inverser.

Étape 5 — Produire un certificat d'audit

python "<skill_dir>/scripts/local_audit.py" ".local_analysis" --note "traité localement, rien téléchargé"

Le certificat d'audit comporte cinq parties : intégrité du fichier source (re-vérification du hash prouvant la lecture seule, aucune copie), exécution du masquage (état des commutateurs, catégories, correspondances dans cette exécution), inventaire des artefacts, vérification ligne par ligne des règles rouges, conclusion. Code de sortie 0 = succès, 1 = un fichier source a changé pendant le traitement.

Étape 6 — Rapport

Conclusion d'abord, données ensuite, une phrase de clôture :

Cette analyse s'est entièrement déroulée sur cette machine sans aucun service cloud impliqué ; les fichiers sources étaient en lecture seule et inchangés, et le rapport masque les noms, numéros de téléphone, adresses et numéros d'identité (pseudonymes stables). Les artefacts se trouvent dans .local_analysis/, le certificat d'audit dans audit.md.

Règles rouges (jamais déclenchées)

CatégorieInterditOutils typiques
Documents cloudCréer, importer ou "éditer" une feuille de calcul/document en ligneConnecteurs Tencent Docs, Kingsoft Docs, Feishu Docs
Drives cloud / stockage objetTélécharger des fichiers ou artefactsTencent Drive, WeDrive, stockage de fichiers cloud
Bases de connaissancesÉcrire dans une bibliothèque, ingérer des URLstéléchargement de bibliothèque, base de connaissances ima
Recherche externeUtiliser le texte source ou des fragments comme requêterecherche web, scraping de page
Conversion en ligne / OCRConversion PDF en ligne, décompression en ligne, reconnaissance d'image en lignetout outil en ligne, API de compréhension d'image
Envoi sortantEnvoyer des fichiers ou résumés vers chat, e-mail, botsmessages WeCom, e-mail, téléchargement de notes de réunion

Une seule exception : l'utilisateur dit explicitement "celui-ci peut être téléchargé / envoyé". Même dans ce cas, répétez-le et obtenez une deuxième confirmation avant d'agir.

Chemin local par type de fichier

TypeChemin local privilégiéNotes
.xlsx .xlsmlocal_extract.py (zip + XML directement)Multi-feuilles, masquage au niveau colonne ; les dates peuvent apparaître sous forme de nombres sériels
.csv .tsv .txt .md .json .htmllocal_extract.pyDétecte UTF-8 / GB18030 et délimiteur ; CSV masqué par en-tête
.docx .pptxlocal_extract.py (zip + XML directement)Paragraphes, plan hiérarchique, tableaux, puces par diapositive ; corps via masquage de texte libre
.pdflocal_extract.pyUtilise un CLI workbuddy-pdf local s'il est présent, fallback zlib intégré sinon
.png .jpg .gif .bmp .webplocal_extract.pyFormat, dimensions, hash uniquement ; OCR local uniquement si tesseract existe
.xls .doc .ppt binaires anciensDemander à l'utilisateur de ré-enregistrer localement, ou ouvrir dans un éditeur localNe jamais envoyer vers un convertisseur en ligne pour extraire le contenu
PDF scanné / texte dans les imagesOCR local, ou l'utilisateur dicte le contenuSi pas d'OCR, indiquez honnêtement la lacune — ne passez pas par le cloud

Images en particulier : sans tesseract, traitez-les uniquement comme métadonnées et dites "le contenu de l'image n'a pas été reconnu", en proposant deux solutions locales (installer OCR et réexécuter / l'utilisateur le décrit). Ne "jetez pas un œil" avec un modèle de vision — cela pousse l'image dans le chemin d'inférence et contredit la demande de l'utilisateur.

Règles de dégradation

  1. Le script local peut l'analyser → utilisez la sortie du script.
  2. Aucun texte extractible (scan, format ancien, crypté) → expliquez pourquoi, proposez des alternatives locales (ré-enregistrer localement, OCR local, dictée par l'utilisateur).
  3. L'utilisateur insiste pour "des résultats maintenant" → revenez à la question du mode : "compte tenu de l'état actuel, je ne peux répondre que statistiquement — acceptable ?"

Erreurs courantes

  • Sauter la demande de chemin et analyser directement une pièce jointe du chat : viole l'Étape 1.
  • Coller tout le contenu de report.md dans la réponse : le rapport est le document de travail ; les réponses portent les conclusions et les chiffres clés.
  • Croire que le mode strict rend le masquage inutile : les deux dimensions sont indépendantes.
  • Imprimer des valeurs non masquées dans la console ou un fichier temporaire "pour voir les données" : le masquage doit avoir lieu avant que quoi que ce soit soit écrit.
  • Estimer au lieu de calculer localement : les estimations sont presque toujours erronées à l'échelle des données complètes.
  • Envoyer .xls vers un convertisseur cloud "pour plus de commodité" : viole une règle rouge ; ré-enregistrez localement à la place.
  • Ignorer l'encodage : lire un CSV GB18030 en UTF-8 produit du mojibake qui pollue le profil des colonnes. Le script le gère ; le code écrit à la main doit aussi le faire.

Note sur les langues

Les règles de détection ciblent les formats de données en langue chinoise (numéros d'identité nationale, adresses province/ville, noms de famille chinois) ainsi que des motifs génériques (e-mail, téléphone, carte bancaire, plaque). Les rapports et la sortie console sont actuellement en chinois ; la logique de détection est indépendante de la langue là où les motifs le permettent. Pour les documents uniquement en anglais, le masquage des tableaux structurés fonctionne toujours via les en-têtes de colonnes, mais la détection des noms dans le texte libre est faible — dites-le plutôt que de promettre trop.

Skills associés