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 crittoe volta a compilar. O pacote é a versão oficial pré-compilada e assinada (um binário estático, sem problemas com glibc). Usaservices.critto.package = critto.packages.${system}.crittod-beta;para o canal beta. - Segredos: coloca
BOAT_API_KEY=…eCRITTO_BACKUP_KEY=…emenvironmentFile(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ção127.0.0.1:8787),publicUrl,webHost,openFirewall(desativado por predefinição),dataDir(predefinição/var/lib/critto) esettingspara quaisquer outras variáveisCRITTO_*.den.backendescolhe onde é executada a Toca (boat,localounone; ver a Toca). - Aplicações de IA: prefere pacotes do nixpkgs em
aiPackages(por exemplo,pkgs.codex,pkgs.claude-code, que precisa deallowUnfree). Para as aplicações que não estão no nixpkgs, defineprograms.nix-ld.enable = true;e usasudo crittod setup ai(passo 3). O Pi só precisa depkgs.nodejs_22emaiPackages; depois, executasudo crittod setup ai pi. - Acesso remoto: ativa
services.tailscale.enable = true;e executasudo tailscale serve --bg 8787, ou usaservices.cloudflaredcom uma regra de entrada parahttp://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:
No servidor, obtém um código (é válido durante 10 minutos e só pode ser usado uma vez):
sudo crittod pairNa 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.
- No próprio servidor:
http://127.0.0.1:8787 - Nos outros dispositivos, precisas de um endereço a que consigam aceder; consulta Aceder a partir dos teus outros dispositivos.
- No próprio servidor:
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(acrescentadocker volume rm critto-data critto-keys critto-aipara 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 crittono servidor e confirma se o dispositivo consegue aceder ao endereço indicado na aplicação (num telemóvel,127.0.0.1refere-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 comsudo: 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 100indica o que se passa.