Taller · Agentes de codificación · 2026

Tu agente de código
con OpenCode

Open source, multi-modelo y terminal-first. Hoy lo montamos, lo conectamos a DeepSeek y construimos una feature dirigiendo specs con OpenSpec.

OpenCode DeepSeek AGENTS.md OpenSpec Spec-Driven
Alejandro de la Fuente

Alejandro de la Fuente

Technical Leader · NTT Data · GDNE

Recursos · escanea y arranca

Clónalo ahora, que el contenedor tarda

Mientras presentamos, abre el repo y lanza el entorno. Para cuando lleguemos a "manos a la obra" lo tendrás listo.

Taller · starter
QR al repositorio del taller
github.com/CodigoSinSiesta/taller-opencode-starter Ábrelo → Create codespace y deja que construya.
Esta presentación
QR a la presentación
codigosinsiesta.github.io/taller-opencode-presentation Sigue las slides desde tu móvil o portátil.
El Codespace tarda ~3-5 min en construirse la primera vez. Escanéalo ya y sigue la charla mientras tanto.
Por qué OpenCode

El panorama, y por qué elegimos OpenCode

Todos los agentes comparten la misma idea (LLM + herramientas + bucle). Cambian la filosofía y el lock-in.

IDE-native Cursor, Windsurf. Fluido e integrado, pero atado al editor y con cierto lock-in.
Cloud Antigravity, Gemini CLI. Cómodos, pero tu contexto vive en su nube.
Terminal-first Claude Code, Codex y OpenCode. Flexible, scriptable, cerca del repo.
OpenCode (sst/opencode) es open source, multi-modelo (Claude, DeepSeek, locales…) y sin vendor lock-in. Lee AGENTS.md, habla MCP y se configura por fichero. Por eso es nuestra base para el taller.
Cómo funciona por dentro

El bucle del agente

Un chatbot habla; un agente actúa. OpenCode cierra este ciclo en tu terminal, sobre tu repo.

1 · RecibeTu instrucción + el contexto del repo (AGENTS.md, ficheros leídos).
2 · RazonaEl LLM (DeepSeek) planifica y decide qué herramienta usar.
3 · EjecutaLee/escribe ficheros, corre shell, tests, git… vía sus tools y MCP.
4 · IteraObserva el resultado y repite hasta cumplir el criterio de éxito.
  • Sesiones y modos: builds, planes y subagentes para tareas acotadas.
  • Providers: el mismo bucle con Claude, DeepSeek o un modelo local.
  • MCP: extiende sus herramientas (BBDD, APIs, buscadores) sin tocar el core.
Instalación

Arrancar OpenCode en 30 segundos

# 1. Instala el CLI
curl -fsSL https://opencode.ai/install | bash

# 2. Lánzalo en tu repo
opencode

# 3. Conecta un proveedor
/connect  # → deepseek

opencode.ai/docs · sst/opencode

  • En el devcontainer del taller ya viene instalado: solo abres y listo.
  • Sin contenedor, el setup.sh del starter lo instala por ti.
  • El modelo se fija en opencode.json (lo vemos en la siguiente slide).
  • La key vive en DEEPSEEK_API_KEY (env o .env), nunca en el repo.
Objetivo de hoy: que opencode arranque contra DeepSeek y veas el modelo activo abajo a la derecha.
Conecta DeepSeek

El motor de hoy: DeepSeek

Esta es la API key de la sesión. Cópiala con el botón y expórtala en tu terminal.

__PEGA_LA_KEY_DE_DEEPSEEK_ANTES_DEL_TALLER__

Pégala con export DEEPSEEK_API_KEY="…" o en tu .env.

# Exporta la key copiada
export DEEPSEEK_API_KEY="sk-…"

# opencode.json (ya en el starter)
{
  "model": "deepseek/deepseek-chat"
}
🔒 Key efímera: válida solo para el taller. No la subas a git; se rota al terminar.
El contrato

AGENTS.md: el system prompt de tu repo

OpenCode lee AGENTS.md en cada sesión. Es donde defines arquitectura, reglas y qué NO hacer.

# AGENTS.md
## Propósito
Mini gestor de tareas. Practicamos SDD.

## Convenciones
- ESM, TypeScript estricto, sin any
- Tests con node:test

## Qué NO hacer
- No ampliar task.ts a mano
- No commitear .env ni la API key
  • Estándar abierto: lo leen OpenCode, Codex, Cursor… (Claude usa CLAUDE.md, un wrapper).
  • Sin él, el agente no conoce tu arquitectura y rompe tus patrones.
  • Cuesta 500–5.000 tokens, pero sube muchísimo la calidad y la consistencia.
  • Empieza pequeño y hazlo crecer con cada fricción que detectes.
Contexto y subagentes

El contexto es el recurso escaso

La ventana de contexto es finita. Gestionarla bien es lo que separa un agente útil de uno que "olvida".

Capas del contexto AGENTS.md (base) · historial · ficheros leídos · resultados de tools. Todo suma y compite por el mismo presupuesto.
Subagentes Delega tareas acotadas (tests, revisión, refactor) a un contexto separado y enfocado. El agente principal coordina.
  • Da el contexto por adelantado en vez de dejar que el agente lo adivine.
  • Tareas largas → trocéalas; el contexto se degrada con el tamaño.
  • Un subagente por responsabilidad evita que un único hilo se sature.
Spec-Driven Development

OpenSpec: acordar el qué antes del cómo

Una capa de specs ligera. En vez de vibe coding, el agente y tú acordáis la spec, y el código sigue.

# estructura
openspec/
  project.md   # contexto
  specs/       # specs vigentes
  changes/     # propuestas en curso
    archive/   # completadas
  • El change queda versionado en el repo: revisable como cualquier PR.
  • La spec viva es el contexto que hereda el próximo agente.
  • Funciona dentro de OpenCode vía comandos /opsx:*.
  • Se instala con openspec init --tools opencode (ya hecho en el starter).

Fission-AI/OpenSpec · openspec.dev

El flujo del taller

explorar → proponer → aplicar → verificar → archivar

El ciclo completo dentro de OpenCode, sobre el mini gestor de tareas del starter.

1
/opsx:propose

Describe la feature (prioridad de tareas). Genera el change + sus specs.

2
/opsx:apply

El agente implementa las tareas y escribe los tests. Tú revisas el diff.

3
/opsx:verify

Contrasta la implementación con la spec. Si hay huecos, vuelve al paso 2.

4
/opsx:archive

Archiva el change y sincroniza las specs vigentes. Feature cerrada.

Buenas prácticas

Alucinaciones: se previenen, no se aceptan

El agente genera texto probable, no verdad verificada. ~30% del código generado puede traer errores sutiles.

✅ Haz
  • Da contexto explícito (AGENTS.md).
  • Pide criterios de éxito claros.
  • Ejecuta los tests tú mismo.
  • Itera en pasos pequeños.
⛔ Evita
  • Copiar APIs/paquetes sin verificar.
  • Aprobar el plan a ciegas.
  • Sobrecargar una sola tarea.
  • Usar el agente como sustituto de entender.
Lee el código del diff, no solo el plan. 1.000 líneas de plan ≈ 1.000 de código: no hay atajo real (Horthy, 2026). El código no es tuyo hasta que lo entiendes.
El cambio de juego

El repo como prompt persistente

Si construyes agentes, ya eres harness engineer. Cada lint, test y spec es un prompt que se reactiva solo.

"El código es barato" Implementar deja de ser lo escaso. Lo escaso es tu tiempo, tu atención y el contexto.
OpenSpec encaja aquí La spec viva (changes archivados, AGENTS.md) es el harness que guía al próximo agente sin que tú repitas.
"Cada vez que tienes que decirle al agente 'continúa' es un fallo del harness." — Ryan Lopopolo (OpenAI), Harness Engineering

Puente a la charla "Harness Engineering" de la serie · openai.com/index/harness-engineering

Manos a la obra

Monta el entorno y empezamos

Elige una vía. En 3 minutos tendrás OpenCode hablando con DeepSeek sobre el starter.

A · Codespaces Abre el repo → Create codespace. Todo se instala solo. Pega la key y opencode.
B · Dev Container VS Code → Reopen in Container. El postCreate corre setup.sh.
C · Script Sin contenedor: ./scripts/setup.sh (acepta una ruta a montar).
# Vía C — máquina pelada, indícale la ruta
git clone https://github.com/CodigoSinSiesta/taller-opencode-starter
cd taller-opencode-starter
./scripts/setup.sh .            # instala OpenCode + OpenSpec + deps
export DEEPSEEK_API_KEY="sk-…"  # la key de la slide 6
opencode
Abre ejercicios/01-setup.md y empezamos por el Paso 0.
Para llevarte a casa

5 ideas y a practicar

  • OpenCode: agente open source, multi-modelo y sin lock-in.
  • AGENTS.md es el contrato: sin él, no hay resultados predecibles.
  • DeepSeek como motor: configurable por fichero, key en el entorno.
  • Spec-Driven con OpenSpec: acuerda el qué antes del cómo, y versiónalo.
  • Harness engineering: estructura el repo como prompt persistente.
opencode.ai openspec.dev platform.deepseek.com github.com/CodigoSinSiesta
Repite el ciclo propose → apply → verify → archive sobre una feature pequeña de tu propio repo. Ahí es donde esto demuestra (o no) su valor. 🚀
1 / 14
Navegación