Skip to main content
Cristhian Villegas
DevOps9 min read2 views

Skills y Agentes personalizados en OpenCode: guía práctica

Skills y Agentes personalizados en OpenCode: guía práctica

¿Qué son los Skills en OpenCode?

Los Skills en OpenCode son instrucciones reutilizables que los agentes descubren e invocan automáticamente. Piensa en ellos como recetas especializadas que le dicen al agente cómo manejar tareas específicas — desde generar tests hasta crear migraciones de base de datos o revisar código de seguridad.

A diferencia de los prompts simples que escribes en cada sesión, los Skills se guardan en archivos y están disponibles permanentemente. OpenCode los detecta automáticamente y los usa cuando son relevantes para la tarea que estás realizando.

OpenCode integración con GitHub mostrando skills en acción

Fuente: OpenCode — GitHub Repository

Concepto clave: Los Skills son como plugins declarativos. No son código ejecutable — son instrucciones en Markdown que guían el comportamiento del agente para tareas específicas.

Estructura de un Skill

Cada Skill vive en su propia carpeta con un archivo SKILL.md. La estructura es simple:

bash
1# Estructura de carpetas
2.opencode/
3└── skills/
4    ├── code-review/
5    │   └── SKILL.md
6    ├── test-generator/
7    │   └── SKILL.md
8    └── migration-creator/
9        └── SKILL.md

El archivo SKILL.md tiene dos partes: un frontmatter YAML con metadatos y el contenido con las instrucciones.

yaml
1---
2name: code-review
3description: Revisa código buscando bugs, problemas de rendimiento y mejores prácticas
4license: MIT
5compatibility:
6  - typescript
7  - javascript
8  - python
9metadata:
10  author: tu-nombre
11  version: 1.0.0
12---
13
14# Instrucciones de Code Review
15
16Cuando el usuario pida una revisión de código:
17
181. Analiza el archivo buscando:
19   - Bugs potenciales y edge cases no manejados
20   - Problemas de rendimiento (N+1 queries, memory leaks)
21   - Violaciones de SOLID y clean code
22   - Vulnerabilidades de seguridad (OWASP Top 10)
23
242. Formato de respuesta:
25   - Agrupa los hallazgos por severidad (crítico, alto, medio, bajo)
26   - Incluye el número de línea y sugerencia de corrección
27   - Limita a máximo 10 hallazgos por revisión

Ubicaciones de Skills

OpenCode busca Skills en múltiples ubicaciones, lo que te da flexibilidad para compartirlos:

UbicaciónAlcanceUso ideal
.opencode/skills/ProyectoSkills específicos del proyecto, compartidos con el equipo via Git
~/.config/opencode/skills/GlobalSkills personales que usas en todos tus proyectos
.claude/skills/ProyectoCompatibilidad con Claude Code — OpenCode los detecta también
.agents/skills/ProyectoDirectorio alternativo para organizaciones
💡 Tip: Los Skills en .opencode/skills/ se pueden compartir con tu equipo a través de Git. Los Skills globales en ~/.config/opencode/skills/ son solo para ti.

Creando tu primer Skill: generador de tests

Vamos a crear un Skill práctico que genere tests automáticamente para cualquier archivo TypeScript:

bash
1# Crear la estructura
2mkdir -p .opencode/skills/test-generator

Ahora crea el archivo .opencode/skills/test-generator/SKILL.md:

markdown
1---
2name: test-generator
3description: Genera tests unitarios con Jest/Vitest para archivos TypeScript
4license: MIT
5compatibility:
6  - typescript
7  - javascript
8metadata:
9  author: equipo-desarrollo
10  version: 1.0.0
11---
12
13# Generador de Tests Unitarios
14
15Cuando el usuario pida generar tests para un archivo:
16
17## Análisis previo
181. Lee el archivo fuente completo
192. Identifica todas las funciones/métodos exportados
203. Analiza los tipos de parámetros y valores de retorno
214. Detecta dependencias que necesitan ser mockeadas
22
23## Estructura del test
24- Usa `describe` agrupando por función/método
25- Nombre del archivo: `{nombre}.test.ts` junto al archivo original
26- Importa el framework de testing del proyecto (Jest o Vitest)
27
28## Casos obligatorios por función
29- Happy path con datos válidos
30- Edge cases: null, undefined, string vacío, array vacío
31- Errores esperados: inputs inválidos, excepciones
32- Boundary values: 0, -1, MAX_SAFE_INTEGER
33
34## Reglas
35- Mockea TODAS las dependencias externas (fetch, DB, fs)
36- Usa nombres descriptivos: `should return empty array when no users found`
37- NO uses `any` en los tipos de los mocks
38- Cada test debe ser independiente — sin estado compartido entre tests

Skill avanzado: creador de migraciones SQL

Veamos un ejemplo más complejo para equipos que trabajan con bases de datos:

markdown
1---
2name: migration-creator
3description: Genera migraciones SQL seguras con rollback para PostgreSQL/Prisma
4license: MIT
5compatibility:
6  - sql
7  - prisma
8metadata:
9  author: dba-team
10  version: 2.0.0
11---
12
13# Creador de Migraciones SQL
14
15## Reglas de seguridad (OBLIGATORIAS)
16- Toda migración DEBE tener un script de rollback
17- NUNCA usar DROP TABLE sin confirmación explícita del usuario
18- Agregar índices con CONCURRENTLY para evitar locks en producción
19- Usar transacciones para operaciones múltiples
20
21## Formato de salida
22Genera dos archivos:
231. `migrations/{timestamp}_{nombre}/up.sql` — migración
242. `migrations/{timestamp}_{nombre}/down.sql` — rollback
25
26## Plantilla de migración
27```sql
28-- up.sql
29BEGIN;
30
31-- Cambios aquí
32ALTER TABLE users ADD COLUMN IF NOT EXISTS phone VARCHAR(20);
33CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_users_phone ON users(phone);
34
35COMMIT;
36```
37
38```sql
39-- down.sql
40BEGIN;
41
42DROP INDEX IF EXISTS idx_users_phone;
43ALTER TABLE users DROP COLUMN IF EXISTS phone;
44
45COMMIT;
46```
47
48## Validaciones
49- Verificar que las tablas referenciadas existen
50- Verificar que los tipos de columna son compatibles
51- Advertir si una migración puede causar downtime

¿Qué son los Agentes personalizados?

Mientras que los Skills son instrucciones que cualquier agente puede usar, los Agentes personalizados son entidades completas con su propio modelo, herramientas y personalidad. Puedes crear agentes especializados para diferentes roles en tu equipo.

OpenCode integración con VS Code

Fuente: OpenCode — GitHub Repository

Método 1: Agentes vía opencode.json

json
1{
2  "agents": {
3    "reviewer": {
4      "prompt": ".opencode/agents/reviewer.md",
5      "model": "anthropic/claude-opus-4-1",
6      "tools": {
7        "bash": false,
8        "edit": false,
9        "read": true,
10        "glob": true,
11        "grep": true
12      }
13    },
14    "junior-dev": {
15      "prompt": ".opencode/agents/junior-dev.md",
16      "model": "anthropic/claude-haiku-4-5",
17      "tools": {
18        "bash": true,
19        "edit": true,
20        "read": true
21      }
22    }
23  }
24}

Observa cómo cada agente tiene permisos diferentes. El reviewer solo puede leer (no editar ni ejecutar comandos), mientras que el junior-dev tiene acceso completo pero usa un modelo más económico.

Método 2: Agentes vía Markdown

Crea un archivo en .opencode/agents/ con frontmatter YAML:

markdown
1---
2name: security-auditor
3description: Experto en seguridad que revisa código buscando vulnerabilidades OWASP
4model: anthropic/claude-opus-4-1
5tools:
6  bash: false
7  edit: false
8  read: true
9  grep: true
10---
11
12# Security Auditor Agent
13
14Eres un experto en seguridad de aplicaciones. Tu trabajo es:
15
161. Analizar el código buscando vulnerabilidades del OWASP Top 10:
17   - Inyección SQL/NoSQL
18   - XSS (Cross-Site Scripting)
19   - CSRF (Cross-Site Request Forgery)
20   - Broken Authentication
21   - Sensitive Data Exposure
22   - Security Misconfiguration
23
242. Para cada hallazgo, reporta:
25   - Severidad (Crítica/Alta/Media/Baja)
26   - Archivo y línea
27   - Descripción del riesgo
28   - Código de ejemplo para la corrección
29
303. Al final, genera un resumen con:
31   - Total de hallazgos por severidad
32   - Puntuación de seguridad (0-100)
33   - Top 3 acciones prioritarias

Usando agentes personalizados

Una vez definidos, puedes invocar tus agentes de diferentes formas:

bash
1# Desde la línea de comandos
2opencode run --agent reviewer "Revisa los cambios del último commit"
3
4# Para análisis de seguridad
5opencode run --agent security-auditor "Audita el módulo de autenticación"
6
7# El agente junior para tareas simples (más barato)
8opencode run --agent junior-dev "Agrega validación de email al formulario de registro"

Sesión activa de OpenCode mostrando agentes en acción

Fuente: OpenCode — GitHub Repository

Custom Commands: atajos para tareas frecuentes

Además de Skills y Agentes, OpenCode soporta Custom Commands — atajos que se ejecutan como slash commands dentro de la TUI:

bash
1# Crear la carpeta de comandos
2mkdir -p .opencode/commands

Crea un archivo .opencode/commands/test.md:

markdown
1# Test Runner
2description: Ejecuta tests para archivos específicos y muestra cobertura
3
4template: Ejecuta los tests para $ARGUMENTS mostrando la cobertura de código. Si algún test falla, analiza el error y sugiere una corrección.

Ahora puedes usarlo dentro de OpenCode:

bash
1# Dentro de la TUI
2/test src/services/auth.service.ts
3
4# Esto expande el template a:
5# "Ejecuta los tests para src/services/auth.service.ts mostrando la cobertura..."

Placeholders disponibles en Custom Commands

PlaceholderDescripciónEjemplo
$ARGUMENTSTodos los argumentos/test src/auth.tssrc/auth.ts
$1, $2, $3Argumentos individuales/deploy staging v2.1staging, v2.1
!comandoInyecta output de bash!git diff --stat → lista de cambios
@archivoIncluye contenido del archivo@README.md → contenido del README

Ejemplo: comando de deploy

markdown
1# Deploy Helper
2description: Prepara y valida un deploy al ambiente especificado
3
4template: |
5  Ambiente de deploy: $1
6  Versión: $2
7
8  Estado actual del repo:
9  !git status --short
10
11  Últimos commits:
12  !git log --oneline -5
13
14  Verifica que:
15  1. No hay cambios sin commitear
16  2. Los tests pasan
17  3. El build compila correctamente
18  4. La versión en package.json coincide con $2
19
20  Si todo está bien, crea el tag y muestra los comandos para deployar.

Ejemplo completo: sistema de Skills para un proyecto real

Veamos cómo se vería un setup completo para un proyecto de e-commerce con Next.js y Prisma:

bash
1# Estructura completa
2.opencode/
3├── agents/
4│   ├── reviewer.md          # Revisor de código estricto
5│   ├── api-developer.md     # Especialista en APIs REST
6│   └── frontend-dev.md      # Especialista en React/Next.js
7├── skills/
8│   ├── test-generator/
9│   │   └── SKILL.md         # Genera tests automáticos
10│   ├── api-endpoint/
11│   │   └── SKILL.md         # Crea endpoints REST completos
12│   ├── prisma-migration/
13│   │   └── SKILL.md         # Migraciones con rollback
14│   └── component-generator/
15│       └── SKILL.md         # Componentes React con Storybook
16├── commands/
17│   ├── test.md              # /test archivo.ts
18│   ├── deploy.md            # /deploy staging v2.1
19│   ├── review.md            # /review (revisa últimos cambios)
20│   └── docs.md              # /docs componente (genera documentación)
21└── opencode.json            # Configuración de agentes

Buenas prácticas para Skills y Agentes

  • Un Skill, una responsabilidad: Cada Skill debe hacer una sola cosa bien. No mezcles generación de tests con revisión de código.
  • Sé específico en las instrucciones: Cuanto más detallado sea el SKILL.md, mejores resultados obtendrás. Incluye ejemplos concretos.
  • Limita las herramientas de los agentes: Un agente de revisión no necesita poder editar archivos. Aplica el principio de mínimo privilegio.
  • Versiona tus Skills: Usa el campo version en el frontmatter y commitea los Skills al repositorio.
  • Documenta los Custom Commands: Usa el campo description para que tu equipo sepa qué hace cada comando.
  • Prueba incrementalmente: Empieza con un Skill simple y ve añadiendo complejidad conforme confirmes que funciona.
⚠️ Atención: Los Skills no son código ejecutable — son instrucciones para el agente. Si necesitas lógica de automatización real, usa Custom Commands con placeholders ! para inyectar output de comandos bash.

Conclusión

Los Skills, Agentes personalizados y Custom Commands transforman a OpenCode de un simple chat con IA a un sistema completo de automatización de desarrollo adaptado a tu proyecto y equipo. La clave está en crear Skills específicos para las tareas que repites frecuentemente y agentes con el nivel de acceso justo para cada rol.

En el siguiente artículo exploraremos la configuración avanzada de OpenCode y los servidores MCP, que te permitirán conectar herramientas externas como bases de datos, APIs de GitHub, Slack y servicios en la nube directamente a tus agentes.

Share:
CV

Cristhian Villegas

Software Engineer specializing in Java, Spring Boot, Angular & AWS. Building scalable distributed systems with clean architecture.

Comments

Sign in to leave a comment

No comments yet. Be the first!

Related Articles

Stay updated

Get notified when I publish new articles. No spam, unsubscribe anytime.