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 critto y vuelve a compilar. El paquete es la versión firmada y precompilada (un binario estático, así que no hay problemas con glibc). Usa services.critto.package = critto.packages.${system}.crittod-beta; para el canal beta.
  • Secretos: guarda BOAT_API_KEY=… y CRITTO_BACKUP_KEY=… en el archivo environmentFile (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 (predeterminado 127.0.0.1:8787), publicUrl, webHost, openFirewall (desactivado de forma predeterminada), dataDir (predeterminado /var/lib/critto) y settings para cualquier otra variable CRITTO_*. den.backend elige dónde funciona la Madriguera (boat, local o none; consulta la Madriguera).
  • Apps de IA: prefiere paquetes de nixpkgs en aiPackages (por ejemplo, pkgs.codex y pkgs.claude-code, que requiere allowUnfree). Para las que no están en nixpkgs, activa programs.nix-ld.enable = true; y usa sudo crittod setup ai (paso 3). Pi solo necesita pkgs.nodejs_22 en aiPackages; después, ejecuta sudo crittod setup ai pi.
  • Acceso remoto: activa services.tailscale.enable = true; y luego ejecuta sudo tailscale serve --bg 8787, o usa services.cloudflared con una regla de entrada a http://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:

  1. En el servidor, obtén un código (es válido durante 10 minutos y solo se puede usar una vez):

    sudo crittod pair
    
  2. En 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.

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:8787 para 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 (agrega docker volume rm critto-data critto-keys critto-ai para 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 critto en el servidor y confirma que el dispositivo pueda acceder a la dirección de la app (desde un celular, 127.0.0.1 se 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 con sudo: 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 100 indica qué salió mal.