Objetivo del tema
Aplicar todo lo aprendido en un proyecto real: crear desde cero un servicio HTTP minimalista con Node.js y Express, usando el flujo completo de OpenCode: inicializar, planificar, construir, probar y revisar.
Construiremos un microservicio con un endpoint /health verificado mediante pruebas automatizadas. El recorrido completo:
Crear la carpeta del proyecto, inicializar Git y npm, instalar dependencias.
Ejecutar /init para que OpenCode genere el AGENTS.md con los comandos del proyecto.
Pedir al agente en modo Plan el diseño del endpoint y de sus pruebas.
Aprobar el plan y dejar que el agente implemente código y tests.
Revisar el diff, correr la suite completa y crear el commit.
Desde tu terminal, crea el proyecto y sus dependencias:
mkdir servicio-salud && cd servicio-salud
git init
npm init -y
npm install express
npm install --save-dev jest supertest
Edita package.json para definir el script de pruebas:
{
"name": "servicio-salud",
"scripts": {
"test": "jest --runInBand"
},
"dependencies": { "express": "^4.19.0" },
"devDependencies": { "jest": "^29.7.0", "supertest": "^7.0.0" }
}
Abre el agente dentro del proyecto y genera las reglas base:
opencode
/init
/init detectará que es un proyecto npm con Jest y dejará en el AGENTS.md los comandos de instalación y prueba. Complementalo a mano con una convención propia, por ejemplo: "las respuestas JSON deben incluir siempre un campo status". Recuerda hacer commit del archivo.
Presiona Tab hasta ver el indicador Plan en la esquina inferior derecha y describe la tarea:
Queremos un endpoint GET /health que responda 200 con { "status": "ok", "uptime": <segundos activo>, "timestamp": <ISO> }. La lógica debe vivir en src/app.js exportando el app de Express, y un archivo src/server.js separado debe encargarse de escuchar en el puerto definido por PORT (3000 por defecto). Agrega pruebas en tests/health.test.js con supertest cubriendo: código 200, formato del body y presencia de los tres campos. Ejecuta npm test antes de terminar.
El agente explorará el proyecto sin modificarlo y devolverá un plan: estructura de archivos, dependencias necesarias y orden de implementación. Si algo no convence, corrígelo en la conversación: "usa la variable de entorno NODE_ENV para logs verbosos en desarrollo".
Fíjate en dos detalles del prompt: define dónde va cada cosa (archivos y carpetas) y cómo validar el resultado (los casos de prueba). Esa combinación evita la mayoría de las iteraciones innecesarias.
Cuando el plan te convenza, pulsa Tab para cambiar a Build y confirma:
El plan está bien. Implementa todo y ejecuta npm test al finalizar.
OpenCode creará los archivos, lanzará las pruebas y reportará el resultado. Al terminar deberías tener algo así:
// src/app.js
const express = require('express');
const app = express();
app.get('/health', (req, res) => {
res.json({
status: 'ok',
uptime: Math.floor(process.uptime()),
timestamp: new Date().toISOString(),
});
});
module.exports = app;
// tests/health.test.js
const request = require('supertest');
const app = require('../src/app');
describe('GET /health', () => {
it('responde 200 con status ok', async () => {
const res = await request(app).get('/health');
expect(res.statusCode).toBe(200);
expect(res.body.status).toBe('ok');
expect(typeof res.body.uptime).toBe('number');
expect(new Date(res.body.timestamp).toString()).not.toBe('Invalid Date');
});
});
| Verificación | Cómo | Esperado |
|---|---|---|
| Suite de pruebas | npm test |
Todos los tests en verde. |
| Prueba manual | node src/server.js y abrir http://localhost:3000/health |
JSON con los tres campos y código 200. |
| Revisión del diff | git diff o el resumen de archivos tocados en la TUI |
Sólo los archivos acordados en el plan. |
| Arrepentimiento | /undo y luego /redo si cambias de opinión |
Vuelve atrás el mensaje y sus cambios; ajusta el prompt y reintenta. |
Si el diff te convence, pide al agente que cree el commit o hazlo tú mismo:
git add -A
git commit -m "feat: endpoint /health con pruebas supertest"
Buenos ejercicios para continuar sobre este mismo proyecto:
/ready que verifique una dependencia externa.PORT) con su test correspondiente.opencode run para generar automáticamente el README del servicio.Conclusión: en este proyecto aplicaste el ciclo completo profesional: entorno preparado, reglas en AGENTS.md, plan aprobado en modo Plan, implementación verificada en modo Build y revisión humana del resultado antes de confirmar. En el próximo tema repetiremos el ejercicio con Python y FastAPI para consolidar el flujo en otro ecosistema.