Votre agent a besoin d'un mot de passe de base de données ou d'une clé d'API. Au lieu de le taper dans le chat, vous le saisissez dans votre navigateur, et il part directement vers la seule commande que vous avez vue. L'agent obtient le résultat, jamais la valeur.
Ce que vous tapez dans une session d'agent reste dans la conversation, dans le journal de session sur votre disque et chez le fournisseur du modèle. Nous l'avons mesuré chez nous : 68 de nos 70 secrets de déploiement se trouvaient en clair dans des journaux de session. Changer les secrets n'y fait rien tant que la valeur suivante prend le même chemin.
Node.js 20 ou plus récent, sans autre dépendance :
npm install -g @erseni/vault-ask Ou directement depuis le code source public, sans npm :
git clone https://gitlab.erseni.net/open-source/secrets-component.git npm install -g ./secrets-component/cli Par défaut : la valeur n'existe que comme variable d'environnement de ce seul processus enfant. Rien n'est écrit sur le disque.
vault-ask DB_PASSWORD -- psql -h db.example.com -U app Pour les valeurs qui doivent rester : écrites dans un fichier .env avec les droits 600.
vault-ask STRIPE_KEY SENTRY_DSN --env-file .env Pour les clés et certificats : une valeur dans un fichier, droits 600.
vault-ask TLS_KEY --file certs/server.key Il n'existe volontairement aucun moyen d'afficher la valeur. Plusieurs noms dans un même appel donnent une seule page avec plusieurs champs.
Demandez un nouveau mot de passe à votre agent et vous recevez un lien à usage unique au lieu du mot de passe dans le chat. vault-ask send génère la valeur sur la machine de l'agent, la chiffre sur place et écrit la même valeur dans le fichier .env ou la commande qui en a besoin, si bien que votre système et votre lien concordent.
vault-ask send DB_PASSWORD --env-file .env Le lien affiche la valeur une seule fois, puis il est épuisé. Les envois comptent dans la même limite journalière que les demandes.
Tout cela rattrape les erreurs et rend visible un agent manipulé. Cela ne rend pas inoffensif un agent qui tourne sous votre propre utilisateur système avec un shell : un tel agent peut lire la mémoire des processus qu'il a lancés. Une protection complète n'existe qu'avec une séparation des droits, où un service sous un autre utilisateur détient le secret et où l'agent ne reçoit qu'une référence. C'est écrit tel quel dans notre modèle de menace, plutôt que de promettre plus que ce que fait le code.
vault-ask-mcp propose les mêmes briques sous forme d'outils MCP : request_secret écrit une valeur dans un fichier, run_with_secret lance une commande avec elle, send_secret vous envoie une valeur générée sous forme de lien à usage unique. Le serveur indique à l'agent dès le début de chaque session quel outil utiliser, si bien que « génère un mot de passe pour ma base de données » aboutit à un lien sans aucune configuration de votre part.
claude mcp add vault-ask -- vault-ask-mcp export VAULT_ASK_API_KEY=vak_...