Documentación

Documentación

Factory Droid

Los modelos personalizados de Droid se configuran en un array JSON con tres campos obligatorios. El que suele interpretarse mal es baseUrl, porque su formato correcto depende de cuál de los tres valores de proveedor haya elegido.

Una entrada customModels en ~/.factory/settings.json — model, baseUrl y provider — coloca Droid sobre cualquier endpoint compatible con Anthropic Messages u OpenAI Chat Completions.

~/.factory/settings.json → customModels
// ~/.factory/settings.json  (Windows: %USERPROFILE%\.factory\settings.json)
{
  "customModels": [
    {
      "model": "claude-sonnet-5",
      "displayName": "Sonnet 5 [Kunavo]",
      "baseUrl": "https://api.kunavo.com",
      "apiKey": "${KUNAVO_API_KEY}",
      "provider": "anthropic"
    },
    {
      "model": "gpt-5-6-sol",
      "displayName": "GPT-5.6 Sol [Kunavo]",
      "baseUrl": "https://api.kunavo.com/v1",
      "apiKey": "${KUNAVO_API_KEY}",
      "provider": "generic-chat-completion-api"
    }
  ]
}

// Then, in the shell Droid starts from:
//   export KUNAVO_API_KEY=sk-kn-...
// ${VAR_NAME} expansion is a settings.json feature. It does NOT apply to the
// legacy ~/.factory/config.json, which Factory still loads and merges.
El /v1 corresponde a una entrada, no a la otra. La documentación de Factory lo aclara con una tabla, no con una frase: su referencia de proveedores indica https://api.anthropic.com —origen, sin ruta— para provider: "anthropic", mientras que https://api.openai.com/v1, https://openrouter.ai/api/v1 y https://api.groq.com/openai/v1 llevan la raíz /v1. Droid añade la ruta por su cuenta, así que la entrada de Anthropic anterior lleva el origen sin más, y la entrada de Chat Completions es /v1. Poner /v1 en la de Anthropic solicita /v1/v1/messages, que devuelve un 404 y no un error de autenticación; consulta la referencia de URL base.
Esta configuración se obtuvo de la propia documentación de Factory en la fecha indicada abajo. Kunavo no ha ejecutado la CLI de Droid contra su endpoint: ni una sesión, ni un turno transmitido en streaming, ni un ciclo completo de llamadas a herramientas; lo mismo se aplica a todos los clientes de esta familia. Una página de configuración publicada no equivale a una prueba. Factory incluye la advertencia equivalente por su parte: según sus propias palabras, solo los modelos de Anthropic y OpenAI en sus API oficiales están «completamente probados y evaluados». La curl de abajo es la parte que puedes comprobar en diez segundos; el comportamiento del cliente depende de ti y de Factory.
Se puede omitir authMode. Factory documenta que el valor predeterminado, provider-default, envía la credencial en x-api-key, y el endpoint Messages de Kunavo también acepta ese encabezado, además de Authorization: Bearer. Si alguna vez quieres especificar el formato bearer, Factory documenta authMode: "bearer" para provider: "anthropic", y también funciona aquí.
¿Aún no tienes una clave? Crea una cuenta de Kunavo, genera una clave (empieza por sk-kn-) y añade crédito desde $10; las llamadas se pagan con ese saldo y las llamadas fallidas no se facturan. El panel se abre entonces en la configuración de Factory Droid.

Paso a paso

  1. Crea una clave en /app/keys y cópiala: solo se muestra una vez. Expórtala como KUNAVO_API_KEY en la shell desde la que inicies Droid, para que la clave no se guarde nunca en un archivo de configuración.
  2. Abre ~/.factory/settings.json (créalo si no existe) y añade el array customModels de arriba. Factory marca exactamente tres campos como obligatorios: model, baseUrl y provider; displayName es la etiqueta que muestra el selector.
  3. Comprueba que provider esté escrito correctamente. Debe ser exactamente uno de estos valores: anthropic, openai o generic-chat-completion-api; la sección de solución de problemas de Factory indica que un error tipográfico en ese campo provoca el error "Invalid provider".
  4. Ejecuta /model en la CLI. Tus entradas aparecerán en una sección independiente llamada Modelos personalizados, debajo de los modelos propios de Factory y con la etiqueta displayName que configuraste. Factory supervisa el archivo de configuración, así que basta con guardarlo; no hace falta reiniciar.
  5. Asígnale una tarea que lea y modifique un archivo, en lugar de limitarte a saludar. Droid recurre a las llamadas a herramientas para casi todo lo que hace, y un turno de chat simple no pondrá eso a prueba. Después ejecuta /cost, donde Factory muestra las tasas de aciertos de caché. Kunavo ofrece de forma nativa los marcadores cache_control de Anthropic, y la propia nota de Factory indica que, con el proveedor genérico Chat Completions, el almacenamiento en caché «varía según el proveedor y no se puede garantizar».

Comprobado con Página de modelos personalizados (BYOK) de Factory el 21 de septiembre de 2026. La configuración de terceros puede cambiar; si el nombre de un campo ya no coincide con lo que ves, esa página es la autoridad, no esta.

Esta es la versión breve. El tutorial completo —elección del modelo, coste de una sesión real y modos de fallo— está en la guía de costos de Factory Droid.

Verifica antes de depurar el cliente

Una solicitud determina si el fallo está en el endpoint, la clave o el archivo de configuración. Si devuelve JSON, la misma URL base y la misma clave funcionan en Factory Droid.

# Settles whether a failure is the endpoint, the key, or the client.
curl -sS https://api.kunavo.com/v1/messages \
  -H "Authorization: Bearer sk-kn-..." \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{"model":"claude-sonnet-5","max_tokens":16,"messages":[{"role":"user","content":"ping"}]}'

Qué ID de modelo introducir en el campo

Todos los modelos de texto están disponibles mediante un ID de modelo; la lista activa está en GET /v1/models, y el catálogo con precios está en la página de modelos. Las tarifas son USD por 1M de tokens, entrada / salida.

ID de modeloEntrada / salida de KunavoDónde encaja en Factory Droid
claude-sonnet-5$1.40 / $7.00el modelo de trabajo predeterminado: va en la entrada provider: "anthropic"
claude-opus-5$3.50 / $17.50planificar un cambio en el que equivocarse saldría caro; misma entrada de anthropic
claude-haiku-4-5$0.70 / $3.50turnos baratos y triaje de archivos, donde domina el volumen; misma entrada de anthropic
gpt-5-6-sol$2.00 / $12.00una segunda opinión de otra familia: requiere la entrada generic-chat-completion-api
La facturación es por token desde un saldo prepago, sin cuota mensual; consulta facturación. Con contexto repetido —que constituye la mayor parte de lo que envía un editor o cliente de chat—, la caché de indicaciones cambia más la factura que la elección del modelo.

A qué no da acceso un modelo personalizado en Droid

Hay tres limitaciones que se describen en las propias páginas de Factory. Cada una modifica lo que debes esperar de la configuración anterior, no si esta funciona.

  • Solo está disponible en entornos locales. La página BYOK de Factory indica que los modelos personalizados están disponibles en la CLI de Droid y en la aplicación de escritorio, que leen tu archivo local settings.json, y que «no aparecen en las plataformas web alojadas ni móviles de Factory». Las tareas delegadas desde el producto alojado siguen ejecutándose con inferencia facturada por Factory, independientemente de la clave que hayas configurado aquí.
  • Un administrador puede desactivarlo. Los controles empresariales de Factory documentan modelPolicy.allowCustomModels y allowedBaseUrls, que desactivan por completo el uso de BYOK por parte de los usuarios o restringen todos los modelos personalizados a un único host aprobado. Si usas un equipo administrado, compruébalo antes de investigar el archivo.
  • La cuota del plan se sigue aplicando. Esta clave se añade al plan; no lo sustituye. La guía de costos explica qué cobra Factory por encima de su límite de BYOK y cuál es ese límite; esta página no vuelve a calcular esos importes.

Hay un detalle que conviene conocer antes de copiar una configuración de otro sitio: Factory sigue cargando el archivo heredado ~/.factory/config.json con custom_models y base_url en snake_case, y lo combina con settings.json. Además, documenta que la expansión de ${VAR_NAME} no se aplica en ese archivo. Si escribes una clave como marcador de posición allí, se envía literalmente. Usa settings.json.

Preguntas frecuentes

¿Cómo añado un endpoint de API personalizado a Factory Droid?

Edita ~/.factory/settings.json (%USERPROFILE%\.factory\settings.json en Windows) y añade un array customModels. Cada entrada requiere tres campos obligatorios —model, baseUrl y provider— y puede incluir campos opcionales como displayName, apiKey, authMode, maxOutputTokens y extraHeaders. No hay un formulario de configuración: la interfaz es el archivo JSON. Factory supervisa el archivo, así que, después de guardarlo, ejecuta /model en la CLI y la entrada aparecerá bajo un encabezado independiente, «Modelos personalizados».

¿La baseUrl de Factory Droid debe terminar en /v1?

Depende del valor de provider; la documentación de Factory lo aclara con la tabla de referencia de proveedores, no con una frase. La fila de Anthropic indica https://api.anthropic.com sin ruta, así que el proveedor "anthropic" usa el origen sin más: https://api.kunavo.com para Kunavo. Todas las filas de Chat Completions de esa tabla llevan una raíz /v1 (https://api.openai.com/v1, https://openrouter.ai/api/v1), así que el proveedor "generic-chat-completion-api" usa https://api.kunavo.com/v1. Droid añade la ruta por su cuenta, de modo que incluir /v1 en la entrada de Anthropic genera /v1/v1/messages y devuelve 404, no un error de autenticación.

¿Qué valor de provider debo usar para los modelos Claude en un endpoint de terceros?

Usa "anthropic". Factory documenta tres valores de provider, cada uno asociado a un protocolo de comunicación: "anthropic" para la API Messages de Anthropic en /v1/messages, "openai" para la API Responses de OpenAI y "generic-chat-completion-api" para OpenAI Chat Completions. El valor identifica el protocolo que admite el endpoint, no quién te factura. Por eso, una pasarela que responda en /v1/messages requiere "anthropic", independientemente de a quién pertenezca la cuenta asociada a la clave. Factory indica que se use "generic-chat-completion-api" salvo que se llame a la API oficial de OpenAI o Anthropic; eso se refiere al protocolo disponible, y si un endpoint admite ambos, puedes elegir.

¿Por qué Factory Droid indica que el proveedor no es válido o no muestra mi modelo personalizado?

La sección de solución de problemas de Factory menciona tres causas. Si un modelo no aparece en el selector, normalmente se debe a un error de sintaxis JSON en settings.json o a que falta un campo obligatorio: model, baseUrl o provider. El error «Invalid provider» indica un problema de escritura: el valor debe ser exactamente anthropic, openai o generic-chat-completion-api. Un error de autenticación apunta a la clave o a la URL base; Factory recomienda confirmar que la URL base coincida con la documentación de tu proveedor. Primero determina cuál es el problema fuera del cliente con el comando curl de arriba: si recibes JSON, el endpoint y la clave funcionan y el fallo está en el archivo de configuración.