
Détecter et masquer les secrets dans les historiques des agents de codage IA (Claude Code, et plus).

Détectez et masquez les secrets dans l'historique local de votre agent de codage IA. Entièrement hors ligne.
Prévention : ne collez pas du tout de clés API dans des agents IA hébergés dans le cloud — la clé transite par les serveurs du fournisseur avant même d'atteindre votre disque.
Si vous l'avez déjà fait : agentsweep élimine le vecteur d'attaque local restant — les malwares de la chaîne d'approvisionnement et les paquets compromis qui analysent votre disque à la recherche d'identifiants. Vos fichiers ne quittent jamais votre machine.
29 agents pris en charge : Claude Code · Codex · OpenCode · Cursor · Windsurf · Aider · Cline · Kilo Code · Roo Code · PearAI · Trae · Void · Gemini CLI · Qwen Code · Continue · Open Interpreter · GitHub Copilot Chat · OpenClaw · Hermes · Goose · Warp · Grok CLI · Kiro CLI · Zed · Codebuff · Plandex · Junie · Mentat · JetBrains AI
Sources expérimentales (Warp, Grok CLI, Kiro CLI, Zed, Codebuff, Plandex, Qwen Code, PearAI, Trae, Void, Junie, Mentat, JetBrains AI) ont des chemins/formats de stockage issus de recherches mais pas encore vérifiées sur une installation réelle. L'analyse est sûre — un mauvais chemin ne trouve simplement rien — mais elles peuvent sous-rapporter tant que ce n'est pas confirmé. Elles sont marquées
(expérimental)dans le sélecteur et affichent un avis lors de l'analyse.
191 règles de détection — AWS, GitHub, Stripe, OpenAI, Anthropic, Google, Slack, Discord, HuggingFace, JWT, clés PEM, URL de base de données, phrases de récupération BIP-39, et bien d'autres
Alpha — chaque étape destructrice est verrouillée, sauvegardée et réversible avec une seule commande
Claude Code (et tous les autres CLI de codage IA) stocke l'intégralité de votre historique de conversation sous forme de JSONL en texte brut sur le disque — sous ~/.claude/projects/ pour Claude Code, ~/.codex/sessions/ pour OpenAI Codex. Tout ce que vous collez — une clé AWS, un fichier .env, une URL de base de données — reste en clair indéfiniment. L'historique d'un développeur typique accumule des dizaines de secrets au fil des mois, souvent sans qu'il s'en aperçoive.
agentsweep analyse cet historique, vous dit ce qui a fuité, et peut masquer les valeurs secrètes sur place tout en préservant la structure JSONL octet pour octet. Il vous indique également quelles clés faire pivoter, avec la bonne URL de révocation pour chaque fournisseur.
Périmètre de protection : agentsweep lui-même est entièrement local et hors ligne — il ne lit et n'écrit que des fichiers sur votre machine et n'effectue aucun appel réseau. Il supprime un vecteur d'attaque : les secrets présents dans les fichiers d'historique locaux. Il n'affecte pas ce que votre fournisseur d'IA a déjà reçu : lorsque vous collez une clé dans Claude Code, Cursor ou tout agent hébergé dans le cloud, cette clé a déjà transité par les serveurs du fournisseur avant d'atteindre le disque. Si cela vous préoccupe, envisagez un modèle hébergé localement (Ollama, LM Studio, OpenCode) où rien ne quitte votre machine — agentsweep se marie particulièrement bien avec les configurations de modèles locaux.
Les attaques de la chaîne d'approvisionnement s'accélèrent. En 2024-2025, une vague de paquets npm et PyPI malveillants — sha256-universal, shailulid, des centaines de typosquats — a été surprise en train de faire une seule chose : exfiltrer les identifiants de développeurs de la machine qui les avait installés. Ils ciblent les variables d'environnement, les fichiers .env, l'historique du shell, les clés SSH et désormais les fichiers d'historique des agents IA.
Les assistants de codage IA ont créé une nouvelle catégorie d'exposition d'identifiants qui n'existait pas il y a deux ans :
~/.claude/projects/*/conversations/*.jsonlpostinstall → analyse les chemins courants → trouve votre historique JSONL → exfiltre 50 clés API en une seule requête.env pour lequel vous avez demandé de l'aide à une IA, chaque URL de base de données partagée pour déboguer, chaque jeton collé pour une commande d'une ligneL'historique des agents IA est le nouveau .bash_history — sauf qu'il contient le contexte complet, pas seulement les commandes. Les outils d'attaque le savent déjà. agentsweep existe pour nettoyer avant que cela ne soit exploité.
pip install uv # get uv (skip if you already have it)
uv tool install agentsweep # install — adds `agentsweep` and `asweep` to PATH
asweep # run — interactive menu guides you through everything
C'est tout. Aucun virtualenv à activer, pas de bidouillage du PATH — uv tool install donne à la commande son propre environnement isolé.
agentsweep exécute un pipeline fixe en 5 étapes. scan s'arrête après l'étape 3 ; fix poursuit jusqu'au masquage.
flowchart LR
A("🔍 DISCOVER\nwalk history dirs\nstream file list") --> B("⚡ SCAN\nAho-Corasick pre-filter\n191 regex rules + BIP-39")
B --> C{"secrets\nfound?"}
C -- "none" --> D("✅ CLEAN\nexit 0")
C -- "found" --> E("📋 FINDINGS\nshow report\nexit 1")
E -. "scan only" .-> F("⚠️ ROTATE\nkeys still live")
E -- "type REDACT" --> G("✏️ REDACT\natomic write · .bak backup\npost-write JSON validation")
G --> H("🔑 ROTATE\nper-provider\nrevocation links")
style A fill:#1e3a5f,color:#fff,stroke:#2d5986
style B fill:#1e3a5f,color:#fff,stroke:#2d5986
style C fill:#4a3728,color:#fff,stroke:#7a5c3f
style D fill:#1a4731,color:#fff,stroke:#2d7a52
style E fill:#4a3a1e,color:#fff,stroke:#7a6030
style F fill:#4a2020,color:#fff,stroke:#8b3a3a
style G fill:#1e3a5f,color:#fff,stroke:#2d5986
style H fill:#2d1e4a,color:#fff,stroke:#5a3a8bChaque écriture est protégée par 8 invariants de sécurité — remplacement atomique, sauvegarde .bak obligatoire, rejet des liens symboliques, verrous mtime/processus et validation JSONL après écriture. agentsweep undo restaure à partir des sauvegardes.
Recommandé — isolé, sans conflits de venv :
uv tool install agentsweep # one-time install
uv tool upgrade agentsweep # update to latest
Essayez sans installer (exécute toujours la dernière version) :
uvx agentsweep@latest
Pip classique :
pip install agentsweep
pip install --upgrade agentsweep
Pas de
uv?pip install uvou consultez astral.sh/uv. Nécessite Python 3.11+.
Exécutez-le sans argument dans un terminal et vous obtenez l'expérience complète — bannière,
menu numéroté, confirmations tapées avant toute action destructrice et annulation
en une touche (restaure les sauvegardes .bak). Toute analyse interactive qui trouve des secrets
se termine par une offre de les masquer sur-le-champ (tapez REDACT pour confirmer) :
agentsweep
Le scripting n'est pas affecté : tout flag, ou un flux pipé/redirigé, ignore entièrement le menu et se comporte exactement comme documenté ci-dessous.
La forme historique avec flag agentsweep --fix est toujours acceptée et se comporte à l'identique de agentsweep fix.
Choisissez l'historique de quel agent cibler avec --source. La valeur par défaut est claude-code.
agentsweep scan --source claude-code # ~/.claude/projects/ (default)
agentsweep scan --source codex # ~/.codex/sessions/
agentsweep scan --source opencode # OpenCode SQLite store
agentsweep scan --source cursor # Cursor history
agentsweep scan --source windsurf # Windsurf history
agentsweep scan --source aider # ~/.aider/
agentsweep scan --source cline # Cline history
agentsweep scan --source gemini-cli # Gemini CLI history
agentsweep scan --source continue-vscode # Continue (VS Code) history
agentsweep scan --source github-copilot-chat # GitHub Copilot Chat history
agentsweep scan --source openclaw # OpenClaw ~/.openclaw/
agentsweep scan --source hermes # Hermes Agent ~/.hermes/state.db
agentsweep scan --source goose # Goose ~/.local/share/goose/
Vous ne savez pas quels agents sont installés ? list-sources affiche chaque source
prise en charge, son emplacement d'historique et si cet historique existe sur cette machine —
pour savoir quelles valeurs --source valent la peine d'être analysées. Il ne lit rien et
n'écrit rien.
agentsweep list-sources # all 29 sources + which are on disk
agentsweep list-sources --detected # only the ones found on this machine
agentsweep list-sources --json # machine-readable (for scripts/CI)
Analysez tous les agents enregistrés en une seule passe (résultats agrégés ; le masquage reste par source) :
agentsweep scan --all # all registered sources
agentsweep scan --all --detected # only sources with a history root on disk
agentsweep scan --all --json # aggregated JSON (each finding has "source")
agentsweep scan --all --json -o out.json
Remplacez le répertoire racine par défaut pour analyser n'importe quel dossier :
agentsweep scan --root ~/backups/claude-history
agentsweep fix --root /tmp/history-copy --allow-production
# Machine-readable JSON to stdout (exit 0 = clean, 1 = findings found, 2 = error)
agentsweep scan --json
# Write findings JSON to a file instead of stdout
agentsweep scan --json -o findings.json
agentsweep scan --json --output /tmp/report.json
# Skip .agentsweepignore files
agentsweep scan --no-ignore
# Redact Claude Code history in place (--allow-production required for default roots during alpha)
agentsweep fix --allow-production
# Skip creating .bak backups (not recommended)
agentsweep fix --allow-production --no-backup
# Bypass soft safety checks: mtime gate (files modified <60 s ago) and running-process gate
agentsweep fix --allow-production --force
# Combine: non-interactive JSON-mode redaction against a custom root
agentsweep fix --root ~/history-copy --json
# Undo redactions for a specific source
agentsweep undo --source codex
# Undo against a custom root
agentsweep undo --root ~/history-copy
Un outil de masquage qui corrompt votre historique est strictement pire que la fuite qu'il corrige. agentsweep applique ces invariants à chaque --fix :
fsync() → os.replace() sur l'original. Un crash à n'importe quel instant laisse soit l'ancien fichier complet, soit le nouveau fichier complet — jamais une écriture interrompue.PRAGMA integrity_check. Si la vérification échoue, l'écriture est abandonnée et l'original reste intact..bak par défaut. Créée lisible uniquement par le propriétaire (mode 0600) car elle contient les secrets avant masquage ; refuse de s'exécuter si un .bak existe déjà (afin que les sauvegardes précédentes ne puissent pas être écrasées).~/.codeium/windsurf/memories/).Chaque fichier masqué possède un fichier *.bak voisin contenant les octets d'origine. Le moyen le plus simple d'annuler tous les masquages pour une source est :
agentsweep undo # undo Claude Code (default)
agentsweep undo --source codex # undo a specific source
agentsweep undo --root ~/history-copy # undo against a custom root
Si vous devez restaurer manuellement un seul fichier (par ex. vous avez supprimé la source de la commande undo) :
mv session.jsonl.bak session.jsonl
Les sauvegardes contiennent les originaux d'avant masquage — des secrets en clair, donc un nettoyage n'est terminé qu'une fois les clés fuitées pivotées et les sauvegardes supprimées. Une fois que vous les avez fait pivoter :
agentsweep purge # delete Claude Code backups (asks first)
agentsweep purge --source windsurf # delete a specific source's backups
agentsweep purge --yes # non-interactive (scripts / CI)
191 modèles à haute confiance plus un détecteur de phrases de récupération crypto validé par somme de contrôle — les mnémoniques BIP-39 (12/15/18/21/24 mots ; le format de portefeuille derrière BTC, ETH, SOL, BNB, ADA, DOGE, LTC, DOT, AVAX et pratiquement toutes les grandes chaînes) et les graines Electrum sont confirmés cryptographiquement (somme de contrôle BIP-39 / étiquette de version Electrum), donc un texte anglais qui utilise par hasard des mots de portefeuille ne produit jamais de faux positifs.
Les modèles : clés d'accès AWS, jetons GitHub (PAT/OAuth/App/fine-grained), Stripe live/test, OpenAI, Anthropic, Google API, Slack bot/utilisateur/webhook, Hugging Face, JWT, clés privées PEM, URL de base de données avec mots de passe intégrés, jetons npm/PyPI/SendGrid/Twilio — plus 167 règles portées depuis le pack gitleaks couvrant GitLab, Grafana, HashiCorp Vault/Terraform, DigitalOcean, Shopify, PlanetScale, Databricks, Atlassian, Azure AD, 1Password, Sentry, New Relic, Mailgun, Datadog, Twilio, Twitter/X, Twitch, Yandex, JFrog, Snyk, Mailchimp, identifiants curl en ligne de commande, et bien d'autres. Les modèles sont très précis — les faux positifs sont rares, et les règles contextuelles par fournisseur sont limitées par mots-clés pour que les gros collages restent rapides.
Pour une détection plus poussée, exécutez gitleaks ou trufflehog en complément d'agentsweep — leurs packs de règles sont plus exhaustifs. La valeur d'agentsweep réside dans la surface spécifique à l'historique des agents, pas dans le moteur de détection.
Pourquoi uvx agentsweep affiche-t-il une ancienne version ?
uvx met en cache les outils localement. Utilisez uvx agentsweep@latest pour toujours exécuter la version la plus récente (recommandé), ou forcez l'actualisation du cache avec uvx --reinstall agentsweep.
Où est OpenCode dans le menu ?
La prise en charge d'OpenCode a été ajoutée dans la v0.1.1. Exécutez pip install --upgrade agentsweep ou uvx agentsweep@latest pour l'obtenir.
Est-ce qu'agentsweep envoie mes données quelque part ? Non. Il est entièrement hors ligne — zéro appel réseau pendant l'analyse ou le masquage. Le seul appel réseau facultatif est la vérification de mise à jour en arrière-plan, qui ne récupère que le numéro de la dernière version depuis PyPI.
Merci à tous ceux qui ont contribué du code, des signalements de bugs et des idées.
MIT. Voir LICENSE.
| Commande | Effet |
|---|
agentsweep scan | Analyse uniquement — lecture seule, aucun fichier modifié (comportement par défaut si aucun verbe n'est donné) |
agentsweep fix | Analyse, puis propose de masquer les résultats sur place (tapez REDACT pour confirmer) |
agentsweep undo | Restaure toutes les sauvegardes .bak, annulant tout masquage précédent |
agentsweep purge | Supprime toutes les sauvegardes .bak une fois les clés fuitées pivotées (définitif — undo ne fonctionne plus) |
agentsweep list-sources | Liste chaque agent pris en charge et indique lesquels ont un historique sur cette machine (lecture seule) |
agentsweep --version / -V | Affiche la version installée |
agentsweep --update | Vérifie sur PyPI qu'une version plus récente existe |
--force passe outre.--force passe outre.--fix sur la racine par défaut ~/.claude/projects/ exige --allow-production jusqu'à la v1.0.~/.agentsweep/audit.jsonl.