Este runbook explica como dejar OPS listo para ejecutar tareas automaticas con OpenCode y modelos de OpenAI u otros proveedores compatibles.
Para automatismos de OPS, la opcion preferente es:
workspace guardada en OPS para opencode/openai.opencode.ChatGPT Plus/Pro sirve para usar OpenCode con autenticacion de usuario en el host, pero no sustituye por si solo una API key de OpenAI Platform para integraciones de servidor. Usarlo en un VPS compartido o futuro SaaS multitenant debe ser una decision explicita.
OpenCode Zen, OpenCode Go, OpenRouter, Minimax, Ollama, LM Studio u otros proveedores son opciones validas si se configuran como proveedor real. No deben ocultarse detras de aliases a OpenAI.
/connect, API keys, ChatGPT Plus/Pro, OpenCode Zen/Go y proveedores custom: https://opencode.ai/docs/providers/Antes de comprar o cambiar plan, revisar precios vigentes en la web del proveedor.
Comprar o activar billing de OpenAI Platform si el objetivo es que OPS ejecute tareas automaticas de servidor.
Checklist:
Puede usarse cuando el worker es personal o interno y se acepta una sesion local de usuario.
Checklist:
/connect;/models para verificar modelos disponibles.Riesgo operativo: la sesion vive en el host y puede caducar. Si caduca, OPS debe mostrarlo como auth bloqueada, no caer a Hermes ni cambiar proveedor.
Puede tener sentido si ofrece modelos, coste o fiabilidad mejores para coding.
Checklist:
/connect o configurar opencode.json;provider_slug real;metadata.env_var o env_bundle si el proveedor necesita una variable concreta;En OPS:
Credenciales. - agente: opencode
- provider: openai
- etiqueta: OpenAI Platform - OPS
- tipo: api_key
- scope: workspace
- usage: agent
- secreto: API key de OpenAI Platform
OPS inyectara esta clave como OPENAI_API_KEY solo durante la ejecucion de la tarea.
Para Minimax:
opencodeminimaxapi_keyworkspaceagentMINIMAX_API_KEYOPS inyectara MINIMAX_API_KEY.
Para OpenCode Go:
opencodeopencodeapi_keyworkspaceagentOPENCODE_API_KEYOPS inyectara OPENCODE_API_KEY.
Para un proveedor custom:
metadata.env_var si solo hace falta una variable;env_bundle si hacen falta varias variables;OPENCODE_AUTH_ENV_KEYS.Ejemplo de env_bundle:
MY_PROVIDER_API_KEY=...
MY_PROVIDER_BASE_URL=https://api.example.com/v1
Para usar API key de workspace no hace falta guardar la clave en ~/.local/share/opencode/auth.json; OPS la inyecta al lanzar la tarea.
El binario opencode debe existir en el worker.
Si se usa proveedor custom, crear opencode.json con el proveedor y modelo reales. No usar un alias que cambie de proveedor sin dejar rastro.
Ejemplo MiniMax validado en OPS:
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"minimax": {
"npm": "@ai-sdk/openai-compatible",
"name": "MiniMax",
"options": {
"baseURL": "https://api.minimax.io/v1",
"apiKey": "{env:MINIMAX_API_KEY}"
},
"models": {
"MiniMax-M2.7": {
"name": "MiniMax M2.7"
}
}
}
}
}
Nota: OpenCode conserva mayusculas en IDs de modelo. Usar minimax/MiniMax-M2.7, no minimax/minimax-m2.7.
En el host del worker, ajustar el override del servicio:
Environment="SUPPORTED_AGENT_SLUGS=opencode,hermes"
Environment="ALLOW_TASK_SCOPED_CREDENTIAL_AUTH=true"
Si se usa una variable custom para considerar OpenCode autenticado:
Environment="OPENCODE_AUTH_ENV_KEYS=MY_PROVIDER_API_KEY"
Configuracion interna validada:
Environment=SUPPORTED_AGENT_SLUGS=opencode,hermes
Environment=ALLOW_TASK_SCOPED_CREDENTIAL_AUTH=true
Environment=OPENCODE_AUTH_ENV_KEYS=OPENCODE_API_KEY,MINIMAX_API_KEY,OPENAI_API_KEY,ANTHROPIC_API_KEY,OPENROUTER_API_KEY,GOOGLE_API_KEY,GEMINI_API_KEY,XAI_API_KEY
Reiniciar:
sudo systemctl daemon-reload
sudo systemctl restart ops-dispatch-launcher.service
- execution: interactive o auto
- agent: opencode
- model: openai/gpt-5.4-mini o el modelo real elegido
Dispatch now. - runtime=opencode
- credential_env=OPENAI_API_KEY o la variable esperada
- sin fallback silencioso a Hermes.
Smoke tests validados el 2026-05-06:
opencode/gpt-5-nano -> OPENCODE_GO_OK.minimax/MiniMax-M2.7 -> MINIMAX_OK.No usar MiniMax a traves de OpenCode Go si existe un plan MiniMax separado; usa minimax/MiniMax-M2.7 con MINIMAX_API_KEY.
La configuracion queda lista cuando:
review;runtime=opencode;runtime_version, runtime_model y runtime_provider;dispatch/health muestra opencode como ready=true y mode=task_scoped cuando se usan credenciales OPS;local_reason muestra oauth expired, revisar que mode=task_scoped, task_scoped_worker_ready=true y que existan credential_env_keys.opencode aparece en blockers, falta una de estas piezas: worker fresco con opencode, ALLOW_TASK_SCOPED_CREDENTIAL_AUTH=true, credencial activa de workspace o auth local/global valida.model not found, revisar que el modelo existe para ese proveedor.ProviderModelNotFoundError y sugiere el mismo modelo con mayusculas, conservar el casing exacto en model.SUPPORTED_AGENT_SLUGS.provider_slug, metadata.env_var y OPENCODE_AUTH_ENV_KEYS.