Normalmente, Critto funciona na tua conta Critto. Se preferires manter tudo num computador teu, podes executar o servidor Critto: os teus crittos, as respetivas memórias e as tuas conversas ficam nesse computador, e as aplicações Critto para computador e telemóvel ligam-se a ele.

Este guia é para Linux. Vais precisar de:

  • um computador Linux de 64 bits (Intel/AMD ou ARM, por exemplo, um Raspberry Pi 4/5) que esteja sempre ligado: um servidor em casa, um mini PC ou um pequeno servidor na nuvem;
  • cerca de 1 GB de memória livre e alguns GB de espaço em disco;
  • direitos de administrador (sudo).

No NixOS, tens um flake com um módulo NixOS. Para Debian, Ubuntu, Fedora, sistemas do tipo RHEL e openSUSE, há pacotes próprios com atualizações automáticas. Nos restantes sistemas, podes usar a imagem de contentor ou a compilação estática.


NixOS

Acrescenta o flake Critto ao flake do teu 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";
          };
        })
      ];
    };
  };
}

Depois, executa sudo nixos-rebuild switch --flake .#myserver e emparelha as tuas aplicações com sudo crittod pair (passo 2).

  • Atualizações: executa nix flake update critto e volta a compilar. O pacote é a versão oficial pré-compilada e assinada (um binário estático, sem problemas com glibc). Usa services.critto.package = critto.packages.${system}.crittod-beta; para o canal beta.
  • Segredos: coloca BOAT_API_KEY=… e CRITTO_BACKUP_KEY=… em environmentFile (propriedade de root, modo 600; também podes usar agenix e sops-nix). O ficheiro é lido quando o serviço arranca e nunca é copiado para o store.
  • Definições: listen (predefinição 127.0.0.1:8787), publicUrl, webHost, openFirewall (desativado por predefinição), dataDir (predefinição /var/lib/critto) e settings para quaisquer outras variáveis CRITTO_*. den.backend escolhe onde é executada a Toca (boat, local ou none; ver a Toca).
  • Aplicações de IA: prefere pacotes do nixpkgs em aiPackages (por exemplo, pkgs.codex, pkgs.claude-code, que precisa de allowUnfree). Para as aplicações que não estão no nixpkgs, define programs.nix-ld.enable = true; e usa sudo crittod setup ai (passo 3). O Pi só precisa de pkgs.nodejs_22 em aiPackages; depois, executa sudo crittod setup ai pi.
  • Acesso remoto: ativa services.tailscale.enable = true; e executa sudo tailscale serve --bg 8787, ou usa services.cloudflared com uma regra de entrada para http://127.0.0.1:8787 (ver passo 5).
  • O serviço está isolado pelo systemd, mas mantém disponíveis os espaços de nomes de utilizador (necessários para bubblewrap e para a Toca local); por isso, não definas security.allowUserNamespaces = false.

O resto deste guia também se aplica ao NixOS, mas as atualizações são feitas com nix flake update em vez de apt ou dnf.


1. Instalação

Abre um terminal no servidor e executa:

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

O comando acrescenta o repositório de pacotes Critto, instala o pacote critto-server, inicia o servidor e apresenta um código de emparelhamento. Está feito: avança para Emparelhar as tuas aplicações.

Queres receber versões novas antes de toda a gente? Usa o canal beta: curl -fsSL https://downloads.critto.app/install-server.sh | CRITTO_CHANNEL=beta sh

Verifica primeiro o instalador (opcional)

O script é assinado com a chave de lançamento Critto. Para o verificar antes de o executar:

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á disponível nos pacotes da maioria das distribuições.) Também existe uma soma de verificação simples em install-server.sh.sha256. Os próprios pacotes também são assinados e o gestor de pacotes verifica-os em cada instalação e atualização.

Ou configura tu o repositório

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

A impressão digital da chave é C78E FB7F 67CC 8184 1F70 EE3D D121 DC94 C534 50E3 («Critto Packages packages@critto.app»).

Ou 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

O contentor não precisa de permissões especiais. Os teus dados ficam no volume critto-data, a chave mestra do cofre no volume critto-keys (separado dos dados, para que uma cópia de um não permita abrir o outro; consulta Cópias de segurança) e as aplicações de IA em critto-ai. Também podes montar um segredo Docker em /etc/critto/vault.key. Para atualizar, executa docker pull ghcr.io/nexferra-ltd/critto-server:latest e recria o contentor com os mesmos volumes.

Ou usa a compilação estática

Cada versão também inclui uma compilação num único ficheiro que funciona em qualquer sistema Linux: https://downloads.critto.app/releases/<version>/critto-server-<version>-linux-x86_64.tar.gz (ou -aarch64). Descomprime-o e executa ./crittod serve. Terás de o manter em execução e atualizado, por isso os pacotes são a opção mais simples.


2. Emparelhar as tuas aplicações

O servidor só permite o acesso de dispositivos que tenham sido emparelhados. Para emparelhar um dispositivo:

  1. No servidor, obtém um código (é válido durante 10 minutos e só pode ser usado uma vez):

    sudo crittod pair
    
  2. Na aplicação Critto, no ecrã de início de sessão, escolhe Usar o meu próprio servidor Critto. Introduz o endereço do servidor e o código.

Depois de emparelhares um dispositivo, podes usá-lo para emparelhar outros: em Definições → Dispositivos → Emparelhar um telemóvel, aparece um código QR. Este contém o endereço onde o servidor está à escuta. Se os teus dispositivos acederem ao servidor de outra forma (através de um túnel, proxy ou domínio), define CRITTO_PUBLIC_URL com esse endereço (ver Definições).

A aplicação para computador está no mesmo computador? Normalmente, a aplicação para computador inicia o seu próprio servidor Critto privado. Se instalaste aqui o servidor, escolhe Usar o meu próprio servidor Critto com http://127.0.0.1:8787, para ambos usarem os mesmos crittos.


3. Liga as tuas IAs

Os crittos pensam com a IA que escolheres. Há duas formas de a configurar.

As tuas subscrições de IA (ChatGPT, Claude, Grok…)

Critto comunica com estes serviços através das respetivas aplicações oficiais de linha de comandos, que só precisas de instalar uma vez no servidor:

sudo crittod setup ai

Escolhe as que usas ou indica os nomes diretamente: sudo crittod setup ai codex claude.

Aplicação Utiliza-a com
codex um plano ChatGPT (Plus, Pro, Business…)
claude um plano Claude (Pro, Max…)
grok SuperGrok / X Premium
muse Meta AI (precisa do Node.js 20+; o instalador instala-o se for possível)
antigravity Google Antigravity. Lê primeiro o aviso apresentado: os termos da Google dizem que outro software não deve usar uma sessão Antigravity, e a Google já suspendeu contas por esse motivo.

As aplicações são instaladas em /opt/critto-ai e não se atualizam sozinhas. De vez em quando, executa sudo crittod setup ai --update para as atualizar.

Depois, na aplicação Critto, abre Ligações e inicia sessão em cada serviço. Os dados de início de sessão ficam guardados no servidor, não na aplicação.

IA personalizada: modelos locais e chaves API

Ativa Definições → Modo Avançado e depois usa Definições → IA personalizada → Adicionar ligação. Funciona qualquer serviço compatível com a API «OpenAI-compatible». Escolhe uma predefinição em Começar a partir de ou introduz tu o endereço:

Serviço URL base Chave API
Ollama no servidor http://localhost:11434/v1 nenhuma
LM Studio no servidor http://localhost:1234/v1 nenhuma
Ollama noutro computador em casa http://192.168.1.20:11434/v1 nenhuma
OpenRouter https://openrouter.ai/api/v1 a tua chave OpenRouter

Usa Testar ligação, escolhe um modelo e guarda. Depois, podes escolher essa IA para qualquer critto.

Para usar o Ollama noutro computador, inicia-o com OLLAMA_HOST=0.0.0.0 para aceitar ligações da tua rede. «localhost» significa sempre o próprio computador do servidor Critto.


4. A Toca (opcional)

A Toca é o computador dos teus crittos na nuvem, onde fazem trabalhos maiores (criar coisas, navegar, usar aplicações). Um servidor com alojamento próprio executa as Toca na tua conta Boat. Cola a tua chave API Boat na aplicação, em Ligações, ou coloca-a no ficheiro de definições como BOAT_API_KEY e reinicia.

É bom saber:

  • O teu servidor não precisa de estar acessível através da internet para a Toca funcionar. É o servidor que comunica com a Toca, e não o contrário.
  • Para trabalhar, a Toca precisa de uma IA com um endereço público na internet (as tuas subscrições ou um serviço como a OpenRouter). Uma IA executada na tua própria rede (Ollama, LM Studio) pode conversar, mas a Toca na nuvem não consegue aceder-lhe.
  • O tempo na Toca é cobrado pela Boat na tua conta.

A tua própria Toca, no teu computador

Não tens conta Boat? Em vez disso, o servidor pode executar a Toca de cada pessoa como uma pequena máquina virtual neste computador (precisa de /dev/kvm, cerca de 4 GB de memória por Toca enquanto está em execução e uma compilação de imagem feita uma vez). No NixOS:

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

Noutros sistemas, define CRITTO_DEN_BACKEND=local em /etc/critto/critto.env. O guia completo (requisitos, dimensões, conteúdo a que uma Toca pode aceder e criação da imagem) está em A tua própria Toca, no teu computador.


5. Aceder a partir dos teus outros dispositivos

Por predefinição, o servidor só está à escuta no próprio computador (127.0.0.1:8787). É a opção mais segura. Para usar o telemóvel ou portátil a partir de qualquer lugar, escolhe uma destas opções. As duas primeiras dão-te um endereço https:// seguro sem abrir portas no router.

Tailscale (mais simples para uso pessoal)

Instala Tailscale no servidor e nos teus dispositivos, inicia sessão na mesma conta e depois, no servidor:

sudo tailscale serve --bg 8787

Aparece um endereço semelhante a https://myserver.tail1234.ts.net. Usa-o nas aplicações. Só os teus próprios dispositivos lhe conseguem aceder.

Cloudflare Tunnel (um endereço público no teu próprio domínio)

Com um domínio na Cloudflare, instala cloudflared, e depois:

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

O teu servidor fica então disponível em https://critto.example.com. Continua a ser necessário um código de emparelhamento para cada dispositivo.

Um proxy inverso que já uses

Direciona-o para http://127.0.0.1:8787 e permite WebSockets. Com o Caddy, que trata do HTTPS por si:

critto.example.com {
    reverse_proxy 127.0.0.1:8787
}

Apenas na tua rede doméstica

Se todos os dispositivos estiverem em casa, podes permitir que o servidor fique diretamente à escuta na tua rede. Define CRITTO_LISTEN=0.0.0.0:8787 (ver Definições) e usa http://<server's IP address>:8787 nas aplicações. A ligação é http sem encriptação, por isso só o deves fazer numa rede em que confies.

Seja qual for a opção, define CRITTO_PUBLIC_URL com esse endereço para os códigos QR de emparelhamento apontarem para ele.


6. Atualizações

O servidor é atualizado com o resto do sistema:

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

O serviço reinicia automaticamente após uma atualização. As aplicações para computador e telemóvel são atualizadas à parte.


7. Cópias de segurança

Tudo fica em /var/lib/critto: os teus crittos, memórias, conversas, ficheiros e dados de início de sessão de IA. As definições ficam em /etc/critto/critto.env.

Faz tu a cópia. Para obter uma cópia consistente, para o servidor:

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

Enquanto está em execução, o servidor também mantém uma cópia atualizada da base de dados em /var/lib/critto/backups/latest.db.

Cópias de segurança externas (S3, Cloudflare R2, Backblaze B2…). Na aplicação, ativa o Modo Avançado e usa Definições → Cópias de segurança → Alterar destino…. Encripta-as antes de saírem do servidor, acrescentando uma chave de cópia de segurança:

sudo crittod backup keygen

Copia a linha CRITTO_BACKUP_KEY=… para /etc/critto/critto.env, guarda uma cópia num local seguro e sem ligação à internet (não é possível restaurar cópias de segurança sem ela) e reinicia: sudo systemctl restart critto.

As cópias de segurança externas são contínuas:

  • as alterações à base de dados são enviadas a cada 10 segundos;
  • os ficheiros das pessoas são enviados a cada 10 minutos;
  • uma cópia completa é enviada todos os dias.

Podes restaurar qualquer momento dos últimos 7 dias diretamente do armazenamento:

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á em UTC; omite-o para restaurar o estado mais recente. A pasta users/ restaurada fica no mesmo local.)

Para restaurar apenas um ficheiro de cópia de segurança transferido (um instantâneo diário), coloca-o num local a que o utilizador critto consiga aceder (por exemplo, /var/lib/critto) e depois:

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

As chaves do cofre. As chaves e palavras-passe guardadas são encriptadas com uma chave mestra em /etc/critto/vault.key (criada durante a instalação e legível apenas pelo utilizador critto; no Docker, fica no volume critto-keys; no NixOS, em services.critto.vaultKeyFile, por predefinição /var/lib/critto-keys/vault.key: sempre fora dos dados). Nunca é incluída numa cópia de segurança. A lista de chaves por conta que desbloqueia (/var/lib/critto/vault/keys.db) tem a sua própria cópia de segurança encriptada, junto das restantes, em vault/, conservada durante 30 dias, mas apenas se forneceres uma chave de recuperação:

sudo crittod vault recovery-keygen

Coloca a linha CRITTO_VAULT_BACKUP_RECIPIENT=… em /etc/critto/critto.env e reinicia o servidor. Guarda a identidade de recuperação apresentada e uma cópia de /etc/critto/vault.key offline, no teu gestor de palavras-passe: nunca no servidor. Para restaurar depois de perderes o servidor, repõe vault.key, transfere vault/latest.db.age e executa:

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

Definições

O servidor lê /etc/critto/critto.env. Todas as opções estão aí indicadas com uma explicação. Edita o ficheiro com sudo nano /etc/critto/critto.env e depois executa sudo systemctl restart critto. As opções mais comuns:

Definição O que faz
CRITTO_LISTEN Onde o servidor fica à escuta. Predefinição 127.0.0.1:8787 (apenas este computador).
CRITTO_PUBLIC_URL Endereço usado pelos teus dispositivos, por exemplo, https://critto.example.com.
BOAT_API_KEY A tua chave Boat, para a Toca.
CRITTO_BACKUP_KEY Encripta cópias de segurança externas.
CRITTO_ANTIGRAVITY=0 Oculta Antigravity.
CRITTO_PROACTIVE=0 Os crittos não iniciam conversas por iniciativa própria (as tarefas agendadas ficam à espera). Sem a Critto Smarts, as conversas iniciadas por eles usam a IA própria do critto.
CRITTO_JOB_WORKERS Número de tarefas em segundo plano (conversas iniciadas por crittos e tarefas agendadas) executadas ao mesmo tempo. Predefinição: 4.

Comandos úteis:

Comando
sudo crittod pair código de emparelhamento para um novo dispositivo
sudo crittod setup ai instalar ou atualizar aplicações de IA
sudo crittod users contas neste servidor
systemctl status critto saber se está em execução
journalctl -u critto -f registo
curl http://127.0.0.1:8787/health verificação rápida do estado

/health indica "desktop": "on-demand" até uma Toca precisar do software de ambiente de trabalho pela primeira vez. É normal: nessa altura, o servidor transfere-o.


Desinstalação

  • Debian / Ubuntu: sudo apt purge critto-server
  • Fedora / RHEL: sudo dnf remove critto-server
  • Docker: docker rm -f critto (acrescenta docker volume rm critto-data critto-keys critto-ai para eliminar também os dados)

Esta operação para o servidor e remove o pacote e, se não houver outro pacote Critto instalado, o repositório. Os teus dados em /var/lib/critto são mantidos para o caso de voltares. Para eliminar tudo:

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

Para impedir que os pacotes acrescentem o repositório desde o início, executa echo CRITTO_REPO=no | sudo tee /etc/default/critto antes da instalação.


Resolução de problemas

  • A aplicação diz que não consegue aceder ao servidor. Verifica systemctl status critto no servidor e confirma se o dispositivo consegue aceder ao endereço indicado na aplicação (num telemóvel, 127.0.0.1 refere-se ao próprio telemóvel).
  • «O código de emparelhamento não funcionou.» Os códigos são válidos durante 10 minutos e só podem ser usados uma vez. Cria outro com sudo crittod pair. Executa-o com sudo: sem isso, recebes um código para outro servidor pessoal.
  • Uma aplicação de IA não aparece em Ligações. Volta a executar sudo crittod setup ai <name>; quando terminar, o servidor reinicia.
  • Outro problema. Normalmente, journalctl -u critto -n 100 indica o que se passa.