Appearance
Permissions et sécurité
Sur cette page
- Ce qui quitte votre machine
- Niveaux de permission
- Classification des risques
- Accès hors workspace
- Clés et secrets
- Journalisation locale
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 :
| Niveau | Comportement |
|---|---|
auto | Les outils de risque faible/moyen s'exécutent sans demander |
ask | Confirmation pour les actions risquées |
review | Les 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écideallow/prompt/block; - un hook interne
preToolUsequi, enreview, bloque les listes figéesBash/WriteetEdit/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>/*dansexternalDirAllow(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/Greprestent 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.