@italosantos-com/cerebro-offline
v0.1.0
Published
Offline-first local copilot with `cerebro` terminal command
Readme
Run and deploy your AI Studio app
This contains everything you need to run your app locally.
View your app in AI Studio: https://ai.studio/apps/81ed5372-9b85-4bfa-91bb-e9353100041e
Run Locally
Prerequisites: Node.js
- Install dependencies:
npm install - Set the
GEMINI_API_KEYin .env.local to your Gemini API key - Run the app:
npm run dev
Chat offline no terminal (sem internet) - Python
Este projeto inclui um chat local no terminal em Python, com histórico salvo em JSON.
Pré-requisitos offline
- Ter o Ollama instalado localmente
- Iniciar o serviço local:
ollama serve - Ter pelo menos um modelo baixado (feito uma vez):
ollama pull mistral
Se aparecer command not found: ollama no macOS, instale com:
brew install --cask ollama
Depois abra o app Ollama uma vez e rode ollama serve.
Uso
- Inicie o chat:
python3 chat_cli.pyounpm run chat:offline - (Opcional) Defina um modelo inicial:
python3 chat_cli.py llama3.2
O histórico é salvo em conversations.json na raiz do projeto.
O aprendizado local é salvo em learning.json na raiz do projeto.
Se o Ollama não estiver ativo, o chat inicia em modo offline local usando apenas a base aprendida.
Comandos no chat
/helpmostra os comandos/new [titulo]cria nova conversa/listlista conversas/use <numero>troca conversa ativa/historyexibe histórico da conversa ativa/model <nome>troca o modelo da conversa ativa/learn <pergunta> => <resposta>adiciona aprendizado local/learn-file <arquivo>importa treinamento de arquivo/learn-listlista exemplos aprendidos/learn-clearlimpa aprendizados/offline-statusmostra status dos recursos locais/perf on|off|statusativa métricas de tempo e contexto usado/try-ollamatenta reconectar no Ollama local/export [arquivo]exporta conversas e aprendizado para JSON/import <arquivo>importa conversas e aprendizado de JSON/exitencerra o chat
Inicialização rápida
No terminal, use:
cerebro central
Arquitetura avançada Python (RAG leve)
Estrutura criada:
backend/copilot_terminal.py(copilot técnico local)backend/rag_engine.py(busca vetorial + chamada Ollama)backend/indexer.py(indexador de código útil)backend/settings.py(config otimizada para Mac 2017)backend/watcher.py(aprendizado incremental por monitoramento)data/vector_db/(índice)knowledge/(base de conhecimento)projects/(código para indexação)
Instalação do núcleo IA
python3 -m pip install -r requirements.txtRecomendado para backend: Python 3.13+ (o launcher cerebro já prioriza python3.13 quando disponível).
Observação: em Python 3.13, sentence-transformers/faiss podem não ter wheel disponível.
O backend já inclui fallback leve (embeddings hash + busca vetorial NumPy) para manter funcionamento offline sem travar.
Runtime local compatível (100% offline)
Este projeto agora suporta três runtimes locais:
auto(padrão): tentaollamae depoisllama.cpp, senão usaoffline.llamacpp: usa modelo.gguflocal viallama-cli.offline: sem LLM externo, resposta baseada no RAG local (modo compatível garantido).
Comandos rápidos
cerebro central→ runtime automáticocerebro local→ força modo offline compatívelcerebro llamacpp→ força runtimellama.cpp
Configurar llama.cpp (opcional, recomendado para macOS 12)
- Instale
llama.cpp(bináriollama-cli) de forma compatível com seu sistema. - Coloque um modelo GGUF em
models/. - Exemplo de execução:
LLAMACPP_MODEL_PATH=./models/seu-modelo.gguf cerebro llamacppVocê também pode definir:
LLM_RUNTIME=llamacpp|offline|ollama|autoLLAMACPP_BINARY(padrãollama-cli)LLAMACPP_MODEL_PATH
Comandos principais
cerebro centralinicia o copilot RAG localcerebro localforça modo offline local (compatível)cerebro llamacppforça runtime llama.cppcerebro apiinicia API FastAPI localcerebro indexreindexa conhecimento/códigocerebro watchativa reindexação incremental
Fluxo recomendado (zero travamento)
- Coloque docs em
knowledge/ - Coloque projetos/código em
projects/ - Rode
cerebro index - Inicie com
cerebro central
Método fácil: enviar arquivo de treinamento
Use um dos formatos abaixo e rode:
/learn-file nome-do-arquivo
Formatos aceitos:
.jsoncom[{"question":"...","answer":"..."}].jsonl(1 JSON por linha comquestioneanswer).csvcom colunasquestion,answer.txtou.mdcom linhaspergunta => resposta
Exemplo .json:
[
{
"question": "Como criar rota no Express?",
"answer": "Use app.get('/rota', handler)."
},
{
"question": "Como iniciar Vite?",
"answer": "Execute npm run dev."
}
]MVP: Autocomplete inline offline (VS Code)
1) Iniciar backend local
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
npm run backend:devPara forçar runtime 100% offline compatível:
LLM_RUNTIME=offline npm run backend:devO backend sobe em http://127.0.0.1:8000, indexa o projeto ao iniciar e expõe:
POST /autocompletePOST /copilot/askPOST /reindexGET /health
O POST /autocomplete retorna também latencyMs (tempo local da inferência em ms).
Também ativa reindexação incremental automática ao detectar mudanças em arquivos de código (.py, .html, .css, .js, .ts, .tsx, .jsx).
Para desativar o watcher:
AUTO_REINDEX_ENABLED=0 npm run backend:dev2) Rodar Ollama local
ollama serve
ollama pull deepseek-coder:6.7b3) Carregar extensão local no VS Code
- Abra a pasta
vscode-extension - Pressione
F5para abrir a janela Extension Development Host - Na janela nova, abra seu projeto web
- Comece a digitar em
.py,.js,.ts,.htmlou.css
As sugestões inline (ghost text) serão buscadas do backend local, usando contexto semântico do projeto (RAG) + Ollama.
Pergunta/resposta local (offline-first)
Você pode consultar o copiloto técnico local com:
curl -X POST "http://127.0.0.1:8000/copilot/ask" \
-H "Content-Type: application/json" \
-d '{"question":"Como organizar rotas no Next.js?","topK":3}'Se o Ollama estiver offline, o endpoint retorna resposta em modo local com base no índice RAG.
O RAG também prioriza exemplos para iniciantes em webapp (Flask, CRUD, forms, templates e estrutura MVC simples).
Fase 3: otimização de latência (Mac 8GB)
O backend agora aplica otimizações para reduzir custo de indexação:
- Cache persistente de embeddings por hash de conteúdo (
data/vector_db/embedding_cache.pkl) - Ignora arquivos muito grandes (limite padrão:
400_000bytes) - Limita chunks por arquivo (padrão:
60)
Esses limites ficam em backend/settings.py dentro de INDEXING_CONFIG.
Fase 4: métricas 100% offline
Para ver métricas locais de performance:
curl "http://127.0.0.1:8000/health?debug=true"O modo debug inclui:
requests_totalerrors_totallatency_ms_avglatency_ms_p50latency_ms_p95latency_ms_last
Sem debug, o GET /health continua enxuto para uso normal.
Publicação no npm
Checklist rápido:
npm run release:checkPublicar:
npm run release:publishSe o npm exigir 2FA/token com bypass, publique com OTP:
NPM_OTP=123456 npm run release:publish:otp