Critto normalmente fica na sua conta Critto. Se preferir manter tudo em um computador seu, você pode rodar o servidor Critto por conta própria: seus crittos, as lembranças deles e suas conversas ficam nessa máquina, e os apps Critto para computador e celular se conectam a ela.
Este guia é para Linux. Você vai precisar de:
- um computador Linux de 64 bits (Intel/AMD ou ARM, por exemplo, um Raspberry Pi 4/5) que fique 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, há um flake com um módulo NixOS. Debian, Ubuntu, Fedora, sistemas no estilo RHEL e openSUSE têm pacotes apropriados com atualizações automáticas. Outros sistemas podem usar a imagem de contêiner ou a versão estática.
NixOS
Adicione o flake do Critto ao flake do 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, execute sudo nixos-rebuild switch --flake .#myserver e pareie seus apps com sudo crittod pair (etapa 2).
- Atualizações: execute
nix flake update crittoe depois reconstrua. O pacote é uma versão pré-compilada e assinada (binário estático, sem problemas com glibc). Useservices.critto.package = critto.packages.${system}.crittod-beta;para o canal beta. - Segredos: coloque
BOAT_API_KEY=…eCRITTO_BACKUP_KEY=…noenvironmentFile(propriedade do root, modo 600; agenix e sops-nix também funcionam). O arquivo é lido quando o serviço inicia e nunca é copiado para o store. - Configurações:
listen(padrão127.0.0.1:8787),publicUrl,webHost,openFirewall(desativado por padrão),dataDir(padrão/var/lib/critto) esettingspara qualquer outra variávelCRITTO_*.den.backendescolhe onde a Toca roda (boat,localounone; veja a Toca). - Apps de IA: prefira pacotes do nixpkgs em
aiPackages(por exemplo,pkgs.codex,pkgs.claude-code, que precisa deallowUnfree). Para os que não existem no nixpkgs, definaprograms.nix-ld.enable = true;e usesudo crittod setup ai(etapa 3). Pi só precisa depkgs.nodejs_22emaiPackages; depois, executesudo crittod setup ai pi. - Acesso remoto: defina
services.tailscale.enable = true;e executesudo tailscale serve --bg 8787, ou configureservices.cloudflaredcom uma regra de entrada parahttp://127.0.0.1:8787(veja etapa 5). - O serviço fica isolado pelo systemd, mas mantém disponíveis os namespaces de usuário (necessários para bubblewrap e para a Toca local), então não defina
security.allowUserNamespaces = false.
O restante deste guia também se aplica ao NixOS, exceto que as atualizações são feitas com nix flake update, em vez de apt ou dnf.
1. Instalação
Abra um terminal no servidor e execute:
curl -fsSL https://downloads.critto.app/install-server.sh | sh
Isso adiciona o repositório de pacotes Critto, instala o pacote critto-server, inicia o servidor e mostra um código de pareamento. Pronto: avance para Parear seus apps.
Quer receber versões novas antes de todo mundo? Use o canal beta:
curl -fsSL https://downloads.critto.app/install-server.sh | CRITTO_CHANNEL=beta sh
Verifique o instalador antes (opcional)
O script é assinado com a chave de lançamento do Critto. Para verificar antes de 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á nos pacotes da maioria das distribuições.) Há também uma soma de verificação simples em install-server.sh.sha256. Os pacotes também são assinados, e seu gerenciador de pacotes os verifica em cada instalação e atualização.
Ou configure o repositório por conta própria
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 use 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 contêiner não precisa de permissões especiais. Seus dados ficam no volume critto-data, a chave mestra do cofre no volume critto-keys (separada dos dados, então uma cópia de um nunca desbloqueia o outro; veja Backups) e os apps de IA em critto-ai. Também funciona montar um segredo do Docker em /etc/critto/vault.key. Para atualizar, use docker pull ghcr.io/nexferra-ltd/critto-server:latest e recrie o contêiner com os mesmos volumes.
Ou use a versão estática
Cada lançamento também inclui uma versão em arquivo único que roda em qualquer Linux: https://downloads.critto.app/releases/<version>/critto-server-<version>-linux-x86_64.tar.gz (ou -aarch64). Descompacte e execute ./crittod serve. Você terá de manter o serviço em execução e atualizado, então os pacotes são a opção mais fácil.
2. Pareie seus apps
O servidor só permite a entrada de dispositivos pareados. Para parear um:
No servidor, gere um código (válido por 10 minutos e para um único uso):
sudo crittod pairNo app Critto, na tela de login, escolha Usar meu próprio servidor Critto. Digite o endereço do servidor e o código.
- No próprio servidor:
http://127.0.0.1:8787 - Para outros dispositivos, você precisará de um endereço que eles consigam acessar; veja Acesse de outros dispositivos.
- No próprio servidor:
Depois de parear um dispositivo, você pode parear outros por ele: Configurações → Dispositivos → Parear um celular mostra um QR code. Ele contém o endereço em que o servidor está disponível; se seus dispositivos acessarem por outro meio (túnel, proxy ou domínio), defina CRITTO_PUBLIC_URL com esse endereço (veja Configurações).
O app para computador está no mesmo computador? Normalmente, ele inicia um servidor Critto privado próprio. Se você instalou o servidor aqui, escolha Usar meu próprio servidor Critto com
http://127.0.0.1:8787para que ambos usem os mesmos crittos.
3. Conecte suas IAs
Crittos pensam com a IA que você escolher. Há duas maneiras de conectar uma.
Suas assinaturas de IA (ChatGPT, Claude, Grok…)
Critto se conecta por meio dos apps oficiais de linha de comando, instalados uma vez no servidor:
sudo crittod setup ai
Escolha os que você usa ou informe os nomes diretamente: sudo crittod setup ai codex claude.
| App | Use com |
|---|---|
codex |
um plano ChatGPT (Plus, Pro, Business…) |
claude |
um plano Claude (Pro, Max…) |
grok |
SuperGrok / X Premium |
muse |
Meta AI (precisa de Node.js 20+; o instalador o adiciona se puder) |
antigravity |
Google Antigravity. Leia primeiro o aviso exibido: os termos do Google dizem que outros softwares não devem usar um login do Antigravity, e o Google já suspendeu contas por isso. |
Eles são instalados em /opt/critto-ai e não se atualizam sozinhos. Execute sudo crittod setup ai --update de tempos em tempos para atualizá-los.
Depois, no app Critto, abra Conexões e entre em cada um. Os logins ficam no servidor, não no app.
IA personalizada: modelos locais e chaves de API
Ative Configurações → Modo avançado e use Configurações → IA personalizada → Adicionar conexão. Funciona qualquer serviço compatível com a API “OpenAI-compatible”. Escolha uma opção em Começar por ou informe o endereço:
| Serviço | URL base | Chave de API |
|---|---|---|
| Ollama no servidor | http://localhost:11434/v1 |
nenhuma |
| LM Studio no servidor | http://localhost:1234/v1 |
nenhuma |
| Ollama em outro computador de casa | http://192.168.1.20:11434/v1 |
nenhuma |
| OpenRouter | https://openrouter.ai/api/v1 |
sua chave OpenRouter |
Use Testar conexão, escolha um modelo e salve. Depois você pode escolher essa IA para qualquer critto.
Para usar o Ollama em outro computador, inicie-o com OLLAMA_HOST=0.0.0.0 para aceitar conexões da sua rede. “localhost” sempre significa o próprio computador do servidor Critto.
4. A Toca (opcional)
A Toca é o computador dos seus crittos na nuvem, onde eles fazem trabalhos maiores (criar coisas, navegar, usar apps). Um servidor com hospedagem própria executa as Dens na sua conta Boat. Cole sua chave de API da Boat no app, em Conexões, ou coloque-a no arquivo de configurações como BOAT_API_KEY e reinicie.
É bom saber:
- Seu servidor não precisa estar acessível pela internet para a Toca funcionar. Ele se comunica com a Toca, não o contrário.
- Para tarefas na Toca, é necessária uma IA com endereço público na internet (suas assinaturas ou um serviço como OpenRouter). Uma IA na sua rede (Ollama, LM Studio) pode conversar, mas a Toca na nuvem não consegue acessá-la.
- A Boat cobra o tempo de uso da Toca na sua conta.
Sua própria Toca, no seu computador
Não tem 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 roda e a criação da imagem uma única vez). No NixOS:
services.critto.den.backend = "local";
Em outros sistemas, defina CRITTO_DEN_BACKEND=local em /etc/critto/critto.env. O guia completo (requisitos, tamanhos, o que a Toca pode acessar, criação da imagem) está em Sua própria Toca, no seu computador.
5. Acesse de outros dispositivos
Por padrão, o servidor só aceita conexões no próprio computador (127.0.0.1:8787). Essa é a configuração segura. Para usar seu celular ou notebook de qualquer lugar, escolha uma destas opções. As duas primeiras oferecem um endereço seguro https:// sem abrir portas no roteador.
Tailscale (mais fácil para uso pessoal)
Instale Tailscale no servidor e nos seus dispositivos, entre na mesma conta e depois, no servidor, execute:
sudo tailscale serve --bg 8787
Ele mostra um endereço como https://myserver.tail1234.ts.net. Use-o nos apps. Só seus dispositivos conseguem acessá-lo.
Cloudflare Tunnel (endereço público no seu domínio)
Com um domínio na Cloudflare, instale cloudflared e execute:
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
Seu servidor estará em https://critto.example.com. Cada dispositivo ainda precisa de um código de pareamento.
Um proxy reverso que você já usa
Aponte-o para http://127.0.0.1:8787 e permita WebSockets. Com Caddy, que configura HTTPS por conta própria:
critto.example.com {
reverse_proxy 127.0.0.1:8787
}
Somente na rede da sua casa
Se todos os dispositivos estiverem em casa, você pode permitir que o servidor escute diretamente na rede. Defina CRITTO_LISTEN=0.0.0.0:8787 (veja Configurações) e use http://<server's IP address>:8787 nos apps. A conexão usa http sem criptografia, então faça isso somente em uma rede confiável.
Seja qual for sua escolha, defina CRITTO_PUBLIC_URL com esse endereço para que os QR codes de pareamento apontem para ele.
6. Atualizações
O servidor é atualizado junto com o restante do sistema:
- Debian / Ubuntu:
sudo apt update && sudo apt upgrade - Fedora / RHEL:
sudo dnf upgrade - openSUSE:
sudo zypper update
O serviço reinicia sozinho após uma atualização. Os apps para computador e celular são atualizados separadamente.
7. Backups
Tudo fica em /var/lib/critto: seus crittos, lembranças, conversas, arquivos e logins de IA. As configurações ficam em /etc/critto/critto.env.
Faça uma cópia por conta própria. Pare o servidor para obter uma cópia consistente:
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 recente do banco de dados em /var/lib/critto/backups/latest.db.
Backups externos (S3, Cloudflare R2, Backblaze B2…). No app, ative Modo avançado e use Configurações → Backups → Alterar destino…. Adicione uma chave de backup para criptografá-los antes de saírem do servidor:
sudo crittod backup keygen
Copie a linha CRITTO_BACKUP_KEY=… para /etc/critto/critto.env, guarde uma cópia em local seguro e offline (não é possível restaurar backups sem ela) e reinicie: sudo systemctl restart critto.
Os backups externos são contínuos:
- as alterações no banco de dados são enviadas a cada 10 segundos;
- os arquivos das pessoas são enviados a cada 10 minutos;
- uma cópia completa é enviada todos os dias.
É possível restaurar qualquer momento dos últimos 7 dias diretamente do 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 usa UTC; omita-o para restaurar o estado mais recente. A pasta users/ restaurada fica no mesmo lugar.)
Para restaurar um único arquivo de backup baixado (um snapshot diário), coloque-o em um local que o usuário critto possa ler (por exemplo, /var/lib/critto) e execute:
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 senhas salvas são criptografadas com uma chave mestra em /etc/critto/vault.key (criada durante a instalação, acessível somente pelo usuário critto; no Docker, fica no volume critto-keys; no NixOS, em services.critto.vaultKeyFile, cujo padrão é /var/lib/critto-keys/vault.key: sempre fora dos dados).
Ela nunca é incluída em um backup. A lista de chaves por conta que ela desbloqueia (/var/lib/critto/vault/keys.db) recebe um backup criptografado próprio junto dos demais, em vault/, mantido por 30 dias, mas somente se você fornecer uma chave de recuperação:
sudo crittod vault recovery-keygen
Coloque a linha CRITTO_VAULT_BACKUP_RECIPIENT=… em /etc/critto/critto.env e reinicie. Guarde a identidade de recuperação exibida e uma cópia de /etc/critto/vault.key offline, no seu gerenciador de senhas: nunca no servidor. Para restaurar depois de perder o servidor, recoloque vault.key, baixe vault/latest.db.age e execute:
sudo -u critto crittod vault restore --identity /path/to/recovery.txt /path/to/latest.db.age
Configurações
O servidor lê /etc/critto/critto.env. Todas as opções aparecem com explicações nesse arquivo. Edite com sudo nano /etc/critto/critto.env e depois execute sudo systemctl restart critto. As opções mais comuns:
| Configuração | O que faz |
|---|---|
CRITTO_LISTEN |
Onde o servidor escuta. Padrão 127.0.0.1:8787 (somente este computador). |
CRITTO_PUBLIC_URL |
Endereço usado pelos dispositivos, por exemplo https://critto.example.com. |
BOAT_API_KEY |
Sua chave Boat, para a Toca. |
CRITTO_BACKUP_KEY |
Criptografa backups externos. |
CRITTO_ANTIGRAVITY=0 |
Oculta Antigravity. |
CRITTO_PROACTIVE=0 |
Impede que os crittos iniciem check-ins por conta própria (as tarefas agendadas ficam esperando). Sem Critto Smarts, os check-ins usam a IA do próprio critto. |
CRITTO_JOB_WORKERS |
Quantos trabalhos em segundo plano (check-ins e tarefas agendadas) rodam ao mesmo tempo. Padrão: 4. |
Comandos úteis:
| Comando | |
|---|---|
sudo crittod pair |
gera um código de pareamento para um dispositivo novo |
sudo crittod setup ai |
instala ou atualiza apps de IA |
sudo crittod users |
mostra as contas neste servidor |
systemctl status critto |
verifica se está em execução |
journalctl -u critto -f |
mostra o registro do serviço |
curl http://127.0.0.1:8787/health |
verificação rápida de funcionamento |
/health mostra "desktop": "on-demand" até que uma Toca precise do software da área de trabalho pela primeira vez. Isso é normal: o servidor o baixa nessa hora.
Desinstalação
- Debian / Ubuntu:
sudo apt purge critto-server - Fedora / RHEL:
sudo dnf remove critto-server - Docker:
docker rm -f critto(adicionedocker volume rm critto-data critto-keys critto-aipara também excluir os dados)
Isso para o servidor e remove o pacote e, se não houver outro pacote Critto instalado, o repositório. Seus dados em /var/lib/critto são mantidos caso você volte. Para excluir tudo:
sudo rm -rf /var/lib/critto /etc/critto /opt/critto-ai
sudo userdel critto
Para impedir que os pacotes adicionem o repositório desde o início, execute echo CRITTO_REPO=no | sudo tee /etc/default/critto antes da instalação.
Solução de problemas
- O app diz que não consegue acessar o servidor. No servidor, verifique
systemctl status crittoe confira se o endereço no app pode ser acessado pelo dispositivo (em um celular,127.0.0.1significa o próprio celular). - “O código de pareamento não funcionou.” Os códigos valem por 10 minutos e só podem ser usados uma vez. Gere outro com
sudo crittod pair. Execute comsudo: sem isso, você recebe um código para outro servidor pessoal. - Um app de IA não aparece em Conexões. Execute
sudo crittod setup ai <name>outra vez; ao terminar, o servidor será reiniciado. - Outro problema.
journalctl -u critto -n 100costuma mostrar o que houve.