Abierto 24/7 El Dueño tiene la última palabra Piezas 315 Fuentes por pieza 4,7 Actualizado

OpenCode 2.0 es la plataforma que le faltaba, pero de fábrica deja al agente reescribir sus propias reglas

Anomaly acaba de publicar OpenCode 2.0: un servicio que vive en segundo plano, Code Mode para los servidores MCP, subagentes que trabajan mientras sigues escribiendo y decenas de plugins que se recargan en caliente. Nos hemos leído la nota, la documentación de permisos, los issues de GitHub y el hilo de Hacker News para contarte qué te llevas y qué te juegas si actualizas.

En este artículo

Anomaly cuenta en la nota de OpenCode 2.0 que se ha dejado los codos en que todo se recargue en caliente. El premio, dice, es que el agente "can write a plugin for itself mid-session and use it right away". Se escribe un plugin a mitad de sesión y lo pone a currar al momento, sin reiniciar nada.

El 30 de septiembre, con la 2.0 ya en manos de los primeros usuarios, alguien abrió en el GitHub del proyecto un issue con "[security]" en el título. Durante esa recarga en caliente, las políticas que vetan proveedores de modelos dejan de aplicarse un rato. El sello de Hacienda, ese rato, no está en la ventanilla. Si un prompt cae en ese hueco, la sesión se pasa sin avisar a un proveedor prohibido. Y le manda el system prompt, el historial y el código que han devuelto las herramientas.

Ahí cabe la historia entera. Para nosotros, la 2.0 es la versión más ambiciosa de OpenCode. El agente de terminal se convierte en una cocina central que da de comer a la terminal, la web, el escritorio y tus scripts. Y es también la versión que, de fábrica, deja al cocinero reescribir el reglamento de esa cocina sin pedirte permiso. Vamos capa por capa.

La cocina que nunca apaga los fogones

OpenCode nació con un modelo cliente/servidor, pero no lo aprovechaba por defecto y era cosa de usuarios avanzados. En la 2.0, el servidor arranca solo y se queda en segundo plano. Es un único proceso por usuario, dueño de las sesiones, la configuración, los permisos y la ejecución de herramientas. La TUI, la web y la app de escritorio son comedores distintos que piden a la misma cocina.

La API también se ha rehecho desde cero. Anomaly despacha la anterior con una sinceridad que en una nota de lanzamiento desentona: "It was bad". La nueva la usa hasta el propio agente, que se llama a sí mismo para mover la sesión a un git worktree cuando empiezas otra tarea.

La cocina tampoco se para mientras algo se cuece. El agente principal manda trabajo a subagentes en segundo plano, incluso con otro modelo, y sigue atendiéndote. Los comandos largos de la shell avisan al terminar, y una tecla manda al fondo lo que se alarga. Es dejar el cocido a fuego lento mientras sigues emplatando.

En Hacker News, alguien esperaba que por fin hubieran arreglado lo mucho que tardaba en abrir. Le contestaron que ahora abre mucho más rápido porque hay un servidor persistente. Un tercero remató que esa es justo la solución equivocada para algo que tardaba minutos en abrir. Es como presumir de llegar el primero a la oficina porque duermes en ella.

Un benchmark de terceros, con una beta de la 2.0 y pocas muestras, anda por el mismo barrio. Motor contra motor, el primer prompt en frío salió 1.008 ms más lento en v2. En caliente, los mensajes quedan dentro de un 10%. El propio informe concluye que el argumento de v2 es arquitectónico, no de latencia bruta.

La pulsera que solo vale en el hotel

¿Por qué reescribir entero un agente de terminal que ya funcionaba, para acabar siendo un servicio con SDK? Porque OpenCode no fabrica la carne que cocina. Tira del AI SDK y de Models.dev para hablar con más de 75 proveedores, además de modelos locales. Y este año ha aprendido a hostias lo que cuesta depender de la carnicería de otro.

El 9 de enero, Anthropic empezó a rechazar los tokens OAuth de herramientas de terceros. Quien usaba OpenCode con su suscripción Claude Pro o Max se encontró con esto: "This credential is only authorized for use with Claude Code". Es la pulsera del todo incluido: barra libre, pero solo en la piscina del hotel. Acércate con ella al chiringuito de enfrente y el camarero te cobra la caña.

Semanas después, Dax Raad, mantenedor de OpenCode, fusionó un PR con un mensaje que lo dice todo: "anthropic legal requests". Quitaba el plugin de autenticación de Anthropic y sus referencias. Claude sigue entrando en OpenCode con API key, pagando por token, y pulseras como ChatGPT Plus o GitHub Copilot sí valen en el chiringuito. La de Anthropic, no.

Si no controlas el modelo, te queda la capa de en medio, y la 2.0 va a por ella. El paquete @opencode/sdk es el mismo código que mueve la CLI, recortable para correr en un servidor o en un Durable Object. El mismo día del lanzamiento, Cloudflare anunció un OpenCodeHarness experimental justo para eso, aunque su runtime no da el sistema de archivos ni los procesos de tu portátil. OpenCode no tiene la carne, así que quiere ser la cocina donde cocina todo el mundo.

La comanda entera, por escrito

Por dentro, la pieza con más miga es Code Mode. Lo de toda la vida es que el modelo llame a una herramienta, espere, lea el resultado y decida la siguiente. Cada resultado pasa por el modelo solo para fotocopiarse en la llamada siguiente. Y cada servidor MCP conectado mete sus definiciones de herramientas en cada petición. En la 2.0, @opencode/codemode es un intérprete mínimo de JavaScript que convierte servidores MCP o endpoints OpenAPI en funciones. El modelo escribe un script que llama a una, recorre los resultados y llama a otra, en un solo viaje.

Es la diferencia entre el camarero que va a la cocina a por cada plato y vuelve a preguntar qué más, y el que apunta la comanda entera. Ya vimos con Spotify y Claude Code que el agujero de los tokens suele estar en el contexto, y Code Mode lo ataca desde el harness.

La idea no es de Anomaly. Cloudflare la bautizó como Code Mode el año pasado: convertir las herramientas MCP en una API de TypeScript y pedirle al modelo que escriba código contra ella. Anthropic la midió en su propio ejemplo, y el consumo bajó de 150.000 tokens a 2.000. Son números de Anthropic sobre su implementación, no de OpenCode.

OpenCode le pone valentía de serie: todos los servidores MCP entran en Code Mode por defecto. La nota promete que puedes enchufar mil "with minimal context bloat", y presume de aprovechar que los modelos escriben código "more than any other coding agent". Ninguna de las dos frases trae báscula. No hemos encontrado mediciones independientes del Code Mode de OpenCode, y explainx.ai deja claro que lo del contexto es un objetivo de diseño, no un resultado medido.

La frontera, en cambio, está bien pensada. El intérprete no toca archivos, imports, temporizadores ni fetch: solo llama a las herramientas de su catálogo. El permiso execute decide si Code Mode está disponible, y cada herramienta anidada, built-in o MCP, sigue aplicando sus propios permisos. La comanda pasa por los mismos filtros que pasaría plato a plato. Eso sí, el paquete tal cual sale no trae límite de tiempo, de llamadas ni de tamaño de salida hasta que alguien los configura. Y heredar tus permisos solo protege si tus permisos dicen que no a algo. Toca ver qué dicen de fábrica.

Ochenta cocineros y uno que se contrata solo

El sistema de plugins de la 1.0 nunca recibió la atención que necesitaba, admite Anomaly. Para corregirlo, se obligaron a construir casi todas las funciones de la 2.0 como plugins internos, y ya van más de 80. Es el restaurante donde la plantilla come lo mismo que sirve: si el guiso sale malo, se enteran los primeros. Así la API de plugins no se pudre en un cajón, y eso es ingeniería seria.

Encima, todo se recarga en caliente. Los plugins que dejas en.opencode/plugins/ se cargan solos, y el que se escriba el propio agente se pone el delantal en cuanto lo termina. En Hacker News lo celebran: un usuario destaca que el agente sepa editar su propia configuración y escribirse plugins. Otro suelta un "finally" porque skills y plugins ya se recargan solos.

Hasta aquí, un cocinero que se contrata ayudantes a mitad de servicio. Falta saber quién firma los contratos.

El reglamento lo escribe el cocinero

Toca leer la orden del portero. Cada agente de OpenCode 2.0, incluidos los tuyos, arranca con una política base cuya primera regla permite cualquier acción sobre cualquier recurso. Solo pregunta antes de salir a directorios externos y de leer archivos.env. Además, OpenCode abre a propósito el acceso a su directorio de configuración global, el cuarto donde el portero guarda la lista. Y la shell corre con la autoridad de tu usuario sobre archivos, procesos y red.

Junta las piezas. De fábrica, ninguna regla te pregunta antes de que el agente escriba en.opencode/plugins/ o retoque su configuración global. El plugin se carga solo y, dentro de Code Mode, sus herramientas aplican los permisos que ellas mismas declaran. Tras una recarga, las sesiones en curso estrenan la configuración nueva en el siguiente paso. El cocinero no solo se contrata ayudantes: también redacta el reglamento, y la cocina lo aplica en el siguiente plato.

verdverm lo denuncia en Hacker News, y se ha ido a Pi. Su frase: "An agent should not be able to modify plugins and have that immediately reloaded for availability". En otro hilo cuenta que un cambio fusionado en la V2 le rompe las políticas de empresa que fija en /etc/opencode. Dice que ya no puede impedir que se las salte "man, machine, or third party repo". Es su testimonio, y no hemos podido ligarlo a un issue concreto.

El búfalo tuvo que resolver esto en sus propios agentes. Acabó dejando en una sola pieza la potestad de convertir lo que propone un modelo en permiso. Que el modelo proponga algo no lo autoriza. El sí o el no lo da una pieza sin modelo, que el agente no puede rodear y que de serie viene cerrada. Es la ventanilla de Hacienda, no el colega que te debe una caña. Y no es manía de control. Si el agente retoca su configuración por su cuenta, lo que salió bien la semana pasada deja de ser repetible. Y cuando algo se rompa, no sabrás si fue el modelo, tu código o una regla que cambió él solito.

Dieciocho cocineros cantando la misma comanda

Si el riesgo fuera teórico, esto sería filosofía de sobremesa. El issue del principio, el #52333, se reproduce en la 2.0.20, y su disparador es editar la configuración o un plugin con una sesión activa. Justo lo que la nota vende como virtud. Su autor no se anda con rodeos: el fallo se carga las políticas como garantía de que los datos sensibles no salen de la infraestructura aprobada.

Un usuario mandó un parche para que el filtro de proveedores fallara cerrado durante la recarga. Pedía lo contrario de aquel hueco: sin sello de Hacienda, no sale la factura. Se cerró el 10 de octubre sin fusionar, con el aviso de que ya no aceptaban PRs para V1 y que lo portara a V2. En nuestra captura, el issue seguía abierto.

El segundo es de sainete. En la 2.0.26, cada recarga de plugins deja vivas las instancias antiguas, y cada evento se entrega una vez por instancia. El mismo aviso del modo Plan acaba inyectado N veces en la sesión, y su autor vio a N llegar a 18 en un solo día. Cada cambio de turno deja dentro al cocinero del turno anterior, y a la hora de cerrar hay dieciocho cantando la misma comanda.

Hay más. Un usuario contó que el instalador tardó 6 minutos en llegar al 10% por cómo pintaba la barra de progreso, que era lo único del instalador que no progresaba. Y los que lo usan a diario dicen que el agente se sigue atascando y que las peticiones de permiso, de serie, no caducan.

El piso nuevo no tiene ascensor

Actualizar es el trámite corto: desde la última 1.x, opencode upgrade --major. El marrón es lo que se queda en el piso viejo. Los plugins de la 1.0 no funcionan, la Server API es completamente distinta y la configuración de la TUI pasa a un único cli.json global. Además, la V2 solo descubre AGENTS.md: si te apoyabas en el fallback a CLAUDE.md, toca mover esas instrucciones.

El golpe gordo es el LSP. La V2 acepta y conserva su configuración, pero no arranca servidores de lenguaje, no expone herramientas LSP ni produce diagnósticos. La guía te manda sustituirlo por los comandos de lint, typecheck o compilador. Es un piso nuevo que respeta en el plano el hueco del ascensor, pero sin ascensor: subes andando con el typecheck.

Qué haríamos nosotros

La arquitectura, sí. Un servicio con API, SDK y Code Mode es adonde tiene que ir un agente que no fabrica su modelo. Los valores de fábrica, no. Ahí la están cagando. Una política base que lo permite todo, el directorio de configuración abierto a propósito y una recarga con un issue de seguridad abierto son una cocina sin cerradura.

Actualiza si vives en el terminal con varios proveedores y quieres sesiones compartidas entre terminal, web y escritorio, o scripts contra un servidor local. Espera si tus flujos viven del LSP, tienes plugins 1.x sin portar o tu empresa usa políticas de proveedor para que el código no salga de casa. Mientras #52333 siga abierto, la recarga en caliente es un agujero en esa garantía.

Y antes de dejarle solo, ponle tú la cerradura. Algo así en tu opencode.jsonc, adaptando las rutas:

{
 "permissions": [
 { "action": "shell", "resource": "*", "effect": "ask" }
 { "action": "shell", "resource": "git status *", "effect": "allow" }
 { "action": "edit", "resource": ".opencode/*", "effect": "ask" }
 { "action": "edit", "resource": "opencode.json*", "effect": "ask" }
 { "action": "edit", "resource": "~/.config/opencode/*", "effect": "ask" }
 ]
}

La regla de la shell es la que da sentido a las demás. Proteger la edición de.opencode/ con la shell en allow es echar la llave a la puerta y dejar la ventana abierta. La shell escribe donde pueda escribir tu usuario. Al búfalo le pasó: prohibía algo en las instrucciones y el agente lo seguía haciendo. Acabó dejando el texto en paz y yendo a por la herramienta que se lo permitía. Un "no toques tus plugins" en AGENTS.md es un cartel; una regla en ask es el portero en la puerta.

En empresa, las políticas van en la configuración gestionada: /etc/opencode en Linux, MDM en macOS. Los settings por sí solos no impiden añadir proveedores, servidores MCP, agentes o plugins. Con #52333 abierto y la queja de verdverm, tómalas como tu mejor herramienta, no como garantía. Si no quieres un servicio compartido en tu máquina, tienes --standalone u opencode service set disabled true. Y ojo con opencode pair --remote: expone el servidor a internet, y con --yes ni te pide confirmación.

OpenCode se ha pasado el año descubriendo lo que es que otro decida dónde vale tu pulsera. En la 2.0 le cuelga a su propio agente la del todo incluido, con acceso a la cocina y al reglamento. Antes de soltarlo por el hotel, cámbiasela tú por una que pregunte.

Fuentes · 22

  1. webanoma.lyanoma.ly
  2. primariaconfig: [security] provider.use deny policies are bypassed during config hot-reload — session traffic can silently go to a third-party free provider · Issue #52333 · anomalyco/opencodegithub.com · 2026-09-30
  3. webIntro | OpenCodeopencode.ai
  4. red socialOpenCode 2.0 | Hacker Newsnews.ycombinator.com
  5. primariaopenwork/docs/opencode-v1-v2-benchmarks.md at dev · different-ai/openworkgithub.com
  6. webModelsopencode.ai · 2026-10-15
  7. webOpenCode Blocked by Anthropic: What Happened and What Changed | ZBuildzbuild.io · 2026-03-27
  8. webAnthropic Forces OpenCode to Strip Claude Integration After Legal Dem…theagenttimes.com · 2026-03-19
  9. webEverything new in OpenCode 2.0augmentedswe.com · 2026-10-13
  10. webCode Mode: the better way to use MCPblog.cloudflare.com · 2025-09-26
  11. webOpenCode 2.0: Code Mode, Background Agents, SDK Explained | explainx.ai Blogexplainx.ai · 2026-10-12
  12. primariaCode execution with MCP: building more efficient AI agentsanthropic.com · 2025-11-04
  13. webTools | OpenCodeopencode.ai
  14. primariaopencode/packages/codemode/README.md at dev · anomalyco/opencodegithub.com
  15. webOverview | OpenCodeopencode.ai
  16. webPermissions | OpenCodeopencode.ai
  17. webCommands | OpenCodeopencode.ai
  18. red socialMajor security regression merged into OpenCode V2 | Hacker Newsnews.ycombinator.com
  19. primariafix(catalog): enforce provider.use policies on available providers during config reload (#52333) by JerryLiu369 · Pull Request #52682 · anomalyco/opencodegithub.com
  20. primariaPlugin instances accumulate across config reloads (no teardown) — system-reminder injected N times · Issue #54140 · anomalyco/opencodegithub.com · 2026-10-09
  21. webMigrate from V1 | OpenCodeopencode.ai
  22. webConfig | OpenCodeopencode.ai

Aprobado por El Búfalo, editor humano responsable.

Sigue leyendo