Las habilidades de agente proporcionan instrucciones reutilizables y archivos de apoyo que el agente puede usar para realizar una tarea. Úsalas con las herramientas de shell de la API de Respuestas o ponlas a disposición del agente en un sandbox de la API de Agentes.
Las instrucciones que siguen explican cómo cargar y adjuntar habilidades y administrar sus versiones para las herramientas de shell de la API de Respuestas. Las sesiones de la API de Agentes buscan las habilidades en los directorios de su sandbox.
La API de Respuestas admite dos modalidades de ejecución de habilidades: ejecución local y ejecución en contenedores alojados. Para ejecutar código en tu propia máquina, usa el modo de ejecución local de la herramienta de shell.
Qué es una habilidad
Una habilidad es un directorio que contiene un archivo de manifiesto SKILL.md con metadatos iniciales e instrucciones. Las habilidades son conjuntos modulares de instrucciones que permiten formalizar procesos y convenciones, desde guías de estilo de una empresa hasta flujos de trabajo de varios pasos. Las habilidades que cargas se organizan en paquetes con control de versiones.
Las habilidades son compatibles con el estándar abierto Agent Skills.
---
name: basic-math
description: Add or multiply numbers.
---
Use this skill when you need a quick sum or product of numbers.Al detectar una habilidad, el modelo ve su nombre y su descripción. Escribe una descripción que explique qué hace la habilidad y cuándo conviene usarla. Por ejemplo, “Revisa contratos con proveedores y marca los cambios propuestos usando las cláusulas alternativas” le da al modelo más contexto que “Ayuda con tareas legales”.
Guarda las instrucciones principales en SKILL.md y agrega enlaces a los archivos de apoyo que necesites:
review-pr/
├── SKILL.md
├── references/
│ └── review-guidelines.md
├── scripts/
│ └── check-changes.sh
└── assets/
└── review-template.md
Usa references/ para el material de consulta, scripts/ para las acciones repetibles y assets/ para las plantillas reutilizables.
Crear una habilidad
Puedes cargar un directorio como datos de formulario multiparte o cargar un archivo .zip que contenga una sola carpeta de nivel superior.
Opción 1: cargar un directorio (multiparte)
Carga varias partes files[]. Cada parte incluye la ruta del archivo dentro de la misma carpeta de nivel superior.
curl -X POST 'https://api.openai.com/v1/skills' \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-F 'files[]=@./basic_math/SKILL.md;filename=basic_math/SKILL.md;type=text/markdown' \
-F 'files[]=@./basic_math/calculate.py;filename=basic_math/calculate.py;type=text/plain'Opción 2: cargar un archivo zip
Comprime la carpeta de nivel superior en formato zip y carga el archivo resultante.
curl -X POST 'https://api.openai.com/v1/skills' \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-F 'files=@./basic_math.zip;type=application/zip'Esperar a que una versión cargada esté disponible
Una solicitud de una versión recién cargada puede devolver 404 durante un breve período hasta que la versión esté disponible. Antes de adjuntarla a un contenedor o a una sesión Live, recupérala con GET /v1/skills/{skill_id}/versions/{version}. Si la solicitud devuelve 404 justo después de una carga exitosa, vuelve a intentarlo con una breve espera entre intentos y un tiempo límite. Cuando la solicitud se complete correctamente, usa la cadena de versión devuelta en la referencia a la habilidad.
Usar habilidades con la terminal alojada en la nube
Para montar habilidades en el entorno de la terminal alojada en la nube, adjúntalas mediante tools[].environment.skills al llamar a la herramienta de shell.
curl -L 'https://api.openai.com/v1/responses' \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "gpt-6-astra",
"tools": [
{
"type": "shell",
"environment": {
"type": "container_auto",
"skills": [
{ "type": "skill_reference", "skill_id": "<skill_id>" },
{ "type": "skill_reference", "skill_id": "<skill_id>", "version": "2" }
]
}
}
],
"input": "Use the skills to add 144 and 377, then compute triangle area with base 9 height 13."
}'Cómo indicar el uso de una habilidad en el prompt
Una vez montada la habilidad, el modelo puede decidir cuándo usarla. Si buscas un comportamiento más determinista, dale al modelo la instrucción explícita “usa la habilidad <skill name>” cuando corresponda.
Usar habilidades en el modo de shell local
Las habilidades también funcionan en el modo de shell local, pero el shell local y la terminal alojada en la nube admiten formatos distintos para adjuntarlas.
- La terminal alojada en la nube admite habilidades cargadas que se adjuntan mediante
skill_reference, incluidas las habilidades seleccionadas por OpenAI y las versiones indicadas explícitamente. - El shell local no admite adjuntos
skill_reference. Proporciona los archivos de la habilidad mediante rutas locales en el entorno de ejecución que controlas.
Consulta la guía de la herramienta de shell para obtener detalles sobre la ejecución local.
El ejemplo de JavaScript requiere Node.js y un demonio de Docker en ejecución. Guarda el adaptador de Docker como support/local-skill-sandbox.mjs y el ejemplo como tools/skills/local-shell.mjs para que la importación relativa funcione. Configura OPENAI_API_KEY, instala el SDK, descarga la versión de la imagen que especifica el adaptador y ejecuta el ejemplo desde el directorio que contiene support y tools:
npm install openai
docker pull "$(node --input-type=module -e 'import { sandboxImage } from "./support/local-skill-sandbox.mjs"; console.log(sandboxImage)')"
node tools/skills/local-shell.mjs
Las funciones auxiliares del adaptador cumplen estas tareas:
| Función auxiliar | Responsabilidad de la aplicación |
|---|---|
withLocalSkillSandbox(name, workflow) |
Crear un entorno aislado de Python que contenga /workspace/skills/csv-insights/SKILL.md y /workspace/reports.csv, invocar workflow con un AbortSignal y eliminar el entorno cuando termine el flujo de trabajo. |
executeShellCall(name, call, signal) |
Ejecutar los comandos solicitados dentro de ese entorno y devolver un shell_call_output con el call_id original, stdout, stderr y el estado de salida o la indicación de que se agotó el tiempo de espera. |
readSkillReport(name, signal) |
Leer el archivo /workspace/report.md generado en el entorno con un límite en la cantidad de datos leídos. |
El adaptador debe hacer cumplir los límites de tiempo de ejecución y de tamaño de la salida. En el ejemplo, los comandos generados se ejecutan dentro del entorno aislado.
curl -L 'https://api.openai.com/v1/responses' \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "gpt-6-astra",
"tools": [
{
"type": "shell",
"environment": {
"type": "local",
"skills": [
{
"name": "csv-insights",
"description": "Summarize CSV files and produce a markdown report.",
"path": "<path-to-skill-folder>"
}
]
}
}
],
"input": "Use the csv-insights skill and run locally to summarize today\'s CSV reports in this repo."
}'API de Agentes
Para usar habilidades en la API de Agentes, coloca los directorios de las habilidades en el sandbox y registra los directorios que los contienen en environment.capability_directories al crear la sesión. Estos últimos se denominan directorios de capacidades. El arnés de ejecución los usa para detectar habilidades. Esta configuración no utiliza el formato de adjunto skill_reference de la terminal alojada en la nube.
Por ejemplo, coloca en el sandbox una habilidad para revisar contratos y otra para revisar Pull Requests:
/workspace/capabilities/
├── legal/
│ └── contract-redline/
│ ├── SKILL.md
│ └── references/
│ └── fallback-clauses.md
└── engineering/
└── review-pr/
├── SKILL.md
└── references/
└── review-guidelines.md
Usa esta configuración de entorno en la solicitud de creación de la sesión:
{
"environment": {
"type": "self_hosted",
"workspace_directory": "/workspace",
"capability_directories": [
"/workspace/capabilities/legal",
"/workspace/capabilities/engineering"
]
}
}
Los directorios de capacidades deben cumplir estos requisitos:
- Las rutas deben apuntar a directorios dentro del sandbox.
- Las rutas deben ser absolutas y únicas, y no pueden contener los segmentos
.ni... - Cada sesión puede registrar hasta 32 directorios de capacidades.
- Los directorios ya deben existir en el entorno.
Cuando el sandbox está disponible, el arnés de ejecución busca archivos SKILL.md en estos directorios y agrega al contexto el nombre y la descripción de cada habilidad que encuentra. El modelo puede seleccionar las habilidades pertinentes y leer sus instrucciones completas y sus archivos de apoyo.
Consulta Configuración del agente para configurar la sesión y Conectar un sandbox para configurar el entorno de ejecución. Revisa las habilidades y sus archivos de apoyo antes de ponerlos a disposición del agente y sigue las recomendaciones de seguridad para sandboxes.
Habilidades en el prompt del usuario
Con las herramientas de shell de la API de Respuestas, la plataforma agrega los campos name, description y path de cada habilidad disponible al contexto del prompt del usuario para que el modelo sepa que existe.
El modelo decide si invoca una habilidad a partir de estos metadatos. Si la invoca, usa path para leer las instrucciones completas en Markdown del archivo SKILL.md.
Las instrucciones de las habilidades forman parte del prompt del usuario y no del prompt del sistema. Por eso tienen la misma prioridad que las demás instrucciones que proporciona el usuario. Si quieres controlar explícitamente qué habilidad se usa, puedes indicarle al modelo “usa la habilidad <skill name>”.
Límites y validación
- Al buscar el archivo
SKILL.md, no se distingue entre mayúsculas y minúsculas. - Cada paquete de habilidad debe contener exactamente un archivo
skill.md/SKILL.md. - Los metadatos iniciales de la habilidad se validan según la especificación de habilidades de agente.
- El tamaño máximo de un archivo zip que se puede cargar es de
50 MB. - El número máximo de archivos por versión de una habilidad es de
500. - El tamaño máximo de un archivo sin comprimir es de
25 MB.
Seguridad con acceso a la red
Inspecciona cada habilidad que uses con la API de Respuestas. Las habilidades introducen riesgos de seguridad, como la exfiltración de datos mediante la inyección de prompts. Antes de usar esta herramienta, revisa con atención la sección Riesgos y seguridad que aparece más adelante.
Control de versiones y administración
Referencias a versiones
default_versionse usa cuando no se especifica una versión.latest_versionapunta a la versión cargada más recientemente.skill_reference.versionacepta una cadena de versión, como"2"o"latest".default_versiontambién requiere una cadena cuando actualizas su valor.
Crear una nueva versión
curl -X POST 'https://api.openai.com/v1/skills/<skill_id>/versions' \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-F 'files=@./geometry.zip;type=application/zip'Establecer la versión predeterminada
curl -X POST 'https://api.openai.com/v1/skills/<skill_id>' \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{"default_version": "2"}'Reglas de eliminación
- Para eliminar la versión predeterminada, primero debes establecer otra como predeterminada.
- Si eliminas la única versión que queda, también se elimina la habilidad.
- Al eliminar una habilidad, se eliminan todas sus versiones.
Habilidades seleccionadas por OpenAI
OpenAI mantiene un conjunto de habilidades propias a las que puedes hacer referencia mediante su identificador (por ejemplo, openai-spreadsheets).
{ "type": "skill_reference", "skill_id": "openai-spreadsheets", "version": "latest" }Incluir habilidades directamente
Si no quieres crear una habilidad alojada, puedes incluir un paquete zip codificado en base64 directamente en el arreglo skills del entorno.
INLINE_ZIP=$(base64 -i ./basic_math.zip)
curl -L 'https://api.openai.com/v1/containers' \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"name": "inline-skill-container",
"skills": [
{
"type": "inline",
"name": "basic_math",
"description": "Add or multiply numbers.",
"source": {
"type": "base64",
"media_type": "application/zip",
"data": "'"$INLINE_ZIP"'"
}
}
]
}'Riesgos y seguridad
Es importante inspeccionar cada habilidad que uses con la API de Respuestas. Las habilidades introducen riesgos de seguridad, como la exfiltración de datos mediante la inyección de prompts.
Si usas habilidades con acceso a la red, revisa con atención la sección sobre riesgos y seguridad del acceso a la red.
Tratar las habilidades como código e instrucciones con privilegios
El contenido de una habilidad puede influir en la planificación, el uso de herramientas y la ejecución de comandos. Al revisar una habilidad, trátala como una entrada potencialmente no confiable hasta que el desarrollador la valide.
Evitar que los usuarios finales tengan acceso a un repositorio abierto de habilidades
Evita diseñar productos que permitan a los usuarios finales explorar libremente un catálogo abierto o seleccionar o adjuntar cualquier habilidad de ese catálogo. Esto aumenta considerablemente los siguientes riesgos:
- Inyección de prompts y evasión de políticas mediante instrucciones maliciosas en SKILL.md.
- Exfiltración de datos o acciones destructivas provocadas por automatizaciones que no se han revisado.
Integrar las habilidades durante el desarrollo
El desarrollador debe inspeccionar e integrar las habilidades y ponerlas a disposición de los usuarios finales solo mediante funciones del producto con un alcance definido. En la práctica:
- Asocia las habilidades con flujos de trabajo o casos de uso específicos del producto.
- Impide que los usuarios finales puedan seleccionar habilidades arbitrariamente.
- Exige aprobación explícita y verifica el cumplimiento de las políticas antes de permitir acciones de escritura o de alto impacto.
Exigir aprobación para acciones sensibles
Si un flujo de trabajo puede realizar acciones de escritura o de alto impacto, exige aprobación explícita antes de ejecutarlas.
Validar los requisitos de residencia de datos y retención
La API de Respuestas admite dos modalidades de ejecución de habilidades: ejecución local y ejecución en contenedores alojados. Las habilidades alojadas siguen el mismo ciclo de vida del contenedor que la terminal alojada en la nube. Las habilidades montadas y los archivos del contenedor permanecen disponibles mientras el contenedor está activo y se descartan cuando vence o se elimina. Si quieres que toda la ejecución se realice en la infraestructura que administras, usa el modo de shell local. Para los sandboxes de la API de Agentes, consulta Ciclo de vida del sandbox. Obtén más información sobre nuestros controles de datos.