
Un assistente personale AI incentrato sulla sicurezza.

Stavrobot è un assistente AI personale costruito secondo il principio di "tutti gli accessi di cui un assistente AI ha bisogno, e non di più".
Ha tutte le belle funzionalità di un assistente AI, ma si concentra su sandboxing, isolamento e permessi minimi. È leggero e viene distribuito con un semplice docker compose up.
uv, isolato dall'ambiente host.Installazione assistita dall'AI: Di' alla tua AI di programmazione (Claude Code, Cursor, Windsurf, ecc.) di recuperare e seguire https://stavrobot.stavros.io/INSTALL.md — ti guiderà attraverso l'intera configurazione in modo interattivo.
Installazione manuale:
Invia un messaggio a @BotFather su Telegram per creare un bot e copia il token. Invia un messaggio a @userinfobot per ottenere il tuo ID utente Telegram (usato come chat ID).
Copia env.example in .env e cambia POSTGRES_PASSWORD con qualcosa di sicuro e TZ con il tuo fuso orario.
Copia config.example.toml in data/main/config.toml e compila i campi obbligatori: apiKey, password, publicHostname, [owner].name, [owner].telegram (il tuo chat ID) e [telegram].botToken. Tutto il resto nel file è opzionale.
docker compose up --build
Fatto. Invia un messaggio al tuo bot su Telegram e risponderà. Consulta le sezioni dettagliate sulla configurazione qui sotto per Signal, WhatsApp, email e altre opzioni.
config.example.toml in data/main/config.toml.authFile (o apiKey) e publicHostname. Tutto il resto è opzionale.env.example in .env e imposta il tuo fuso orario (TZ). Le credenziali Postgres e altre impostazioni d'ambiente possono essere sovrascritte anche lì. Imposta sempre POSTGRES_PASSWORD con qualcosa di sicuro — il valore predefinito è un segnaposto debole e non dovrebbe essere usato in produzione.Dopo l'avvio dell'app, apri /settings/config per modificare config.toml nel browser. La pagina è protetta da HTTP Basic Auth e mostra la configurazione grezza, inclusi eventuali segreti che contiene. Un salvataggio valido crea un singolo backup <CONFIG_PATH>.bak, salva il nuovo contenuto e riavvia l'app; questo interrompe qualsiasi turno dell'agente in corso.
plugin-runner, coder, signal-bridge e python-runner leggono config.toml solo all'avvio. Le modifiche che li riguardano, come la password, richiedono il riavvio manuale di quei container.
Stavrobot può essere puntato verso qualsiasi endpoint compatibile con OpenAI (Ollama, LiteLLM, vLLM, ecc.) o un proxy personalizzato compatibile con Anthropic impostando baseUrl in config.toml. Consulta config.example.toml per i campi obbligatori e le configurazioni di esempio.
L'app supporta due modalità di autenticazione: chiave API o OAuth.
apiKey in config.toml. Nessun login o logout necessario.authFile in config.toml (un percorso in cui verranno memorizzate le credenziali). La pagina di login funziona con qualsiasi provider OAuth supportato da Pi.
<your-hostname>/login in un browser. Segui le istruzioni sulla pagina e le credenziali verranno salvate nel file di autenticazione. Se l'autenticazione scade mentre il bot è in esecuzione, invia un messaggio con l'URL di login tramite la tua piattaforma di messaggistica.authFile. Il bot rileverà le credenziali mancanti al messaggio successivo e ti chiederà di effettuare nuovamente il login.Il container coder è opzionale (necessario solo per la funzionalità di auto-programmazione). Usa Claude Code con autenticazione tramite abbonamento (OAuth), separata dalla chiave API dell'app principale.
I profili di Docker Compose sono separati da virgole, quindi puoi combinarli (ad es. COMPOSE_PROFILES=signal,coder).
COMPOSE_PROFILES nel tuo file .env per includere coder (ad es. COMPOSE_PROFILES=coder, oppure COMPOSE_PROFILES=signal,coder se stai usando anche Signal).docker compose --profile coder up --builddocker compose exec -u coder coder claude (ti chiederà di effettuare il login se non l'hai ancora fatto).[coder].model nella tua configurazione con un alias di modello Claude Code (sonnet, opus o haiku).Signal richiede un numero di telefono separato — non quello personale. Va bene una SIM prepagata o un numero VoIP.