Retour à l'accueil

Architecture & Privacy

Dernière mise à jour : 25 avril 2026

Cette page documente comment Zarev Pro traite tes données techniquement. Le code backend reste closed source mais l'architecture est publique : tu dois pouvoir comprendre exactement ce qui sort de ta machine.

Flux de données

Quand tu lances le CLI Zarev, voici exactement ce qui se passe :

┌─────────────────────────────────────────────────────────────┐
│  YOUR MACHINE (local-first)                                 │
│                                                             │
│  ~/.claude/         scan + parse      ┌─────────────────┐   │
│  ├─ .mcp.json   ─────────────────────▶│  CLI (Node)     │   │
│  ├─ skills/                           │                 │   │
│  └─ hooks/                            │  Gitleaks strip │   │
│                                       │  (~150 patterns)│   │
│  ~/.zarev/                            │       │         │   │
│  └─ audit.log  ◀──── append ──────────│       ▼         │   │
│                                       │  Preview UI     │   │
│                                       └─────────┬───────┘   │
└──────────────────────────────────────────────────│──────────┘
                                                   │ HTTPS / TLS 1.3
                                                   │ Bearer token
                                                   ▼
┌─────────────────────────────────────────────────────────────┐
│  ZAREV BACKEND (Supabase EU + Vercel)                       │
│                                                             │
│  POST /api/v1/zarev/match  ─────▶ Supabase EU (Frankfurt)   │
│         │                            │                      │
│         │                            ▼                      │
│         │                         RLS scoring               │
│         │                                                   │
│  POST /api/v1/zarev/brief-prompt ─▶ Anthropic (US, SCC+DPF) │
│                                       Claude Haiku          │
│                                       │                     │
│                                       ▼                     │
│                                       JSON response         │
│                                       (5 min cache)         │
└─────────────────────────────────────────────────────────────┘

Threat model

Les 4 menaces principales qu'on adresse en V0.1 :

1. Fuite de secrets (clés API, tokens)

Mitigation — Gitleaks pre-strip avec ~150 patterns (sk-*, GITHUB_TOKEN, AWS_*, OPENAI_API_KEY, etc.) + heuristique sur les valeurs longues hex/base64 dans les fichiers .env*. Preview UI obligatoire avant chaque envoi : tu vois le payload exact, tu peux annuler.

2. Man-in-the-middle réseau

Mitigation — TLS 1.3 obligatoire, rejet des certificats invalides côté CLI. Aucun fallback HTTP.

3. Prompt injection via brief

Mitigation — le prompt système Anthropic isole strictement le contexte stack du contenu utilisateur. Pas d'exfiltration possible : le brief n'a pas accès aux conversations passées, ni à la DB d'autres users.

4. Data exfiltration via brief généré

Mitigation — le brief contient uniquement les recommandations Claude, jamais d'echo brut du stack scanné. Le payload de sortie est validé côté backend avant retour au CLI.

Champs envoyés au backend

Liste exhaustive de ce que le CLI envoie à POST /api/v1/zarev/match et POST /api/v1/zarev/brief-prompt :

  • stack_hash : SHA-256 du fingerprint stack (déterministe, pas de PII).
  • mcps : liste des MCPs détectés (slug, version, transport — sans config values).
  • skills : liste des Skills (slug, version — sans contenu prompt).
  • hooks : liste des hooks Claude Code (event, script-name — sans body).
  • runtime : os (darwin/linux/win32), node version, claude-cli version. Aucun hostname ou username.
  • user_id : UUID Supabase, lié à ton compte Pro. Présent uniquement si authentifié.

Exemple avant/après strip

Avant strip (fichier local .mcp.json) :

{
  "mcpServers": {
    "supabase": {
      "command": "npx",
      "args": ["-y", "@supabase/mcp-server-supabase"],
      "env": {
        "SUPABASE_URL": "https://xyz.supabase.co",
        "SUPABASE_SERVICE_ROLE_KEY": "eyJhbGc...REDACTED..."
      }
    }
  }
}

Après strip (envoyé au backend) :

{
  "stack_hash": "sha256:b1946ac9...",
  "mcps": [
    {
      "slug": "supabase",
      "transport": "stdio",
      "version": "0.1.4"
    }
  ],
  "runtime": {
    "os": "darwin",
    "node": "20.11.1",
    "claude_cli": "1.4.2"
  }
}

Pour aller plus loin