Normalmente, Critto vive en tu cuenta de Critto. Si prefieres tenerlo todo en un ordenador tuyo, puedes ejecutar tú mismo el servidor de Critto: tus crittos, sus recuerdos y tus chats se quedan en ese ordenador, y las apps de Critto para escritorio y móvil se conectan a él.

Esta guía es para Linux. Necesitarás:

  • un ordenador Linux de 64 bits (Intel/AMD o ARM, por ejemplo, una Raspberry Pi 4/5) que esté siempre encendido: un servidor doméstico, un mini PC o un pequeño servidor en la nube;
  • aproximadamente 1 GB de memoria libre y unos cuantos GB de disco;
  • permisos de administrador (sudo).

Para NixOS hay un flake con un módulo de NixOS. Debian, Ubuntu, Fedora, los sistemas basados en RHEL y openSUSE tienen paquetes nativos con actualizaciones automáticas. En cualquier otro sistema, puedes usar la imagen de contenedor o la compilación estática.


NixOS

Añade 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 tendrás problemas con glibc). Para el canal beta, usa services.critto.package = critto.packages.${system}.crittod-beta;.
  • Secretos: añade BOAT_API_KEY=… y CRITTO_BACKUP_KEY=… a environmentFile (propiedad de root, modo 600; también sirven agenix y sops-nix). Se lee al iniciar el servicio y nunca se copia al almacén.
  • Ajustes: listen (por defecto, 127.0.0.1:8787), publicUrl, webHost, openFirewall (desactivado por defecto), dataDir (por defecto, /var/lib/critto) y settings para cualquier otra variable CRITTO_*. den.backend elige dónde se ejecuta la Madriguera (boat, local o none; consulta la Madriguera).
  • Apps de IA: es mejor usar paquetes de nixpkgs en aiPackages (por ejemplo, pkgs.codex o 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 ejecuta sudo tailscale serve --bg 8787, o configura services.cloudflared con una regla de entrada a http://127.0.0.1:8787 (consulta el paso 5).
  • systemd ejecuta el servicio en un entorno aislado, pero mantiene disponibles los espacios de nombres de usuario (bubblewrap y la Madriguera local los necesitan), así que no establezcas security.allowUserNamespaces = false.

El resto de esta guía también sirve para NixOS, salvo que las actualizaciones se hacen con nix flake update en vez de apt o dnf.


1. Instalar

Abre un terminal en el servidor y ejecuta:

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

Añade 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 a Vincular tus apps.

¿Quieres probar las nuevas versiones antes que nadie? Usa el canal beta: curl -fsSL https://downloads.critto.app/install-server.sh | CRITTO_CHANNEL=beta sh

Comprobar el instalador primero (opcional)

El script está firmado con la clave de publicación 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 distribuciones.) También hay una suma de comprobación normal en install-server.sh.sha256. Los propios paquetes también están firmados y tu gestor de paquetes los comprueba en cada instalación y actualización.

O configura tú mismo el repositorio

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 necesita permisos especiales. Tus datos se guardan en el volumen critto-data; la clave maestra de la bóveda, en critto-keys (separada de los datos, para que una copia de uno no permita abrir 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 versión 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ímela y ejecuta ./crittod serve. Tendrás que mantenerla en funcionamiento y actualizarla tú, así que los paquetes son la opción más sencilla.


2. Vincular tus apps

El servidor solo permite conectarse a los dispositivos que hayas vinculado. Para vincular uno:

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

    sudo crittod pair
    
  2. En la app de Critto, en la pantalla de inicio de sesión, elige Usar mi propio servidor de Critto. Introduce la dirección del servidor y el código.

    • En el propio servidor: http://127.0.0.1:8787
    • Para conectarte desde otros dispositivos, necesitarás una dirección a la que puedan acceder; consulta Acceder desde tus otros dispositivos.

Cuando hayas vinculado un dispositivo, puedes vincular más desde él: Ajustes → Dispositivos → Vincular un móvil muestra un código QR. Incluye la dirección en la que escucha el servidor. Si tus dispositivos acceden a él de otra forma (mediante un túnel, un proxy o un dominio), asigna esa dirección a CRITTO_PUBLIC_URL (consulta Ajustes).

¿Usas la app de escritorio en el mismo ordenador? Normalmente, la app de escritorio inicia su propio servidor privado de Critto. Si has instalado aquí el servidor, elige Usar mi propio servidor de Critto con http://127.0.0.1:8787 para que ambos usen los mismos crittos.


3. Conectar tus IA

Tus crittos piensan con la IA que elijas. Puedes conectarla de dos formas.

Tus suscripciones de IA (ChatGPT, Claude, Grok…)

Critto se conecta a estas IA mediante sus apps oficiales de línea de comandos, que se instalan una sola 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 (necesita Node.js 20 o posterior; el instalador lo añade si puede)
antigravity Google Antigravity. Lee antes el aviso que aparece: las condiciones de Google dicen que otros programas no deberían usar el inicio de sesión de Antigravity, y Google ha suspendido cuentas por hacerlo.

Se instalan en /opt/critto-ai y no se actualizan automáticamente. Ejecuta sudo crittod setup ai --update de vez en cuando para actualizarlas.

Después, abre Conexiones en la app de Critto e inicia sesión en cada una. Los datos de acceso se guardan en el servidor, no en la app.

IA personalizada: modelos locales y claves de API

Activa Ajustes → Modo avanzado y ve a Ajustes → IA personalizada → Añadir conexión. Funciona cualquier servicio compatible con la API «OpenAI-compatible». Elige un preajuste en Empezar desde o introduce la dirección tú mismo:

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 otro ordenador de casa http://192.168.1.20:11434/v1 ninguna
OpenRouter https://openrouter.ai/api/v1 tu clave de OpenRouter

Pulsa Probar conexión, elige un modelo y guarda los cambios. Después podrás elegir esa IA para cualquier critto.

Para usar Ollama en otro ordenador, inícialo con OLLAMA_HOST=0.0.0.0 para que acepte conexiones de tu red. «localhost» siempre se refiere al propio ordenador que ejecuta el servidor de Critto.


4. La Madriguera (opcional)

La Madriguera es el ordenador en la nube de tus crittos, donde hacen tareas más grandes (crear cosas, navegar por Internet y usar apps). Un servidor propio ejecuta las Madriguera en tu cuenta de Boat. Pega tu clave de API de Boat en la app, en Conexiones, o añádela al archivo de ajustes como BOAT_API_KEY y reinicia.

Ten en cuenta:

  • El servidor no necesita ser accesible desde Internet para que funcione la Madriguera. El servidor se conecta a la Madriguera, no al revés.
  • Para trabajar en la Madriguera necesitas una IA con una dirección pública de Internet (tus suscripciones o un servicio como OpenRouter). Una IA que funcione en tu propia red (Ollama, LM Studio) puede chatear, pero la Madriguera en la nube no puede acceder a ella.
  • Boat cobra en tu cuenta el tiempo de uso de la Madriguera.

Tu propia Madriguera, en tu propio ordenador

¿No tienes cuenta de Boat? En su lugar, el servidor puede ejecutar la Madriguera de cada persona como una pequeña máquina virtual en este ordenador (necesita /dev/kvm, unos 4 GB de memoria por Madriguera mientras funciona y generar una imagen una sola vez). En NixOS:

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

En otros sistemas, añade CRITTO_DEN_BACKEND=local a /etc/critto/critto.env. La guía completa (requisitos, tamaños, a qué puede acceder una Madriguera y cómo generar la imagen) está en Tu propia Madriguera, en tu propio ordenador.


5. Acceder desde tus otros dispositivos

De forma predeterminada, el servidor solo escucha en su propio ordenador (127.0.0.1:8787). Es la opción más segura. Para usar el móvil o el portátil desde cualquier sitio, elige una de estas opciones. Las dos primeras te dan una dirección segura https:// sin abrir puertos en el router.

Tailscale (la opción más sencilla para uso personal)

Instala Tailscale en el servidor y tus dispositivos, inicia sesión con la misma cuenta y, después, en el servidor:

sudo tailscale serve --bg 8787

Mostrará una dirección como https://myserver.tail1234.ts.net. Úsala en las apps. Solo tus dispositivos podrán acceder.

Cloudflare Tunnel (una dirección pública en tu propio dominio)

Si tienes un dominio en Cloudflare, instala cloudflared, después:

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 estará en https://critto.example.com. Seguirás necesitando un código de vinculación para cada dispositivo.

Un proxy inverso que ya tengas

Dirígelo a http://127.0.0.1:8787 y permite WebSockets. Con Caddy, que gestiona HTTPS automáticamente:

critto.example.com {
    reverse_proxy 127.0.0.1:8787
}

Solo en tu red doméstica

Si todos tus dispositivos están en casa, puedes hacer que el servidor escuche directamente en tu red. Configura CRITTO_LISTEN=0.0.0.0:8787 (consulta Ajustes) y usa http://<server's IP address>:8787 en las apps. Es una conexión http normal, así que solo hazlo en una red de confianza.

Elijas lo que elijas, asigna esa dirección a CRITTO_PUBLIC_URL para que los códigos QR de vinculación apunten a ella.


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 actualizarse. Las apps de escritorio y móvil se actualizan por separado.


7. Copias de seguridad

Todo se guarda en /var/lib/critto: tus crittos, recuerdos, chats, archivos y accesos a IA. Los ajustes están en /etc/critto/critto.env.

Haz tú mismo una copia. Detén el servidor para que la copia sea 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 está en funcionamiento, el servidor también guarda 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 ve a Ajustes → Copias de seguridad → Cambiar destino…. Cífralas antes de que salgan del servidor; para ello, añade una clave de copia de seguridad:

sudo crittod backup keygen

Copia la línea CRITTO_BACKUP_KEY=… en /etc/critto/critto.env, guarda una copia en un lugar seguro y sin conexión (sin ella no podrás restaurar las copias) y reinicia el servidor: sudo systemctl restart critto.

Las copias externas se realizan de forma continua:

  • los cambios de la base de datos se suben cada 10 segundos;
  • los archivos de cada persona se suben cada 10 minutos;
  • se sube una copia completa cada día.

Puedes restaurar directamente desde el almacenamiento cualquier momento de los últimos 7 días:

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 sitio.)

Para restaurar una copia externa, descarga el archivo desde tu almacenamiento y 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/, conservada durante 30 días; esto solo ocurre si proporcionas una clave de recuperación:

sudo crittod vault recovery-keygen

Añade la línea CRITTO_VAULT_BACKUP_RECIPIENT=… a /etc/critto/critto.env y reinicia. Guarda la identidad de recuperación impresa y una copia de /etc/critto/vault.key sin conexión, en tu gestor de contraseñas; nunca en el servidor. Para restaurar después de perder el servidor, devuelve 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

Ajustes

El servidor lee /etc/critto/critto.env. Allí se enumeran y explican todas las opciones. Edítalo con sudo nano /etc/critto/critto.env y luego ejecuta sudo systemctl restart critto. Estas son las más habituales:

Ajuste Función
CRITTO_LISTEN Dirección en la que escucha el servidor. Por defecto, 127.0.0.1:8787 (solo este ordenador).
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 inician conversaciones por su cuenta (las tareas programadas quedan en espera). Sin Critto Smarts, los avisos usan la IA propia del critto.
CRITTO_JOB_WORKERS Número de tareas en segundo plano (avisos 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 Indica si está en funcionamiento
journalctl -u critto -f Muestra su registro
curl http://127.0.0.1:8787/health Hace una comprobación rápida de 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 (añade 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, también el repositorio. Tus datos de /var/lib/critto se conservan por si vuelves. Para eliminarlo todo:

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

Para evitar que los paquetes añadan 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. Comprueba systemctl status critto en el servidor y verifica que el dispositivo pueda acceder a la dirección de la app (desde un móvil, 127.0.0.1 se refiere al propio móvil).
  • «El código de vinculación no funciona». Los códigos son válidos durante 10 minutos y solo se pueden usar una vez. Genera uno nuevo con sudo crittod pair. Ejecútalo con sudo: si no, recibirás un código para otro servidor personal.
  • Una app de IA no aparece en Conexiones. Vuelve a ejecutar sudo crittod setup ai <name>; al terminar, se reiniciará el servidor.
  • Otro problema. Normalmente, journalctl -u critto -n 100 indica qué ocurre.