
Um assistente pessoal de IA com foco em segurança.

Stavrobot é um assistente pessoal de IA construído com o princípio de "todo o acesso que um assistente de IA precisa, e nada mais".
Tem todas as funcionalidades agradáveis de um assistente de IA, mas foca em sandboxing, isolamento e permissões mínimas. É leve e é implantado apenas com um docker compose up.
uv, isolado do ambiente anfitrião.Instalação assistida por IA: Diz à tua IA de programação (Claude Code, Cursor, Windsurf, etc.) para obter e seguir https://stavrobot.stavros.io/INSTALL.md — ela vai guiar-te por toda a configuração de forma interativa.
Instalação manual:
Envia mensagem ao @BotFather no Telegram para criar um bot e copia o token. Envia mensagem ao @userinfobot para obter o teu ID de utilizador do Telegram (isto é usado como o chat ID).
Copia env.example para .env e altera POSTGRES_PASSWORD para algo seguro e TZ para o teu fuso horário.
Copia config.example.toml para data/main/config.toml e preenche os campos obrigatórios: apiKey, password, publicHostname, [owner].name, [owner].telegram (o teu chat ID), e [telegram].botToken. Tudo o resto no ficheiro é opcional.
docker compose up --build
É isso. Envia mensagem ao teu bot no Telegram e ele vai responder. Vê as secções detalhadas de configuração abaixo para Signal, WhatsApp, email e outras opções.
config.example.toml para data/main/config.toml.authFile (ou apiKey) e publicHostname. Tudo o resto é opcional.env.example para .env e define o teu fuso horário (TZ). As credenciais do Postgres e outras definições de ambiente também podem ser substituídas aí. Define sempre POSTGRES_PASSWORD para algo seguro — o valor predefinido é um placeholder fraco e não deve ser usado em produção.Depois de a aplicação arrancar, abre /settings/config para editar config.toml no navegador. A página está protegida por HTTP Basic Auth e mostra a configuração em bruto, incluindo quaisquer segredos que contenha. Uma gravação válida cria um único backup <CONFIG_PATH>.bak, grava o novo conteúdo e reinicia a aplicação; isto interrompe qualquer turno do agente em curso.
plugin-runner, coder, signal-bridge e python-runner leem config.toml apenas quando arrancam. Alterações que os afetem, como a password, exigem reiniciar manualmente esses contentores.
O Stavrobot pode ser apontado para qualquer endpoint compatível com OpenAI (Ollama, LiteLLM, vLLM, etc.) ou um proxy personalizado compatível com Anthropic definindo baseUrl em config.toml. Vê config.example.toml para os campos obrigatórios e configurações de exemplo.
A aplicação suporta dois modos de autenticação: chave de API ou OAuth.
apiKey em config.toml. Não é necessário login nem logout.authFile em config.toml (um caminho onde as credenciais serão armazenadas). A página de login funciona com qualquer fornecedor OAuth suportado pelo Pi.
<your-hostname>/login num navegador. Segue as instruções na página, e as credenciais são guardadas no ficheiro de autenticação. Se a autenticação expirar enquanto o bot está a correr, ele envia-te uma mensagem com o URL de login através da tua plataforma de mensagens.authFile. O bot vai detetar a falta de credenciais na mensagem seguinte e pedir-te para iniciares sessão novamente.O contentor coder é opcional (necessário apenas para a funcionalidade de auto-programação). Usa o Claude Code com autenticação por subscrição (OAuth), separada da chave de API da aplicação principal.
Os perfis do Docker Compose são separados por vírgulas, por isso podes combiná-los (por exemplo, COMPOSE_PROFILES=signal,coder).
COMPOSE_PROFILES no teu ficheiro .env para incluir coder (por exemplo, COMPOSE_PROFILES=coder, ou COMPOSE_PROFILES=signal,coder se também estiveres a usar Signal).docker compose --profile coder up --builddocker compose exec -u coder coder claude (ele vai pedir-te para iniciares sessão se ainda não o fizeste).[coder].model na tua config para um alias de modelo do Claude Code (sonnet, opus, ou haiku).O Signal requer um número de telefone separado — não o teu pessoal. Um SIM pré-pago ou número VoIP funciona.