Di norma, Critto è disponibile nel tuo account Critto. Se preferisci tenere tutto su un computer tuo, puoi gestire direttamente il server Critto: i tuoi critto, i loro ricordi e le tue chat resteranno su quella macchina, e le app Critto per desktop e telefono si collegheranno a essa.

Questa guida è per Linux. Ti serviranno:

  • un computer Linux a 64 bit (Intel/AMD o ARM, per esempio Raspberry Pi 4/5) sempre acceso: un server domestico, un mini PC o un piccolo server nel cloud,
  • circa 1 GB di memoria libera e qualche GB di spazio su disco,
  • i diritti di amministratore (sudo).

Per NixOS è disponibile un flake con un modulo NixOS. Debian, Ubuntu, Fedora, sistemi della famiglia RHEL e openSUSE hanno pacchetti completi con aggiornamenti automatici. Gli altri sistemi possono usare l'immagine del container o la build statica.


NixOS

Aggiungi il flake di Critto al flake del sistema:

{
  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";
          };
        })
      ];
    };
  };
}

Poi esegui sudo nixos-rebuild switch --flake .#myserver e associa le tue app con sudo crittod pair (passaggio 2).

  • Aggiornamenti: esegui nix flake update critto, poi ricompila. Il pacchetto è una versione precompilata e firmata (un binario statico, senza problemi con glibc). Per il canale beta usa services.critto.package = critto.packages.${system}.crittod-beta;.
  • Segreti: inserisci BOAT_API_KEY=… e CRITTO_BACKUP_KEY=… in environmentFile (proprietà di root, modalità 600; funzionano anche agenix e sops-nix). Viene letto all'avvio del servizio e non viene mai copiato nel Nix store.
  • Impostazioni: listen (predefinito 127.0.0.1:8787), publicUrl, webHost, openFirewall (disattivato per impostazione predefinita), dataDir (predefinito /var/lib/critto) e settings per qualsiasi altra variabile CRITTO_*. den.backend sceglie dove viene eseguita la Tana (boat, local o none; vedi la Tana).
  • App IA: preferisci i pacchetti di nixpkgs in aiPackages (per esempio pkgs.codex, pkgs.claude-code, che richiede allowUnfree). Per quelli non disponibili in nixpkgs, imposta programs.nix-ld.enable = true; e usa sudo crittod setup ai (passaggio 3). Per Pi basta aggiungere pkgs.nodejs_22 a aiPackages, poi eseguire sudo crittod setup ai pi.
  • Accesso remoto: imposta services.tailscale.enable = true;, poi esegui sudo tailscale serve --bg 8787, oppure usa services.cloudflared con una regola di ingresso verso http://127.0.0.1:8787 (vedi passaggio 5).
  • Il servizio è isolato con systemd, ma mantiene disponibili gli spazi dei nomi utente (servono a bubblewrap e alla Tana locale), quindi non impostare security.allowUserNamespaces = false.

Il resto di questa guida vale anche per NixOS, tranne gli aggiornamenti, che si fanno con nix flake update invece di apt o dnf.


1. Installazione

Apri un terminale sul server ed esegui:

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

Aggiunge il repository dei pacchetti Critto, installa il pacchetto critto-server, avvia il server e mostra un codice di associazione. Tutto qui: passa a Associa le tue app.

Vuoi le nuove versioni prima degli altri? Usa il canale beta: curl -fsSL https://downloads.critto.app/install-server.sh | CRITTO_CHANNEL=beta sh

Verifica prima il programma d'installazione (facoltativo)

Lo script è firmato con la chiave di rilascio Critto. Per verificarlo prima di eseguirlo:

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 è incluso nei pacchetti della maggior parte delle distribuzioni.) C'è anche un semplice checksum in install-server.sh.sha256. Anche i pacchetti sono firmati e il gestore dei pacchetti li verifica a ogni installazione e aggiornamento.

Oppure configura il repository manualmente

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'impronta digitale della chiave è C78E FB7F 67CC 8184 1F70 EE3D D121 DC94 C534 50E3 («Critto Packages packages@critto.app»).

Oppure usa 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

Il container non richiede permessi speciali. I tuoi dati sono nel volume critto-data, la chiave principale del vault nel volume critto-keys (separato dai dati, così una copia dell'uno non può sbloccare l'altro; vedi Backup) e le app IA in critto-ai. Puoi anche montare un Docker secret in /etc/critto/vault.key. Per aggiornare, esegui docker pull ghcr.io/nexferra-ltd/critto-server:latest, poi ricrea il container con gli stessi volumi.

Oppure usa la build statica

Ogni versione include anche una build in un solo file che funziona su qualsiasi Linux: https://downloads.critto.app/releases/<version>/critto-server-<version>-linux-x86_64.tar.gz (oppure -aarch64). Estrai l'archivio ed esegui ./crittod serve. Dovrai mantenere tu il server in esecuzione e aggiornato, quindi i pacchetti sono la scelta più semplice.


2. Associa le tue app

Il server accetta solo i dispositivi che hai associato. Per associarne uno:

  1. Sul server, genera un codice (è valido per 10 minuti e si usa una volta sola):

    sudo crittod pair
    
  2. Nell'app Critto, nella schermata di accesso, scegli Usa il mio server Critto. Inserisci l'indirizzo del server e il codice.

Dopo aver associato un dispositivo, puoi associarne altri da lì: Impostazioni → Dispositivi → Associa un telefono mostra un codice QR. Il codice include l'indirizzo su cui il server è in ascolto; se i dispositivi lo raggiungono in un altro modo (tramite tunnel, proxy o dominio), imposta CRITTO_PUBLIC_URL su quell'indirizzo (vedi Impostazioni).

App desktop sullo stesso computer? Normalmente l'app desktop avvia un proprio server Critto privato. Se hai installato qui il server, scegli invece Usa il mio server Critto con http://127.0.0.1:8787, così entrambi usano gli stessi critto.


3. Collega le tue IA

I critto ragionano con un'IA a tua scelta. Puoi collegarla in due modi.

I tuoi abbonamenti IA (ChatGPT, Claude, Grok…)

Critto comunica con questi servizi tramite le loro app ufficiali a riga di comando, da installare una volta sul server:

sudo crittod setup ai

Scegli quelle che usi oppure indicane i nomi direttamente: sudo crittod setup ai codex claude.

App Piano da usare
codex un piano ChatGPT (Plus, Pro, Business…)
claude un piano Claude (Pro, Max…)
grok SuperGrok / X Premium
muse Meta AI (richiede Node.js 20+; il programma d'installazione lo aggiunge se possibile)
antigravity Google Antigravity. Leggi prima l'avviso che mostra: le condizioni di Google dicono che altri software non dovrebbero usare un accesso Antigravity e Google ha sospeso account per questo motivo.

Le app vengono installate in /opt/critto-ai e non si aggiornano da sole. Ogni tanto esegui sudo crittod setup ai --update per aggiornarle.

Poi, nell'app Critto, apri Collegamenti e accedi a ciascuna. Gli accessi vengono conservati sul server, non nell'app.

IA personalizzata: modelli locali e chiavi API

Attiva Impostazioni → Modalità avanzata, poi scegli Impostazioni → IA personalizzata → Aggiungi collegamento. Funziona qualsiasi servizio compatibile con l'API «OpenAI-compatible». Scegli un preset in Inizia da oppure inserisci tu l'indirizzo:

Servizio URL di base Chiave API
Ollama sul server http://localhost:11434/v1 nessuna
LM Studio sul server http://localhost:1234/v1 nessuna
Ollama su un altro computer di casa http://192.168.1.20:11434/v1 nessuna
OpenRouter https://openrouter.ai/api/v1 la tua chiave OpenRouter

Scegli Prova collegamento, seleziona un modello e salva. Poi potrai scegliere quell'IA per qualsiasi critto.

Per Ollama su un altro computer, avvialo con OLLAMA_HOST=0.0.0.0 così accetta connessioni dalla rete. «localhost» indica sempre il computer su cui gira il server Critto.


4. La Tana (facoltativa)

La Tana è il computer dei tuoi critto nel cloud, dove svolgono lavori più impegnativi (creano cose, navigano, usano app). Un server che ospiti tu esegue le Tana tramite il tuo account Boat. Incolla la chiave API Boat nell'app, sotto Collegamenti, oppure inseriscila nel file delle impostazioni come BOAT_API_KEY e riavvia.

Nota:

  • Per far funzionare la Tana, il server non deve essere raggiungibile da Internet. È il server che contatta la Tana, non viceversa.
  • Per lavorare nella Tana serve un'IA con un indirizzo Internet pubblico (i tuoi abbonamenti o un servizio come OpenRouter). Un'IA in esecuzione sulla rete di casa (Ollama, LM Studio) può chattare, ma la Tana nel cloud non può raggiungerla.
  • Il tempo nella Tana viene fatturato da Boat sul tuo account.

La tua Tana sul tuo computer

Non hai un account Boat? Il server può eseguire la Tana di ogni persona come piccola macchina virtuale su questo computer (servono /dev/kvm, circa 4 GB di memoria per ogni Tana mentre è in esecuzione e la build iniziale di un'immagine). Su NixOS:

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

Sugli altri sistemi, imposta CRITTO_DEN_BACKEND=local in /etc/critto/critto.env. La guida completa (requisiti, dimensioni, cosa può raggiungere una Tana e come creare l'immagine) è qui: La tua Tana sul tuo computer.


5. Raggiungi il server dagli altri dispositivi

Per impostazione predefinita, il server accetta connessioni solo dal proprio computer (127.0.0.1:8787). È l'impostazione più sicura. Per usare il telefono o il portatile da qualsiasi luogo, scegli una di queste opzioni. Le prime due forniscono un indirizzo https:// sicuro senza aprire porte sul router.

Tailscale (il più semplice per uso personale)

Installa Tailscale sul server e sui tuoi dispositivi, accedi con lo stesso account e poi, sul server, esegui:

sudo tailscale serve --bg 8787

Verrà mostrato un indirizzo come https://myserver.tail1234.ts.net. Usalo nelle app. Solo i tuoi dispositivi potranno raggiungerlo.

Cloudflare Tunnel (un indirizzo pubblico sul tuo dominio)

Se hai un dominio su Cloudflare, installa cloudflared, poi:

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

Il server sarà raggiungibile da https://critto.example.com. Ogni dispositivo avrà comunque bisogno di un codice di associazione.

Un proxy inverso che usi già

Indirizzalo a http://127.0.0.1:8787 consentendo WebSockets. Con Caddy, che gestisce HTTPS automaticamente:

critto.example.com {
    reverse_proxy 127.0.0.1:8787
}

Solo sulla rete di casa

Se tutti i dispositivi sono a casa, puoi permettere al server di accettare connessioni direttamente dalla rete. Imposta CRITTO_LISTEN=0.0.0.0:8787 (vedi Impostazioni) e usa http://<server's IP address>:8787 nelle app. È una connessione http non cifrata, quindi usala solo su una rete fidata.

Qualunque opzione tu scelga, imposta CRITTO_PUBLIC_URL su quell'indirizzo, così i codici QR di associazione lo useranno.


6. Aggiornamenti

Il server si aggiorna insieme al resto del sistema:

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

Dopo un aggiornamento il servizio si riavvia da solo. Le app desktop e per telefono si aggiornano separatamente.


7. Backup

Tutto si trova in /var/lib/critto: i tuoi critto, ricordi, chat, file e accessi IA. Le impostazioni sono in /etc/critto/critto.env.

Copialo tu. Per ottenere una copia coerente, ferma il server:

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

Mentre è in esecuzione, il server conserva anche una copia aggiornata del database in /var/lib/critto/backups/latest.db.

Backup fuori sede (S3, Cloudflare R2, Backblaze B2…). Nell'app attiva la Modalità avanzata, poi scegli Impostazioni → Backup → Cambia destinazione…. Cifralo prima che lasci il server aggiungendo una chiave di backup:

sudo crittod backup keygen

Copia la riga CRITTO_BACKUP_KEY=… in /etc/critto/critto.env, conserva una copia in un luogo sicuro e offline (senza questa chiave non potrai ripristinare i backup) e riavvia: sudo systemctl restart critto.

I backup fuori sede vengono aggiornati continuamente:

  • le modifiche al database vengono caricate ogni 10 secondi;
  • i file delle persone vengono caricati ogni 10 minuti;
  • ogni giorno viene caricata una copia completa.

Puoi ripristinare direttamente dal bucket qualsiasi momento degli ultimi 7 giorni:

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 è in UTC; omettilo per ripristinare lo stato più recente. La cartella users/ ripristinata si trova nello stesso percorso.)

Per ripristinare invece un singolo file di backup scaricato (uno snapshot giornaliero), mettilo in un percorso leggibile dall'utente critto (per esempio /var/lib/critto), poi:

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

Le chiavi del vault. Gli accessi e le password salvati sono cifrati con una chiave principale in /etc/critto/vault.key (creata durante l'installazione, leggibile solo dall'utente critto; in Docker si trova nel volume critto-keys, su NixOS in services.critto.vaultKeyFile, per impostazione predefinita /var/lib/critto-keys/vault.key: è sempre fuori dalla directory dei dati). Non viene mai inclusa nei backup. L'elenco delle chiavi dei singoli account che sblocca (/var/lib/critto/vault/keys.db) riceve un proprio backup cifrato accanto agli altri, nella directory vault/, conservato per 30 giorni, ma solo se fornisci una chiave di recupero:

sudo crittod vault recovery-keygen

Inserisci la riga CRITTO_VAULT_BACKUP_RECIPIENT=… in /etc/critto/critto.env e riavvia. Conserva l'identità di recupero stampata e una copia di /etc/critto/vault.key offline, nel tuo gestore di password: mai sul server. Per ripristinare dopo aver perso il server, rimetti vault.key, scarica vault/latest.db.age, poi:

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

Impostazioni

Il server legge /etc/critto/critto.env. Ogni opzione è elencata con una spiegazione. Modificalo con sudo nano /etc/critto/critto.env, poi esegui sudo systemctl restart critto. Le opzioni più comuni:

Impostazione Cosa fa
CRITTO_LISTEN Indirizzo su cui il server accetta connessioni. Predefinito 127.0.0.1:8787 (solo questo computer).
CRITTO_PUBLIC_URL Indirizzo usato dai tuoi dispositivi, per esempio https://critto.example.com.
BOAT_API_KEY La tua chiave Boat per la Tana.
CRITTO_BACKUP_KEY Cifra i backup fuori sede.
CRITTO_ANTIGRAVITY=0 Nasconde Antigravity.
CRITTO_PROACTIVE=0 I critto non si fanno vivi da soli (le attività pianificate restano in attesa). Senza Critto Smarts, per i check-in usano l'IA del critto.
CRITTO_JOB_WORKERS Numero di attività in background (check-in e attività pianificate) eseguite contemporaneamente. Predefinito: 4.

Comandi utili:

Comando
sudo crittod pair genera un codice di associazione per un nuovo dispositivo
sudo crittod setup ai installa o aggiorna le app IA
sudo crittod users mostra gli account su questo server
systemctl status critto controlla se è in esecuzione
journalctl -u critto -f mostra il log
curl http://127.0.0.1:8787/health esegue un rapido controllo dello stato

/health mostra "desktop": "on-demand" finché la Tana non ha bisogno per la prima volta del software desktop. È normale: in quel momento il server lo scarica.


Disinstallazione

  • Debian / Ubuntu: sudo apt purge critto-server
  • Fedora / RHEL: sudo dnf remove critto-server
  • Docker: docker rm -f critto (aggiungi docker volume rm critto-data critto-keys critto-ai per eliminare anche i dati)

Questo arresta il server e rimuove il pacchetto e, se non restano altri pacchetti Critto, il repository. I tuoi dati in /var/lib/critto vengono conservati nel caso tu torni. Per eliminare tutto:

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

Per evitare che i pacchetti aggiungano il repository, prima dell'installazione esegui echo CRITTO_REPO=no | sudo tee /etc/default/critto.


Risoluzione dei problemi

  • L'app dice che non riesce a raggiungere il server. Controlla systemctl status critto sul server e verifica che l'indirizzo nell'app sia raggiungibile dal dispositivo (su un telefono, 127.0.0.1 indica il telefono stesso).
  • «Il codice di associazione non ha funzionato.» I codici durano 10 minuti e si usano una volta sola. Creane uno nuovo con sudo crittod pair. Eseguilo con sudo: senza, ottieni il codice di un server personale diverso.
  • Un'app IA non compare in Collegamenti. Esegui di nuovo sudo crittod setup ai <name>; al termine il server si riavvia.
  • Altro. Di solito journalctl -u critto -n 100 indica il problema.