- Un outil qui isole les agents IA locaux via le sandbox natif de macOS afin d’empêcher toute modification en dehors du système autorisé
- Tous les agents s’exécutent dans un environnement sandbox indépendant, sans accès au répertoire personnel de l’utilisateur ni aux autres projets
- Application d’un modèle d’accès deny-first, où seuls les répertoires explicitement autorisés peuvent être lus ou modifiés
- L’installation se fait avec un unique script Bash, exécutable immédiatement sans build ni dépendances supplémentaires
- Une fonction de génération de profil basée sur un LLM permet d’automatiser la configuration
sandbox-exec selon le principe du moindre privilège
Vue d’ensemble
- Agent Safehouse est un système de sandboxing dédié à macOS qui protège les fichiers du système contre les dommages potentiels causés par des agents IA exécutés en local
- « Go full
--yolo. We've got you. » « Move fast, break nothing »
- Il bloque les risques d’exécution de commandes imprévues liés au caractère probabiliste des LLM
- Tous les principaux agents fonctionnent intégralement dans le sandbox, sans effet sur le système extérieur
- Il adopte un modèle d’accès deny-first : tous les accès sont bloqués par défaut, et seuls les chemins explicitement autorisés sont accessibles
- Exemple :
~/my-project est autorisé en lecture/écriture, tandis que ~/.ssh, ~/.aws, ~/other-repos sont refusés
Installation et exécution
- L’installation se fait en téléchargeant un unique script shell
- Le script est récupéré avec la commande
curl, enregistré dans ~/.local/bin/safehouse, puis rendu exécutable
- L’agent souhaité peut ensuite être lancé avec la commande
safehouse
- Exemple :
safehouse claude --dangerously-skip-permissions
- Par défaut, Safehouse accorde les droits de lecture/écriture au répertoire de travail courant (racine git), et un accès en lecture seule au répertoire de la toolchain
Exemples de validation du sandbox
- L’accès aux fichiers sensibles est bloqué au niveau du noyau
- L’exécution de
safehouse cat ~/.ssh/id_ed25519 provoque l’erreur « Operation not permitted »
- Les autres répertoires de projet (
~/other-project) ne sont pas visibles
- Le répertoire du projet en cours reste accessible normalement
Automatisation et génération de profils
- En ajoutant une fonction shell, tous les agents peuvent être exécutés par défaut dans Safehouse
- Exemple : définir une fonction
safe() dans .zshrc ou .bashrc pour sandboxer automatiquement les commandes claude, codex, amp, gemini
- Pour lancer un agent sans sandbox, il suffit d’utiliser la forme
command claude
- Une fonction de génération de profils basée sur un LLM est fournie
- Des modèles comme Claude, Codex ou Gemini analysent les templates Safehouse afin de générer un profil
sandbox-exec à privilèges minimaux
- Le profil est enregistré dans
~/.config/sandbox-exec.profile à partir des informations sur le répertoire personnel et la toolchain
- Il inclut les droits d’accès au répertoire de travail courant ainsi que des raccourcis de commande propres à chaque agent
Sécurité et intérêt pratique
- Il empêche les agents locaux basés sur des LLM de supprimer des fichiers ou de modifier le système de manière involontaire
- Il fournit un environnement d’exécution sûr par défaut en s’appuyant sur le contrôle d’accès au niveau du noyau de macOS
- Basé sur un script unique, il peut être facilement intégré au workflow des développeurs
1 commentaires
Réactions sur Hacker News
Je ne pensais pas que le projet que j’ai créé serait rendu public aussi vite
1️⃣ Je préfère les agents qui s’exécutent directement en local. Plutôt que des conteneurs ou des serveurs distants, je me sens plus à l’aise quand ils tournent sur ma machine, que j’ai configurée finement moi-même
2️⃣ C’est en pratique un générateur de politiques pour
sandbox-exec. Il n’y a pas de dépendances, pas de virtualisation. À la place, j’ai passé beaucoup de temps à identifier les permissions minimales nécessaires pour que chaque agent puisse faire des choses comme les mises à jour automatiques, l’intégration au trousseau, le collage d’images, etc. Les recherches associées sont résumées ici : agent-safehouse.dev/docs/agent-investigations3️⃣ Il n’est même pas nécessaire d’utiliser l’ensemble du projet. Le seul Policy Builder permet déjà de générer des politiques
sandbox-execà placer dans ses dotfilesJ’avais déjà lu des documents sur les politiques de sandbox, mais c’était la première fois que je voyais ça sous la forme d’une application directement exploitable
Cela dit, il y avait quelques points gênants — l’accès à
.gitconfiget.gitignoredans le répertoire personnel est restreint, et à cause des limitations d’accès aux processus, il est impossible de faire exécuter à Claude des commandes commelldboupkill. Ce serait bien d’avoir un contrôle plus fin des permissionsJ’ai parcouru le site et les scripts, et je n’ai rien vu de particulièrement problématique. Y a-t-il éventuellement des points d’attention non documentés ?
.shdepuis un serveur arbitraire, ce qui est un peu cocasseJ’aimerais bien une distribution sous forme de tarball. Avec un tarball, on peut inspecter le contenu soi-même et vérifier s’il a bien été généré automatiquement par la CI, donc c’est plus rassurant
Je suis content de voir ce genre de projet, et je pense qu’en ce moment le sandboxing est le plus gros défi
Les premiers utilisateurs lanceront des agents en local sans trop réfléchir, mais à long terme, ou en entreprise, ça ne passera jamais
Il faut gérer des scénarios complexes qui vont bien au-delà du simple contrôle des permissions réseau, fichier ou exécution, comme les tests navigateur ou la création de ressources cloud
Au final, il faut une approche pratique qui intègre sécurité, coûts et contrôle des permissions
J’utilise un démon local qui émet des JWT à courte durée de vie pour éviter que l’agent manipule directement les clés. Ça fonctionne bien pour l’accès API, mais au niveau du système de fichiers, on peut toujours lancer un nombre infini d’instances EC2
Le problème, c’est qu’il est difficile d’évaluer et de comparer plusieurs sandboxes
Ça ressemble à un wrapper pour
sandbox-exec, et il y a beaucoup de wrappers de ce type en ce momentCe qu’il faut vraiment, ce sont des documents de validation de confiance et des tests automatisés. La plupart des sandboxes manquent de documentation
Pour faire confiance, il faut des documents détaillés et des preuves de fonctionnement
Les profils
sandbox-execpour chaque agent sont séparés dans le dossier profiles sur GitHub, ce qui permet de les relire facilementJe fais aussi des tests E2E avec de vrais agents
Même sans le wrapper Safehouse, on peut générer directement des politiques à privilèges minimaux avec Policy Builder
Je fournis aussi un fichier d’instructions pour demander à un LLM de rédiger des profils de sandbox
C’est un script wrapper autour de
sandbox-exec. J’aime bien le fait qu’il y ait beaucoup de préréglages bien conçus90 % de
sandbox-exec, c’est de bien définir le bon périmètre, et les 90 % restants, c’est de le comprendreCela dit, ce serait bien de pouvoir faire du sandboxing en overlay ou en copy-on-write. Il me suffit que seul un environnement temporaire soit modifié, pas mon
.bashrcL’overlay FS est compliqué sur macOS, mais je m’en suis sorti en limitant tout ce qui est en dehors du CWD en lecture seule et en poussant le travail vers un dossier temporaire
Il permet aussi d’exposer des ports TCP/UDP et de partager avec ses coéquipiers. Voir le lien GitHub
sandbox-exec, des worktrees et un système de fichiers COWIl permet d’accéder en toute sécurité à des fichiers ignorés par Git. Lien Treebeard
sandbox-execn’est-il pas déjà deprecated ?Fait intéressant :
sandbox-execest officiellement deprecated depuis macOS Sierra (2016)Malgré cela, il reste encore très utile. L’App Sandbox d’Apple n’est pas adapté à ce type de règles personnalisées
J’espère qu’Apple ne le supprimera pas complètement
Il existe aussi un projet appelé Sandvault. Il combine
sandbox-execavec le système d’utilisateurs UnixIl attribue à chaque agent un compte utilisateur séparé et non privilégié, puis les interactions passent par
sudo, SSH et des répertoires partagésLien GitHub de Sandvault
J’ai créé une application GUI pour macOS qui permet de gérer visuellement
sandbox-execElle inclut aussi un filtrage réseau par domaine et une fonction de détection de secrets
multitui.com
Je partage une méthode pour exécuter Claude Code dans les conteneurs Apple à l’aide de la commande
containerd’AppleL’environnement se met en place via
container system start→container run→container exec, puis on installe Node.js et ClaudeJe me demande pourquoi on considère qu’exécuter des agents en local est préférable
Pour la plupart des gens, l’exécution distante semble plus efficace — puisqu’il n’est pas nécessaire de les laisser tourner en permanence
Et en plus, cela permet d’éviter les frais d’abonnement
Le renforcement de la sécurité est en cours, mais pour les workflows IA, c’est déjà largement suffisant
Lien GitHub de pixels
Je me demande si « clunker » est le nouvel argot pour « clanker ». Roku, l’ami d’un ami, pose la question
Je suis justement en train de galérer avec des problèmes de sandboxing, donc le timing est parfait