
Ein KI-gestützter persönlicher Assistent mit Schwerpunkt auf Sicherheit.

Stavrobot ist ein persönlicher KI-Assistent, der nach dem Prinzip „all der Zugriff, den ein KI-Assistent braucht, und nicht mehr" entwickelt wurde.
Er hat all die schönen Funktionen eines KI-Assistenten, legt aber den Schwerpunkt auf Sandboxing, Isolation und minimale Berechtigungen. Er ist leichtgewichtig und wird mit nur einem docker compose up bereitgestellt.
uv, isoliert von der Host-Umgebung.KI-gestützte Installation: Sag deiner Coding-KI (Claude Code, Cursor, Windsurf usw.), sie soll https://stavrobot.stavros.io/INSTALL.md abrufen und befolgen — sie führt dich interaktiv durch die gesamte Einrichtung.
Manuelle Installation:
Schreibe @BotFather auf Telegram an, um einen Bot zu erstellen, und kopiere das Token. Schreibe @userinfobot an, um deine Telegram-Benutzer-ID zu erhalten (diese wird als Chat-ID verwendet).
Kopiere env.example nach .env und ändere POSTGRES_PASSWORD in etwas Sicheres sowie TZ in deine Zeitzone.
Kopiere config.example.toml nach data/main/config.toml und fülle die erforderlichen Felder aus: apiKey, password, publicHostname, [owner].name, [owner].telegram (deine Chat-ID) und [telegram].botToken. Alles andere in der Datei ist optional.
docker compose up --build
Das war's. Schreibe deinem Bot auf Telegram und er wird antworten. Siehe die detaillierten Einrichtungsabschnitte unten für Signal, WhatsApp, E-Mail und andere Optionen.
config.example.toml nach data/main/config.toml.authFile (oder apiKey) und publicHostname. Alles andere ist optional.env.example nach .env und setze deine Zeitzone (TZ). Postgres-Zugangsdaten und andere Umgebungseinstellungen können dort ebenfalls überschrieben werden. Setze POSTGRES_PASSWORD immer auf etwas Sicheres — der Standardwert ist ein schwacher Platzhalter und sollte nicht in der Produktion verwendet werden.Nachdem die App gestartet ist, öffne /settings/config, um config.toml im Browser zu bearbeiten. Die Seite ist durch HTTP Basic Auth geschützt und zeigt die Rohkonfiguration an, einschließlich aller darin enthaltenen Geheimnisse. Ein gültiges Speichern erstellt ein einzelnes <CONFIG_PATH>.bak-Backup, speichert den neuen Inhalt und startet die App neu; dies unterbricht jeden laufenden Agenten-Durchlauf.
plugin-runner, coder, signal-bridge und python-runner lesen config.toml nur beim Start. Änderungen, die sie betreffen, wie etwa das Passwort, erfordern ein manuelles Neustarten dieser Container.
Stavrobot kann auf jeden OpenAI-kompatiblen Endpunkt (Ollama, LiteLLM, vLLM usw.) oder einen benutzerdefinierten Anthropic-kompatiblen Proxy ausgerichtet werden, indem baseUrl in config.toml gesetzt wird. Siehe config.example.toml für die erforderlichen Felder und Beispielkonfigurationen. Setze reasoning = true nur für Modelle, die Denken unterstützen, da dies bewirkt, dass thinkingLevel auf einem benutzerdefinierten Endpunkt angewendet wird.
Die App unterstützt zwei Authentifizierungsmodi: API-Schlüssel oder OAuth.
apiKey in config.toml. Kein Login oder Logout erforderlich.authFile in config.toml (ein Pfad, in dem Anmeldedaten gespeichert werden). Die Login-Seite funktioniert mit jedem von Pi unterstützten OAuth-Anbieter.
<your-hostname>/login in einem Browser. Folge den Anweisungen auf der Seite, und die Anmeldedaten werden in der Auth-Datei gespeichert. Stavrobot wählt die Headless-Login-Methode des Anbieters, sodass du nie zu einem unerreichbaren localhost-Callback weitergeleitet wirst. Bei Anthropic zeigt Anthropic nach der Auswahl von Authorize einen Code an, den du kopierst und in die Stavrobot-Login-Seite einfügst. Anbieter mit einem Device-Code-Flow zeigen den Code stattdessen auf der Stavrobot-Seite an, und du gibst ihn auf der Seite des Anbieters ein. Wenn die Authentifizierung abläuft, während der Bot läuft, sendet er dir eine Nachricht mit der Login-URL über deine Messaging-Plattform.authFile-Pfad. Der Bot erkennt fehlende Anmeldedaten bei der nächsten Nachricht und fordert dich auf, dich erneut anzumelden.Der coder-Container ist optional (wird nur für die Selbstprogrammierungsfunktion benötigt). Standardmäßig verwendet er Claude Code mit Abonnement-Authentifizierung (OAuth), getrennt vom API-Schlüssel der Haupt-App. Um stattdessen einen Anthropic-kompatiblen API-Endpunkt zu verwenden, setze sowohl [coder].apiKey als auch [coder].baseUrl in config.toml; Claude Code verwendet sie dann als ANTHROPIC_API_KEY und ANTHROPIC_BASE_URL. Die obersten apiKey/baseUrl konfigurieren nur das Modell der Haupt-App und beeinflussen niemals den Coder. Nur einen der beiden [coder]-Schlüssel zu setzen, ist ein Startfehler.
Docker Compose-Profile sind kommagetrennt, sodass du sie kombinieren kannst (z. B. COMPOSE_PROFILES=signal,coder).