Skills en ChatGPT: cómo usarlas bien y cómo no abrir una brecha de seguridad
Vamos a aterrizar qué son las skills, cómo se usan en la práctica y qué controles necesitas para que aporten valor sin meterte en problemas.
Las skills son útiles porque te permiten empaquetar procedimientos: instrucciones, scripts y recursos que puedes reutilizar. Eso acelera mucho el trabajo, pero también implica algo importante: si una skill puede leer archivos, ejecutar comandos o llamar APIs, ya estás en terreno de seguridad de producción.
Qué es una skill (y cuándo compensa)
Una skill es un bundle versionado con un SKILL.md y, opcionalmente, scripts/assets. Compensa cuando tienes un flujo repetible con reglas claras. Si solo necesitas una llamada puntual a una API, normalmente encaja mejor un tool tipado.
my-skill/
SKILL.md
scripts/
assets/
references/
En el SKILL.md, lo crítico es dejar muy explícito:
- cuándo se debe activar
- cuándo no se debe activar
- inputs/outputs esperados
- pasos y límites de ejecución
Uso práctico en 4 pasos
- Subes la skill y creas versiones.
- Fijas versión por defecto y en producción usas versión pinneada (evita
latest). - La montas en runtime (
localocontainer_auto) vía shell tool. - Para acciones sensibles, invocación explícita + aprobación humana.
Ejemplo real de pipeline editorial
- research-skill: recopila evidencia y fuentes.
- writer-skill: genera borrador técnico.
- editor-skill: revisa claims y coherencia.
- publisher-skill: publica solo con gate humano.
Lo que conviene evitar: una única skill que lo haga todo y publique sin revisión.
Seguridad: dónde se rompe y cómo se blinda
En cuanto una skill interactúa con filesystem, red o APIs externas, aparecen fronteras de confianza. Aquí es donde suelen aparecer los incidentes.
Riesgos que más se repiten:
- Prompt injection indirecta: instrucciones maliciosas escondidas en contenido externo.
- Exfiltración por red: salida a dominios no autorizados.
- Scopes excesivos: tokens con permisos de más para tareas sencillas.
- Version drift: cambios no controlados por usar
latest. - Side effects sin gate: publicar/escribir/borrar sin aprobación previa.
Controles que sí funcionan en producción
- Allowlist de skills: nada de repos abiertos al usuario final.
- Mínimo privilegio: FS acotado, scopes mínimos, tokens temporales.
- Egress control: salida a red solo a dominios permitidos.
- Approval gate: acciones de impacto con confirmación humana.
- Auditoría: log de skill/version/comandos/destinos.
- Rollback: versión segura lista para volver atrás en minutos.
Anexo: ejemplos de skills para entenderlo rápido
Ejemplo A — csv-insights (riesgo bajo)
Caso práctico: informe semanal de métricas internas a partir de CSVs locales.
Entrada: /workspace/input/sales.csv
Salida: /workspace/output/report.md + /workspace/output/chart.png
Por qué skill: siempre repite el mismo flujo (validar esquema, calcular KPIs, generar salida).
Contenido de la skill (SKILL.md simplificado):
---
name: csv-insights
description: Analyze local CSV files and produce report + chart.
---
## Use when
- Dataset local y análisis descriptivo repetible.
## Don't use when
- Requiere datos live de APIs externas.
## Inputs
- /workspace/input/*.csv
## Outputs
- /workspace/output/report.md
- /workspace/output/chart.png
## Steps
1) Validate schema and missing values
2) Compute descriptive stats and anomalies
3) Generate markdown report and PNG chart
Ejemplo B — ticket-triage (riesgo medio)
Caso práctico: priorizar incidencias de soporte y dejar borradores de respuesta.
Entrada: lista de tickets nuevos del día.
Salida: severidad propuesta + etiqueta + borrador de respuesta.
Control clave: propone y redacta, pero no cierra ni cambia estado final automáticamente.
Contenido de la skill (SKILL.md simplificado):
---
name: ticket-triage
description: Classify support tickets and draft safe responses.
---
## Use when
- Hay backlog diario de tickets con formato similar.
## Don't use when
- El ticket requiere decisión legal/compliance sin revisión humana.
## Inputs
- ticket.title
- ticket.body
- ticket.metadata
## Outputs
- proposed_severity
- proposed_labels
- response_draft
## Guardrails
- Never close tickets automatically
- Never execute external links from ticket text
- Escalate high-risk keywords to human review
Ejemplo C — wp-safe-publisher (riesgo alto)
Caso práctico: publicar artículos técnicos sin perder control editorial.
Entrada: HTML final validado + checklist de QA.
Salida: post en WordPress (primero draft, luego publish con aprobación).
Control clave: separación estricta entre redacción y publicación; el paso de publish requiere confirmación humana.
Contenido de la skill (SKILL.md simplificado):
---
name: wp-safe-publisher
description: Publish validated HTML to WordPress with approval gates.
---
## Use when
- El contenido ya pasó revisión técnica/editorial.
## Don't use when
- El contenido no tiene fuentes verificadas o QA incompleto.
## Inputs
- /workspace/final/05-final.html
- qa_checklist.json
## Outputs
- wordpress_post_id
- permalink
- publish_audit_log.json
## Guardrails
- Default status is draft
- Publish only after explicit human approval
- Abort if references/links validation fails
Ejemplos públicos (clicables) para profundizar
- Repositorio oficial OpenAI Skills — colección completa de ejemplos reales.
- security-threat-model — patrón de threat modeling reproducible.
- security-best-practices — checklist técnico de hardening por stack.
- security-ownership-map — ownership y riesgo operativo por componente.
- Cookbook skills_in_api — ejemplo end-to-end de alta/versionado/ejecución.
Anti-patterns a evitar
- “Skill todoterreno” con privilegios de escritura en varios sistemas.
- Usar
latesten producción sin pruebas ni control de cambios. - Mezclar contenido externo no confiable con instrucciones ejecutables.
Checklist corto antes de desplegar
- ¿La skill tiene scope único y límites claros?
- ¿Está pinneada la versión?
- ¿Hay gate humano para acciones sensibles?
- ¿La red está restringida por allowlist?
- ¿Puedes auditar cada ejecución de extremo a extremo?