Esta guía es para quien tenga un Mac, permiso para instalar aplicaciones y un archivo de prueba propio sin información sensible. Descargarás un modelo en Ollama, conectarás un chat persistente de Open WebUI y la extensión Continue de VS Code al mismo servicio, y revisarás una modificación propuesta antes de decidir si conservarla. Los comandos y comprobaciones siguen la documentación actual de los desarrolladores; BIG CHANGE no ha ejecutado este conjunto ni medido su velocidad, coste o tráfico de red.

El gran cambio

  • Qué cambia: Un modelo Ollama descargado puede servir tanto a un chat del navegador como a un asistente de edición de VS Code mediante su API local. Cada cliente necesita su propia comprobación de conexión.
  • Por qué importa: Una sola instalación del modelo puede permitir una conversación y un cambio de código revisado en el mismo Mac, dejando la decisión final al propietario del archivo.
  • Qué vigilar: El nombre de un modelo en un menú no demuestra qué servidor respondió. Comprueba la conexión al proveedor y las respuestas reales, especialmente si hay otros proveedores o funciones en la nube configurados.

1. Comprueba el Mac y elige un modelo

Necesitas macOS 14 o posterior para Ollama, Docker Desktop para Mac, VS Code con la extensión Continue, y Python 3 para las pequeñas comprobaciones de JSON y archivos siguientes. Ollama admite ejecución en CPU y GPU de Apple M; en los Mac Intel su documentación solo indica CPU. Instala Ollama desde su descarga para Mac, mueve la aplicación a Applications, ábrela y permite su enlace de línea de comandos si se solicita. Instala e inicia Docker Desktop y después instala Continue desde la vista Extensions de VS Code. Instala Python 3 desde Python.org si python3 no está disponible. En un Mac, VS Code no añade automáticamente code a la ruta de búsqueda del shell. Sigue sus instrucciones de instalación para Mac: abre Command Palette con Cmd+Shift+P, ejecuta Shell Command: Install 'code' command in PATHy reinicia Terminal. Confirma que están disponibles las herramientas que usarás:

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

Anota las versiones instaladas. Detente si alguna aplicación no está en marcha o el Mac no tiene espacio para el modelo y los datos de Docker. La ficha del modelo qwen2.5-coder:7b indica actualmente una descarga de 4,7 GB y licencia Apache 2.0. Ese tamaño no representa toda la memoria necesaria para ejecutarlo. Es un ejemplo concreto de esta guía, no una recomendación válida para todos los Mac. Si hace falta, elige una etiqueta local más pequeña y documentada, y sustituye qwen2.5-coder:7b por esa etiqueta exacta en cada comando, selección del navegador y campo YAML siguientes. Comprueba también la licencia del modelo sustituto.

Descarga el modelo y confirma que Ollama muestra su etiqueta exacta:

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"]])'

La lista debe contener qwen2.5-coder:7b. A continuación pide a la API de chat local una respuesta breve. El comando falla ante un error HTTP y comprueba el modelo devuelto y que el contenido del asistente no esté vacío; las palabras exactas de la respuesta no importan. La opción de ejecución de Ollama num_predict limita esta comprobación a 64 tokens generados. Una frase truncada puede demostrar que llegó contenido; una respuesta vacía hace fallar la comprobación y requiere investigación.

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"])'

Si falta la etiqueta, termina la descarga y vuelve a consultar la lista. Si la API es inaccesible, inicia Ollama y consulta su registro del servidor en Mac en ~/.ollama/logs/server.log. Una etiqueta descargada y una respuesta local correcta completan la primera de tres comprobaciones.

2. Inicia Open WebUI con datos locales persistentes

La guía de inicio rápido de Open WebUI guarda cuentas, ajustes y conversaciones en /app/backend/data y exige un valor fijo de WEBUI_SECRET_KEY. Aquí usamos la versión estable v0.12.3 en vez de la etiqueta cambiante main . Docker seleccionará la imagen para la arquitectura del Mac; registra su identidad tras descargarla.

Inspecciona primero los nombres usados aquí. Si alguno ya existe, revisa ese contenedor o volumen y determina si pertenece a una instalación anterior. No sustituyas un contenedor ni elimines su volumen solo para que funcione este comando.

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

En una primera instalación es normal que el segundo comando indique que el volumen no existe. Los siguientes pasos guardan una clave generada en un archivo privado de tu cuenta de Mac. Consérvalo de forma segura para recrear el contenedor. No envíes su contenido a un repositorio, no lo pegues ni lo compartas. Si ya tienes una clave para esta instancia, sigue usando la misma.

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}}'

La salida de puertos debe mostrar 127.0.0.1:3000->8080/tcp. El volumen con nombre conserva conversaciones y ajustes al recrear el contenedor. La clave protege la continuidad de las sesiones y los valores cifrados de la aplicación, así que conserva su copia privada. La configuración del contenedor puede exponer variables de entorno a quienes tengan acceso a Docker; es una instalación local para una persona, no un almacén de secretos de un servidor compartido.

Abre http://127.0.0.1:3000 en el navegador. En el primer inicio crea la cuenta de administrador. En el menú del avatar abre Settings → Admin → Connections. Revisa Manage Ollama API Connections y deja una sola conexión habilitada a http://host.docker.internal:11434; elimina o desactiva los proveedores que no correspondan a esta comprobación. Open WebUI puede repartir peticiones entre varias conexiones Ollama, así que un nombre coincidente en el desplegable no basta. Selecciona qwen2.5-coder:7b en una conversación nueva y pregunta: «¿Cómo puedo comprobar que respondió un modelo local?». Confirma que aparece una respuesta no vacía y vuelve a abrir la conversación guardada. Anota el modelo seleccionado y la URL de conexión. Esta es la comprobación del navegador; no se exige una respuesta concreta.

Si la página no carga, revisa docker logs bc-open-webui y la vinculación del puerto. Si la lista de modelos está vacía, comprueba que Ollama sigue respondiendo a /api/tags, revisa la conexión guardada de Open WebUI y prueba si esta versión de Docker Desktop alcanza el servicio del Mac anfitrión. host.docker.internal es la dirección del anfitrión en Docker Desktop, mientras que localhost dentro de un contenedor se refiere al propio contenedor. Ollama se vincula a 127.0.0.1 por defecto; la comunicación entre anfitrión y contenedor puede variar según la configuración. No consideres exitosa una conexión fallida ni expongas Ollama en 0.0.0.0 como solución habitual. Resuelve la ruta de red local conforme a tu política de seguridad antes de continuar. Conserva el volumen y las conversaciones existentes durante el diagnóstico.

3. Conecta Continue a la misma etiqueta Ollama

Continue se ejecuta en VS Code en el Mac, por lo que la dirección de su API Ollama es http://localhost:11434. Abre Continue, usa el desplegable de configuración situado arriba a la derecha del cuadro de chat y pulsa el engranaje junto a Local Config. Esto abre ~/.continue/config.yaml; la referencia actual de Continue utiliza YAML. Guarda una copia de cualquier configuración existente y conserva los modelos o reglas que aún necesites. Para una configuración local nueva, este es el contenido 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

En un archivo existente, añade esta entrada de modelo a su lista models: y conserva la configuración superior actual. Guarda, selecciona Local Config y el modelo local con nombre, y formula una pregunta breve en Continue Chat. Confirma que devuelve contenido. Esto comprueba la conexión de la extensión, pero una respuesta de chat no es una edición del archivo. Los roles chat y edit habilitan las dos acciones usadas aquí; esta receta no promete funciones Agent ni autocompletado.

Crea un directorio y un archivo de prueba propios con un comportamiento sencillo que puedas comprobar por separado. El comando preserva un archivo o copia original existente; examínalos o elige otro directorio si alguno de los nombres ya está en 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

La comprobación original debe imprimir Hello, Ada tras superar la aserción. Abre greeting.py en VS Code, selecciona solo la función y pulsa Cmd+I para Continue Edit. Pídele una docstring breve sin modificar el texto devuelto. Revisa el diff integrado que aparece progresivamente comparándolo con greeting.original.py; Edit sobre código seleccionado puede incluir todo el archivo en el contexto, así que usa únicamente un archivo propio sin datos sensibles. El modelo podría cambiar más de lo solicitado. Examina cada línea modificada y acepta una propuesta adecuada con Cmd+Opt+Y, o recházala con Cmd+Opt+N. Continue también ofrece controles para aceptar o rechazar todo, pero un diff pequeño facilita revisar un cambio cada vez.

Tras aceptar, guarda el archivo y ejecuta:

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

Comprueba que el diff solo contiene el cambio previsto y que la aserción original sigue pasando. Si rechazas la propuesta, verifica que el archivo coincide con el original y registra el rechazo; no declares una edición completada. El archivo, el diff y la comprobación independiente de Python muestran lo ocurrido de forma más fiable que la descripción del modelo.

4. Mantén claros los límites

Ollama, Open WebUI y Continue tienen ajustes independientes. Para desactivar únicamente la nube de Ollama, añade el siguiente campo al ~/.ollama/server.jsonde la cuenta que ejecuta el servidor Ollama, conservando los campos JSON existentes. Si es un archivo nuevo, este es todo su contenido:

JSON
{
  "disable_ollama_cloud": true
}

Reinicia la aplicación Ollama y después revisa su registro del servidor:

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

La FAQ de Ollama documenta esa línea del registro. Si no aparece, vuelve a comprobar qué cuenta de Mac ejecuta Ollama, el JSON y el reinicio antes de afirmar que la nube está desactivada. Este ajuste no inspecciona otros proveedores de Open WebUI, sus funciones opcionales en línea ni el tráfico de Continue. La guía sin conexión de Continue indica que desactives Allow Anonymous Telemetry, uses modelos locales y reinicies VS Code. Revisa las conexiones de cada aplicación antes de utilizar información sensible. Una URL de bucle local no constituye por sí sola una auditoría de red.

Comprueba la licencia de Docker Desktop para tu uso real. Es gratuito para uso personal, educativo y de código abierto no comercial, así como para pequeñas empresas con menos de 250 empleados Y menos de 10 millones de dólares de ingresos anuales. El uso profesional en organizaciones mayores y administraciones exige suscripción de pago. La licencia Apache 2.0 del modelo es independiente. El espacio, la memoria, el ancho de banda y la electricidad siguen siendo recursos necesarios; esta guía no midió costes ni rendimiento.

Para una explicación limitada al terminal y la API de Ollama, consulta Ejecuta un modelo Ollama local y comprueba su API de chat. Realiza un cambio comprobado en Claude Code con un modelo Ollama local trata otro cliente de programación.

Fuentes y lecturas adicionales