Este guia é para quem tem um Mac, autorização para instalar aplicativos e um arquivo de teste próprio sem informações sensíveis. Você baixará um modelo no Ollama, conectará um chat persistente do Open WebUI no navegador e a extensão Continue do VS Code ao mesmo serviço, depois examinará uma alteração proposta antes de decidir se a mantém. Os comandos e verificações seguem a documentação atual dos mantenedores; a BIG CHANGE não executou essa configuração nem mediu velocidade, custo ou tráfego de rede.

A grande mudança

  • O que muda: Um modelo Ollama baixado pode atender tanto a um chat no navegador quanto a um assistente de edição no VS Code pela API local. Cada cliente ainda precisa de sua própria verificação de conexão.
  • Por que importa: Uma única instalação do modelo pode apoiar uma conversa e uma alteração de código revisada no mesmo Mac, enquanto o proprietário do arquivo mantém a decisão final.
  • O que observar: O nome de um modelo em um menu não prova qual servidor respondeu. Confira a conexão com o provedor e as respostas reais, principalmente se houver outros provedores ou recursos de nuvem configurados.

1. Confira o Mac e escolha um modelo

Você precisa de macOS 14 ou posterior para o Ollama, Docker Desktop para Mac, VS Code com a extensão Continuee Python 3 para as pequenas verificações de JSON e arquivos abaixo. O Ollama aceita execução em CPU e GPU da série Apple M; para Macs Intel, a documentação lista apenas CPU. Instale o Ollama pela página de download para Mac, mova o aplicativo para Applications, abra-o e permita o vínculo de linha de comando se solicitado. Instale e inicie o Docker Desktop, depois instale o Continue pela visualização Extensions do VS Code. Instale Python 3 de Python.org se python3 não estiver disponível. No Mac, o VS Code não adiciona automaticamente code ao caminho de busca do shell. Siga as instruções de configuração para Mac: abra Command Palette com Cmd+Shift+P, execute Shell Command: Install 'code' command in PATHe reinicie Terminal. Confirme que as ferramentas necessárias estão disponíveis:

Terminal
sw_vers -productVersion
ollama --version
docker version
code --version
python3 --version

Anote as versões instaladas. Pare se algum aplicativo não estiver em execução ou se faltar espaço no Mac para o modelo e os dados do Docker. A página do modelo qwen2.5-coder:7b informa atualmente um download de 4,7 GB e licença Apache 2.0. Esse tamanho não corresponde a toda a memória necessária para executar o modelo. É um exemplo concreto, não uma recomendação para todos os Macs. Se necessário, escolha uma tag local menor e documentada, substituindo qwen2.5-coder:7b por essa tag exata em cada comando, seleção do navegador e campo YAML abaixo. Confira também a licença do modelo substituto.

Baixe o modelo e confira se o Ollama lista a tag exata:

Terminal
ollama pull qwen2.5-coder:7b
ollama list
curl --fail-with-body --silent --show-error http://127.0.0.1:11434/api/tags | python3 -c 'import json,sys; d=json.load(sys.stdin); print([m["name"] for m in d["models"]])'

A lista deve conter qwen2.5-coder:7b. Em seguida, peça à API de chat local uma resposta curta. O comando falha em caso de erro HTTP e verifica o modelo retornado e o conteúdo não vazio do assistente; as palavras exatas da resposta não importam. A opção de execução do Ollama num_predict limita a verificação a 64 tokens gerados. Uma frase cortada ainda pode mostrar que houve retorno de conteúdo; uma resposta vazia falha na verificação e exige investigação.

Terminal
set -o pipefail
curl --fail-with-body --silent --show-error http://127.0.0.1:11434/api/chat \
  -H 'Content-Type: application/json' \
  -d '{"model":"qwen2.5-coder:7b","messages":[{"role":"user","content":"Reply with one short sentence about checking a local connection."}],"stream":false,"options":{"num_predict":64}}' \
  | python3 -c 'import json,sys; d=json.load(sys.stdin); assert d.get("model")=="qwen2.5-coder:7b",d.get("model"); assert d.get("message",{}).get("content","").strip(); print("Model:",d["model"],"Reply:",d["message"]["content"])'

Se a tag não aparecer, conclua o download e consulte a lista novamente. Se a API estiver inacessível, inicie o Ollama e confira seu registro do servidor no Mac em ~/.ollama/logs/server.log. Uma tag baixada e uma resposta local bem-sucedida completam a primeira de três verificações.

2. Inicie o Open WebUI com dados locais persistentes

O guia de início rápido do Open WebUI armazena contas, configurações e chats em /app/backend/data e exige um valor fixo de WEBUI_SECRET_KEY. Usamos a versão estável v0.12.3 em vez da tag continuamente atualizada main . O Docker selecionará a imagem para a arquitetura do Mac; registre a identidade da imagem após baixá-la.

Primeiro, examine os nomes usados aqui. Se algum já existir, inspecione o contêiner ou volume e determine se pertence a uma configuração anterior. Não substitua um contêiner existente nem apague seu volume apenas para fazer o comando funcionar.

Terminal
docker ps -a --filter name=^/bc-open-webui$ 
docker volume inspect bc-open-webui-data

Na primeira configuração, é normal o segundo comando informar que o volume não existe. Os passos seguintes guardam uma chave gerada em um arquivo privado da sua conta do Mac. Guarde-o com segurança para recriar o contêiner. Não envie seu conteúdo a um repositório, não o cole nem compartilhe. Se já houver uma chave para esta instância, continue usando a mesma.

Terminal
mkdir -p "$HOME/.config/bc-open-webui"
chmod 700 "$HOME/.config/bc-open-webui"
umask 077
if [ ! -s "$HOME/.config/bc-open-webui/webui-secret" ]; then
  openssl rand -hex 32 > "$HOME/.config/bc-open-webui/webui-secret"
fi
chmod 600 "$HOME/.config/bc-open-webui/webui-secret"
export WEBUI_SECRET_KEY="$(cat "$HOME/.config/bc-open-webui/webui-secret")"
docker pull ghcr.io/open-webui/open-webui:v0.12.3
docker image inspect ghcr.io/open-webui/open-webui:v0.12.3 --format '{{json .RepoDigests}}'
docker volume create bc-open-webui-data
docker run -d --name bc-open-webui --restart unless-stopped \
  -p 127.0.0.1:3000:8080 \
  --add-host=host.docker.internal:host-gateway \
  -v bc-open-webui-data:/app/backend/data \
  -e WEBUI_SECRET_KEY \
  -e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
  ghcr.io/open-webui/open-webui:v0.12.3
unset WEBUI_SECRET_KEY
docker ps --filter name=^/bc-open-webui$ --format 'table {{.Names}}\t{{.Image}}\t{{.Ports}}'

A saída de portas deve mostrar 127.0.0.1:3000->8080/tcp. O volume nomeado mantém chats e configurações ao recriar o contêiner. A chave protege a continuidade das sessões e os valores criptografados do aplicativo; mantenha sua cópia privada. Pessoas com acesso ao Docker podem ver variáveis de ambiente na configuração do contêiner; este é um ambiente local de usuário único, não um cofre de segredos para um host compartilhado.

Abra http://127.0.0.1:3000 no navegador. No primeiro acesso, crie a conta de administrador. No menu do avatar, abra Settings → Admin → Connections. Inspecione Manage Ollama API Connections e deixe somente uma conexão habilitada para http://host.docker.internal:11434; remova ou desative conexões de provedores não previstos para esta verificação. O Open WebUI pode distribuir solicitações entre várias conexões Ollama, portanto um nome igual na lista não basta. Selecione qwen2.5-coder:7b em um novo chat e pergunte: “Como posso verificar que um modelo local respondeu?” Confirme que aparece uma resposta não vazia e reabra o chat salvo. Registre o modelo selecionado e a URL da conexão. Essa é a verificação no navegador; não há resposta predeterminada.

Se a página não carregar, inspecione docker logs bc-open-webui e a vinculação da porta. Se a lista de modelos estiver vazia, confira se o Ollama ainda responde a /api/tags, revise a conexão salva do Open WebUI e teste se esta versão do Docker Desktop alcança o serviço no host Mac. host.docker.internal é o endereço do host no Docker Desktop, enquanto localhost dentro do contêiner se refere ao próprio contêiner. O Ollama se vincula a 127.0.0.1 por padrão; o encaminhamento entre host e contêiner pode variar conforme a configuração. Não trate uma conexão com falha como sucesso nem exponha o Ollama em 0.0.0.0 como correção habitual. Resolva o caminho da rede local conforme sua política de segurança antes de continuar. Preserve o volume e os chats existentes durante o diagnóstico.

3. Conecte o Continue à mesma tag do Ollama

O Continue roda no VS Code no Mac; portanto, o endereço da API Ollama é http://localhost:11434. Abra o Continue, use a lista de configurações no canto superior direito do campo de chat e clique na engrenagem ao lado de Local Config. Isso abre ~/.continue/config.yaml; a referência atual do Continue utiliza YAML. Salve uma cópia da configuração existente e preserve os modelos ou regras ainda necessários. Para uma configuração local nova, este é o conteúdo mínimo completo:

YAML
name: Local Ollama check
version: 1.0.0
schema: v1
models:
  - name: Qwen2.5 Coder 7B local
    provider: ollama
    model: qwen2.5-coder:7b
    apiBase: http://localhost:11434
    roles:
      - chat
      - edit

Em um arquivo existente, acrescente esta entrada de modelo à lista models: e mantenha a configuração superior existente. Salve, selecione Local Config e o modelo local nomeado, depois faça uma pergunta curta no Continue Chat. Confirme que ele retorna conteúdo. Isso verifica a conexão da extensão, mas uma resposta de chat não é uma edição de arquivo. Os papéis chat e edit habilitam as duas ações usadas aqui; esta receita não promete recursos Agent nem preenchimento automático.

Crie seu próprio diretório e arquivo de teste com um comportamento simples que possa conferir separadamente. O comando preserva arquivos e cópias originais existentes; examine-os ou escolha outro diretório se algum nome já estiver em uso:

Terminal
mkdir -p "$HOME/continue-local-check"
if [ -e "$HOME/continue-local-check/greeting.py" ] || [ -e "$HOME/continue-local-check/greeting.original.py" ]; then
  printf '%s\n' 'Scratch file already exists; inspect it or choose a new directory.'
else
  cat > "$HOME/continue-local-check/greeting.py" <<'PY'
def greeting(name):
    return "Hello, " + name

if __name__ == "__main__":
    assert greeting("Ada") == "Hello, Ada"
    print(greeting("Ada"))
PY
  if python3 "$HOME/continue-local-check/greeting.py"; then
    cp "$HOME/continue-local-check/greeting.py" "$HOME/continue-local-check/greeting.original.py"
  else
    printf '%s\n' 'Original check failed; inspect the file before requesting an edit.'
  fi
fi

A verificação original deve imprimir Hello, Ada após a asserção passar. Abra greeting.py no VS Code, selecione somente a função e pressione Cmd+I para Continue Edit. Peça uma docstring curta sem alterar o texto retornado. Compare o diff integrado exibido progressivamente com greeting.original.py; o Edit aplicado ao código selecionado pode incluir o arquivo inteiro no contexto, então use apenas um arquivo próprio sem dados sensíveis. O modelo pode mudar mais do que foi pedido. Examine cada linha alterada e aceite uma proposta adequada com Cmd+Opt+Y, ou rejeite com Cmd+Opt+N. O Continue também oferece controles para aceitar ou rejeitar tudo, mas um diff pequeno facilita examinar uma alteração de cada vez.

Após aceitar, salve o arquivo e execute:

Terminal
diff -u "$HOME/continue-local-check/greeting.original.py" "$HOME/continue-local-check/greeting.py" || true
python3 "$HOME/continue-local-check/greeting.py"

Confira se o diff contém apenas a mudança pretendida e se a asserção original continua passando. Se rejeitar a proposta, verifique se o arquivo corresponde ao original e registre a rejeição; não informe uma edição concluída. O arquivo, o diff e a verificação independente em Python mostram o resultado com mais confiabilidade que a descrição do modelo.

4. Mantenha os limites claros

Ollama, Open WebUI e Continue têm configurações separadas. Para desativar somente a nuvem do Ollama, adicione o campo abaixo ao ~/.ollama/server.jsonda conta que executa o servidor Ollama, preservando os campos JSON existentes. Para um arquivo novo, este é o conteúdo completo:

JSON
{
  "disable_ollama_cloud": true
}

Reinicie o aplicativo Ollama e confira o registro do servidor:

Terminal
grep 'Ollama cloud disabled: true' "$HOME/.ollama/logs/server.log"

A FAQ do Ollama documenta essa linha do registro. Se ela não aparecer, confira novamente qual conta do Mac executa o Ollama, o JSON e o reinício antes de afirmar que os recursos de nuvem estão desativados. Essa configuração não inspeciona outros provedores do Open WebUI, recursos opcionais on-line ou o tráfego do Continue. O guia sem internet do Continue orienta desativar Allow Anonymous Telemetry, usar modelos locais e reiniciar o VS Code. Revise as conexões de cada aplicativo antes de usar material sensível. Uma URL de loopback, sozinha, não é uma auditoria de rede.

Confira a licença do Docker Desktop para seu uso real. É gratuito para usos pessoal, educacional e de código aberto não comercial, além de pequenas empresas com menos de 250 funcionários E receita anual inferior a US$ 10 milhões. O uso profissional em organizações maiores e no governo exige uma assinatura paga. A licença Apache 2.0 do modelo é separada. Espaço em disco, memória, banda de download e eletricidade continuam relevantes; não medimos custos nem desempenho neste guia.

Para um roteiro limitado ao terminal e à API do Ollama, veja Execute um modelo Ollama local e confira sua API de chat. Faça uma alteração verificada no Claude Code com um modelo Ollama local aborda outro cliente de programação.

Fontes e leituras complementares