Skip to content

Permissions et sécurité ​

Sur cette page ​

Ce qui quitte votre machine ​

Uniquement le nécessaire, et uniquement vers l'endpoint que vous avez configuré : le prompt système, l'historique de la conversation et les résultats d'outils utiles à la tâche.

Jamais : aucune télémétrie, aucune analytics, aucun service tiers.

Niveaux de permission ​

Réglés par /permissions ou permissionLevel dans config.json :

NiveauComportement
autoLes outils de risque faible/moyen s'exécutent sans demander
askConfirmation pour les actions risquées
reviewLes outils sensibles sont bloqués, même sur demande

Une configuration neuve démarre en ask ; un fichier existant sans permissionLevel est normalisé en auto au chargement (vérifiez /permissions).

En OpenTUI, la demande arrive dans une file dédiée : [y] autoriser, [a] toujours pour cet outil, [n] refuser. Un refus ouvre un champ « Dire à l'agent quoi faire différemment » dont le texte est renvoyé au modèle (façon OpenCode). Timeout 60 s → la demande est annulée.

Deux gardes se cumulent :

  • le moteur de risque (src/risk.ts), qui classe chaque appel et décide allow / prompt / block ;
  • un hook interne preToolUse qui, en review, bloque les listes figées Bash/Write et Edit/WebFetch/WebSearch.

Classification des risques ​

Chaque outil et chaque commande shell est classé par niveau de risque (src/risk.ts). Les commandes dangereuses (rm -rf, mkfs, …) déclenchent toujours une confirmation — ou un sandbox selon le mode.

Accès hors workspace ​

Tout accès fichier hors du workspace via Read, Write, Edit ou ListDir déclenche une demande dédiée (façon OpenCode) :

  • Autoriser une fois (y) — ponctuel, sans trace
  • Toujours autoriser (a) — persiste un pattern <dossier>/* dans externalDirAllow (config.json)
  • Refuser (n) — avec champ de feedback renvoyé au modèle

Garde-fous :

  • « Toujours » ne mémorise que le pattern, jamais un accord de session aveugle
  • Un pattern racine /* est refusé — l'accès reste ponctuel
  • Si un lien symbolique sort du workspace, le panneau affiche la cible réelle (résolue par realpath), et c'est elle qui sert au pattern
  • Sans interface attachée : refusé. Glob/Grep restent refusés sec hors workspace (pas de panneau)

Clés et secrets ​

  • Lues depuis l'environnement (*_API_KEY, .env) ou saisies via /config (stockées dans ~/.config/marex-code/config.json)
  • Protégez ces fichiers : chmod 600, jamais versionnés
  • OpenTUI ne propose pas de saisie de clé en clair (pas de mode masqué sur son <input>) : utilisez Ink, le fichier de config ou une variable d'environnement

Journalisation locale ​

Audit des appels d'outils, sessions (.marex/sessions/), métriques, usage par tour (.marex/usage.jsonl + usage.db) : tout reste dans le projet (.marex/) et ~/.marex/. Rien n'est transmis. Le dashboard /usage web n'écoute que sur loopback.

Voir Sandbox pour l'exécution isolée des commandes dangereuses.