As habilidades fornecem ao agente instruções reutilizáveis e arquivos de apoio para realizar uma tarefa. Use-as com as ferramentas de shell da Responses API ou disponibilize-as em um sandbox da Agents API.
As instruções a seguir explicam como enviar, anexar e versionar habilidades para as ferramentas de shell da Responses API. As sessões da Agents API encontram as habilidades nos diretórios do sandbox.
A Responses API oferece dois modos de execução de habilidades: local e hospedado em contêineres. Para executar código na sua máquina, use o modo de execução local da ferramenta de shell.
O que é uma habilidade
Uma habilidade é um diretório de arquivos com um manifesto SKILL.md que contém um cabeçalho de metadados e instruções. As habilidades reúnem instruções modulares que você pode usar para formalizar processos e convenções, desde guias de estilo da empresa até fluxos de trabalho com várias etapas. As habilidades enviadas usam pacotes com controle de versões.
As habilidades são compatíveis com o padrão aberto de habilidades de agentes.
---
name: basic-math
description: Add or multiply numbers.
---
Use this skill when you need a quick sum or product of numbers.Ao descobrir uma habilidade, o modelo vê o nome e a descrição dela. Escreva uma descrição que explique o que a habilidade faz e quando usá-la. Por exemplo, “Revise contratos de fornecedores e marque as alterações com base nas cláusulas alternativas” dá ao modelo mais contexto do que “Ajuda com questões jurídicas”.
Mantenha as instruções principais em SKILL.md e inclua links para os arquivos de apoio conforme necessário:
review-pr/
├── SKILL.md
├── references/
│ └── review-guidelines.md
├── scripts/
│ └── check-changes.sh
└── assets/
└── review-template.md
Use references/ para materiais de referência, scripts/ para ações repetíveis e assets/ para modelos reutilizáveis.
Criar uma habilidade
Você pode enviar um diretório como dados de formulário multipart ou enviar um arquivo .zip que contenha uma única pasta no nível superior.
Opção 1: Envio de diretório (multipart)
Envie várias partes files[]. Cada parte inclui o caminho do arquivo dentro da mesma pasta de nível 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'Opção 2: Envio de arquivo zip
Compacte a pasta de nível superior e envie o arquivo zip.
curl -X POST 'https://api.openai.com/v1/skills' \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-F 'files=@./basic_math.zip;type=application/zip'Aguardar a disponibilidade de uma versão enviada
Logo após o envio, uma consulta à nova versão pode retornar 404 por um breve período, até que a versão fique disponível. Antes de anexá-la a um contêiner ou a uma sessão Live, consulte-a com GET /v1/skills/{skill_id}/versions/{version}. Se a consulta retornar 404 logo após um envio bem-sucedido, aguarde um breve intervalo e tente novamente, respeitando um tempo limite para as tentativas. Quando a consulta for bem-sucedida, use a string de versão retornada na referência à habilidade.
Usar habilidades com o shell hospedado
Para montar habilidades em um ambiente de shell hospedado, anexe-as por meio de tools[].environment.skills ao chamar a ferramenta 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."
}'Como orientar o modelo no prompt
Depois que a habilidade é montada, o modelo pode decidir quando usá-la. Se quiser um comportamento mais determinístico, dê ao modelo a instrução explícita “use a habilidade <skill name>” quando for apropriado.
Usar habilidades no modo de shell local
As habilidades também funcionam no modo de shell local, mas o shell local e o shell hospedado aceitam formatos diferentes para anexá-las.
- O shell hospedado aceita anexos
skill_referencepara habilidades já enviadas, inclusive habilidades selecionadas e versões específicas. - O shell local não aceita anexos
skill_reference. Forneça os arquivos da habilidade por meio de caminhos locais no ambiente de execução que você controla.
Consulte o guia do shell para obter detalhes sobre a execução local.
O exemplo em JavaScript requer o Node.js e o daemon do Docker em execução. Salve o adaptador do Docker como support/local-skill-sandbox.mjs e o exemplo como tools/skills/local-shell.mjs para que a importação relativa funcione. Defina OPENAI_API_KEY, instale o SDK, baixe a versão da imagem fixada pelo adaptador e execute o exemplo a partir do diretório que contém support e 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
As funções auxiliares do adaptador têm as seguintes responsabilidades:
| Função auxiliar | Responsabilidade do aplicativo |
|---|---|
withLocalSkillSandbox(name, workflow) |
Criar um ambiente Python isolado que contenha /workspace/skills/csv-insights/SKILL.md e /workspace/reports.csv, chamar workflow com um AbortSignal e remover o ambiente quando o fluxo de trabalho terminar. |
executeShellCall(name, call, signal) |
Executar os comandos solicitados nesse ambiente e retornar um shell_call_output com o call_id original, stdout, stderr e o resultado da execução (código de saída ou tempo limite excedido). |
readSkillReport(name, signal) |
Ler o arquivo /workspace/report.md gerado no ambiente, limitando a quantidade de dados lidos. |
O adaptador deve impor prazos de execução e limites para o volume de saída. No exemplo, os comandos gerados são executados dentro do ambiente isolado.
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."
}'Agents API
Para usar habilidades na Agents API, coloque os diretórios das habilidades no sandbox e registre os diretórios pai em environment.capability_directories ao criar a sessão. Esses diretórios pai são chamados de diretórios de capacidades. O harness os usa para descobrir habilidades. Essa configuração dispensa o formato de anexo skill_reference do shell hospedado.
Por exemplo, coloque no sandbox uma habilidade de revisão de contratos e outra de revisão de pull requests:
/workspace/capabilities/
├── legal/
│ └── contract-redline/
│ ├── SKILL.md
│ └── references/
│ └── fallback-clauses.md
└── engineering/
└── review-pr/
├── SKILL.md
└── references/
└── review-guidelines.md
Use esta configuração de ambiente na solicitação de criação da sessão:
{
"environment": {
"type": "self_hosted",
"workspace_directory": "/workspace",
"capability_directories": [
"/workspace/capabilities/legal",
"/workspace/capabilities/engineering"
]
}
}
Os diretórios de capacidades devem atender aos seguintes requisitos:
- Os caminhos devem apontar para diretórios dentro do sandbox.
- Os caminhos devem ser absolutos e únicos e não podem conter os segmentos
.ou... - Cada sessão pode registrar até 32 diretórios de capacidades.
- Os diretórios já devem existir no ambiente.
Assim que o sandbox fica disponível, o harness procura arquivos SKILL.md nesses diretórios e adiciona ao contexto o nome e a descrição de cada habilidade encontrada. O modelo pode selecionar as habilidades relevantes e ler suas instruções completas e seus arquivos de apoio.
Consulte Configuração do agente para configurar a sessão e Conectar um sandbox para configurar o ambiente de execução. Revise as habilidades e seus arquivos de apoio antes de disponibilizá-los ao agente e siga as orientações de segurança do sandbox.
Habilidades no prompt do usuário
Para as ferramentas de shell da Responses API, a plataforma adiciona os campos name, description e path de cada habilidade disponível ao contexto do prompt do usuário. Assim, o modelo sabe que a habilidade existe.
O modelo usa esses metadados para decidir se deve usar a habilidade. Se decidir usá-la, o modelo usa path para ler as instruções completas em Markdown no arquivo SKILL.md.
As instruções da habilidade fazem parte do prompt do usuário, e não do prompt do sistema. Por isso, recebem a mesma prioridade que as demais instruções fornecidas pelo usuário. Para controlar a seleção explicitamente, você ainda pode dar ao modelo a instrução “use a habilidade <skill name>”.
Limites e validação
- A identificação do arquivo
SKILL.mdnão diferencia maiúsculas de minúsculas. - Cada pacote de habilidade deve conter exatamente um arquivo
skill.md/SKILL.md. - A validação do cabeçalho de metadados da habilidade segue a especificação de habilidades de agentes.
- O tamanho máximo do arquivo zip para envio é de
50 MB. - Cada versão de uma habilidade pode conter no máximo
500arquivos. - O tamanho máximo de cada arquivo descompactado é de
25 MB.
Segurança no uso de habilidades com acesso à rede
Inspecione todas as habilidades usadas com a Responses API. As habilidades introduzem riscos de segurança, como a exfiltração de dados por injeção de prompt. Leia com atenção a seção Riscos e segurança abaixo antes de usar esta ferramenta.
Controle de versões e gerenciamento
Referências a versões
default_versionindica a versão usada quando nenhuma versão é informada.latest_versionaponta para a versão enviada mais recentemente.skill_reference.versionaceita uma string de versão, como"2"ou"latest".default_versiontambém exige uma string ao ser atualizado.
Criar uma nova versão
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'Definir a versão padrão
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"}'Regras de exclusão
- Para excluir a versão padrão, primeiro defina outra versão como padrão.
- Excluir a última versão restante também exclui a habilidade.
- Excluir uma habilidade remove todas as suas versões.
Habilidades selecionadas
A OpenAI mantém um conjunto de habilidades próprias que você pode referenciar pelo identificador (por exemplo, openai-spreadsheets).
{ "type": "skill_reference", "skill_id": "openai-spreadsheets", "version": "latest" }Habilidades incorporadas
Se não quiser criar uma habilidade hospedada, você pode incluir um pacote zip codificado em base64 diretamente no array skills do ambiente.
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"'"
}
}
]
}'Riscos e segurança
É importante inspecionar todas as habilidades usadas com a Responses API. As habilidades introduzem riscos de segurança, como a exfiltração de dados por injeção de prompt.
Ao usar habilidades com acesso à rede, leia com atenção a seção sobre riscos e segurança do acesso à rede.
Trate as habilidades como código e instruções com privilégios elevados
O conteúdo de uma habilidade pode influenciar o planejamento, o uso de ferramentas e a execução de comandos. Ao revisar uma habilidade, trate seu conteúdo como potencialmente não confiável até que o desenvolvedor o valide.
Não exponha um repositório aberto de habilidades aos usuários finais
Evite criar produtos que permitam aos usuários finais explorar livremente um catálogo aberto de habilidades, selecionar qualquer uma delas ou anexá-la. Isso aumenta consideravelmente o risco de:
- Injeção de prompt e contorno de políticas por meio de instruções maliciosas no arquivo SKILL.md.
- Exfiltração de dados ou ações destrutivas desencadeadas por automações que não passaram por revisão.
Integre as habilidades no desenvolvimento do produto
O desenvolvedor deve inspecionar e integrar as habilidades. Só então deve disponibilizá-las aos usuários finais por meio de funcionalidades com escopo delimitado. Na prática:
- Associe as habilidades a fluxos de trabalho ou casos de uso específicos do produto.
- Impeça que os usuários finais selecionem habilidades arbitrariamente.
- Exija aprovação explícita e verifique o cumprimento das políticas aplicáveis antes de permitir ações de escrita ou de alto impacto.
Exija aprovação para ações sensíveis
Para fluxos de trabalho que podem realizar ações de escrita ou de alto impacto, exija aprovação explícita antes da execução.
Valide os requisitos de residência de dados e de retenção
A Responses API oferece dois modos de execução de habilidades: local e hospedado em contêineres. As habilidades hospedadas seguem o mesmo ciclo de vida dos contêineres do shell hospedado. As habilidades montadas e os arquivos do contêiner ficam disponíveis enquanto ele está ativo e são descartados quando ele expira ou é excluído. Se quiser que toda a execução ocorra na infraestrutura que você gerencia, use o modo de shell local. Para os sandboxes da Agents API, consulte Ciclo de vida do sandbox. Saiba mais sobre nossos controles de dados.