
Proxy sandbox et MCP qui empêche les agents de codage IA de lire les clés SSH, les identifiants AWS et les fichiers .env, avec une politique de refus par défaut et des journaux d'audit inviolables.
Le bac à sable de Claude Code permet par défaut à un agent de lire vos clés SSH et vos identifiants AWS. Aegis, non.
Deux couches, toutes deux vérifiées sur du matériel réel.
Bac à sable noyau — le propre shell de l'agent ne peut pas atteindre un chemin refusé :
$ ! cat ~/.ssh/id_rsa
cat: /Users/you/.ssh/id_rsa: Operation not permitted
$ ! cat ~/.aws/credentials
cat: /Users/you/.aws/credentials: Operation not permitted
$ tail ~/Library/Application\ Support/Aegis/denials.log
kernel denied file-read-data /Users/you/.ssh/id_rsa to cat(pid 41560)
kernel denied file-read-data /Users/you/.aws/credentials to cat(pid 42180)
Proxy MCP — même outil, même fichier, avec et sans Aegis en amont :
direct to the server: allowed: TOKEN=proof-env-secret
through aegis proxy: AEGIS DENIED: read_text_file
Reason: path matches deny rule '.env'
Rule: deny_paths
Chaque ligne est appuyée par un test exécuté sur cette version ; lorsqu'un élément n'est pas encore testé, cela est indiqué.
aegis workspace add / remove / list — modifie les dossiers dans lesquels l'agent peut travailler sans éditer policy.json. L'ajout nécessite toujours --confirm-grant ; la suppression jamais. add refuse votre répertoire personnel, tout élément contenant les propres fichiers d'Aegis, un chemin comportant .., un dossier inexistant, un lien symbolique situé dans un espace de travail, et un espace de travail à l'intérieur ou autour d'un autre. Chaque modification est consignée dans le journal d'audit et régénère le profil de bac à sable. Une session déjà en cours conserve les espaces de travail avec lesquels elle a démarré — y compris celui que vous venez de supprimer — mesuré par rapport à une session en bac à sable active.aegis policy set-folder, accordant l'accès là où pointait le lien ; et un espace de travail créé à l'intérieur d'un autre pouvait ensuite être remplacé par un lien symbolique et suivi au lancement suivant. Les deux ont été reproduits sur la 0.8.1 et constituent désormais des tests de non-régression permanents dont l'échec y est prouvé.policy.json sont refusés. Un chemin relatif était résolu par rapport au dossier depuis lequel Aegis était lancé, si bien que aegis run et le wrapper de lancement pouvaient appliquer des bacs à sable différents à partir d'une même politique (mesuré : empreintes de profil différentes). Les chemins doivent être absolus ou commencer par ~/.aegis doctor ne signale plus d'incohérence entre une édition et le lancement suivant.aegis run et aegis doctor affichent le chemin réel de Claude Code — lu depuis le wrapper écrit par Aegis — et /login, à exécuter hors du bac à sable. Non corrigé : un jeton révoqué ou expiré est toujours considéré comme connecté jusqu'à l'échec du premier message (le statut de Claude Code ne signale aucune expiration), et la connexion reste impossible à l'intérieur du bac à sable ; cela nécessite un courtier d'identifiants qui n'existe pas encore.aegis init protège un nouvel utilisateur qui ne s'est pas encore connecté. Découvert en suivant le tutoriel dans un environnement propre : dans la 0.8.1, un Claude Code qui ne s'était jamais connecté restait non enveloppé par défaut, derrière une question que la documentation ne mentionnait jamais, si bien que claude restait hors du bac à sable. Désormais, une fois que vous acceptez le bac à sable, il est enveloppé, avec un avertissement bien visible pour se connecter une fois hors du bac à sable (le chemin réel de Claude Code, puis /login) ; les étapes finales de aegis init placent cela en premier, et aegis doctor échoue tant que vous ne l'avez pas fait. La même exécution a également corrigé les textes d'ouverture et de clôture d'init, unifié l'instruction de connexion de aegis init, aegis run et aegis doctor, et empêché une modification sans effet d'afficher nothing to change (nothing to change).Pas encore testé dans la 0.9.0 : Linux ; les clients autres que Claude Code ; le flux /login de bout en bout ; une application de bureau reconstruite.
Se place entre votre agent de codage IA et votre machine :
cat .env ne peut pas le contourneraegis doctor, et point de contrôle
pris depuis l'extérieur du bac à sable sous une clé que le bac à sable ne peut ni lire ni écrireNouveau ici ? docs/getting-started.md est le parcours pas à pas, y compris les deux questions dont la réponse par défaut est Non.
Vous avez suivi des instructions antérieures qui mentionnaient aegis-mcp ? Ce paquet n'est pas Aegis — c'est un projet sans rapport installé sous le même nom d'import, aegis. Désinstallez-le d'abord :
python3 -m pip uninstall aegis-mcp
Si aegis-sandbox est déjà installé, cette désinstallation supprime également deux de ses fichiers, réinstallez-le donc ensuite : python3 -m pip install --force-reinstall aegis-sandbox.
python3 -m pip install aegis-sandbox
aegis init # detects Claude Code / Cursor, asks a few questions
aegis doctor # proves the boundary is actually in place
Vous effectuez une mise à niveau ? Relancez aegis init. Votre policy.json vous appartient et n'est jamais réécrit dans votre dos, donc un nouveau domaine de sandbox n'apparaît pas de lui-même — et sans le point de terminaison de jeton OAuth, un client sandboxé cesse de fonctionner lorsque son jeton expire. aegis init propose les nouveaux hôtes ; accepter ne demande qu'une frappe.