Critto는 보통 내 Critto 계정에 있어요. 모든 정보를 내가 소유한 컴퓨터에 보관하고 싶다면 Critto 서버를 직접 운영할 수 있어요. 크리토와 기억, 대화가 그 컴퓨터에 보관되고 Critto 데스크톱 및 휴대폰 앱이 서버에 연결돼요.

이 안내는 Linux용이에요. 필요한 항목:

  • 계속 켜 둘 64비트 Linux 컴퓨터(Intel/AMD 또는 ARM, 예: Raspberry Pi 4/5). 홈 서버, 미니 PC 또는 소형 클라우드 서버를 쓸 수 있어요.
  • 여유 메모리 약 1GB와 디스크 공간 몇 GB
  • 관리자 권한(sudo)

NixOS에는 NixOS 모듈이 포함된 flake가 제공돼요. Debian, Ubuntu, Fedora, RHEL 계열 시스템과 openSUSE에는 자동 업데이트가 가능한 패키지를 제공해요. 그 외에는 컨테이너 이미지나 정적 빌드를 사용할 수 있어요.


NixOS

시스템 flake에 Critto flake를 추가하세요.

{
  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";
          };
        })
      ];
    };
  };
}

그런 다음 sudo nixos-rebuild switch --flake .#myserver를 실행하고 sudo crittod pair로 앱을 페어링하세요(2단계).

  • 업데이트: nix flake update critto를 실행한 다음 다시 빌드하세요. 패키지는 서명된 사전 빌드 릴리스예요(정적 바이너리라 glibc 문제가 없어요). 베타 채널을 사용하려면 services.critto.package = critto.packages.${system}.crittod-beta;를 설정하세요.
  • 비밀 정보: BOAT_API_KEY=…와 CRITTO_BACKUP_KEY=…를 environmentFile에 넣으세요(root 소유, 권한 600. agenix와 sops-nix도 쓸 수 있어요). 서비스 시작 시 읽으며 Nix 저장소에 복사되지 않아요.
  • 설정: listen(기본값 127.0.0.1:8787), publicUrl, webHost, openFirewall(기본값 끔), dataDir(기본값 /var/lib/critto), 다른 CRITTO_* 변수용 settings가 있어요. den.backend에서 아지트 실행 위치를 선택해요(boat, local, none; 아지트 참조).
  • AI 앱: aiPackages에서 nixpkgs 패키지를 우선 사용하세요(예: pkgs.codex, allowUnfree가 필요한 pkgs.claude-code). nixpkgs에 없는 앱은 programs.nix-ld.enable = true;를 설정한 뒤 sudo crittod setup ai를 실행하세요(3단계). Pi는 aiPackages에 pkgs.nodejs_22만 있으면 돼요. 그런 다음 sudo crittod setup ai pi를 실행하세요.
  • 원격 접속: services.tailscale.enable = true;를 설정한 뒤 sudo tailscale serve --bg 8787을 실행하세요. 또는 http://127.0.0.1:8787을 가리키는 ingress 규칙과 함께 services.cloudflared를 사용하세요(5단계 참조).
  • systemd가 서비스를 격리하지만 사용자 네임스페이스는 사용할 수 있게 둬요(bubblewrap과 로컬 아지트에 필요). 따라서 security.allowUserNamespaces = false로 설정하지 마세요.

업데이트에 apt나 dnf 대신 nix flake update를 사용한다는 점을 제외하면 이 안내의 나머지 내용은 NixOS에도 적용돼요.


1. 설치

서버에서 터미널을 열고 다음을 실행하세요.

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

Critto 패키지 저장소를 추가하고 critto-server 패키지를 설치한 다음 서버를 시작하고 페어링 코드를 표시해요. 설치가 끝났어요. 앱 페어링으로 건너뛰세요.

다른 사람보다 먼저 새 버전을 써 보고 싶나요? 베타 채널을 사용하세요. curl -fsSL https://downloads.critto.app/install-server.sh | CRITTO_CHANNEL=beta sh

먼저 설치 프로그램 확인하기(선택 사항)

스크립트는 Critto 릴리스 키로 서명돼요. 실행 전에 확인하려면 다음을 실행하세요.

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은 대부분 배포판의 패키지에 포함돼요.) install-server.sh.sha256에서 일반 체크섬도 확인할 수 있어요. 패키지에도 서명이 있으며 패키지 관리자가 설치와 업데이트 때마다 확인해요.

저장소 직접 설정하기

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

키 지문은 C78E FB7F 67CC 8184 1F70 EE3D D121 DC94 C534 50E3예요(“Critto Packages packages@critto.app”).

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

컨테이너에는 특별한 권한이 필요하지 않아요. 데이터는 critto-data 볼륨에, 금고의 마스터 키는 critto-keys에 저장돼요(데이터와 분리되어 있어 둘 중 하나만으로는 다른 쪽을 열 수 없어요. 백업을 참조하세요). AI 앱은 critto-ai에 저장돼요. /etc/critto/vault.key에 연결한 Docker secret을 사용해도 돼요. docker pull ghcr.io/nexferra-ltd/critto-server:latest로 업데이트한 다음 같은 볼륨을 사용해 컨테이너를 다시 만드세요.

정적 빌드 사용하기

모든 릴리스에는 모든 Linux에서 실행되는 단일 파일 빌드도 있어요. https://downloads.critto.app/releases/<version>/critto-server-<version>-linux-x86_64.tar.gz (또는 -aarch64) 파일의 압축을 풀고 ./crittod serve를 실행하세요. 직접 계속 실행 상태를 유지하고 업데이트해야 하므로 패키지를 사용하는 편이 더 쉬워요.


2. 앱 페어링

서버는 페어링한 기기만 허용해요. 기기를 페어링하려면:

  1. 서버에서 코드를 받으세요(10분 동안 유효하며 한 번만 사용할 수 있어요).

    sudo crittod pair
    
  2. Critto 앱 로그인 화면에서 내 Critto 서버 사용을 선택하세요. 서버 주소와 코드를 입력하세요.

    • 서버 자체에서는 http://127.0.0.1:8787
    • 다른 기기에서는 접속 가능한 주소가 필요해요. 다른 기기에서 접속하기를 참조하세요.

한 기기를 페어링하면 그 기기에서 다른 기기도 페어링할 수 있어요. 설정 → 기기 → 휴대폰 페어링을 누르면 QR 코드가 표시돼요. QR 코드에는 서버가 수신 대기하는 주소가 담겨 있어요. 터널, 프록시, 도메인 등 다른 방법으로 기기가 접속한다면 해당 주소를 CRITTO_PUBLIC_URL에 설정하세요(설정 참조).

같은 컴퓨터에서 데스크톱 앱을 사용하나요? 데스크톱 앱은 보통 자체 Critto 서버를 비공개로 시작해요. 여기에 서버를 설치했다면 http://127.0.0.1:8787로 내 Critto 서버 사용을 선택하세요. 두 앱이 같은 크리토를 사용하게 돼요.


3. AI 연결

크리토는 내가 고른 AI를 사용해요. AI를 연결하는 방법은 두 가지예요.

AI 구독(ChatGPT, Claude, Grok…)

Critto는 공식 명령줄 앱을 통해 AI에 연결해요. 서버에 한 번 설치하면 돼요.

sudo crittod setup ai

사용하는 앱을 고르거나 이름을 직접 지정하세요. sudo crittod setup ai codex claude.

앱 함께 사용할 플랜
codex ChatGPT 플랜(Plus, Pro, Business…)
claude Claude 플랜(Pro, Max…)
grok SuperGrok / X Premium
muse Meta AI(Node.js 20+ 필요, 설치 프로그램이 가능하면 추가해요)
antigravity Google Antigravity. 먼저 표시되는 경고를 읽으세요. Google 약관은 다른 소프트웨어가 Antigravity 로그인 정보를 사용하는 것을 허용하지 않으며, Google은 이로 인해 계정을 정지한 적이 있어요.

앱은 /opt/critto-ai에 설치되며 자동으로 업데이트되지 않아요. 가끔 sudo crittod setup ai --update를 실행해 업데이트하세요.

그런 다음 Critto 앱에서 연결을 열고 각 AI에 로그인하세요. 로그인 정보는 앱이 아니라 서버에 저장돼요.

커스텀 AI: 로컬 모델과 API 키

설정 → 고급 모드를 켠 다음 설정 → 커스텀 AI → 연결 추가로 이동하세요. “OpenAI 호환” API를 지원하는 서비스는 무엇이든 사용할 수 있어요. 시작 항목에서 프리셋을 고르거나 주소를 직접 입력하세요.

서비스 기본 URL API 키
서버의 Ollama http://localhost:11434/v1 없음
서버의 LM Studio http://localhost:1234/v1 없음
집의 다른 컴퓨터에서 실행하는 Ollama http://192.168.1.20:11434/v1 없음
OpenRouter https://openrouter.ai/api/v1 내 OpenRouter 키

연결 테스트를 누르고 모델을 선택해 저장하세요. 이제 모든 크리토에서 해당 AI를 선택할 수 있어요.

다른 컴퓨터에서 Ollama를 실행한다면 네트워크 연결을 허용하도록 OLLAMA_HOST=0.0.0.0으로 시작하세요. “localhost”는 항상 Critto 서버가 실행되는 컴퓨터를 뜻해요.


4. 아지트(선택 사항)

아지트는 크리토가 더 큰 작업(만들기, 웹 탐색, 앱 사용)을 하는 클라우드 컴퓨터예요. 직접 호스팅 서버는 내 Boat 계정에 아지트를 실행해요. 앱의 연결에 Boat API 키를 붙여 넣거나 설정 파일에 BOAT_API_KEY를 입력하고 서버를 다시 시작하세요.

알아 두면 좋아요.

  • 아지트가 작동하는 데 서버가 인터넷에서 접속 가능할 필요는 없어요. 서버가 아지트에 연결하며, 반대 방향은 아니에요.
  • 아지트 작업에는 인터넷에서 접속할 수 있는 AI 주소가 필요해요(구독 서비스 또는 OpenRouter 같은 서비스). 내 네트워크에서 실행하는 AI(Ollama, LM Studio)는 대화할 수 있지만 클라우드의 아지트에서 접속할 수 없어요.
  • 아지트 사용 시간은 내 Boat 계정으로 청구돼요.

내 컴퓨터에서 직접 실행하는 아지트

Boat 계정이 없나요? 서버에서 사용자별 아지트를 이 컴퓨터의 작은 가상 머신으로 실행할 수도 있어요(실행 중인 아지트마다 /dev/kvm, 약 4GB 메모리, 최초 1회 이미지 빌드가 필요해요). NixOS에서는:

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

그 외 시스템에서는 /etc/critto/critto.env에 CRITTO_DEN_BACKEND=local을 설정하세요. 요구 사항, 크기, 아지트가 접속할 수 있는 대상, 이미지 빌드 방법은 전체 안내인 내 컴퓨터에서 직접 실행하는 아지트에 있어요.


5. 다른 기기에서 접속하기

기본 설정에서는 서버가 자기 컴퓨터(127.0.0.1:8787)에서만 연결을 기다려요. 안전한 기본 설정이에요. 어디서든 휴대폰이나 노트북을 사용하려면 다음 방법 중 하나를 고르세요. 처음 두 방법은 공유기 포트를 열지 않고 보안 https:// 주소를 제공해요.

Tailscale(개인용으로 가장 간편)

서버와 기기에 Tailscale을 설치하고 같은 계정으로 로그인한 다음 서버에서 실행하세요.

sudo tailscale serve --bg 8787

https://myserver.tail1234.ts.net 같은 주소가 표시돼요. 앱에 이 주소를 입력하세요. 내 기기만 접속할 수 있어요.

Cloudflare Tunnel(내 도메인의 공개 주소)

Cloudflare에 도메인이 있다면 cloudflared를 설치한 다음 실행하세요.

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

이제 서버는 https://critto.example.com에서 접속할 수 있어요. 기기마다 페어링 코드는 여전히 필요해요.

이미 운영 중인 리버스 프록시

WebSocket을 허용하고 http://127.0.0.1:8787을 가리키도록 설정하세요. HTTPS를 자체 처리하는 Caddy를 사용하는 경우:

critto.example.com {
    reverse_proxy 127.0.0.1:8787
}

홈 네트워크에서만 접속

모든 기기가 집에 있다면 서버가 네트워크에서 직접 연결을 기다리도록 설정할 수 있어요. CRITTO_LISTEN=0.0.0.0:8787을 설정하고(설정 참조) 앱에서 http://<server's IP address>:8787을 사용하세요. 일반 http 연결이므로 신뢰할 수 있는 네트워크에서만 사용하세요.

어떤 방법을 고르든 페어링 QR 코드에 해당 주소가 들어가도록 CRITTO_PUBLIC_URL을 그 주소로 설정하세요.


6. 업데이트

서버는 시스템의 나머지 부분과 함께 업데이트돼요.

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

업데이트 후 서비스는 자동으로 다시 시작돼요. 데스크톱 및 휴대폰 앱은 별도로 업데이트돼요.


7. 백업

크리토, 기억, 대화, 파일, AI 로그인 정보는 모두 /var/lib/critto에 있어요. 설정은 /etc/critto/critto.env에 있어요.

직접 복사하기. 일관된 사본을 만들려면 서버를 중지하세요.

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

서버가 실행 중일 때 데이터베이스의 최신 사본을 /var/lib/critto/backups/latest.db에 보관해요.

외부 저장소 백업(S3, Cloudflare R2, Backblaze B2…). 앱에서 고급 모드를 켠 다음 **설정 → 백업 → 대상 변경…**을 선택하세요. 백업 키를 추가해 서버 밖으로 보내기 전에 암호화하세요.

sudo crittod backup keygen

CRITTO_BACKUP_KEY=… 줄을 /etc/critto/critto.env에 복사하고, 안전한 오프라인 장소에도 따로 보관한 다음(키가 없으면 백업을 복원할 수 없어요) 서버를 다시 시작하세요: sudo systemctl restart critto.

외부 백업은 계속 진행돼요.

  • 데이터베이스 변경 사항은 10초마다 업로드돼요.
  • 사용자 파일은 10분마다 업로드돼요.
  • 전체 사본은 매일 업로드돼요.

지난 7일 중 어느 시점이든 저장소에서 바로 복원할 수 있어요.

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은 UTC예요. 최신 상태로 복원하려면 생략하세요. 복원된 users/ 폴더도 같은 위치에 있어요.)

다운로드한 백업 파일 하나(일일 스냅샷)만 복원하려면 critto 사용자가 읽을 수 있는 위치(예: /var/lib/critto)에 둔 다음:

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

금고 키. 저장한 키와 비밀번호는 /etc/critto/vault.key의 마스터 키로 암호화돼요(설치 시 생성되며 critto 사용자만 읽을 수 있어요. Docker에서는 critto-keys 볼륨, NixOS에서는 기본값 /var/lib/critto-keys/vault.key인 services.critto.vaultKeyFile을 사용해요. 항상 데이터와 분리해 보관하세요). 이 키는 백업에 포함되지 않아요. 키로 잠금 해제하는 계정별 키 목록(/var/lib/critto/vault/keys.db)은 vault/ 아래에 별도로 암호화해 백업하며 30일 동안 보관해요. 복구 키를 설정한 경우에만 이 백업이 만들어져요.

sudo crittod vault recovery-keygen

출력된 CRITTO_VAULT_BACKUP_RECIPIENT=… 줄을 /etc/critto/critto.env에 넣고 서버를 다시 시작하세요. 출력된 복구 ID와 /etc/critto/vault.key 사본을 모두 비밀번호 관리자 등 오프라인 장소에 보관하세요. 서버에는 두지 마세요. 서버를 잃어버린 뒤 복원하려면 vault.key를 되돌려 놓고 vault/latest.db.age를 다운로드한 다음:

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

설정

서버는 /etc/critto/critto.env를 읽어요. 모든 옵션에 설명이 있어요. sudo nano /etc/critto/critto.env로 편집한 다음 sudo systemctl restart critto를 실행하세요. 자주 쓰는 설정:

설정 기능
CRITTO_LISTEN 서버가 연결을 기다릴 주소. 기본값 127.0.0.1:8787(이 컴퓨터에서만 접속)
CRITTO_PUBLIC_URL 기기에서 사용할 주소(예: https://critto.example.com)
BOAT_API_KEY 아지트에 사용할 Boat 키
CRITTO_BACKUP_KEY 외부 백업 암호화
CRITTO_ANTIGRAVITY=0 Antigravity 숨기기
CRITTO_PROACTIVE=0 크리토가 먼저 안부를 묻지 않아요(예약한 작업은 대기해요). Critto Smarts를 쓰지 않으면 안부 확인은 각 크리토의 AI를 사용해요.
CRITTO_JOB_WORKERS 동시에 실행할 백그라운드 작업(안부 확인, 예약 작업)의 수. 기본값은 4예요.

유용한 명령:

명령
sudo crittod pair 새 기기의 페어링 코드 발급
sudo crittod setup ai AI 앱 설치 또는 업데이트
sudo crittod users 이 서버의 계정 목록
systemctl status critto 실행 상태 확인
journalctl -u critto -f 로그 확인
curl http://127.0.0.1:8787/health 간단한 상태 확인

아지트가 처음 데스크톱 소프트웨어를 필요로 할 때까지 /health에는 "desktop": "on-demand"가 표시돼요. 정상이니 걱정하지 마세요. 그때 서버가 소프트웨어를 다운로드해요.


제거

  • Debian / Ubuntu: sudo apt purge critto-server
  • Fedora / RHEL: sudo dnf remove critto-server
  • Docker: docker rm -f critto(데이터도 삭제하려면 docker volume rm critto-data critto-keys critto-ai 추가)

서버가 중지되고 패키지가 제거돼요. 다른 Critto 패키지가 남아 있지 않으면 저장소도 제거돼요. 나중에 다시 사용할 수 있도록 /var/lib/critto의 데이터는 보관돼요. 모두 삭제하려면:

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

설치할 때 패키지가 저장소를 추가하지 않게 하려면 설치 전에 echo CRITTO_REPO=no | sudo tee /etc/default/critto를 실행하세요.


문제 해결

  • 앱에서 서버에 접속할 수 없다고 해요. 서버에서 systemctl status critto를 확인하고, 앱에 입력한 주소에 기기가 접속할 수 있는지 확인하세요(휴대폰에서 127.0.0.1은 휴대폰 자신을 가리켜요).
  • “페어링 코드가 작동하지 않아요.” 코드는 10분 동안 유효하며 한 번만 사용할 수 있어요. sudo crittod pair로 새 코드를 만드세요. sudo로 실행해야 해요. 그렇지 않으면 다른 개인 서버용 코드가 발급돼요.
  • 연결에 AI 앱이 표시되지 않아요. sudo crittod setup ai <name>을 다시 실행하세요. 완료되면 서버가 다시 시작돼요.
  • 다른 문제예요. journalctl -u critto -n 100에서 대개 원인을 확인할 수 있어요.