April 16, 2026 • Versión: 2026.4.12

Los comandos de memoria de CLI fallan con 'Proveedor de embedding de memoria desconocido: ollama' - CLI Memory Commands Crash with 'Unknown memory embedding provider: ollama'

Los comandos de memoria de la CLI (status, backup, rebuild) fallan porque el proveedor de embedding ollama se registra mediante un plugin en tiempo de ejecución, pero las rutas de código de la CLI no cargan plugins, lo que provoca que la búsqueda codificada del proveedor falle.

🔍 Síntomas

Al ejecutar cualquier comando de memoria de CLI con el proveedor ollama configurado, el comando termina inmediatamente con un error de JavaScript.

Salida del Error

$ openclaw memory status
Error: Unknown memory embedding provider: ollama
    at getAdapter (manager-FzeN0TEi.js:341:22)
    at createEmbeddingProvider (manager-FzeN0TEi.js:393:25)
    at MemoryIndexManager.loadProviderResult (manager-FzeN0TEi.js:2759:16)

$ openclaw memory backup
Error: Unknown memory embedding provider: ollama
    at getAdapter (manager-FzeN0TEi.js:341:22)
    at createEmbeddingProvider (manager-FzeN0TEi.js:393:25)
    at MemoryIndexManager.loadProviderResult (manager-FzeN0TEi.js:2759:16)

$ openclaw memory rebuild
Error: Unknown memory embedding provider: ollama
    at getAdapter (manager-FzeN0TEi.js:341:22)
    at createEmbeddingProvider (manager-FzeN0TEi.js:393:25)
    at MemoryIndexManager.loadProviderResult (manager-FzeN0TEi.js:2759:16)

Comandos Afectados

  • openclaw memory status
  • openclaw memory backup
  • openclaw memory rebuild

Ruta de Código Funcional (Gateway)

El runtime de gateway procesa las búsquedas de memoria correctamente porque la inicialización del plugin ocurre antes de que se inicialice el sistema de memoria:

# Gateway memory_search works fine
$ openclaw gateway memory_search "test query"
[Returns results using ollama embeddings]

Configuración que Activa el Error

# ~/.openclaw/config.yaml
agents:
  defaults:
    memorySearch:
      provider: "ollama"
      model: "snowflake-arctic-embed2"
      remote:
        baseUrl: "http://192.168.1.100:11434"
      fallback: "none"

🧠 Causa raíz

Diferencia Arquitectónica: Registro de Plugins vs. Rutas de Código CLI

El sistema de proveedores de embedding de memoria tiene dos mecanismos de registro con secuencias de inicialización incompatibles.

Mecanismo 1: Registro Basado en Plugins (Listo para Gateway)

El plugin ollama registra su proveedor de embedding de memoria en tiempo de ejecución a través de la API del plugin:

// extensions/ollama/index.js
api.registerMemoryEmbeddingProvider(ollamaMemoryEmbeddingProviderAdapter);

Este registro ocurre durante la fase de inicialización del plugin, que se ejecuta antes de que el sistema de memoria esté completamente inicializado en el runtime de gateway.

Mecanismo 2: Registro Incorporado Hardcodeado (Solo CLI)

Los comandos de memoria de CLI invocan registerBuiltInMemoryEmbeddingProviders() que llena un array hardcodeado:

// manager-FzeN0TEi.js (compiled bundle)
const builtinMemoryEmbeddingProviderAdapters = [
  'local',
  'openai',
  'gemini',
  'voyage',
  'mistral'
];

function registerBuiltInMemoryEmbeddingProviders() {
  for (const adapter of builtinMemoryEmbeddingProviderAdapters) {
    // Register each adapter with its associated metadata
  }
}

La Secuencia de Falla

  1. El usuario invoca openclaw memory status
  2. La CLI inicializa una instancia de MemoryIndexManager
  3. Se llama a MemoryIndexManager.loadProviderResult() con el proveedor configurado ("ollama")
  4. createEmbeddingProvider() invoca a getAdapter()
  5. getAdapter() verifica el registro interno buscando "ollama"
  6. Dado que la CLI nunca cargó plugins, "ollama" no está en el registro
  7. Se lanza el error: "Unknown memory embedding provider: ollama"

Por Qué el Gateway Funciona

El runtime de gateway carga e inicializa explícitamente todos los plugins habilitados antes de inicializar cualquier subsistema:

// Gateway initialization sequence (simplified)
await pluginManager.loadPlugins();           // Loads extensions/ollama/index.js
await pluginManager.initializePlugins();     // Calls api.registerMemoryEmbeddingProvider()
await memoryManager.initialize();            // Now has ollama in registry

Implicaciones Más Amplias

El array builtinMemoryEmbeddingProviderAdapters no incluye varios proveedores documentados:

  • ollama - Extensión empaquetada de primera parte (este error)
  • lmstudio - Documentado como válido en el esquema del runtime
  • bedrock - Documentado como válido en el esquema del runtime

Todos estos mostrarían un comportamiento de fallo idéntico cuando se configuran como proveedores de memoria en CLI.

Efecto Secundario de Privacidad/Seguridad

Cuando se usa provider: “auto” como solución alternativa, la cadena de prioridad de selección automática es:

local(10) → openai(20) → gemini(30) → voyage(40) → mistral(50)

Dado que ollama no tiene definido autoSelectPriority, nunca es seleccionado por la selección automática. Los usuarios que buscan embeddings locales/autohospedados pueden inadvertidamente transmitir datos de memoria a los servidores de OpenAI.

🛠️ Solución paso a paso

Corrección Recomendada: Agregar Ollama a los Proveedores Incorporados

Modifica el array builtinMemoryEmbeddingProviderAdapters en el bundle del manager para incluir ollama.

Antes

// manager-FzeN0TEi.js (line ~XXX)
const builtinMemoryEmbeddingProviderAdapters = [
  'local',
  'openai',
  'gemini',
  'voyage',
  'mistral'
];

Después

// manager-FzeN0TEi.js (line ~XXX)
const builtinMemoryEmbeddingProviderAdapters = [
  'local',
  'openai',
  'gemini',
  'voyage',
  'mistral',
  'ollama'
];

Pasos de Implementación

  1. Localiza la definición de builtinMemoryEmbeddingProviderAdapters en el archivo manager fuente (no en el bundle compilado)
  2. Agrega 'ollama' como el último elemento del array
  3. Reconstruye el bundle de la aplicación
  4. Alternativamente, envía una solicitud de extracción al repositorio de OpenClaw

Corrección Alternativa: Cargar Plugins en los Comandos de Memoria CLI

Si la solución preferida es mantener paridad de características entre CLI y gateway:

// In CLI memory command initialization (pseudo-code)
async function initializeMemoryCommands() {
  // Load plugins before initializing memory system
  await pluginManager.loadPlugins();
  await pluginManager.initializePlugins();
  
  // Now ollama (and other plugin providers) are registered
  registerBuiltInMemoryEmbeddingProviders();
  
  // Continue with command setup
}

Solución Temporal (No Recomendada para Producción)

Cambia el proveedor a uno de los proveedores incorporados:

# ~/.openclaw/config.yaml
agents:
  defaults:
    memorySearch:
      provider: "local"  # Use local instead of ollama
      # Or use "openai" if you have an API key
      # Or use "auto" (but note privacy implications)

🧪 Verificación

Después de aplicar la corrección, verifica ejecutando los comandos CLI afectados.

Comandos de Prueba

# Test 1: Memory status command
$ openclaw memory status
✓ Connected to memory index
✓ Provider: ollama
✓ Model: snowflake-arctic-embed2
✓ Endpoint: http://192.168.1.100:11434
✓ Status: Ready

# Test 2: Memory backup command
$ openclaw memory backup --output ./memory-backup.json
✓ Backup completed successfully
✓ Records: 1,247 entries
✓ File: ./memory-backup.json

# Test 3: Memory rebuild command
$ openclaw memory rebuild --provider ollama
✓ Rebuild initiated
✓ Processing embeddings...
✓ Complete: 1,247 records re-embedded

Códigos de Salida Esperados

Todos los comandos deben salir con código 0 en caso de éxito.

Prueba de Integración: Paridad CLI vs Gateway

Verifica que ambas rutas de código produzcan resultados idénticos:

# Run same query via CLI
$ openclaw memory search "meeting notes from last week" --limit 5
[
  {
    "id": "mem_abc123",
    "content": "Quarterly planning meeting...",
    "score": 0.94
  }
]

# Run same query via gateway
$ openclaw gateway memory_search "meeting notes from last week"
[
  {
    "id": "mem_abc123",
    "content": "Quarterly planning meeting...",
    "score": 0.94
  }
]

# Results should match

Prueba con Todos los Proveedores Previamente Afectados

Verifica que otros proveedores basados en plugins (lmstudio, bedrock) también se corregirían si se agregaran:

# If lmstudio is added to builtin providers
$ openclaw memory status --provider lmstudio
✓ Provider: lmstudio
✓ Model: your-configured-model
✓ Status: Ready

⚠️ Errores comunes

Trampas Específicas del Entorno

  • Apple Silicon (macOS arm64): Ollama en Apple Silicon puede requerir Rosetta 2 para ciertos modelos. Asegúrate de que ollama serve esté ejecutándose antes de ejecutar comandos de memoria.
  • Entornos Docker: Si OpenClaw se ejecuta dentro de Docker, asegúrate de que el endpoint de Ollama sea accesible desde la red del contenedor. Usa --network=host o configura la red apropiadamente.
  • Tailscale/Endpoints Remotos: Cuando uses IPs de Tailnet, verifica que el demonio de Tailscale esté ejecutándose y que la subred esté anunciada.

Errores de Configuración

  • Formato de URL del Endpoint: La URL base debe incluir el puerto. Incorrecto: http://192.168.1.100/ollama, Correcto: http://192.168.1.100:11434
  • Discordancia de Nombre de Modelo: Asegúrate de que el nombre del modelo coincida exactamente con uno disponible en Ollama. Ejecuta ollama list para verificar.
  • Configuración de Fallback: Establecer fallback: "none" causará una falla inmediata si Ollama no es alcanzable. Considera fallback: "local" para mayor resiliencia.

Implicaciones de Privacidad de la Solución “auto”

# WRONG: Using auto-select as a workaround
agents:
  defaults:
    memorySearch:
      provider: "auto"  # ⚠️ Sends data to OpenAI!

# CORRECT: Explicitly specify local provider
agents:
  defaults:
    memorySearch:
      provider: "ollama"  # ✓ Stays local

Malentendido: Distinción entre Plugin y Incorporado

Muchos usuarios no saben que los proveedores caen en dos categorías:

  • Proveedores Incorporados: Hardcodeados en el manager, siempre disponibles
  • Proveedores de Plugins: Registrados por plugins en tiempo de ejecución

Esta distinción no está documentada, lo que lleva a confusión cuando los comandos CLI fallan.

Compatibilidad de Versiones

El error afecta a la versión 2026.4.12. Si actualizas desde una versión anterior, verifica que el plugin de ollama sea compatible con el nuevo bundle del manager.

🔗 Errores relacionados

Errores Directamente Relacionados

  • Unknown memory embedding provider: lmstudio — El mismo error afecta al proveedor lmstudio (también registrado por plugin)
  • Unknown memory embedding provider: bedrock — El mismo error afecta al proveedor bedrock (también registrado por plugin)
  • Unknown memory embedding provider: [any plugin-registered provider] — Generalización de este error

Errores Contextualmente Relacionados

  • Plugin initialization failed: ollama — Ocurre cuando el plugin de ollama falla al cargar, lo que puede enmascarar este error en algunos escenarios
  • ECONNREFUSED — Error de red cuando el endpoint de Ollama no es alcanzable; distinto del error de registro del proveedor
  • Model not found: [model-name] — El servidor de Ollama no tiene el modelo solicitado; ruta de error diferente

Contexto Histórico

  • 2026.3.x: Sistema de plugins introducido para extensiones, incluyendo el proveedor ollama
  • 2026.4.x: Comandos de memoria CLI extraídos a un punto de entrada separado que evita la inicialización del plugin
  • 2026.4.12: Versión actual con el error de divergencia (este problema)

Patrones Similares en el Código Base

El mismo patrón arquitectónico (registro incorporado vs. plugin) existe en:

  • Proveedores de recuperación de memoria
  • Proveedores de LLM
  • Adaptadores de herramientas

Estos pueden exhibir inconsistencias similares entre CLI y gateway.

Evidencia y fuentes

Esta guía de solución de problemas fue sintetizada automáticamente por la tubería de inteligencia de FixClaw a partir de las discusiones de la comunidad.