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.
![]()
Fuente: OpenCode — GitHub Repository
Estructura de un Skill
Cada Skill vive en su propia carpeta con un archivo SKILL.md. La estructura es simple:
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.
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ón | Alcance | Uso ideal |
|---|---|---|
.opencode/skills/ | Proyecto | Skills específicos del proyecto, compartidos con el equipo via Git |
~/.config/opencode/skills/ | Global | Skills personales que usas en todos tus proyectos |
.claude/skills/ | Proyecto | Compatibilidad con Claude Code — OpenCode los detecta también |
.agents/skills/ | Proyecto | Directorio alternativo para organizaciones |
.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:
1# Crear la estructura
2mkdir -p .opencode/skills/test-generator
Ahora crea el archivo .opencode/skills/test-generator/SKILL.md:
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:
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.

Fuente: OpenCode — GitHub Repository
Método 1: Agentes vía opencode.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:
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:
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"

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:
1# Crear la carpeta de comandos
2mkdir -p .opencode/commands
Crea un archivo .opencode/commands/test.md:
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:
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
| Placeholder | Descripción | Ejemplo |
|---|---|---|
$ARGUMENTS | Todos los argumentos | /test src/auth.ts → src/auth.ts |
$1, $2, $3 | Argumentos individuales | /deploy staging v2.1 → staging, v2.1 |
!comando | Inyecta output de bash | !git diff --stat → lista de cambios |
@archivo | Incluye contenido del archivo | @README.md → contenido del README |
Ejemplo: comando de deploy
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:
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
versionen el frontmatter y commitea los Skills al repositorio. - Documenta los Custom Commands: Usa el campo
descriptionpara que tu equipo sepa qué hace cada comando. - Prueba incrementalmente: Empieza con un Skill simple y ve añadiendo complejidad conforme confirmes que funciona.
! 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.
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.