Al configurar modelos personalizados en Continue, la clave es a la vez el pase de entrada y el límite del costo y de la seguridad. Si se crea una clave sin criterio, las consecuencias habituales son un consumo anómalo del límite, una atribución confusa del uso por miembro y claves antiguas que siguen activas después de que alguien deja el equipo.

En 2026, Continue fue adquirida por Cursor, el repositorio del proyecto dejó de tener mantenimiento activo y el Hub gestionado y el servicio de inicio de sesión se retiraron. Por eso, la gestión de claves vuelve a ser local: un config.yaml, un .env y varias claves de gateway separadas por persona y por uso. Este artículo explica la creación, el almacenamiento, los varios modelos, la rotación, las políticas y la resolución de problemas.

Estado: en junio de 2026, Cursor adquirió Continue; el repositorio del proyecto pasó a solo lectura y dejó de tener mantenimiento activo; el Hub gestionado y el servicio de inicio de sesión se retiraron. La extensión y la CLI todavía pueden usarse, pero ya no hay mantenimiento activo, así que las correcciones de seguridad deben evaluarse por cuenta propia.

Marcas: Continue es una marca de Continue Dev, Inc.; Cursor es una marca de Anysphere, Inc. Este artículo solo ofrece una explicación técnica y no mantiene relación de afiliación ni de agencia con las empresas mencionadas; el estado del producto y los campos de configuración se rigen por las páginas del proveedor y la versión instalada actual.

1. Primero distingue cuántos tipos de clave hay en Continue

La expresión "Continue API Key" se usa a menudo de forma ambigua. Al configurar, hay al menos tres tipos de credenciales, con origen y uso completamente distintos:

Tipo Quién la emite Uso ¿Sigue siendo aplicable?
Clave de gateway Servicios compatibles como ZSQH AI Gateway Llamar a varios modelos mediante el protocolo compatible con OpenAI Sí, es el tema principal de este artículo
Clave de proveedor OpenAI, Anthropic, Google, etc. Conectarse directamente a la interfaz del proveedor correspondiente Sí, con otros campos y direcciones
Modelo local Sin clave, como Ollama o LM Studio Inferencia en el equipo o en la red interna Sí, no implica claves
Cuenta de Continue o credencial del Hub Antigua plataforma de Continue Inicio de sesión, asistentes compartidos, sincronización de configuración de equipo Ya no aplica tras el cierre del Hub

Por lo tanto, "Continue API Key" suele referirse a la credencial del lado del modelo que escribes en el campo apiKey, no a una clave universal emitida por el editor. Este artículo habla de la clave del gateway; suele empezar por sk-, pero no sirve para iniciar sesión en Continue ni para llamar a la interfaz de la antigua plataforma.

2. Crear una clave de gateway: define los límites antes de copiar

Antes de crearla, ten claro para quién es, en qué proyecto se usará y cuánto puede consumir como máximo.

  1. Abre la página de registro de ZSQH AI Gateway, regístrate e inicia sesión en la consola.
  2. Entra en "API Keys" y crea una clave nueva.
  3. Incluye en el nombre el usuario y el dispositivo, por ejemplo continue-zhang-macbook; no escribas solo test.
  4. Define un límite de gasto y una fecha de caducidad; si la consola permite limitar el alcance de modelos, restringe los disponibles según el proyecto.
  5. Confirma el saldo o el estado de recarga para no descubrir al terminar la configuración que no se puede llamar a la API.
  6. Copia la clave en un gestor de contraseñas; no la envíes primero por herramientas de chat, tickets o grupos.

Se recomienda una clave por persona y una por dispositivo. Compartir una clave parece cómodo, pero cuando hay un consumo anómalo no se puede identificar a la persona y, tras una salida, tampoco es fácil decidir si hay que desactivarla por completo. Los modelos y los precios cambian; toma como referencia la página de precios de modelos.

3. Guarda la clave en .env, no en config.yaml

Continue permite hacer referencia a la clave dentro de config.yaml con la sintaxis de Mustache:

apiKey: ${{ secrets.ZSQH_API_KEY }}

Después define el valor de la variable en el archivo .env:

# ~/.continue/.env
ZSQH_API_KEY=sk-tu-clave-del-gateway

Ten en cuenta algunos detalles:

  • No pongas comillas en el valor de .env; usa el formato KEY=value que indica la FAQ del proyecto.
  • No subas .env a Git; añádelo a .gitignore.
  • En macOS/Linux puedes ejecutar chmod 600 ~/.continue/.env para restringir los permisos del archivo.
  • Después de cambiar .env, reinicia el IDE para que la extensión lo vuelva a leer.
  • Si config.yaml se va a subir a un repositorio, deja solo el marcador ${{ secrets.nombre }} y no escribas la clave en texto plano.

Escribir la clave en el YAML también funciona, pero si el archivo de configuración se copia, se captura en pantalla o se sube al repositorio, la clave se difunde con él. Con .env y un marcador, la configuración se puede compartir y la clave permanece en el entorno personal.

4. Configuración multimodelo: una clave para varios roles

models en Continue es una lista que puede contener varias entradas de modelo. Cada entrada tiene su propio name, model y roles, y puede reutilizar la misma clave:

name: zsqh-continue
version: 0.0.1
schema: v1

models:
  - name: Chat y edición principales
    provider: openai
    model: YOUR_MODEL_ID
    apiBase: https://ai.zhongshangqihang.com/v1
    apiKey: ${{ secrets.ZSQH_API_KEY }}
    roles: [chat, edit, apply]
    capabilities: [tool_use]

  - name: Autocompletado
    provider: openai
    model: YOUR_FIM_MODEL_ID
    apiBase: https://ai.zhongshangqihang.com/v1
    apiKey: ${{ secrets.ZSQH_AUTOCOMPLETE_KEY }}
    roles: [autocomplete]

Las dos formas de separar claves tienen usos distintos:

  • Una clave para varios modelos: adecuada para desarrolladores individuales; la gestión es simple y la facturación queda centralizada.
  • Claves separadas por rol: adecuada para equipos. Chat, autocompletado y embeddings usan una clave cada uno, y ante un consumo anómalo se identifica rápidamente qué tipo de solicitud lo provocó.

Separar las claves no es un requisito obligatorio, sino un medio para atribuir costos. En equipos pequeños, empieza separando por persona; cuando crezca el uso del autocompletado, separa autocomplete en su propia clave.

El modelo de autocompletado debe admitir FIM; no lo sustituyas directamente por un modelo de chat solo porque "también sabe escribir código". Si el gateway no tiene un modelo FIM adecuado, puedes dejar que el gateway cubra chat, edit y apply, y usar un modelo local pequeño para el autocompletado.

5. Variables de entorno y orden de resolución de la clave

Cuando Continue encuentra ${{ secrets.X }}, busca en este orden:

  1. El .env de la raíz del espacio de trabajo.
  2. El .continue/.env del espacio de trabajo.
  3. El .env global de ~/.continue/.env.
  4. Las variables de entorno del proceso.

Hay dos trampas habituales.

Primera: la extensión del IDE normalmente no lee las variables que exportas en la terminal. La FAQ del proyecto indica claramente que ejecutar export OPENAI_API_KEY=... en el shell no hace que Continue en VS Code o JetBrains lo lea; las variables de entorno del proceso afectan principalmente a Continue CLI. Por eso, "ya lo configuré en la terminal" no sirve como conclusión de un diagnóstico: sigue escribiendo el .env.

Segunda: el .env del espacio de trabajo tiene prioridad sobre el .env global. Al abrir un repositorio que no es de confianza, fíjate si trae su propio .env; el equipo debe añadir .env a las reglas de exclusión.

6. Rotación, revocación y salidas del equipo

Una clave no debería crearse una vez y usarse para siempre. Se recomienda rotarla cada trimestre y hacerlo de inmediato si cambia un miembro, se pierde un dispositivo o se sospecha una filtración:

  1. Crea en la consola del gateway una clave nueva con los mismos permisos y el mismo límite.
  2. Escribe la clave nueva en el .env correspondiente y conserva la antigua un tiempo.
  3. Reinicia el IDE y verifica Chat, Edit y el autocompletado por separado.
  4. Confirma en el registro del gateway que la clave nueva ya genera solicitudes normales.
  5. Observa uno o dos días para comprobar que no queda ningún cliente sin migrar.
  6. Desactiva o elimina la clave antigua en la consola.
  7. Registra la fecha de rotación, la persona responsable y el alcance afectado.

Si sospechas que la clave se filtró, invierte el orden: primero desactiva y después investiga. No sigas usándola mientras observas; el consumo anómalo no esperará a que confirmes nada. Tras desactivarla, revisa el registro de solicitudes, la curva de uso y los registros de llamadas a modelos para confirmar si hubo llamadas no previstas y luego decide si ajustas límites o reglas de alerta.

Cuando alguien deja el equipo, cambia de dispositivo o termina un proyecto, desactiva su clave ese mismo día y recuérdale que borre el .env local. Las claves en dispositivos compartidos no deben conservarse a largo plazo.

7. Almacenamiento de claves y políticas de equipo

  • Guarda la clave solo en el gestor de contraseñas y en .env; no debe aparecer en código, capturas, tickets, historiales de chat ni grabaciones de pantalla.
  • Una clave por persona, con límite de gasto y caducidad por proyecto; crea claves separadas para cuentas de servicio compartidas y limita su distribución.
  • La plantilla de configuración puede ir al repositorio, pero solo con ${{ secrets.nombre }}; cada miembro completa el valor en su propio .env.
  • Haz una conciliación mensual: revisa el consumo por clave, por modelo y por miembro; ante una anomalía, desactiva primero y luego investiga.
  • Mantén una tabla de correspondencia entre modelos y claves para el equipo, con uso, responsable, límite y fecha de rotación.
  • Continue ya no tiene mantenimiento; no delegues la gestión de claves en las funciones de equipo del propio plugin. Los permisos, la auditoría y la revocación se hacen en el gateway.
  • Los registros del gateway pueden contener metadatos de las solicitudes. Si hay código sensible, confirma primero la política de retención y de registros del gateway y después decide qué proyectos pueden conectarse.

La clave de una política de seguridad es responder tres preguntas: de quién es esta clave, cuánto puede usar y cómo se detiene si hay un problema.

8. Resolución de problemas: 401 y configuración que no surte efecto

Ante un 401, revisa en este orden:

  1. Si existe .env y si la ruta es ~/.continue/.env o el .env del espacio de trabajo.
  2. Si el nombre de la variable coincide exactamente con ${{ secrets.nombre }} de config.yaml, incluidas las mayúsculas.
  3. Si el valor tiene espacios, comillas o saltos de línea al principio o al final; copiar desde una ventana de chat es lo que más caracteres ocultos arrastra.
  4. Si reiniciaste el IDE después de cambiar .env.
  5. Si la clave está desactivada o caducada y si la cuenta tiene saldo disponible.
  6. Si se está cargando config.yaml o el antiguo config.json.
  7. Si apiBase apunta al entorno al que pertenece la clave; una clave de prueba configurada con la dirección de producción también puede devolver 401.

Otros síntomas habituales:

  • 404: apiBase tiene /v1 de más o de menos, o el ID de modelo no existe.
  • 429: se superó el límite de gasto, la tasa o la concurrencia; revisa primero el cuerpo del error y el uso, y no reintentes a ciegas.
  • El autocompletado falla por separado: comprueba si el modelo autocomplete es FIM y si usa otra clave.
  • Error al resolver uses:: el Hub ya cerró; cambia la referencia remota por provider, model y apiKey en línea.
  • El modelo nuevo no aparece en el selector: revisa la indentación del YAML, los roles y si la recarga se completó al guardar.

Durante el diagnóstico, cambia solo una variable a la vez. Si modificas la clave, la dirección y el modelo al mismo tiempo, aunque se recupere el servicio no sabrás cuál era la causa.

9. Preguntas frecuentes

¿La API Key de Continue la emite una cuenta de Continue?

No. Continue no emite por sí mismo una clave universal de modelo; lo que escribes es una credencial emitida por el proveedor del modelo o por el gateway. El inicio de sesión y el servicio gestionado de la antigua plataforma Continue ya se retiraron, así que menos aún pueden ser una fuente de claves.

¿Por qué el IDE sigue devolviendo 401 si exporté la clave en la terminal?

Continue en VS Code y JetBrains normalmente no lee las variables de entorno del shell. Escribe la clave en ~/.continue/.env o en el .env del espacio de trabajo y reinicia el IDE. Las variables de entorno del proceso afectan principalmente a la CLI.

¿Se puede escribir la clave directamente en config.yaml?

Funciona, pero no es recomendable. El archivo de configuración puede acabar en un repositorio, copiarse o capturarse en pantalla. Es preferible usar ${{ secrets.nombre }} como marcador y dejar el valor en texto plano en .env y en el gestor de contraseñas.

¿Hay que usar claves distintas para modelos distintos?

No es obligatorio. Una clave puede llamar a varios modelos. Separar claves sirve para distinguir responsabilidades, límites y facturación, y es útil cuando el equipo separa por persona, por rol o por proyecto.

¿Qué hago primero si se filtra una clave?

Desactiva esa clave en la consola del gateway y luego crea una nueva para sustituirla. Después revisa el uso y el registro de solicitudes para delimitar el alcance de las llamadas anómalas y decide si ajustas límites, reglas de alerta u otras credenciales.

Siguiente paso

Primero crea una clave de prueba en ZSQH AI Gateway, recorre el orden de "guardar en .env, referenciar en la configuración y reiniciar para verificar" y después conviértelo en una plantilla para el equipo. La disponibilidad de modelos y los precios vigentes se rigen por precios de modelos.

Lecturas relacionadas: