====== 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]]