Architecture

Structure interne et primitives OS utilisées.

Stack technique

parcai est un script shell (Bash) autonome qui utilise uniquement les primitives natives de l'OS : • Bash — Script principal (parcai) • sandbox-exec — Isolation sur macOS (profil .sb template) • mitmproxy — Proxy MITM local pour le masquage des secrets • rsync — Détection et application des changements • cp -c (APFS clone) — Copie copy-on-write sur macOS

Isolation sur macOS

parcai utilise trois mécanismes complémentaires sur macOS : 1. Clone APFS (cp -c -R) — Le répertoire projet est cloné via copy-on-write au niveau du filesystem. La copie est instantanée et ne consomme aucun espace disque tant que les fichiers ne sont pas modifiés. Si l'agent exécute rm -rf ., seul le clone est détruit. 2. sandbox-exec avec profil .sb — Un profil de sandbox est généré dynamiquement à partir d'un template (profiles/macos.sb.tpl). Le profil définit : • Politique par défaut permissive, puis deny explicite sur les chemins dangereux • Tout /Users bloqué, seul le clone est whitelisté en écriture • Secrets explicitement bloqués (~/.ssh, ~/.aws, ~/.gnupg, ~/.kube, ~/.docker, etc.) • Exécution restreinte aux binaires système (/usr/bin, /bin, /opt/homebrew/bin) • Visibilité des processus bloquée (deny process-info*) — ps aux ne montre rien de l'hôte • Signaux restreints à ses propres processus (allow signal (target self)) • Politique réseau substituée dynamiquement (allow/deny network*) 3. Proxy MITM pour secret masking — Avec --secrets, un proxy mitmproxy local est lancé. Les vrais credentials (tokens API, clés) sont remplacés par des faux dans l'environnement du sandbox. Le proxy intercepte les requêtes sortantes et échange les faux tokens contre les vrais avant de contacter le service distant. Cela empêche l'agent d'exfiltrer des credentials réels.
# Extrait du profil sandbox macOS
(deny file-read* file-write* (subpath "/Users"))
(allow file-read* file-write* (subpath "{{CLONE}}"))
(deny file-read* (subpath "{{HOME}}/.ssh"))
(deny file-read* (subpath "{{HOME}}/.aws"))
(deny file-read* (subpath "{{HOME}}/.gnupg"))
(deny process-info*)
(allow process-info* (target self))
{{NETWORK_POLICY}}

Gestion des changements

Les modifications sont détectées et appliquées via rsync : 1. L'agent travaille sur le clone APFS — jamais sur l'original. 2. À la sortie du shell, rsync --dry-run compare le clone avec le projet original et produit un résumé avec le statut de chaque fichier : • A (added) — Fichier créé • M (modified) — Fichier modifié • D (deleted) — Fichier supprimé 3. Certains fichiers sont exclus du diff : .zshenv, .zshrc, .zsh_history, .claude/, .cache/, .config/, .local/, Library/. 4. Selon le mode choisi (--apply, --discard, ou confirmation interactive), les changements sont appliqués via rsync ou la copie est simplement supprimée. 5. Le cleanup supprime le profil de sandbox temporaire et le répertoire du clone.