Critto se trouve normalement dans ton compte Critto. Si tu préfères tout garder sur un ordinateur qui t’appartient, tu peux héberger toi-même le serveur Critto : tes crittos, leurs souvenirs et tes discussions restent sur cette machine, et les applis Critto pour ordinateur et téléphone s’y connectent.

Ce guide concerne Linux. Il te faut :

  • un ordinateur Linux 64 bits (Intel/AMD ou ARM, par exemple un Raspberry Pi 4/5) qui reste allumé : un serveur chez toi, un mini-PC ou un petit serveur cloud ;
  • environ 1 Go de mémoire libre et quelques Go d’espace disque ;
  • des droits d’administration (sudo).

Pour NixOS, une flake fournit un module NixOS. Debian, Ubuntu, Fedora, les systèmes de type RHEL et openSUSE ont des paquets adaptés avec mises à jour automatiques. Les autres systèmes peuvent utiliser l’image de conteneur ou la version autonome.


NixOS

Ajoute la flake Critto à la flake de ton système :

{
  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
    critto.url = "https://downloads.critto.app/nix/critto.tar.gz";
    critto.inputs.nixpkgs.follows = "nixpkgs";
  };

  outputs = { nixpkgs, critto, ... }: {
    nixosConfigurations.myserver = nixpkgs.lib.nixosSystem {
      system = "x86_64-linux";            # or aarch64-linux
      modules = [
        ./configuration.nix
        critto.nixosModules.default
        ({ pkgs, ... }: {
          services.critto = {
            enable = true;
            # Secrets (Boat key, backup key) stay out of the Nix store:
            environmentFile = "/etc/critto/secrets.env";
            # AI apps for your subscriptions (you sign in from the app):
            aiPackages = [ pkgs.codex pkgs.nodejs_22 ];
            # publicUrl = "https://critto.example.com";
          };
        })
      ];
    };
  };
}

Lance ensuite sudo nixos-rebuild switch --flake .#myserver, puis associe tes applis avec sudo crittod pair (étape 2).

  • Mises à jour : nix flake update critto, puis reconstruis le système. Le paquet est une version signée et précompilée (un binaire statique, sans souci avec glibc). Utilise services.critto.package = critto.packages.${system}.crittod-beta; pour le canal bêta.
  • Secrets : place BOAT_API_KEY=… et CRITTO_BACKUP_KEY=… dans le fichier environmentFile (propriété de root, droits 600 ; agenix et sops-nix fonctionnent aussi). Le fichier est lu au démarrage du service et n’est jamais copié dans le store.
  • Réglages : listen (par défaut 127.0.0.1:8787), publicUrl, webHost, openFirewall (désactivé par défaut), dataDir (par défaut /var/lib/critto) et settings pour toute autre variable CRITTO_*. den.backend choisit où la Tanière fonctionne (boat, local ou none ; voir la Tanière).
  • Applis d’IA : privilégie les paquets nixpkgs dans aiPackages (par exemple pkgs.codex, pkgs.claude-code, qui nécessite allowUnfree). Pour ceux que nixpkgs ne propose pas, active programs.nix-ld.enable = true; et lance sudo crittod setup ai (étape 3). Pi nécessite seulement pkgs.nodejs_22 dans aiPackages, puis sudo crittod setup ai pi.
  • Accès à distance : active services.tailscale.enable = true;, puis lance sudo tailscale serve --bg 8787, ou configure services.cloudflared avec une règle d’ingress vers http://127.0.0.1:8787 (voir étape 5).
  • Le service est isolé par systemd, mais conserve l’accès aux espaces de noms utilisateur (nécessaires à bubblewrap et à la Tanière locale) : ne définis donc pas security.allowUserNamespaces = false.

Le reste de ce guide s’applique aussi à NixOS, sauf que les mises à jour se font avec nix flake update au lieu d’apt ou dnf.


1. Installer

Ouvre un terminal sur le serveur et lance :

curl -fsSL https://downloads.critto.app/install-server.sh | sh

Le script ajoute le dépôt de paquets Critto, installe le paquet critto-server, démarre le serveur et affiche un code d’association. Voilà, passe directement à Associer tes applis.

Tu veux les nouvelles versions avant tout le monde ? Utilise le canal bêta : curl -fsSL https://downloads.critto.app/install-server.sh | CRITTO_CHANNEL=beta sh

Vérifier d’abord le programme d’installation (facultatif)

Le script est signé avec la clé de publication de Critto. Pour le vérifier avant de l’exécuter :

curl -fsSLO https://downloads.critto.app/install-server.sh
curl -fsSLO https://downloads.critto.app/install-server.sh.minisig
minisign -Vm install-server.sh -P RWTRac/2j5M3cvVpvtz0flaOy7sH5PFSc4LwbB7PxG0OMO2h8APoZtLG
sh install-server.sh

(minisign est disponible dans les paquets de la plupart des distributions.) Une somme de contrôle classique est aussi publiée dans install-server.sh.sha256. Les paquets sont eux aussi signés et ton gestionnaire de paquets les vérifie à chaque installation et mise à jour.

Ou configure toi-même le dépôt

Debian / Ubuntu :

sudo install -d -m 755 /etc/apt/keyrings
sudo curl -fsSLo /etc/apt/keyrings/critto.gpg https://downloads.critto.app/keys/critto-archive-keyring.gpg
cat <<EOF | sudo tee /etc/apt/sources.list.d/critto.sources
Types: deb
URIs: https://downloads.critto.app/apt
Suites: stable
Components: main
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/critto.gpg
EOF
sudo apt update && sudo apt install critto-server

Fedora / RHEL / Rocky / Alma :

sudo rpm --import https://downloads.critto.app/keys/critto-archive-keyring.asc
cat <<EOF | sudo tee /etc/yum.repos.d/critto.repo
[critto]
name=Critto
baseurl=https://downloads.critto.app/rpm/stable
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://downloads.critto.app/keys/critto-archive-keyring.asc
EOF
sudo dnf install critto-server

L’empreinte de la clé est C78E FB7F 67CC 8184 1F70 EE3D D121 DC94 C534 50E3 (« Critto Packages packages@critto.app »).

Ou utilise Docker / Podman

docker run -d --name critto --restart unless-stopped \
  -p 127.0.0.1:8787:8787 \
  -v critto-data:/var/lib/critto -v critto-keys:/etc/critto -v critto-ai:/opt/critto-ai \
  ghcr.io/nexferra-ltd/critto-server:latest
docker exec critto crittod pair

Le conteneur n’a besoin d’aucune permission spéciale. Tes données se trouvent dans le volume critto-data, la clé maîtresse du coffre-fort dans critto-keys (séparée des données, afin qu’une copie seule ne puisse pas déverrouiller l’autre ; voir Sauvegardes), et les applis d’IA dans critto-ai. Un secret Docker monté dans /etc/critto/vault.key convient aussi. Pour mettre à jour, lance docker pull ghcr.io/nexferra-ltd/critto-server:latest, puis recrée le conteneur avec les mêmes volumes.

Ou utilise la version autonome

Chaque version comprend aussi un fichier unique qui fonctionne sous n’importe quel Linux : https://downloads.critto.app/releases/<version>/critto-server-<version>-linux-x86_64.tar.gz (ou -aarch64). Décompresse-le et lance ./crittod serve. Tu devras le laisser fonctionner et le mettre à jour toi-même ; les paquets sont donc plus faciles à utiliser.


2. Associer tes applis

Le serveur n’accepte que les appareils que tu as associés. Pour en associer un :

  1. Sur le serveur, récupère un code (valable 10 minutes et utilisable une seule fois) :

    sudo crittod pair
    
  2. Dans l’appli Critto, sur l’écran de connexion, choisis Utiliser mon propre serveur Critto. Saisis l’adresse du serveur et le code.

Une fois un appareil associé, tu peux en associer d’autres depuis celui-ci : Réglages → Appareils → Associer un téléphone affiche un code QR. Il contient l’adresse d’écoute du serveur ; si tes appareils y accèdent autrement (tunnel, proxy ou domaine), définis CRITTO_PUBLIC_URL avec cette adresse (voir Réglages).

Appli pour ordinateur sur la même machine ? L’appli Critto pour ordinateur démarre normalement son propre serveur privé. Si tu as installé le serveur ici, choisis Utiliser mon propre serveur Critto avec http://127.0.0.1:8787 pour que les deux utilisent les mêmes crittos.


3. Connecter tes IA

Les crittos réfléchissent avec l’IA de ton choix. Tu peux en connecter une de deux façons.

Tes abonnements IA (ChatGPT, Claude, Grok…)

Critto communique avec ces services par l’intermédiaire de leurs applis officielles en ligne de commande, à installer une fois sur le serveur :

sudo crittod setup ai

Choisis les services que tu utilises ou indique directement leurs noms : sudo crittod setup ai codex claude.

Appli Abonnement compatible
codex Forfait ChatGPT (Plus, Pro, Business…)
claude Forfait Claude (Pro, Max…)
grok SuperGrok / X Premium
muse Meta AI (nécessite Node.js 20+ ; le programme d’installation l’ajoute s’il le peut)
antigravity Google Antigravity. Lis d’abord l’avertissement affiché : selon les conditions de Google, les autres logiciels ne doivent pas utiliser une connexion Antigravity, et Google a suspendu des comptes pour cette raison.

Les applis sont installées dans /opt/critto-ai et ne se mettent pas à jour seules. Lance de temps en temps sudo crittod setup ai --update pour les mettre à jour.

Ensuite, dans l’appli Critto, ouvre Connexions et connecte-toi à chacune. Les connexions sont conservées sur ton serveur, pas dans l’appli.

IA personnalisée : modèles locaux et clés d’API

Active Réglages → Mode avancé, puis ouvre Réglages → IA personnalisée → Ajouter une connexion. Tout service compatible avec l’API « OpenAI-compatible » convient. Choisis un modèle prédéfini dans Partir de ou indique toi-même l’adresse :

Service URL de base Clé d’API
Ollama sur le serveur http://localhost:11434/v1 aucune
LM Studio sur le serveur http://localhost:1234/v1 aucune
Ollama sur un autre ordinateur chez toi http://192.168.1.20:11434/v1 aucune
OpenRouter https://openrouter.ai/api/v1 ta clé OpenRouter

Utilise Tester la connexion, choisis un modèle et enregistre. Tu pourras ensuite sélectionner cette IA pour n’importe quel critto.

Pour utiliser Ollama sur un autre ordinateur, démarre-le avec OLLAMA_HOST=0.0.0.0 afin qu’il accepte les connexions de ton réseau. « localhost » désigne toujours la machine du serveur Critto.


4. La Tanière (facultatif)

La Tanière est l’ordinateur de tes crittos dans le cloud, où ils réalisent des tâches plus importantes (construire, naviguer sur le Web, utiliser des applis). Un serveur hébergé par tes soins exécute les Tanières dans ton propre compte Boat. Colle ta clé d’API Boat dans l’appli, sous Connexions, ou ajoute-la au fichier de réglages sous BOAT_API_KEY, puis redémarre.

Bon à savoir :

  • Ton serveur n’a pas besoin d’être accessible depuis Internet pour que la Tanière fonctionne. Il se connecte à la Tanière, pas l’inverse.
  • Pour travailler dans la Tanière, l’IA doit avoir une adresse Internet publique (tes abonnements ou un service comme OpenRouter). Une IA qui fonctionne sur ton propre réseau (Ollama, LM Studio) peut discuter, mais la Tanière dans le cloud ne peut pas la joindre.
  • Le temps de Tanière est facturé par Boat sur ton compte.

Ta propre Tanière, sur ta propre machine

Tu n’as pas de compte Boat ? Le serveur peut exécuter la Tanière de chaque personne dans une petite machine virtuelle sur cet ordinateur (il lui faut /dev/kvm, environ 4 Go de mémoire par Tanière pendant son fonctionnement et une compilation unique de l’image). Sous NixOS :

services.critto.den.backend = "local";

Sur les autres systèmes, définis CRITTO_DEN_BACKEND=local dans /etc/critto/critto.env. Le guide complet (prérequis, tailles, accès possibles depuis une Tanière, compilation de l’image) se trouve dans Ta propre Tanière, sur ta propre machine.


5. Accéder au serveur depuis tes autres appareils

Par défaut, le serveur n’écoute que sur son propre ordinateur (127.0.0.1:8787). C’est le réglage sûr. Pour utiliser ton téléphone ou ton ordinateur portable depuis n’importe où, choisis l’une de ces solutions. Les deux premières fournissent une adresse https:// sécurisée sans ouvrir de ports sur ton routeur.

Tailscale (le plus simple pour un usage personnel)

Installe Tailscale sur le serveur et tes appareils, connecte-les au même compte, puis lance sur le serveur :

sudo tailscale serve --bg 8787

Une adresse telle que https://myserver.tail1234.ts.net s’affiche. Utilise-la dans les applis. Seuls tes appareils peuvent y accéder.

Cloudflare Tunnel (adresse publique sur ton propre domaine)

Avec un domaine géré par Cloudflare, installe cloudflared, puis :

cloudflared tunnel login
cloudflared tunnel create critto
cloudflared tunnel route dns critto critto.example.com
cat > ~/.cloudflared/config.yml <<EOF
tunnel: critto
credentials-file: $HOME/.cloudflared/$(cloudflared tunnel list | awk '/critto/{print $1}').json
ingress:
  - hostname: critto.example.com
    service: http://127.0.0.1:8787
  - service: http_status:404
EOF
sudo cloudflared service install

Ton serveur est alors accessible à https://critto.example.com. Chaque appareil a quand même besoin d’un code d’association.

Un proxy inverse que tu utilises déjà

Configure-le vers http://127.0.0.1:8787 en autorisant les WebSockets. Avec Caddy, qui gère lui-même HTTPS :

critto.example.com {
    reverse_proxy 127.0.0.1:8787
}

Uniquement sur ton réseau domestique

Si tous tes appareils sont chez toi, tu peux faire écouter le serveur directement sur ton réseau. Définis CRITTO_LISTEN=0.0.0.0:8787 (voir Réglages) et utilise http://<server's IP address>:8787 dans les applis. La connexion n’est pas chiffrée (http) : fais-le uniquement sur un réseau de confiance.

Quelle que soit la solution choisie, définis CRITTO_PUBLIC_URL avec cette adresse afin que les codes QR d’association l’utilisent.


6. Mises à jour

Le serveur se met à jour avec le reste de ton système :

  • Debian / Ubuntu : sudo apt update && sudo apt upgrade
  • Fedora / RHEL : sudo dnf upgrade
  • openSUSE : sudo zypper update

Le service redémarre tout seul après une mise à jour. Les applis pour ordinateur et téléphone sont mises à jour séparément.


7. Sauvegardes

Tout se trouve dans /var/lib/critto : tes crittos, souvenirs, discussions, fichiers et connexions IA. Les réglages se trouvent dans /etc/critto/critto.env.

Copie les fichiers toi-même. Arrête le serveur pour obtenir une copie cohérente :

sudo systemctl stop critto
sudo tar czf critto-backup-$(date +%F).tar.gz --exclude=/etc/critto/vault.key /var/lib/critto /etc/critto
sudo systemctl start critto

Pendant qu’il fonctionne, le serveur conserve aussi une copie récente de sa base de données dans /var/lib/critto/backups/latest.db.

Sauvegardes hors site (S3, Cloudflare R2, Backblaze B2…). Dans l’appli, active le mode Avancé, puis ouvre Réglages → Sauvegardes → Modifier la destination…. Chiffre les sauvegardes avant qu’elles quittent ton serveur en ajoutant une clé de sauvegarde :

sudo crittod backup keygen

Copie la ligne CRITTO_BACKUP_KEY=… dans /etc/critto/critto.env, garde-en une copie dans un endroit sûr et hors ligne (les sauvegardes ne peuvent pas être restaurées sans elle), puis redémarre : sudo systemctl restart critto.

Les sauvegardes hors site sont continues :

  • les changements de la base de données sont envoyés toutes les 10 secondes ;
  • les fichiers des utilisateurs sont envoyés toutes les 10 minutes ;
  • une copie complète est envoyée chaque jour.

Tu peux restaurer depuis le compartiment n’importe quel état des 7 derniers jours :

sudo systemctl stop critto
sudo -u critto crittod backup list
sudo -u critto crittod backup pitr --to /var/lib/critto/restore --at "2026-10-02 14:30"
sudo -u critto mv /var/lib/critto/restore/critto.db /var/lib/critto/critto.db
sudo systemctl start critto

(--at est en UTC ; omets-le pour restaurer le dernier état. Le dossier users/ restauré se trouve au même endroit.)

Pour restaurer un seul fichier de sauvegarde téléchargé (un instantané quotidien), place-le dans un emplacement lisible par l’utilisateur critto (par exemple /var/lib/critto), puis :

sudo systemctl stop critto
sudo crittod backup restore --from /path/to/downloaded-backup --to /var/lib/critto/restored.db
sudo -u critto mv /var/lib/critto/restored.db /var/lib/critto/critto.db
sudo systemctl start critto

Clés du coffre-fort. Les clés et mots de passe enregistrés sont chiffrés avec une clé maîtresse dans /etc/critto/vault.key (créée à l’installation, lisible uniquement par l’utilisateur critto ; dans Docker, volume critto-keys ; sous NixOS, services.critto.vaultKeyFile, par défaut /var/lib/critto-keys/vault.key : toujours hors des données). Elle n’est jamais incluse dans une sauvegarde. La liste des clés par compte qu’elle déverrouille (/var/lib/critto/vault/keys.db) est sauvegardée séparément à côté des autres, dans vault/, chiffrée et conservée 30 jours, mais uniquement si tu fournis une clé de récupération :

sudo crittod vault recovery-keygen

Ajoute la ligne CRITTO_VAULT_BACKUP_RECIPIENT=… à /etc/critto/critto.env, puis redémarre. Garde l’identité de récupération affichée et une copie de /etc/critto/vault.key hors ligne, dans ton gestionnaire de mots de passe : jamais sur le serveur. Pour restaurer après la perte du serveur, remets vault.key, télécharge vault/latest.db.age, puis :

sudo -u critto crittod vault restore --identity /path/to/recovery.txt /path/to/latest.db.age

Réglages

Le serveur lit /etc/critto/critto.env. Chaque option y est répertoriée avec une explication. Modifie ce fichier avec sudo nano /etc/critto/critto.env, puis lance sudo systemctl restart critto. Voici les options courantes :

Réglage Fonction
CRITTO_LISTEN Adresse d’écoute du serveur. Par défaut 127.0.0.1:8787 (cet ordinateur uniquement).
CRITTO_PUBLIC_URL Adresse utilisée par tes appareils, par exemple https://critto.example.com.
BOAT_API_KEY Ta clé Boat pour la Tanière.
CRITTO_BACKUP_KEY Chiffre les sauvegardes hors site.
CRITTO_ANTIGRAVITY=0 Masque Antigravity.
CRITTO_PROACTIVE=0 Empêche les crittos de prendre des nouvelles d’eux-mêmes (les tâches programmées attendent). Sans Critto Smarts, les suivis utilisent l’IA propre au critto.
CRITTO_JOB_WORKERS Nombre de tâches en arrière-plan (suivis, tâches programmées) exécutées simultanément. Valeur par défaut : 4.

Commandes utiles :

Commande
sudo crittod pair obtenir un code d’association pour un nouvel appareil
sudo crittod setup ai installer ou mettre à jour les applis d’IA
sudo crittod users afficher les comptes de ce serveur
systemctl status critto vérifier s’il fonctionne
journalctl -u critto -f afficher son journal
curl http://127.0.0.1:8787/health effectuer un contrôle rapide

/health indique "desktop": "on-demand" jusqu’à ce qu’une Tanière ait besoin de son logiciel de bureau pour la première fois. C’est normal : le serveur le télécharge alors.


Désinstaller

  • Debian / Ubuntu : sudo apt purge critto-server
  • Fedora / RHEL : sudo dnf remove critto-server
  • Docker : docker rm -f critto (ajoute docker volume rm critto-data critto-keys critto-ai pour supprimer aussi les données)

Cette commande arrête le serveur et supprime le paquet ainsi que, s’il ne reste aucun autre paquet Critto, le dépôt. Tes données dans /var/lib/critto sont conservées au cas où tu reviendrais. Pour tout supprimer :

sudo rm -rf /var/lib/critto /etc/critto /opt/critto-ai
sudo userdel critto

Pour empêcher les paquets d’ajouter le dépôt dès le départ, lance echo CRITTO_REPO=no | sudo tee /etc/default/critto avant l’installation.


Dépannage

  • L’appli indique qu’elle n’arrive pas à joindre le serveur. Vérifie systemctl status critto sur le serveur et que l’appareil peut accéder à l’adresse indiquée dans l’appli (depuis un téléphone, 127.0.0.1 désigne le téléphone lui-même).
  • « Le code d’association n’a pas fonctionné. » Les codes sont valables 10 minutes et ne servent qu’une fois. Génère-en un autre avec sudo crittod pair. Utilise sudo : sans cette commande, tu obtiendras un code pour un autre serveur personnel.
  • Une appli d’IA n’apparaît pas dans Connexions. Relance sudo crittod setup ai <name> ; le serveur redémarre à la fin.
  • Autre problème. journalctl -u critto -n 100 indique généralement ce qui ne va pas.