Un proxy désensibilisant s’intercale entre votre agent de code (Claude Code, Codex, Cursor, OpenCode) et le fournisseur de modèle (Anthropic, OpenAI, DeepSeek). Il inspecte le corps HTTP de la requête — messages, tool_calls JSON, pièces jointes — remplace les données sensibles par des jetons ou des faux déterministes, puis restaure les valeurs réelles dans la réponse. Le modèle ne voit jamais la donnée réelle. Le proxy est la dernière ligne avant Internet, y compris ce que les hooks ratent.

Solutions concrètes
| Proxy | Cible | Mécanisme | Licence / lien |
|---|---|---|---|
| PrivAiTe | Claude Code, Codex, tout client OpenAI-compatible | Redaction réversible des PII y compris dans les arguments d’outils JSON et le multimodal. Détection Presidio + privacy-filter. Zero télémétrie | Self-host, BSD-3 — GitHub |
| Cover | Codex, Claude Code, Cursor, Pi | Proxy bidirectionnel avec règles déclaratives : allow, placeholder, pseudonymize, mask, redact, block. Faux déterministes (IP, emails, UUID). Mapping en mémoire seule, TTL | Go, binaire — GitHub |
| Hamza | Claude Code, Codex | Masque secrets et PII avant l’envoi. Détection : scanner de secrets + Presidio. Placeholders stables par requête (<EMAIL_482191>) | Docker Compose — GitHub |
| ficta | Claude Code, Codex, Pi | Redaction locale des secrets enregistrés (valeurs exactes) + détection best-effort des formes de secrets et PII. fail_closed par défaut | npm — npmjs |
| privacy-guard-proxy | Claude Code | Masque emails, noms, IBANs, clés API, IDs. Placeholders stables ([EMAIL_1], [IBAN_1]). Web UI + REST API intégrés | Docker — Docker Hub |
| LiteLLM Sensitive Data Routing | Équipe, multi-fournisseurs | Ne masque pas : reroute. Dès qu’une donnée sensible apparaît, la session entière bascule vers un modèle on-premise (vLLM, Ollama). Session collante par défaut | Passerelle d’équipe — Docs |
Le schéma minimal
text
Agent (Claude Code / Codex / OpenCode)
│
▼
localhost:XXXX proxy désensibilisant
│ ├─ parse messages + tool_calls JSON
│ ├─ détecte (secrets, PII, IBAN mod 97)
│ ├─ remplace par jeton ou faux déterministe
│ └─ fail closed si le moteur est down
│
▼
Anthropic / OpenAI / DeepSeek / vLLM
Les deux modes de remplacement
- Jeton stable :
FR76…→<IBAN_1>. Le modèle apprend le tag et génère du code correct. Le transcript ne contient jamais l’IBAN réel. - Faux déterministe : même empreinte → toujours le même IBAN checksummé. Meilleure qualité pour les parseurs et les tests.
Règle d’or : si le proxy est arrêté, aucun appel ne doit partir. Échec fermé, pas échec ouvert.