Article image
Saulo Maciel
Saulo Maciel17/08/2026 00:54
Compartilhe

Ollama Chat: chat local com IA no terminal linux

  • #IA Generativa

Link para o repositório

Construí um cliente de chat em Python que conversa com modelos do Ollama direto no terminal. Roda offline e online, mantém privacidade, e a IA pode ler, editar, criar, remover e executar arquivos e comandos no meu sistema — sempre pedindo minha confirmação antes de qualquer coisa que toque no disco. O projeto continua simples, de um arquivo só, e eu continuo sem ter enriquecido com ele. É só um projeto pessoal que uso no dia a dia.

 

Fala rede, tudo bem?

Voltei pra escrever sobre o mesmo projetinho do ollama-chat, mas já avisando: continua pequeno, continua pessoal, e eu não fiquei rico com ele. Continuo pobre, inclusive. Só que agora ele tá um pouco maior do que era quando postei a primeira vez — de 10 ferramentas pra 19, alguns comandos novos, e umas distinções entre modelo offline e modelo "-cloud" que valem comentar.

Antes de entrar no código, deixa eu puxar o gancho do artigo anterior: o Claude tá caro, Elon Musk reclamou que gente tá usando modelo caro pra coisa que micro modelo resolve, Mano Deyvin fez vídeo sobre IA gerenciando IA, e a turma confirmou/refutou tudo ao mesmo tempo. 

Eu continuo na trincheira dos micro modelos. Não tenho IA que gerencia outras IAs, não tenho assinatura premium, não tenho cluster de GPU. Tenho um script Python que cabe num arquivo e um teclado. E máquina de estados, que é o neandertal do mundo dos softwares inteligentes — só que continua barato, simples e dá conta do recado.

 

O que é o ollama-chat

É um chat que conversa com modelos do Ollama (Llama 3, Mistral, Gemma, Phi, etc.) direto no terminal, sem UI gráfica, sem servidor web, sem banco de dados. Tudo num arquivo só (ollama-chat.py), em Python puro.

git clone https://github.com/Saulo-Ferro-Maciel/Ollama-Chat.git
cd Ollama-Chat
python3 ollama-chat.py

A ideia é simples: se eu tô no terminal mesmo, por que abrir navegador pra conversar com a IA? E se é pra deixar a IA mexer no meu código, melhor que ela me peça confirmação antes de fazer besteira.

image

O que mudou desde a primeira versão

Não vou fingir que virei featureador. As mudanças foram modestas:

  • Modelos locais vs modelos `-cloud`:
  • O Ollama expõe modelos com sufixo `-cloud` (ex: `qwen3:235b-cloud`) pelo mesmo endpoint `localhost:11434`, mas eles custam token de verdade. O script detecta o sufixo sozinho e se comporta diferente.
  •  Orçamento automático pra modelos cloud:
  • Quando o uso acumulado passa de 80% do limite (200000 tokens por padrão), o script resume o histórico sozinho antes de mandar pro modelo. Sem chamar IA pra fazer o resumo — só corta as mensagens antigas e enfia um parágrafo curto de contexto. Bonito e barato.
  •  Gestão completa de GIT: Antes a IA só mexe em arquivo.
  • Agora ela também roda `git status`, `git diff`, `git clone`, `git commit`, `git pull` e `git push` — todas pedindo confirmação, igual arquivo.
  •  Voz (entrada e saída):
  • `/voice` (`/voz`):grava o microfone, baixa o modelo Vosk em PT-BR na primeira vez, e envia o texto reconhecido como mensagem. A resposta volta falada.
  • `/tts` (`/falar`, `/audio`): liga/desliga a síntese de voz pra todas as mensagens. O pyttsx3 limpa o markdown antes de ler — ninguém quer ouvir "asterisco asterisco negrito" em vez do texto.
  •  Mais comandos:
  • `/terminal_clear` (`/limpar_terminal`, `/clear`): limpa a tela e o histórico antigo, mas guarda as últimas 3 mensagens pra IA não perder o fio.
  • `/budget` (`/orcamento`): mostra ou ajusta o orçamento de tokens cloud.
  • `/tokens_used`: agora separa nuvem de local.
  • `/help`, `/model`, `/new`, `/sair`: continuam como antes, agora com mais traduções (PT-BR, ES, EN).

image 

As 19 ferramentas:

7 só de leitura (rodam direto)

| Ferramenta | O que faz |
| `ler_arquivo(caminho, max_characters, modo)` | Lê texto (ou `hex`/`base64` pra binário) |
| `listar_diretorio(caminho, profundidade)` | Árvore estilo `tree` (├──, └──, │), profundidade 1–6 |
| `localizacao_atual()` | cwd, hostname, SO e distro |
| `buscar_texto(termo, caminho, ...)` | `grep -rn` com regex |
| `procurar_arquivos(padrao, caminho)` | `find` por glob |
| `git_status(caminho)` | branch, alterações, log |
| `git_diff(caminho, staged, alvo, arquivo)` | diff filtrado |

 

12 que pedem confirmação (gravação/remoção/execução)

Todas mostram uma prévia do que vai ser feito e pedem `s` antes de rodar:

  1. `escrever_arquivo`, `editar_arquivo`, `criar_diretorio`, `mover_arquivo`, `renomear_arquivo`, `remover_arquivo`, `remover_diretorio`
  2. `git_clonar`, `git_commit`, `git_pull`, `git_push`
  3. `executar_comando` (qualquer comando de shell, com timeout padrão de 60s)

 

Travas fixas no código:

  • `remover_diretorio` e `mover_arquivo` recusam `/` e a home (`~`)
  • `mover_arquivo` recusa mover diretório pra dentro dele mesmo
  • `executar_comando` pede confirmação mesmo pra comandos que parecem inofensivos

 

image

Detalhe anti-alucinação

Respostas que envolveram ferramenta de escrita/execução **não entram no cache**. Aí você pede de novo a mesma coisa e a IA executa de verdade, em vez de inventar que mexeu no disco.

Auto-instalação e multi-distro

Na primeira execução, o script instala sozinho `vosk`, `pyttsx3` e `requests` via pip. Se você chamar `/voice` e faltar `pyaudio`, ele detecta a distro (openSUSE, Debian/Ubuntu, Fedora/RHEL, Arch) e pede confirmação antes de instalar `portaudio + gcc + python3-dev` pelo gerenciador de pacotes.

# openSUSE
sudo zypper install portaudio-devel gcc python3-devel

# Debian/Ubuntu
sudo apt-get install portaudio19-dev gcc python3-dev

# Fedora/RHEL
sudo dnf install portaudio-devel gcc python3-devel

# Arch
sudo pacman -S portaudio gcc

Variáveis de ambiente

OLLAMA_URL=http://localhost:11434  # constante no script, não env
OLLAMA_MAX_CHARS=100000            # limite de leitura
OLLAMA_VOICE_MAX_SECONDS=15       # duração máx. de /voice
OLLAMA_CACHE_SIZE=200              # use 0 pra desativar cache
OLLAMA_TREE_MAX_ITENS=500          # limite de listar_diretorio
TOKENS_BUDGET=1000000              # teto de tokens pra tool-calling interno
OLLAMA_CLOUD_TOKEN_BUDGET=200000   # orçamento de modelos cloud
OLLAMA_CLOUD_ECONOMIA_LIMIAR=0.8   # quando começa a resumir histórico

 

Como rodar

Pré-requisitos:

  1. Ollama instalado e rodando (`ollama serve`)
  2. Algum modelo baixado (`ollama pull llama3`, ou `ollama pull qwen3:235b-cloud` pra testar cloud)
  3. Python 3.8+

 


git clone https://github.com/Saulo-Ferro-Maciel/Ollama-Chat.git

cd Ollama-Chat

python3 ollama-chat.py

Na primeira execução, ele lista os modelos, pede pra escolher um, e se houver sessão anterior com o mesmo modelo, pergunta se você quer continuar de onde parou.

 

Limitações honestas

 Pra não vender algo que não é: 

  1. `OLLAMA_URL` ainda é constante no script, não env var.
  2. `/temp` só funciona em modelos `-cloud`. Modelo local ignora.
  3. Só a última sessão é salva — não tem histórico de múltiplas conversas.
  4. Cache e contador de tokens zeram quando fecha o chat.
  5. `/voice` reconhece só português (modelo Vosk small-pt).
  6. `executar_comando` usa `shell=True` — qualquer comando roda como shell script. A confirmação manual mitiga, mas vale lembrar.

 

O que aprendi (e o que ainda não aprendi)

 

Aprendi: 

  • Separar schema de ferramentas entre cloud e local faz diferença real (modelos pequenos se atolam com descrições longas).
  • Orçamento automático + resumo de histórico funciona muito bem pra manter o custo previsível em modelos cloud.
  • Trava de segurança no código (recusar mover `/`, mover pasta pra dentro dela mesma) é melhor que confiar só na IA.

 

Não aprendi (ainda):

  • A ficar rico com software livre.
  • A fazer o modelo Vosk reconhecer outras línguas.
  • A configurar `OLLAMA_URL` por env var. Tá na lista, mas tá na lista.

 

Próximos passos:

 Modestos:

  • Mover `OLLAMA_URL` pra env var.
  • Adicionar `--no-tools` pra conversa sem tool-calling.
  • Testar o script com mais modelos cloud pra ver se o orçamento aguenta.

Pretensiosos (mas vou tentar):

  • Suporte a mais línguas no Vosk.
  • Um `/export` que salva a conversa em markdown.

 

Considerações finais

 Se você tá começando agora com Ollama e queria algo que não dependesse de abrir 5 abas no navegador pra conversar com o modelo, esse projeto pode te servir. Se você já tem um setup melhor, ele provavelmente é modesto demais pra você. Eu sei, fiz ele para sobrevivência em devices com poucos recursos.

 

Link pro repositório

Compartilhe
Comentários (0)