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 usaservices.critto.package = critto.packages.${system}.crittod-beta;. - Segreti: inserisci
BOAT_API_KEY=…eCRITTO_BACKUP_KEY=…inenvironmentFile(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(predefinito127.0.0.1:8787),publicUrl,webHost,openFirewall(disattivato per impostazione predefinita),dataDir(predefinito/var/lib/critto) esettingsper qualsiasi altra variabileCRITTO_*.den.backendsceglie dove viene eseguita la Tana (boat,localonone; vedi la Tana). - App IA: preferisci i pacchetti di nixpkgs in
aiPackages(per esempiopkgs.codex,pkgs.claude-code, che richiedeallowUnfree). Per quelli non disponibili in nixpkgs, impostaprograms.nix-ld.enable = true;e usasudo crittod setup ai(passaggio 3). Per Pi basta aggiungerepkgs.nodejs_22aaiPackages, poi eseguiresudo crittod setup ai pi. - Accesso remoto: imposta
services.tailscale.enable = true;, poi eseguisudo tailscale serve --bg 8787, oppure usaservices.cloudflaredcon una regola di ingresso versohttp://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:
Sul server, genera un codice (è valido per 10 minuti e si usa una volta sola):
sudo crittod pairNell'app Critto, nella schermata di accesso, scegli Usa il mio server Critto. Inserisci l'indirizzo del server e il codice.
- Sul server stesso:
http://127.0.0.1:8787 - Per gli altri dispositivi serve un indirizzo che possano raggiungere; vedi Raggiungi il server dagli altri dispositivi.
- Sul server stesso:
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(aggiungidocker volume rm critto-data critto-keys critto-aiper 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 crittosul server e verifica che l'indirizzo nell'app sia raggiungibile dal dispositivo (su un telefono,127.0.0.1indica 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 consudo: 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 100indica il problema.