OpenCode es un asistente de programación para terminal que funciona con cualquier API compatible con OpenAI. Conecta OpenCode a una instancia local de Ollama que ejecute Gemma 4 y tendrás un asistente de programación gratuito que nunca envía tu código a ningún sitio.

Así se configura en un Mac con Apple Silicon: instala Ollama, descarga Gemma 4 y conéctalo a OpenCode.

Qué necesitas

  • Mac con Apple Silicon (M1/M2/M3/M4/M5) y al menos 16 GB de memoria unificada
  • macOS con Homebrew instalado
  • OpenCode instalado (consulta opencode.ai o instálalo mediante tu gestor de paquetes)

El modelo Gemma 4 8B por defecto usa unos 9,6 GB una vez cargado, así que 16 GB de memoria unificada te dan espacio suficiente para ejecutar Ollama y OpenCode sin problemas.

Paso 1: Instalar Ollama

brew install --cask ollama-app

Esto instala Ollama.app en /Applications/ y el CLI ollama en /opt/homebrew/bin/ollama.

Paso 2: Iniciar Ollama

open -a Ollama

Espera a que aparezca el icono en la barra de menús y luego comprueba que el servidor está en marcha:

ollama list

Paso 3: Descargar Gemma 4

ollama pull gemma4

Descarga unos 9,6 GB. Verifica:

ollama list
# NAME             ID              SIZE      MODIFIED
# gemma4:latest    ...             9.6 GB    ...

Pruébalo:

ollama run gemma4:latest "Hello, what model are you?"

Comprueba la aceleración por GPU:

ollama ps
# Should show CPU/GPU split, e.g. 14%/86% CPU/GPU

Ollama v0.19+ en Apple Silicon usa automáticamente el framework MLX de Apple para una inferencia más rápida.

Paso 4: Configurar OpenCode para usar Gemma 4

OpenCode usa un archivo de configuración en ~/.config/opencode/opencode.jsonc. Añade Ollama como proveedor personalizado:

{
  "provider": {
    "ollama": {
      "npm": "@ai-sdk/openai-compatible",
      "options": {
        "baseURL": "http://localhost:11434/v1"
      },
      "models": {
        "gemma4:latest": {}
      }
    }
  }
}

Como Ollama se ejecuta en local, no necesitas una clave de API. Pero OpenCode espera una entrada de autenticación, así que añade un marcador de posición en ~/.local/share/opencode/auth.json:

{
  "ollama": {
    "type": "api",
    "key": "ollama"
  }
}

Reinicia OpenCode y usa /models para cambiar a ollama/gemma4:latest.

Paso 5: Mantener Gemma 4 cargado

Ollama libera los modelos de la memoria tras 5 minutos de inactividad por defecto. Para un asistente de programación que usas durante todo el día, eso significa arranques en frío innecesarios.

Establece el keep-alive en indefinido:

launchctl setenv OLLAMA_KEEP_ALIVE "-1"

Reinicia Ollama para que surta efecto. Para que persista entre reinicios, añádelo a ~/.zshrc:

export OLLAMA_KEEP_ALIVE="-1"

Activa el arranque al iniciar sesión: haz clic en el icono de Ollama en la barra de menús → Abrir al iniciar sesión.

Precarga automática al arrancar

Crea un LaunchAgent para que Gemma 4 esté cargado y listo después de cada reinicio:

cat << 'EOF' > ~/Library/LaunchAgents/com.ollama.preload-gemma4.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.ollama.preload-gemma4</string>
    <key>ProgramArguments</key>
    <array>
        <string>/opt/homebrew/bin/ollama</string>
        <string>run</string>
        <string>gemma4:latest</string>
        <string></string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>StartInterval</key>
    <integer>300</integer>
    <key>StandardOutPath</key>
    <string>/tmp/ollama-preload.log</string>
    <key>StandardErrorPath</key>
    <string>/tmp/ollama-preload.log</string>
</dict>
</plist>
EOF

launchctl load ~/Library/LaunchAgents/com.ollama.preload-gemma4.plist

Esto envía un ping al modelo cada 5 minutos con un prompt vacío para mantenerlo en memoria.

Qué funciona bien con Gemma 4 en OpenCode

Gemma 4 8B es gratuito y local, y resulta sorprendentemente útil para el trabajo diario de programación:

  • Explicaciones de código. Pregunta qué hace una función, cómo está estructurado un módulo o con qué coincide una expresión regular. Las respuestas son claras y normalmente precisas para bases de código estándar.
  • Ediciones rápidas. Corrige una errata, actualiza un import, añade un campo a una definición de tipo, renombra una variable. Los cambios en un solo archivo son su punto fuerte.
  • Generación de boilerplate. Archivos de configuración, stubs de prueba, scaffolding de rutas de API, plantillas de Dockerfile. Patrones comunes que no requieren mucho razonamiento.
  • Ayuda con comandos de shell. ¿Olvidaste un flag de git o un filtro de jq? Gemma 4 te da el comando sin tener que recurrir a Stack Overflow.

Dónde se queda corto

  • Razonamiento en varios pasos. Las tareas que requieren planificar entre varios archivos o entender un flujo de control complejo tienden a producir resultados incompletos.
  • Refactorizaciones grandes. Si necesitas cambios coordinados en toda una base de código, el modelo de 8B pierde coherencia. Funciona archivo a archivo, pero no mantiene la visión de conjunto.
  • Casos límite y bugs sutiles. Gemma 4 detecta problemas obvios, pero pasa por alto el tipo de bugs que requieren conocimiento profundo del dominio o razonamiento sobre casos extremos.

Ve más allá: añade Haimaker para modelos en la nube

Gemma 4 en local cubre lo básico. Cuando te topes con algo que no puede manejar — depuración compleja, refactorizaciones que afectan a varios archivos, cualquier cosa que requiera razonamiento profundo — querrás un modelo en la nube. Haimaker te da una sola clave de API para Claude Opus, GPT-5, Gemini Pro y otros.

Añade Haimaker como segundo proveedor junto a Ollama:

{
  "provider": {
    "ollama": {
      "npm": "@ai-sdk/openai-compatible",
      "options": {
        "baseURL": "http://localhost:11434/v1"
      },
      "models": {
        "gemma4:latest": {}
      }
    },
    "haimaker": {
      "npm": "@ai-sdk/openai-compatible",
      "options": {
        "baseURL": "https://api.haimaker.ai/v1"
      },
      "models": {
        "anthropic/claude-sonnet-4-6": {},
        "openai/gpt-5": {},
        "google/gemini-2.5-pro": {}
      }
    }
  }
}

Añade tu clave de API de Haimaker a ~/.local/share/opencode/auth.json:

{
  "ollama": {
    "type": "api",
    "key": "ollama"
  },
  "haimaker": {
    "type": "api",
    "key": "YOUR_HAIMAKER_API_KEY"
  }
}

Ahora puedes alternar entre modelos locales y en la nube con /models en OpenCode. Usa Gemma 4 para las tareas rápidas. Cambia a Sonnet o GPT-5 cuando la tarea se complique.

Regístrate en haimaker.ai para obtener tu clave de API y explorar el catálogo de modelos.

OBTÉN TU CLAVE DE API DE HAIMAKER

Solución de problemas

El proveedor no aparece en /models. Reinicia OpenCode después de editar los archivos de configuración. Los cambios en opencode.jsonc no se aplican mientras OpenCode está abierto.

Error “Model not found”. Asegúrate de que el ID del modelo en tu configuración coincide exactamente con lo que reporta Ollama. Ejecuta ollama list y usa el nombre tal como aparece — normalmente gemma4:latest.

Errores de autenticación con Ollama. Aunque Ollama no necesita autenticación, el sistema de proveedores de OpenCode espera una entrada en auth.json. El marcador de posición "key": "ollama" es suficiente.

Respuestas lentas. Asegúrate de tener Ollama v0.19+ para obtener aceleración MLX en Apple Silicon. Ejecuta ollama --version para comprobarlo. Cierra también las aplicaciones que compiten por la memoria unificada — los navegadores con muchas pestañas suelen ser los principales responsables.

Problemas con la ventana de contexto. Gemma 4 admite ventanas de contexto grandes, pero en hardware de 16 GB mantén las entradas por debajo de 32K tokens para una calidad de salida estable. Si notas que la calidad de las respuestas baja con prompts largos, probablemente se deba a eso.

Comandos útiles de Ollama

ComandoDescripción
ollama listLista los modelos descargados
ollama psMuestra los modelos en ejecución y el uso de memoria
ollama run gemma4:latestChat interactivo
ollama stop gemma4:latestLibera el modelo de la memoria
ollama pull gemma4:latestActualiza a la última versión
ollama rm gemma4:latestElimina el modelo

¿Ya usas Haimaker con OpenCode? Consulta la guía completa de configuración de proveedores personalizados para añadir más modelos.