Uma interface web moderna e responsiva para interagir com o Gemini CLI da Google através de uma aplicação Flask em Python.
Copie o arquivo .env.example para .env:
cp .env.example .envEdite o arquivo .env e adicione sua chave de API do Google AI Studio:
- Acesse: https://aistudio.google.com/app/apikey
- Faça login com sua conta Google
- Clique em "Create API Key"
- Cole a chave no arquivo
.env:
GEMINI_API_KEY=yor_api_key
SESSION_SECRET=seu_secret_key_aquipip install -r requirements.txtpython app.pyA aplicação estará disponível em http://0.0.0.0:5000
- 💬 Interface de chat moderna - Design inspirado no Google Gemini
- 📱 Responsivo - Funciona em desktop e mobile
- 🎨 Temas claro/escuro - Alterne entre temas com um clique
- ⚡ Respostas em tempo real - Comunicação rápida com o Gemini CLI
- 💾 Histórico persistente - Conversas salvas localmente (localStorage)
- 📝 Sessões de conversação - Múltiplas sessões isoladas
- 🗑️ Limpeza de histórico - Botão para iniciar nova conversa
- 📤 Exportação de conversas - Exporte em formato JSON
- 📎 Upload de arquivos - Anexe qualquer tipo de arquivo
- 🖼️ Análise multimodal - Imagens, documentos, código, etc.
- 🔄 Gerenciamento de anexos - Remova ou substitua arquivos facilmente
- 📁 Compatibilidade total - Suporta todos os formatos aceitos pelo Gemini
- 📋 Templates de prompts - Crie e gerencie templates personalizados via
gemini.md - ⚡ Criação rápida - Botão dedicado para criar templates
- 🎯 Prompts pré-configurados - Exemplos para análise de código, debugging, etc.
- 🚀 Sistema de cache - Respostas armazenadas para prompts repetidos
- 🔒 Seguro - Proteção contra XSS, validação de entrada, timeouts
- ∞ Sem limites - Envie prompts de qualquer tamanho
- ⏱️ Timeout configurável - 60 segundos para evitar travamentos
- 🔧 Auto-setup - Verifica e instala Node.js, npm e Gemini CLI automaticamente
- ✅ Pronto para usar - Configuração automática na primeira execução
- Backend: Python 3.11 + Flask 3.0.0
- IA: Gemini CLI (via subprocess)
- Frontend: HTML5 + CSS3 + JavaScript Vanilla
- Runtime: Node.js 20.x (para Gemini CLI)
- Storage: localStorage (frontend) + memória (backend)
- Digite sua pergunta no campo de texto
- Pressione Enter ou clique no botão de envio
- Aguarde a resposta do Gemini
- Continue a conversa!
- Clique no botão 📎 Anexar arquivo
- Selecione qualquer arquivo (imagem, PDF, código, etc.)
- Digite um prompt descrevendo o que deseja fazer com o arquivo
- Exemplo: "Descreva esta imagem", "Analise este código", "Resuma este documento"
- Para remover/trocar: clique em ❌ Remover anexo e anexe outro
- Clique no botão 📋 Templates
- Você será solicitado a descrever o template desejado
- Digite sua descrição (ex: "Template para análise de código Python")
- O sistema criará automaticamente o arquivo
gemini.mdcom seu template - Use o template digitando o prompt na caixa de chat
- Clique no botão ☀️/🌙 no cabeçalho
- O tema atual será exibido no tooltip ("Tema: Escuro" ou "Tema: Claro")
- Clique no botão 💾 Exportar
- Sua conversa será baixada em formato JSON
- Contém todas as mensagens da sessão atual
Dicas:
- Use Shift + Enter para adicionar uma nova linha sem enviar
- Sem limite de caracteres - Envie prompts de qualquer tamanho
- O indicador verde mostra que está conectado
- Clique no 🗑️ ícone de lixeira para limpar o histórico
- Suas conversas são salvas automaticamente (F5 seguro)
.
├── app.py # Aplicação Flask principal
├── templates/
│ └── index.html # Interface do chat
├── static/
│ ├── style.css # Estilos CSS (tema claro/escuro)
│ └── script.js # Lógica JavaScript
├── requirements.txt # Dependências Python
├── .env.example # Exemplo de variáveis de ambiente
├── .env # Suas variáveis de ambiente (não versionar)
├── gemini.md # Templates de prompts (criado automaticamente)
└── README.md # Esta documentação
Retorna a interface web principal.
Processa um prompt através do Gemini CLI.
Request:
{
"prompt": "Explique o que é Python",
"file_path": "arquivo.jpg" // opcional
}Response:
{
"response": "Python é uma linguagem de programação...",
"prompt": "Explique o que é Python",
"session_id": "uuid-da-sessao",
"cached": false
}Faz upload de um arquivo para análise.
Request: FormData com arquivo Response:
{
"filename": "nome_do_arquivo",
"filepath": "caminho_relativo"
}Lista todas as sessões do usuário.
Cria uma nova sessão de conversação.
Retorna o conteúdo do arquivo gemini.md.
Exporta uma sessão específica.
Verifica o status da aplicação e do Gemini CLI.
- ✅ Sanitização de entrada no backend e frontend
- ✅ Proteção contra XSS usando
textContenteMarkupSafe.escape - ✅ Timeout de 60 segundos para evitar travamentos
- ✅ Validação em múltiplas camadas
- ✅ Arquivos enviados com nomes únicos (UUID)
- ✅ Cache de respostas para melhor performance
Solução: Configure sua GOOGLE_API_KEY no arquivo .env.
Solução: O prompt é muito complexo. Tente algo mais simples ou aumente o GEMINI_TIMEOUT em app.py.
Solução: A aplicação tentará instalar automaticamente na primeira execução. Se falhar, execute manualmente:
npm install -g @google/gemini-cliSolução: Verifique se a aplicação está rodando na porta 5000 e se as variáveis de ambiente estão configuradas.
Solução: Certifique-se de que o arquivo foi enviado com sucesso (mensagem de confirmação aparece). Depois, digite um prompt descrevendo o que deseja fazer com o arquivo.
Crie um arquivo .env na raiz do projeto (use .env.example como referência):
GEMINI_API_KEY=yor_api_key- OBRIGATÓRIO - Chave de API do Google AI StudioSESSION_SECRET- Chave secreta para sessões Flask (gere uma aleatória)
Exemplo:
GEMINI_API_KEY=yor_api_key=AIzaSyC...seu_key_aqui
SESSION_SECRET=sua_chave_secreta_aleatoria_aquiEste projeto foi criado para uso educacional e demonstração de integração com Gemini CLI.
Desenvolvido com ❤️ para a comunidade