====== 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. Instalar y arrancar ===== curl -fsSL https://opencode.ai/install | bash opencode --version 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. ---- ===== 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. La caja de entrada: tres formas de escribir ===== Todo lo que se hace con OpenCode se escribe en la misma caja. Lo que cambia es con qué empieza la línea. ^ Empieza por ^ Qué hace ^ Ejemplo ^ | //texto// | Le hablas al agente. Gasta tokens. | ''arregla el error de validación del formulario'' | | ''@'' | Referencia un fichero **concreto**. | ''@src/api/login.ts revisa el manejo de errores'' | | ''!'' | Ejecuta un comando de shell. **No gasta tokens.** | ''!npm test'' | | ''/'' | Comando de OpenCode. Escribiendo solo ''/'' salen todos. | ''/compact'' | Las dos teclas que más dinero ahorran son ''@'' y ''!'': * Con **''@''** el modelo no tiene que salir a buscar el fichero: va directo. Un ''@public/robots.txt'' resuelve en un par de segundos lo que buscando a ciegas cuesta diez y unos cuantos miles de tokens. * Con **''!''** ejecutas tú los comandos —''!git status'', ''!npm test''— y su salida entra en el contexto. El patrón normal es: lanzas tú los tests con ''!'' y luego le pides que arregle lo que ha fallado, sin que gaste una sola llamada en averiguar cómo se ejecutan. ''Mayús+Enter'' inserta un salto de línea sin enviar el prompt. Las flechas ''↑'' / ''↓'' recorren los prompts que ya has mandado, para reenviarlos sin volver a escribirlos. ---- ===== 4. Plan y Build: la tecla Tab ===== OpenCode tiene dos modos de trabajo y se alterna entre ellos con **''Tab''**: ^ Modo ^ Qué hace ^ | **Plan** | Lee, analiza y te propone. **No toca el disco.** | | **Build** | Ejecuta: crea, modifica y borra ficheros. | El ciclo de un cambio serio es siempre el mismo: start repeat :Plan: describir el cambio; :leer el plan; repeat while (¿hay algo que corregir?) is (sí) :Tab: pasar a Build; :revisar el diff y commitear; stop En Plan 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. ==== Mientras trabaja ==== * **''Esc Esc''** lo interrumpe en seco, esté pensando o a media tarea. * Cuando va a hacer algo sensible, sale el **diálogo de permisos**: permitir una vez, permitir siempre o rechazar. * Puedes seguir escribiendo mientras trabaja: los mensajes se **encolan** y los recoge cuando llega a un punto en el que encajan. ''/undo'' revierte el último mensaje de la conversación, pero **no deshace los cambios en los ficheros**. El deshacer de verdad es ''git'': commitea a menudo y revisa el ''diff'' antes de seguir. ---- ===== 5. AGENTS.md: las instrucciones fijas del proyecto ===== Sin él acabas repitiendo las mismas restricciones en cada prompt: «nada de TypeScript», «usa el gestor de paquetes del proyecto», «no añadas dependencias». Eso se escribe **una vez** en un fichero: /init ''/init'' analiza el código y genera ''AGENTS.md'' en la raíz: qué es el proyecto, arquitectura, dependencias y comandos habituales (arrancar, probar, construir). Se lee automáticamente en cada sesión. * **Revísalo y edítalo a mano.** Lo que genera es un punto de partida, no la verdad. * **Breve y concreto.** Ocupa contexto en todas las peticiones, así que cada línea de relleno se paga en cada prompt. * **Va al repositorio**, como cualquier otro fichero del proyecto. * Es un estándar abierto: el mismo ''AGENTS.md'' lo entienden otras herramientas. Lo que escribas en el prompt **siempre manda** sobre lo que ponga en el fichero. ---- ===== 6. La sesión y el contexto ===== Abajo, junto a la caja de entrada, hay un indicador con los tokens consumidos, el **porcentaje de contexto** ocupado y el coste. Sube siempre, porque en cada petición se manda de nuevo toda la conversación: el historial se paga entero cada vez. ^ Comando ^ Cuándo ^ | ''/compact'' | La conversación sigue siendo la buena pero el contexto va alto. Condensa el historial en un resumen (objetivo, restricciones, progreso) y sigues donde estabas. | | ''/new'' | Cambias de tarea. Sesión nueva, contexto a cero. | La regla práctica: **una sesión por tarea**. Arrastrar el historial de lo anterior no ayuda al modelo, lo despista y encima cuesta dinero. Al cerrar OpenCode, la terminal imprime el nombre de la sesión y **el comando exacto para retomarla**. Cópialo y la recuperas entera, con su historial, al día siguiente. ---- ===== 7. Chuleta ===== ^ ^ ^ | ''opencode'' | Arrancar en la carpeta actual | | ''/'' | Ver todos los comandos | | ''Ctrl+P'' | Paleta de comandos | | ''Tab'' | Cambiar entre Plan y Build | | ''Esc Esc'' | Parar al agente | | ''Mayús+Enter'' | Salto de línea | | ''↑'' / ''↓'' | Historial de prompts | | ''@fichero'' | Referenciar un fichero | | ''!comando'' | Shell, sin gastar tokens | | ''/connect'' | Conectar un proveedor | | ''/models'' | Cambiar de modelo | | ''/init'' | Generar ''AGENTS.md'' | | ''/compact'' | Condensar el contexto | | ''/new'' | Sesión nueva | ---- ===== 8. Enlaces ===== * [[https://opencode.ai|opencode.ai]] * [[https://github.com/sst/opencode|Repositorio]] * [[https://agents.md|AGENTS.md]] — el estándar