====== OpenCode ======
[[https://opencode.ai|OpenCode]] es una herramienta de programación con IA que vive **dentro de la terminal** y es de código abierto.
No es un editor ni un plugin del editor: se lanza en la carpeta del proyecto y trabaja sobre esos ficheros.
----
===== 1. Puesta en marcha =====
==== Instalar ====
* Linux
curl -fsSL https://opencode.ai/v2/install | bash
opencode --version
* Windows
npm install -g @opencode/cli
opencode --version
==== Arrancar ====
Para trabajar, siempre desde la raíz del proyecto:
cd mi-proyecto
opencode
Se abre la //TUI//: la caja de entrada abajo, y encima la conversación.
==== Actualizar ====
opencode upgrade
Fíjate que sea como mínimo la versión 2.x.y
----
===== 2. Proveedores y modelos =====
OpenCode no es un modelo: habla con modelos de otros. Conviene no confundir las dos cosas:
^ ^ Qué es ^ Comando ^ Cuándo se toca ^
| **Proveedor** | El servicio al que te conectas | ''/connect'' | Una vez, al entrar con tu cuenta |
| **Modelo** | La IA concreta que responde | ''/models'' | Cuantas veces quieras, incluso a mitad de sesión |
Recién instalado **ya funciona**, sin registro ni tarjeta: de serie usa los modelos de **OpenCode Zen**, y varios son gratuitos. En ''/models'' se reconocen por la etiqueta //free// —la lista concreta cambia con el tiempo—.
==== /connect: los proveedores ====
Abre la misma pantalla que sale en el primer arranque, con la lista de servicios a los que enlazarse. Lo importante es que **no te obliga a contratar nada nuevo**: si ya pagas ChatGPT, GitHub Copilot, Anthropic o Google, esa suscripción se reaprovecha desde OpenCode. Puedes tener varios proveedores conectados a la vez.
==== /models: cambiar de modelo ====
Lista todos los modelos de los proveedores que tengas conectados y elige con cuál se manda la siguiente petición. El cambio es instantáneo y **la conversación no se pierde**, y de ahí sale el flujo más rentable del día a día:
* **Plan** con el modelo más capaz, que es donde se decide si el cambio está bien planteado.
* ''Tab'' a **Build** con uno más barato, que es donde solo hay que ejecutar lo ya decidido.
Con los modelos gratuitos **tu código se usa para entrenar**. No los uses con código confidencial.
----
===== 3. Agentes =====
Qué es un subagente y para qué sirve está en el [[cursos:sdd:07-agentes|tema de Agentes]]. Plan y Build ([[#modosplan_y_build|sección 5]]) también son agentes: son los //principales//, los que hablan contigo. De serie, OpenCode trae dos subagentes:
* ''general'': para tareas de varios pasos que investigan y cambian código.
* ''explore'': busca y entiende el código sin modificar nada.
==== Cómo se lanza ====
Hay tres formas de lanzarlo:
* **Invocándolo directamente con ''@''** y su nombre. Al escribir ''@'' sale en la lista junto a los ficheros y las //skills//.
@explore ¿dónde se valida el token JWT y qué endpoints no pasan por esa validación?
* **Con lenguaje natural**, diciéndole que lo use:
Usa el subagente general para migrar los tests del módulo pedidos de JUnit 4 a JUnit 5
* **Automáticamente**: lo decide OpenCode, que lo lanza cuando la tarea encaja con su ''description''.
==== Dónde se guardan ====
Cada subagente es un fichero ''.md'':
* ''.opencode/agents/'' **en el proyecto**: está en el repositorio para que sea solo de ese proyecto.
* ''~/.config/opencode/agents/'' **en tu ordenador**: para compartirlo entre proyectos.
Un subagente de Claude Code **no vale en OpenCode**: OpenCode no lee ''.claude/agents/'' y su frontmatter es otro (''mode'', ''permission'', el modelo con proveedor). Las diferencias, en [[cursos:sdd:07-agentes#crear_un_agente_en_opencode|Agentes]].
----
===== 4. Skills =====
Qué es una //skill// y cómo se escribe está en el [[cursos:sdd:08-skills|tema de Skills]].
==== Cómo se lanza ====
Hay tres formas de lanzarla:
* **Invocándola directamente con ''@''** y su nombre: al escribir ''@'' sale en la lista junto a los ficheros y los subagentes.
@revisar-pr revisa el PR 128
* **Con lenguaje natural**, diciéndole que la use:
Usa la skill revisar-pr con el PR 128
* **Automáticamente**: lo decide OpenCode, que la carga cuando su ''description'' encaja con lo que pides («revisa el PR 128»).
==== Dónde se guardan ====
Cada //skill// es una carpeta con su ''SKILL.md'':
* ''.opencode/skills/'' **en el proyecto**: está en el repositorio para que sea solo de ese proyecto.
* ''~/.config/opencode/skills/'' **en tu ordenador**: para compartirla entre proyectos.
OpenCode también lee ''.claude/skills/'' y ''~/.claude/skills/'', así que una misma //skill// vale para las dos herramientas.
----
===== 5. Modos: Plan y Build =====
OpenCode tiene **dos modos: Plan y Build**, y se cambia entre ellos con **''Tab''**.
==== El modo Plan ====
Lee, analiza y te propone un plan, **sin editar ningún fichero**. El plan te lo cuenta en la conversación; solo si se lo pides lo guarda en ''~/.opencode/plan'', que es el único sitio donde puede escribir. Los comandos los ejecuta sin preguntarte.
Puedes además pedirle que **te pregunte** lo que no tenga claro («antes de proponer nada, hazme las preguntas que necesites») en lugar de que se invente los huecos. Leer el plan cuesta un minuto; deshacer un cambio mal enfocado, bastante más.
Cuando el plan está bien, ''Tab'' a Build y que lo ejecute.
==== El modo Build ====
Ejecuta: edita ficheros y lanza comandos **sin preguntarte casi nada**. Solo pide permiso para leer un ''.env'' o para salir de la carpeta del proyecto.
Build no revisa los comandos que lanza: un ''rm'' o un ''git checkout'' los ejecuta igual que un ''ls''. Trabaja siempre con todo commiteado, para poder volver atrás.
----
===== 6. Comandos =====
==== /init ====
Genera ''AGENTS.md'', las instrucciones fijas del proyecto: analiza el código y escribe en la raíz qué es el proyecto, su arquitectura y los comandos habituales (arrancar, probar, construir). Se lee solo en cada sesión. Es un punto de partida: revísalo y edítalo a mano.
==== /new ====
Empieza de cero: sesión nueva y contexto vacío. Se hace **cada vez que cambias de tarea**.
==== /undo ====
Deshace: quita el último mensaje de la conversación y deshace los cambios que hizo en los ficheros. ''/redo'' lo vuelve a aplicar.
Solo deshace lo que OpenCode **editó con sus herramientas**. Lo que hizo con un comando de shell (un ''rm'', un ''mv'', un ''git checkout'') no se recupera. El deshacer de verdad sigue siendo ''git''.
==== /compact ====
Resume la conversación para liberar contexto y seguir en la misma sesión.
**No uses ''/compact''**: antes de llegar a él, usa ''/new''. El resumen lo hace el modelo, que no sabe qué es lo importante para ti, y sigues trabajando con un contexto peor sin darte cuenta.
==== /copy ====
Copia al portapapeles la última respuesta de OpenCode
==== /export ====
Exporta toda la conversación (no solo la última respuesta)
==== ESC ESC ====
No es un comando, son dos pulsaciones de tecla: paran al agente en seco, esté pensando o a media tarea. La primera solo avisa: hasta la segunda no se para. Lo que ya ha hecho se queda hecho: le dices qué cambiar y sigue.
----
===== 7. Plugins =====
Los plugins añaden a OpenCode funciones que no trae de serie. Son paquetes de npm (o de Git) y se gestionan desde la terminal con ''opencode plugin''. Se guardan en la configuración global, así que valen para todos los proyectos.
* Ver los plugins instalados:
opencode plugin list
* Instalar un plugin. Por ejemplo, [[https://github.com/slkiser/opencode-quota|Quota]]:
opencode plugin add @slkiser/opencode-quota
* Ver si hay versiones nuevas de los plugins instalados:
opencode plugin check
* Actualizar todos los que estén desactualizados. Para actualizar solo uno, se añade su nombre:
opencode plugin update
* Desinstalar un plugin:
opencode plugin remove @slkiser/opencode-quota
----
===== 8. Enlaces =====
* [[https://opencode.ai|opencode.ai]]
* [[https://opencode.ai/docs/es/|Documentación]]
* [[https://github.com/sst/opencode|Repositorio]]