Normalmente, Critto funciona en tu cuenta de Critto. Si prefieres guardar todo en una computadora tuya, puedes ejecutar el servidor Critto por tu cuenta: tus crittos, sus recuerdos y tus chats se quedan en esa máquina, y las apps de escritorio y celular de Critto se conectan a ella.
Esta guía es para Linux. Necesitarás:
- una computadora Linux de 64 bits (Intel/AMD o ARM, por ejemplo, Raspberry Pi 4/5) que esté siempre encendida: un servidor doméstico, una mini PC o un pequeño servidor en la nube;
- alrededor de 1 GB de memoria libre y unos cuantos GB de espacio en disco;
- permisos de administración (
sudo).
NixOS incluye un flake con un módulo de NixOS. Debian, Ubuntu, Fedora, sistemas tipo RHEL y openSUSE tienen paquetes completos con actualizaciones automáticas. En otros sistemas puedes usar la imagen de contenedor o la compilación estática.
NixOS
Agrega el flake de Critto al flake de tu 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";
};
})
];
};
};
}
Después ejecuta sudo nixos-rebuild switch --flake .#myserver y vincula tus apps con sudo crittod pair (paso 2).
- Actualizaciones: ejecuta
nix flake update crittoy vuelve a compilar. El paquete es la versión firmada y precompilada (un binario estático, así que no hay problemas con glibc). Usaservices.critto.package = critto.packages.${system}.crittod-beta;para el canal beta. - Secretos: guarda
BOAT_API_KEY=…yCRITTO_BACKUP_KEY=…en el archivoenvironmentFile(propiedad de root, modo 600; también funcionan agenix y sops-nix). Se lee cuando inicia el servicio y nunca se copia al almacén. - Configuración:
listen(predeterminado127.0.0.1:8787),publicUrl,webHost,openFirewall(desactivado de forma predeterminada),dataDir(predeterminado/var/lib/critto) ysettingspara cualquier otra variableCRITTO_*.den.backendelige dónde funciona la Madriguera (boat,localonone; consulta la Madriguera). - Apps de IA: prefiere paquetes de nixpkgs en
aiPackages(por ejemplo,pkgs.codexypkgs.claude-code, que requiereallowUnfree). Para las que no están en nixpkgs, activaprograms.nix-ld.enable = true;y usasudo crittod setup ai(paso 3). Pi solo necesitapkgs.nodejs_22enaiPackages; después, ejecutasudo crittod setup ai pi. - Acceso remoto: activa
services.tailscale.enable = true;y luego ejecutasudo tailscale serve --bg 8787, o usaservices.cloudflaredcon una regla de entrada ahttp://127.0.0.1:8787(consulta el paso 5). - El servicio está aislado con systemd, pero mantiene disponibles los espacios de nombres de usuario (los necesitan bubblewrap y la Madriguera local), así que no establezcas
security.allowUserNamespaces = false.
El resto de esta guía también se aplica a NixOS, salvo que las actualizaciones se hacen con nix flake update en vez de apt o dnf.
1. Instalar
Abre una terminal en el servidor y ejecuta:
curl -fsSL https://downloads.critto.app/install-server.sh | sh
Agrega el repositorio de paquetes de Critto, instala el paquete critto-server, inicia el servidor y muestra un código de vinculación. Eso es todo: ve directamente a Vincular tus apps.
¿Quieres recibir versiones nuevas antes que las demás personas? Usa el canal beta: curl -fsSL https://downloads.critto.app/install-server.sh | CRITTO_CHANNEL=beta sh
Revisar primero el instalador (opcional)
El script está firmado con la clave de lanzamiento de Critto. Para verificarlo antes de ejecutarlo:
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á en los paquetes de la mayoría de las distribuciones). También hay una suma de verificación simple en install-server.sh.sha256. Los paquetes también están firmados, y tu administrador de paquetes los verifica en cada instalación y actualización.
O configura el repositorio por tu cuenta
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
La huella digital de la clave es C78E FB7F 67CC 8184 1F70 EE3D D121 DC94 C534 50E3 («Critto Packages packages@critto.app»).
O 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
El contenedor no requiere permisos especiales. Tus datos están en el volumen critto-data, la clave maestra de la bóveda está en critto-keys (separada de los datos, así que una copia de uno no puede desbloquear el otro; consulta Copias de seguridad) y las apps de IA, en critto-ai. También puedes montar un secreto de Docker en /etc/critto/vault.key. Para actualizar, ejecuta docker pull ghcr.io/nexferra-ltd/critto-server:latest y vuelve a crear el contenedor con los mismos volúmenes.
O usa la compilación estática
Cada lanzamiento también incluye una compilación de un solo archivo que funciona en cualquier Linux: https://downloads.critto.app/releases/<version>/critto-server-<version>-linux-x86_64.tar.gz (o -aarch64). Descomprímelo y ejecuta ./crittod serve. Tendrás que mantenerlo en ejecución y actualizarlo por tu cuenta, así que los paquetes son la opción más sencilla.
2. Vincular tus apps
El servidor solo permite el acceso de los dispositivos que hayas vinculado. Para vincular uno:
En el servidor, obtén un código (es válido durante 10 minutos y solo se puede usar una vez):
sudo crittod pairEn la app Critto, en la pantalla de inicio de sesión, elige Usar mi propio servidor Critto. Ingresa la dirección del servidor y el código.
- En el propio servidor:
http://127.0.0.1:8787 - Para otros dispositivos necesitarás una dirección a la que puedan acceder; consulta Acceder desde otros dispositivos.
- En el propio servidor:
Cuando vincules un dispositivo, podrás vincular más desde ahí: Configuración → Dispositivos → Vincular un celular muestra un código QR. Incluye la dirección donde escucha el servidor; si tus dispositivos acceden de otra manera (un túnel, proxy o dominio), configura CRITTO_PUBLIC_URL con esa dirección (consulta Configuración).
¿App de escritorio en la misma computadora? Normalmente, la app de escritorio inicia su propio servidor Critto privado. Si instalaste el servidor aquí, elige Usar mi propio servidor Critto con
http://127.0.0.1:8787para que ambas usen los mismos crittos.
3. Conectar tus IAs
Los crittos piensan con la IA que elijas. Hay dos formas de agregar una.
Tus suscripciones de IA (ChatGPT, Claude, Grok…)
Critto se conecta a ellas mediante sus apps oficiales de línea de comandos, que instalas una vez en el servidor:
sudo crittod setup ai
Elige las que usas o indica sus nombres directamente: sudo crittod setup ai codex claude.
| App | Úsala con |
|---|---|
codex |
Un plan de ChatGPT (Plus, Pro, Business…) |
claude |
Un plan de Claude (Pro, Max…) |
grok |
SuperGrok / X Premium |
muse |
Meta AI (requiere Node.js 20+; el instalador lo agrega si puede) |
antigravity |
Google Antigravity. Lee primero la advertencia que aparece: las condiciones de Google dicen que otro software no debe usar un inicio de sesión de Antigravity, y Google ha suspendido cuentas por hacerlo. |
Se instalan en /opt/critto-ai y no se actualizan por sí solas. Ejecuta sudo crittod setup ai --update de vez en cuando para actualizarlas.
Luego, en la app Critto, abre Conexiones e inicia sesión en cada una. Los inicios de sesión se guardan en tu servidor, no en la app.
IA personalizada: modelos locales y claves de API
Activa Configuración → Modo avanzado y luego ve a Configuración → IA personalizada → Agregar conexión. Funciona cualquier servicio compatible con la API «OpenAI-compatible». Elige una opción en Empezar desde o ingresa la dirección:
| Servicio | URL base | Clave de API |
|---|---|---|
| Ollama en el servidor | http://localhost:11434/v1 |
Ninguna |
| LM Studio en el servidor | http://localhost:1234/v1 |
Ninguna |
| Ollama en otra computadora de casa | http://192.168.1.20:11434/v1 |
Ninguna |
| OpenRouter | https://openrouter.ai/api/v1 |
Tu clave de OpenRouter |
Usa Probar conexión, elige un modelo y guarda. Después podrás elegir esa IA para cualquier critto.
Para usar Ollama en otra computadora, inícialo con OLLAMA_HOST=0.0.0.0 para que acepte conexiones de tu red. «localhost» siempre se refiere a la computadora donde está el servidor Critto.
4. La Madriguera (opcional)
La Madriguera es la computadora propia de tus crittos en la nube, donde hacen trabajos más grandes (crear cosas, navegar y usar apps). Un servidor alojado por tu cuenta ejecuta las Madrigueras en tu propia cuenta de Boat. Pega tu clave de API de Boat en la app, en Conexiones, o guárdala en el archivo de configuración como BOAT_API_KEY y reinicia.
Conviene saber:
- Tu servidor no necesita ser accesible desde internet para que funcione la Madriguera. Se conecta a la Madriguera, no al revés.
- El trabajo en la Madriguera requiere una IA con una dirección pública de internet (tus suscripciones o un servicio como OpenRouter). Una IA que funciona en tu propia red (Ollama, LM Studio) puede conversar, pero la Madriguera en la nube no puede acceder a ella.
- Boat cobra el tiempo de Madriguera en tu cuenta.
Tu propia Madriguera, en tu propia computadora
¿No tienes cuenta de Boat? El servidor puede ejecutar la Madriguera de cada persona como una máquina virtual pequeña en esta computadora (necesita /dev/kvm, unos 4 GB de memoria por Madriguera mientras funciona y crear una imagen una sola vez). En NixOS:
services.critto.den.backend = "local";
En otros sistemas, usa CRITTO_DEN_BACKEND=local en /etc/critto/critto.env. La guía completa (requisitos, tamaños, a qué puede acceder una Madriguera y cómo crear la imagen) está en Tu propia Madriguera, en tu propia computadora.
5. Acceder desde otros dispositivos
De forma predeterminada, el servidor solo escucha en su propia computadora (127.0.0.1:8787). Es la opción segura. Para usar tu celular o laptop desde cualquier lugar, elige una de estas opciones. Las dos primeras ofrecen una dirección segura https:// sin abrir puertos en el router.
Tailscale (lo más sencillo para uso personal)
Instala Tailscale en el servidor y tus dispositivos. Inicia sesión con la misma cuenta en todos y, luego, en el servidor:
sudo tailscale serve --bg 8787
Muestra una dirección como https://myserver.tail1234.ts.net. Úsala en las apps. Solo tus propios dispositivos pueden acceder.
Cloudflare Tunnel (una dirección pública con tu propio dominio)
Con un dominio en Cloudflare, instala cloudflared y luego ejecuta:
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
Tu servidor quedará en https://critto.example.com. Aun así, cada dispositivo necesita un código de vinculación.
Un proxy inverso que ya tengas
Dirígelo a http://127.0.0.1:8787 con WebSockets habilitados. Con Caddy, que gestiona HTTPS por sí solo:
critto.example.com {
reverse_proxy 127.0.0.1:8787
}
Solo en tu red doméstica
Si todos los dispositivos están en casa, puedes hacer que el servidor escuche directamente en tu red. Configura CRITTO_LISTEN=0.0.0.0:8787 (consulta Configuración) y usa http://<server's IP address>:8787 en las apps. Es una conexión http sin cifrar, así que úsala solo en una red de confianza.
Elijas lo que elijas, configura CRITTO_PUBLIC_URL con esa dirección para que los códigos QR de vinculación apunten al servidor.
6. Actualizaciones
El servidor se actualiza junto con el resto del sistema:
- Debian / Ubuntu:
sudo apt update && sudo apt upgrade - Fedora / RHEL:
sudo dnf upgrade - openSUSE:
sudo zypper update
El servicio se reinicia automáticamente después de una actualización. Las apps de escritorio y celular se actualizan por separado.
7. Copias de seguridad
Todo está en /var/lib/critto: tus crittos, recuerdos, chats, archivos e inicios de sesión de IA. La configuración está en /etc/critto/critto.env.
Haz una copia tú. Detén el servidor para obtener una copia coherente:
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
Mientras funciona, el servidor también conserva una copia reciente de su base de datos en /var/lib/critto/backups/latest.db.
Copias de seguridad externas (S3, Cloudflare R2, Backblaze B2…). En la app, activa Modo avanzado y luego ve a Configuración → Copias de seguridad → Cambiar destino…. Cífralas antes de que salgan de tu servidor; agrega una clave de copia de seguridad:
sudo crittod backup keygen
Copia la línea CRITTO_BACKUP_KEY=… en /etc/critto/critto.env, guarda otra copia en un lugar seguro y sin conexión (sin ella no se pueden restaurar las copias) y reinicia: sudo systemctl restart critto.
Las copias externas se actualizan continuamente:
- Los cambios de la base de datos se envían cada 10 segundos.
- Los archivos de las personas se envían cada 10 minutos.
- Cada día se envía una copia completa.
Puedes restaurar cualquier momento de los últimos 7 días directamente desde el bucket:
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; omítelo para restaurar el estado más reciente. La carpeta users/ restaurada queda en el mismo lugar.)
Para restaurar un solo archivo de copia descargado (una instantánea diaria), colócalo en un lugar que el usuario critto pueda leer (por ejemplo, /var/lib/critto). Después:
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
Las claves de la bóveda. Las claves y contraseñas guardadas se cifran con una clave maestra en /etc/critto/vault.key (se crea durante la instalación y solo puede leerla el usuario critto; en Docker está en el volumen critto-keys, y en NixOS en services.critto.vaultKeyFile, cuyo valor predeterminado es /var/lib/critto-keys/vault.key: siempre fuera de los datos).
Nunca se incluye en una copia de seguridad. La lista de claves por cuenta que desbloquea (/var/lib/critto/vault/keys.db) tiene su propia copia cifrada junto a las demás, en vault/, que se conserva 30 días, pero solo si le das una clave de recuperación:
sudo crittod vault recovery-keygen
Agrega la línea CRITTO_VAULT_BACKUP_RECIPIENT=… a /etc/critto/critto.env y reinicia. Guarda la identidad de recuperación que se muestra y una copia de /etc/critto/vault.key sin conexión, en tu administrador de contraseñas: nunca en el servidor. Para restaurar después de perder el servidor, vuelve a poner vault.key, descarga vault/latest.db.age y ejecuta:
sudo -u critto crittod vault restore --identity /path/to/recovery.txt /path/to/latest.db.age
Configuración
El servidor lee /etc/critto/critto.env. Ahí se enumeran todas las opciones con una explicación. Edítalo con sudo nano /etc/critto/critto.env y luego ejecuta sudo systemctl restart critto. Estas son las más comunes:
| Opción | Para qué sirve |
|---|---|
CRITTO_LISTEN |
Dónde escucha el servidor. Predeterminado: 127.0.0.1:8787 (solo esta computadora). |
CRITTO_PUBLIC_URL |
Dirección que usan tus dispositivos, por ejemplo, https://critto.example.com. |
BOAT_API_KEY |
Tu clave de Boat para la Madriguera. |
CRITTO_BACKUP_KEY |
Cifra las copias de seguridad externas. |
CRITTO_ANTIGRAVITY=0 |
Oculta Antigravity. |
CRITTO_PROACTIVE=0 |
Los crittos no hacen seguimientos por su cuenta (se espera a las cosas que hayan programado). Sin Critto Smarts, los seguimientos usan la IA propia del critto. |
CRITTO_JOB_WORKERS |
Cantidad de tareas en segundo plano (seguimientos y tareas programadas) que se ejecutan a la vez. Valor predeterminado: 4. |
Comandos útiles:
| Comando | |
|---|---|
sudo crittod pair |
Genera un código de vinculación para un dispositivo nuevo |
sudo crittod setup ai |
Instala o actualiza apps de IA |
sudo crittod users |
Muestra las cuentas de este servidor |
systemctl status critto |
¿Está funcionando? |
journalctl -u critto -f |
Muestra su registro |
curl http://127.0.0.1:8787/health |
Una revisión rápida del estado |
/health muestra "desktop": "on-demand" hasta que una Madriguera necesita por primera vez el software de escritorio. Es normal: el servidor lo descarga en ese momento.
Desinstalar
- Debian / Ubuntu:
sudo apt purge critto-server - Fedora / RHEL:
sudo dnf remove critto-server - Docker:
docker rm -f critto(agregadocker volume rm critto-data critto-keys critto-aipara eliminar también los datos)
Esto detiene el servidor y elimina el paquete y, si no queda ningún otro paquete de Critto, el repositorio. Tus datos en /var/lib/critto se conservan por si vuelves. Para eliminarlos todos:
sudo rm -rf /var/lib/critto /etc/critto /opt/critto-ai
sudo userdel critto
Para evitar que los paquetes agreguen el repositorio desde el principio, ejecuta echo CRITTO_REPO=no | sudo tee /etc/default/critto antes de instalar.
Solución de problemas
- La app dice que no puede conectarse al servidor. Revisa
systemctl status crittoen el servidor y confirma que el dispositivo pueda acceder a la dirección de la app (desde un celular,127.0.0.1se refiere al propio celular). - «El código de vinculación no funcionó». Los códigos duran 10 minutos y se usan una sola vez. Genera otro con
sudo crittod pair. Ejecútalo consudo: sin eso obtendrás un código para otro servidor personal. - Una app de IA no aparece en Conexiones. Vuelve a ejecutar
sudo crittod setup ai <name>; el servidor se reinicia cuando termina. - Algo más. Normalmente,
journalctl -u critto -n 100indica qué salió mal.