Normalerweise nutzt du Critto über dein Critto-Konto. Wenn du alles lieber auf einem Computer behalten möchtest, der dir gehört, kannst du den Critto-Server selbst betreiben: Deine Crittos, ihre Erinnerungen und deine Chats bleiben auf diesem Computer. Die Critto-Desktop- und Handy-Apps verbinden sich mit ihm.
Diese Anleitung ist für Linux. Du brauchst:
- einen dauerhaft eingeschalteten 64-Bit-Linux-Computer (Intel/AMD oder ARM, z. B. Raspberry Pi 4/5), etwa einen Heimserver, Mini-PC oder kleinen Cloud-Server,
- etwa 1 GB freien Arbeitsspeicher und ein paar GB Speicherplatz,
- Administratorrechte (
sudo).
Für NixOS gibt es ein Flake mit einem NixOS-Modul. Debian, Ubuntu, Fedora, RHEL-artige Systeme und openSUSE erhalten passende Pakete mit automatischen Aktualisierungen. Andere Systeme können das Container-Image oder den statischen Build verwenden.
NixOS
Füge Critto als Flake zu deinem System-Flake hinzu:
{
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";
};
})
];
};
};
}
Führe danach sudo nixos-rebuild switch --flake .#myserver aus und kopple deine Apps mit sudo crittod pair (Schritt 2).
- Aktualisierungen:
nix flake update crittoausführen und neu erstellen. Das Paket ist die signierte, vorgefertigte Version (eine statische Binärdatei, daher keine glibc-Probleme). Für den Beta-Kanal verwendeservices.critto.package = critto.packages.${system}.crittod-beta;. - Geheimnisse: Lege
BOAT_API_KEY=…undCRITTO_BACKUP_KEY=…in derenvironmentFileab (Eigentümer root, Modus 600; agenix und sops-nix funktionieren ebenfalls). Die Datei wird beim Start eingelesen und nie in den Store kopiert. - Einstellungen:
listen(Standard127.0.0.1:8787),publicUrl,webHost,openFirewall(standardmäßig aus),dataDir(Standard/var/lib/critto) undsettingsfür alle anderenCRITTO_*-Variablen.den.backendlegt fest, wo die Höhle läuft (boat,localodernone; siehe die Höhle). - KI-Apps: Bevorzuge Pakete aus nixpkgs in
aiPackages(zum Beispielpkgs.codex,pkgs.claude-code, wofürallowUnfreenötig ist). Für Apps, die es dort nicht gibt, setzeprograms.nix-ld.enable = true;und verwendesudo crittod setup ai(Schritt 3). Für Pi genügtpkgs.nodejs_22inaiPackages; führe dannsudo crittod setup ai piaus. - Fernzugriff: Aktiviere
services.tailscale.enable = true;und führe dannsudo tailscale serve --bg 8787aus. Oder verwendeservices.cloudflaredmit einer Ingress-Regel fürhttp://127.0.0.1:8787(siehe Schritt 5). - Der Dienst läuft in einer systemd-Sandbox, lässt aber User-Namespaces verfügbar (bubblewrap und die lokale Höhle benötigen sie). Setze daher nicht
security.allowUserNamespaces = false.
Der Rest der Anleitung gilt auch für NixOS; Aktualisierungen kommen dort von nix flake update statt apt oder dnf.
1. Installieren
Öffne auf dem Server ein Terminal und führe Folgendes aus:
curl -fsSL https://downloads.critto.app/install-server.sh | sh
Dadurch wird Crittos Paketquelle hinzugefügt, das Paket critto-server installiert, der Server gestartet und ein Kopplungscode ausgegeben. Das war's: Weiter zu Apps koppeln.
Möchtest du neue Versionen früher als alle anderen? Nutze den Beta-Kanal:
curl -fsSL https://downloads.critto.app/install-server.sh | CRITTO_CHANNEL=beta sh
Installationsskript zuerst prüfen (optional)
Das Skript ist mit Crittos Veröffentlichungsschlüssel signiert. So prüfst du es vor der Ausführung:
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 ist in den Paketen der meisten Distributionen enthalten.) Eine einfache Prüfsumme gibt es unter install-server.sh.sha256. Auch die Pakete selbst sind signiert; dein Paketmanager prüft sie bei jeder Installation und Aktualisierung.
Oder richte die Paketquelle selbst ein
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
Fingerabdruck des Schlüssels: C78E FB7F 67CC 8184 1F70 EE3D D121 DC94 C534 50E3 („Critto Packages packages@critto.app“).
Oder Docker / Podman verwenden
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
Der Container braucht keine besonderen Berechtigungen. Deine Daten liegen im Volume critto-data, der Hauptschlüssel des Tresors in critto-keys (getrennt von den Daten, damit eine Kopie allein keinen Zugriff ermöglicht; siehe Sicherungskopien) und die KI-Apps in critto-ai. Ein Docker Secret unter /etc/critto/vault.key funktioniert ebenfalls. Aktualisiere mit docker pull ghcr.io/nexferra-ltd/critto-server:latest und erstelle den Container anschließend mit denselben Volumes neu.
Oder den statischen Build verwenden
Jede Veröffentlichung enthält auch einen einzelnen Build für jedes Linux: https://downloads.critto.app/releases/<version>/critto-server-<version>-linux-x86_64.tar.gz (oder -aarch64). Entpacke ihn und führe ./crittod serve aus. Du musst ihn selbst am Laufen und auf dem neuesten Stand halten; Pakete sind daher einfacher.
2. Apps koppeln
Der Server lässt nur Geräte zu, die du gekoppelt hast. So koppelst du ein Gerät:
Rufe auf dem Server einen Code ab (er gilt 10 Minuten und kann einmal verwendet werden):
sudo crittod pairWähle in der Critto-App auf dem Anmeldebildschirm Meinen eigenen Critto-Server verwenden. Gib Serveradresse und Code ein.
- Auf dem Server selbst:
http://127.0.0.1:8787 - Für andere Geräte brauchst du eine erreichbare Adresse; siehe Von anderen Geräten darauf zugreifen.
- Auf dem Server selbst:
Sobald ein Gerät gekoppelt ist, kannst du von dort weitere koppeln: Einstellungen → Geräte → Handy koppeln zeigt einen QR-Code mit der Serveradresse. Wenn deine Geräte den Server anders erreichen (Tunnel, Proxy, Domain), setze CRITTO_PUBLIC_URL auf diese Adresse (siehe Einstellungen).
Desktop-App auf demselben Computer? Normalerweise startet die Desktop-App einen eigenen privaten Critto-Server. Wenn du den Server hier installiert hast, wähle stattdessen Meinen eigenen Critto-Server verwenden mit
http://127.0.0.1:8787, damit beide dieselben Crittos verwenden.
3. Deine KIs verbinden
Crittos denken mit einer KI deiner Wahl. Du kannst sie auf zwei Arten einbinden.
Deine KI-Abos (ChatGPT, Claude, Grok…)
Critto verbindet sich über die offiziellen Kommandozeilen-Apps der Anbieter mit diesen KIs. Installiere sie einmal auf dem Server:
sudo crittod setup ai
Wähle die Apps, die du verwendest, oder gib ihre Namen direkt an: sudo crittod setup ai codex claude.
| App | Abo |
|---|---|
codex |
ChatGPT-Plan (Plus, Pro, Business…) |
claude |
Claude-Plan (Pro, Max…) |
grok |
SuperGrok / X Premium |
muse |
Meta AI (benötigt Node.js 20+; wenn möglich, fügt das Installationsprogramm es hinzu) |
antigravity |
Google Antigravity. Lies zuerst den Warnhinweis: Laut Googles Bedingungen sollte andere Software keine Antigravity-Anmeldung nutzen; Google hat dafür bereits Konten gesperrt. |
Die Apps werden in /opt/critto-ai installiert und aktualisieren sich nicht selbst. Führe gelegentlich sudo crittod setup ai --update aus.
Öffne in der Critto-App „Verbindungen“ und melde dich bei jeder App an. Die Anmeldungen werden auf dem Server gespeichert, nicht in der App.
Eigene KI: lokale Modelle und API-Schlüssel
Aktiviere Einstellungen → Erweiterten Modus und öffne dann Einstellungen → Eigene KI → Verbindung hinzufügen. Alles, was die „OpenAI-kompatible“ API unterstützt, funktioniert. Wähle unter Ausgangspunkt eine Vorlage oder gib die Adresse selbst ein:
| Dienst | Basis-URL | API-Schlüssel |
|---|---|---|
| Ollama auf dem Server | http://localhost:11434/v1 |
keiner |
| LM Studio auf dem Server | http://localhost:1234/v1 |
keiner |
| Ollama auf einem anderen Computer zu Hause | http://192.168.1.20:11434/v1 |
keiner |
| OpenRouter | https://openrouter.ai/api/v1 |
dein OpenRouter-Schlüssel |
Wähle Verbindung testen, dann ein Modell und speichere. Danach kannst du diese KI für jedes Critto auswählen.
Damit Ollama auf einem anderen Computer Verbindungen aus deinem Netzwerk annimmt, starte es mit OLLAMA_HOST=0.0.0.0. „localhost“ bezeichnet immer den Computer des Critto-Servers.
4. Die Höhle (optional)
Die Höhle ist der eigene Computer deiner Crittos in der Cloud für größere Aufgaben (Dinge bauen, im Web stöbern, Apps nutzen). Ein selbst gehosteter Server betreibt Dens in deinem eigenen Boat-Konto. Füge deinen Boat-API-Schlüssel in der App unter *Verbindungen ein oder trage ihn als BOAT_API_KEY in die Einstellungsdatei ein und starte den Server neu.
Gut zu wissen:
- Dein Server muss nicht aus dem Internet erreichbar sein, damit die Höhle funktioniert. Er verbindet sich mit der Höhle, nicht umgekehrt.
- Für Arbeit in der Höhle brauchst du eine KI mit öffentlicher Internetadresse (dein Abo oder einen Dienst wie OpenRouter). Eine KI in deinem eigenen Netzwerk (Ollama, LM Studio) kann chatten, aber die Cloud-Höhle kann sie nicht erreichen.
- Die Zeit in der Höhle wird von Boat über dein Konto abgerechnet.
Deine eigene Höhle auf deinem eigenen Computer
Kein Boat-Konto? Der Server kann die Höhle jeder Person stattdessen als kleine virtuelle Maschine auf diesem Computer ausführen (benötigt /dev/kvm, während des Betriebs etwa 4 GB Arbeitsspeicher je Höhle und ein einmalig erstelltes Image). Unter NixOS:
services.critto.den.backend = "local";
Auf anderen Systemen: CRITTO_DEN_BACKEND=local in /etc/critto/critto.env. Die vollständige Anleitung (Voraussetzungen, Größen, erreichbare Ziele der Höhle, Image-Erstellung) steht unter Deine eigene Höhle auf deinem eigenen Computer.
5. Von anderen Geräten darauf zugreifen
Standardmäßig nimmt der Server nur Verbindungen auf seinem eigenen Computer an (127.0.0.1:8787). Das ist die sichere Voreinstellung. Um dein Handy oder deinen Laptop von überall zu nutzen, wähle eine Möglichkeit. Die ersten beiden liefern eine sichere https://-Adresse, ohne Ports am Router zu öffnen.
Tailscale (am einfachsten für den persönlichen Gebrauch)
Installiere Tailscale auf dem Server und deinen Geräten, melde dich überall mit demselben Konto an und führe dann auf dem Server Folgendes aus:
sudo tailscale serve --bg 8787
Das Programm gibt eine Adresse wie https://myserver.tail1234.ts.net aus. Verwende sie in den Apps. Nur deine eigenen Geräte können darauf zugreifen.
Cloudflare Tunnel (öffentliche Adresse unter deiner eigenen Domain)
Richte eine Domain bei Cloudflare ein und installiere cloudflared. Führe dann Folgendes aus:
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
Dein Server ist dann unter https://critto.example.com erreichbar. Jedes Gerät braucht weiterhin einen Kopplungscode.
Einen bereits laufenden Reverse-Proxy verwenden
Leite ihn mit aktivierten WebSockets an http://127.0.0.1:8787 weiter. Mit Caddy, das HTTPS selbst verwaltet, sieht das so aus:
critto.example.com {
reverse_proxy 127.0.0.1:8787
}
Nur im Heimnetzwerk
Wenn alle Geräte zu Hause sind, kannst du den Server direkt auf deinem Netzwerk erreichbar machen. Setze CRITTO_LISTEN=0.0.0.0:8787 (siehe Einstellungen) und verwende in den Apps http://<server's IP address>:8787. Das ist unverschlüsseltes HTTP; nutze es nur in einem Netzwerk, dem du vertraust.
Egal, wofür du dich entscheidest: Setze CRITTO_PUBLIC_URL auf diese Adresse, damit die Kopplungs-QR-Codes darauf verweisen.
6. Aktualisierungen
Der Server wird zusammen mit dem Rest deines Systems aktualisiert:
- Debian / Ubuntu:
sudo apt update && sudo apt upgrade - Fedora / RHEL:
sudo dnf upgrade - openSUSE:
sudo zypper update
Nach einer Aktualisierung startet sich der Dienst selbst neu. Desktop- und Handy-Apps werden separat aktualisiert.
7. Sicherungskopien
Alles liegt in /var/lib/critto: deine Crittos, Erinnerungen, Chats, Dateien und KI-Anmeldungen. Einstellungen stehen in /etc/critto/critto.env.
*Selbst kopieren. Halte den Server an, damit die Kopie konsistent ist:
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
Während des Betriebs bewahrt der Server außerdem eine aktuelle Datenbankkopie unter /var/lib/critto/backups/latest.db auf.
*Externe Sicherungskopien (S3, Cloudflare R2, Backblaze B2…). Aktiviere in der App den *Erweiterten Modus und gehe dann zu Einstellungen → Sicherungskopien → Ziel ändern…. Verschlüssele sie vor dem Versand vom Server, indem du einen Sicherungsschlüssel hinzufügst:
sudo crittod backup keygen
Kopiere die Zeile CRITTO_BACKUP_KEY=… in /etc/critto/critto.env, bewahre eine Kopie sicher und offline auf (ohne sie lassen sich Sicherungskopien nicht wiederherstellen) und starte neu: sudo systemctl restart critto.
Externe Sicherungskopien werden fortlaufend erstellt:
- Änderungen an der Datenbank werden alle 10 Sekunden hochgeladen;
- Dateien werden alle 10 Minuten hochgeladen;
- täglich wird eine vollständige Kopie hochgeladen.
Du kannst jeden Zeitpunkt der letzten 7 Tage direkt aus dem Speicher wiederherstellen:
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 ist UTC; lass die Option weg, um den neuesten Stand wiederherzustellen. Der wiederhergestellte Ordner users/ bleibt am selben Ort.)
Um stattdessen eine einzelne heruntergeladene Sicherungsdatei (einen täglichen Snapshot) wiederherzustellen, lege sie an einen Ort, den der Benutzer critto lesen kann (z. B. /var/lib/critto) und führe dann Folgendes aus:
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
*Die Tresorschlüssel. Gespeicherte Schlüssel und Passwörter werden mit einem Hauptschlüssel in
/etc/critto/vault.key verschlüsselt (bei der Installation erstellt, nur für den Benutzer
critto lesbar; in Docker im Volume critto-keys, unter NixOS standardmäßig in
services.critto.vaultKeyFile unter /var/lib/critto-keys/vault.key: immer außerhalb der Daten).
Er wird nie in einer Sicherungskopie gespeichert. Die Liste der damit entsperrten
Kontoschlüssel (/var/lib/critto/vault/keys.db) erhält eine eigene verschlüsselte
Sicherungskopie neben den anderen unter vault/, die 30 Tage aufbewahrt wird – aber nur,
wenn du einen Wiederherstellungsschlüssel angibst:
sudo crittod vault recovery-keygen
Trage die Zeile CRITTO_VAULT_BACKUP_RECIPIENT=… in /etc/critto/critto.env ein
und starte den Server neu. Bewahre die ausgegebene Wiederherstellungsidentität und
eine Kopie von /etc/critto/vault.key offline in deinem Passwortmanager auf, niemals
auf dem Server. Wenn du den Server verlierst, lege vault.key zurück, lade
vault/latest.db.age herunter und führe dann Folgendes aus:
sudo -u critto crittod vault restore --identity /path/to/recovery.txt /path/to/latest.db.age
Einstellungen
Der Server liest /etc/critto/critto.env. Dort sind alle Optionen erklärt. Bearbeite die Datei mit sudo nano /etc/critto/critto.env und führe dann sudo systemctl restart critto aus. Häufige Einstellungen:
| Einstellung | Wirkung |
|---|---|
CRITTO_LISTEN |
Wo der Server Verbindungen annimmt. Standard 127.0.0.1:8787 (nur dieser Computer). |
CRITTO_PUBLIC_URL |
Adresse für deine Geräte, z. B. https://critto.example.com. |
BOAT_API_KEY |
Dein Boat-Schlüssel für die Höhle. |
CRITTO_BACKUP_KEY |
Verschlüsselt externe Sicherungskopien. |
CRITTO_ANTIGRAVITY=0 |
Blendet Antigravity aus. |
CRITTO_PROACTIVE=0 |
Crittos melden sich nicht von selbst (geplante Aktivitäten warten). Ohne Critto Smarts verwenden sie für Rückmeldungen ihre eigene KI. |
CRITTO_JOB_WORKERS |
Anzahl gleichzeitig ausgeführter Hintergrundaufgaben (Rückmeldungen, geplante Aktivitäten). Standard: 4. |
Nützliche Befehle:
| Befehl | |
|---|---|
sudo crittod pair |
Kopplungscode für ein neues Gerät |
sudo crittod setup ai |
KI-Apps installieren oder aktualisieren |
sudo crittod users |
Konten auf diesem Server anzeigen |
systemctl status critto |
Läuft der Dienst? |
journalctl -u critto -f |
Protokoll des Dienstes |
curl http://127.0.0.1:8787/health |
Kurze Statusprüfung |
/health zeigt "desktop": "on-demand" an, bis eine Höhle erstmals Desktop-Software benötigt. Das ist normal: Der Server lädt sie dann herunter.
Deinstallieren
- Debian / Ubuntu:
sudo apt purge critto-server - Fedora / RHEL:
sudo dnf remove critto-server - Docker:
docker rm -f critto(fügedocker volume rm critto-data critto-keys critto-aihinzu, um auch die Daten zu löschen)
Dadurch wird der Server angehalten und das Paket sowie – sofern kein anderes Critto-Paket übrig ist – die Paketquelle entfernt. Deine Daten unter /var/lib/critto bleiben erhalten, falls du zurückkommst. So löschst du alles:
sudo rm -rf /var/lib/critto /etc/critto /opt/critto-ai
sudo userdel critto
Damit die Pakete die Paketquelle gar nicht erst hinzufügen, führe vor der Installation echo CRITTO_REPO=no | sudo tee /etc/default/critto aus.
Fehlerbehebung
- Die App sagt, dass sie den Server nicht erreicht. Prüfe auf dem Server
systemctl status crittound ob die Adresse in der App von diesem Gerät erreichbar ist (auf einem Handy bezeichnet127.0.0.1das Handy selbst). - „Der Kopplungscode hat nicht funktioniert.“ Codes gelten 10 Minuten und können einmal verwendet werden. Erstelle mit
sudo crittod paireinen neuen. Führe den Befehl mitsudoaus; andernfalls erhältst du einen Code für einen anderen persönlichen Server. - Eine KI-App wird unter „Verbindungen“ nicht angezeigt. Führe
sudo crittod setup ai <name>erneut aus; danach startet der Server neu. - Etwas anderes.
journalctl -u critto -n 100zeigt meistens, was schiefläuft.