Critto 通常运行在你的 Critto 账号中。如果你更想把所有内容留在自己的电脑上,也可以自行运行 Critto 服务器:你的 critto、它们的记忆和聊天都会保存在那台电脑上,Critto 桌面和手机应用会连接到这台电脑。
本指南适用于 Linux。你需要:
- 一台保持开机的 64 位 Linux 电脑(Intel/AMD 或 ARM,例如 Raspberry Pi 4/5),可以是家用服务器、迷你电脑或小型云服务器;
- 大约 1 GB 可用内存和几 GB 磁盘空间;
- 管理员权限(
sudo)。
NixOS 可使用带 NixOS 模块的 flake。Debian、Ubuntu、Fedora、RHEL 系统和 openSUSE 可安装正规软件包并自动更新。其他系统可以使用容器镜像或静态构建版。
NixOS
将 Critto 的 flake 添加到系统 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 问题)。要使用 beta 通道,请设置services.critto.package = critto.packages.${system}.crittod-beta;。 - **密钥:**将
BOAT_API_KEY=…和CRITTO_BACKUP_KEY=…放入environmentFile(由 root 所有,权限模式为 600;也支持 agenix 和 sops-nix)。服务启动时会读取它,不会复制到 Nix store。 - 设置:
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;也可以使用services.cloudflared,并将入口规则指向http://127.0.0.1:8787(见第 5 步)。 - 服务通过 systemd 沙盒运行,但仍允许使用用户命名空间(bubblewrap 和本地小窝需要它们),因此不要设置
security.allowUserNamespaces = false。
本指南其余部分也适用于 NixOS,唯一不同的是更新时使用 nix flake update,而不是 apt 或 dnf。
1. 安装
在服务器上打开终端并运行:
curl -fsSL https://downloads.critto.app/install-server.sh | sh
这会添加 Critto 软件包仓库、安装 critto-server 软件包、启动服务器并显示配对码。就这么简单:接着看配对应用。
想比其他人更早用到新版本?请使用 beta 通道:
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 卷中。也可以将 Docker secret 挂载到 /etc/critto/vault.key。运行 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. 配对应用
服务器只允许已配对的设备连接。配对步骤如下:
在服务器上获取配对码(有效期为 10 分钟,且只能使用一次):
sudo crittod pair在 Critto 应用的登录界面中,选择使用我自己的 Critto 服务器。输入服务器地址和配对码。
- 在服务器本机上:
http://127.0.0.1:8787 - 其他设备需要能访问的地址;请见让其他设备访问。
- 在服务器本机上:
配对一台设备后,你可以从那台设备继续配对其他设备:“设置 → 设备 → 配对手机”会显示二维码。二维码中包含服务器监听的地址;如果你的设备通过其他方式(隧道、代理、域名)访问服务器,请将 CRITTO_PUBLIC_URL 设置为该地址(见设置)。
桌面应用和服务器在同一台电脑上?桌面应用通常会自行启动一个私有 Critto 服务器。如果你已经在这台电脑上安装了服务器,请改为选择使用我自己的 Critto 服务器,并填写
http://127.0.0.1:8787,这样两边就会使用同一批 critto。
3. 连接你的 AI
critto 会使用你选择的 AI 来思考。连接 AI 有两种方式。
你的 AI 订阅(ChatGPT、Claude、Grok……)
Critto 通过这些服务的官方命令行应用与它们通信。你只需在服务器上安装一次:
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:本地模型和 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 密钥 |
使用“测试连接”,选择模型并保存。之后就能为任何 critto 选择这个 AI。
如果 Ollama 安装在另一台电脑上,请用 OLLAMA_HOST=0.0.0.0 启动它,让它接受来自网络的连接。“localhost”始终指 Critto 服务器所在的电脑。
4. 小窝(可选)
小窝是 critto 在云端使用的专属电脑,可用于处理更大的任务(创建内容、浏览网页、使用应用)。自托管服务器会在你自己的Boat账号中运行小窝。请在应用中的“连接”下粘贴 Boat API 密钥,或将它放进设置文件 BOAT_API_KEY,然后重启。
请留意:
- 服务器无需能从互联网访问,小窝也能正常工作。服务器会连接到小窝,而不是反过来。
- 小窝需要连接到具有公网地址的 AI(你的订阅或 OpenRouter 之类的服务)。运行在你自己网络中的 AI(Ollama、LM Studio)可以聊天,但云端的小窝无法连接它。
- Boat 会从你的账号中收取小窝使用时长费用。
在自己的电脑上运行自己的小窝
没有 Boat 账号?服务器也可以在这台电脑上为每个人运行小型虚拟机作为小窝(需要 /dev/kvm、运行时每个小窝约需 4 GB 内存,还需一次性构建镜像)。在 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 访问。每台设备仍然需要配对码。
使用你已经运行的反向代理
将它指向 http://127.0.0.1:8787,并允许 WebSocket 连接。使用会自动处理 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,因此只应在可信网络中使用。
无论选择哪种方式,都请将 CRITTO_PUBLIC_URL 设置为该地址,这样配对二维码才会指向正确位置。
6. 更新
服务器会随系统的其他软件一起更新:
- Debian / Ubuntu:
sudo apt update && sudo apt upgrade - Fedora / RHEL:
sudo dnf upgrade - openSUSE:
sudo zypper update
更新后服务会自行重启。桌面和手机应用需要单独更新。
7. 备份
所有内容都保存在 /var/lib/critto:你的 critto、记忆、聊天、文件和 AI 登录信息。设置保存在 /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 中默认为 services.critto.vaultKeyFile 指向 /var/lib/critto-keys/vault.key;它始终存放在数据目录之外)。主密钥不会包含在备份中。它解锁的各账号密钥清单(/var/lib/critto/vault/keys.db)会在 vault/ 目录中单独加密备份,并保留 30 天;但只有设置恢复密钥后才会备份:
sudo crittod vault recovery-keygen
将 CRITTO_VAULT_BACKUP_RECIPIENT=… 这一行放入 /etc/critto/critto.env,然后重启。将显示的恢复身份信息和 /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 不会主动向你问候(已安排的任务会等待)。如果没有使用 Critto Smarts,定时问候会使用 critto 自己的 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找到原因。