For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
Navigation principale
Theme

Skills

Fournissez aux agents des instructions réutilisables et des fichiers complémentaires.

Les Skills fournissent à un agent des instructions réutilisables et des fichiers complémentaires pour accomplir une tâche. Utilisez-les avec les outils shell de l’API Responses ou mettez-les à disposition dans un bac à sable de l’API Agents.

Les instructions ci-dessous sur l’envoi, l’association et la gestion des versions des Skills concernent les outils shell de l’API Responses. Les sessions de l’API Agents détectent les Skills dans les répertoires de leur bac à sable.

L’API Responses prend en charge deux modes d’exécution des Skills : en local ou dans un conteneur hébergé. Pour exécuter du code sur votre propre machine, utilisez le mode d’exécution local de l’outil shell.

Qu’est-ce qu’un Skill ?

Un Skill est un répertoire de fichiers qui contient un manifeste SKILL.md composé d’un en-tête de métadonnées et d’instructions. Les Skills regroupent des instructions modulaires qui permettent de formaliser vos processus et conventions, des guides de style de votre entreprise aux workflows en plusieurs étapes. Chaque Skill envoyé prend la forme d’un paquet versionné.

Les Skills sont compatibles avec le standard ouvert Agent Skills.

Exemple de fichier SKILL.md
---
name: basic-math
description: Add or multiply numbers.
---

Use this skill when you need a quick sum or product of numbers.

Lors de la détection des Skills, le modèle voit le nom et la description de chacun. Rédigez une description qui précise ce que fait le Skill et quand l’utiliser. Par exemple, « Révisez les contrats fournisseurs et proposez des modifications en vous appuyant sur les clauses de repli » donne au modèle un contexte plus utile que « Aide aux tâches juridiques ».

Conservez les instructions principales dans SKILL.md et ajoutez au besoin des liens vers les fichiers complémentaires :

review-pr/
├── SKILL.md
├── references/
│   └── review-guidelines.md
├── scripts/
│   └── check-changes.sh
└── assets/
    └── review-template.md

Utilisez references/ pour la documentation de référence, scripts/ pour les actions répétables et assets/ pour les modèles réutilisables.

Créer un Skill

Vous pouvez envoyer un répertoire sous forme de données de formulaire multipart ou envoyer un fichier .zip contenant un seul dossier à la racine.

Option 1 : envoi d’un répertoire (multipart)

Envoyez plusieurs parties files[]. Chaque partie indique le chemin du fichier dans le même dossier racine.

Créer un Skill (multipart)
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'

Option 2 : envoi d’une archive ZIP

Compressez le dossier racine au format ZIP et envoyez l’archive.

Créer un Skill (ZIP)
curl -X POST 'https://api.openai.com/v1/skills' \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -F 'files=@./basic_math.zip;type=application/zip'

Attendre qu’une version envoyée soit disponible

Juste après l’envoi d’une version, une requête peut brièvement renvoyer 404 avant que la version soit disponible. Avant de l’associer à un conteneur ou à une session Live, récupérez-la avec GET /v1/skills/{skill_id}/versions/{version}. Si la requête renvoie 404 immédiatement après un envoi réussi, fixez un délai maximal et réessayez en laissant un court intervalle entre les tentatives. Une fois la requête réussie, utilisez la chaîne de version renvoyée dans la référence au Skill.

Utiliser des Skills avec le shell distant

Pour monter des Skills dans un environnement de shell distant, associez-les via tools[].environment.skills lors de l’appel à l’outil shell.

Utiliser des Skills dans le shell distant
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."
  }'

Guider le modèle avec un prompt

Une fois le Skill monté, le modèle peut décider quand l’utiliser. Pour obtenir un comportement plus déterministe, donnez explicitement au modèle l’instruction « Utilisez le Skill <skill name> » lorsque la situation s’y prête.

Utiliser des Skills en mode shell local

Les Skills fonctionnent aussi en mode shell local, mais les formats acceptés pour les associer diffèrent entre le shell local et le shell distant.

  • Le shell distant accepte les références skill_reference aux Skills envoyés, y compris aux Skills du catalogue et à des versions précises.
  • Le shell local ne prend pas en charge les références skill_reference. Fournissez les fichiers des Skills à partir de chemins locaux dans l’environnement d’exécution que vous contrôlez.

Consultez le guide de l’outil shell pour en savoir plus sur l’exécution en local.

L’exemple JavaScript nécessite Node.js et un démon Docker en cours d’exécution. Enregistrez l’adaptateur Docker sous support/local-skill-sandbox.mjs et l’exemple sous tools/skills/local-shell.mjs pour que l’import relatif de l’exemple fonctionne. Définissez OPENAI_API_KEY, puis installez le SDK, téléchargez la version de l’image fixée par l’adaptateur et exécutez l’exemple depuis le répertoire qui contient support et 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

Les fonctions utilitaires de l’adaptateur se répartissent les tâches suivantes :

Fonction utilitaire Rôle dans l’application
withLocalSkillSandbox(name, workflow) Crée un environnement Python isolé contenant /workspace/skills/csv-insights/SKILL.md et /workspace/reports.csv, appelle workflow avec un AbortSignal, puis supprime l’environnement à la fin du workflow.
executeShellCall(name, call, signal) Exécute les commandes demandées dans cet environnement et renvoie un shell_call_output contenant le call_id d’origine, la sortie standard, la sortie d’erreur et le code de sortie ou l’indication d’un dépassement de délai.
readSkillReport(name, signal) Lit le fichier /workspace/report.md généré dans l’environnement en limitant la quantité de données lues.

L’adaptateur doit faire respecter les délais d’exécution et les limites de volume des sorties. Dans cet exemple, les commandes générées s’exécutent uniquement dans l’environnement isolé.

Utiliser des Skills en mode shell local
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 Agents

Pour utiliser des Skills avec l’API Agents, placez les répertoires des Skills dans le bac à sable et enregistrez leurs répertoires parents dans environment.capability_directories lors de la création de la session. Ces répertoires parents sont appelés répertoires de capacités. Le harnais les parcourt pour détecter les Skills. Cette configuration n’utilise pas le format skill_reference du shell distant pour associer les Skills.

Par exemple, placez dans le bac à sable un Skill de révision de contrats et un Skill de revue de pull requests :

/workspace/capabilities/
├── legal/
│   └── contract-redline/
│       ├── SKILL.md
│       └── references/
│           └── fallback-clauses.md
└── engineering/
    └── review-pr/
        ├── SKILL.md
        └── references/
            └── review-guidelines.md

Utilisez cette configuration d’environnement dans la requête de création de session :

{
  "environment": {
    "type": "self_hosted",
    "workspace_directory": "/workspace",
    "capability_directories": [
      "/workspace/capabilities/legal",
      "/workspace/capabilities/engineering"
    ]
  }
}

Les répertoires de capacités doivent respecter les conditions suivantes :

  • Les chemins doivent pointer vers des répertoires situés dans le bac à sable.
  • Les chemins doivent être absolus et uniques, et ne peuvent contenir aucun segment . ou ...
  • Une session peut enregistrer jusqu’à 32 répertoires de capacités.
  • Les répertoires doivent déjà exister dans l’environnement.

Dès que le bac à sable est disponible, le harnais recherche les fichiers SKILL.md dans ces répertoires et ajoute au contexte le nom et la description de chaque Skill détecté. Le modèle peut sélectionner les Skills pertinents et lire l’intégralité de leurs instructions ainsi que leurs fichiers complémentaires.

Pour configurer la session, consultez la section Configuration de l’agent. Pour l’environnement d’exécution, consultez la section Connecter un bac à sable. Examinez les Skills et leurs fichiers complémentaires avant de les mettre à la disposition de l’agent et suivez les consignes de sécurité du bac à sable.

Les Skills dans le prompt utilisateur

Pour les outils shell de l’API Responses, la plateforme ajoute les champs name, description et path de chaque Skill disponible au contexte du prompt utilisateur pour que le modèle sache quels Skills existent.

Le modèle décide d’utiliser ou non un Skill à partir de ces métadonnées. S’il l’utilise, il se sert de path pour lire l’intégralité des instructions Markdown dans SKILL.md.

Les instructions des Skills font partie du prompt utilisateur et non du prompt système. Elles ont donc la même priorité que les autres instructions fournies par l’utilisateur. Pour choisir vous-même le Skill à utiliser, vous pouvez toujours donner au modèle l’instruction « Utilisez le Skill <skill name>. »

Limites et validation

  • La recherche du fichier SKILL.md ne tient pas compte de la casse.
  • Un paquet de Skill doit contenir exactement un fichier skill.md/SKILL.md.
  • La validation des métadonnées d’en-tête d’un Skill suit la spécification Agent Skills.
  • La taille maximale d’une archive ZIP à envoyer est de 50 MB.
  • Le nombre maximal de fichiers par version d’un Skill est de 500.
  • La taille maximale d’un fichier décompressé est de 25 MB.

Sécurité en cas d’accès au réseau

Examinez chaque Skill utilisé avec l’API Responses. Les Skills présentent des risques de sécurité, notamment l’exfiltration de données à la suite d’une attaque par injection de prompt. Lisez attentivement la section Risques et sécurité ci-dessous avant d’utiliser cet outil.

Gestion des Skills et de leurs versions

Pointeurs de version

  • default_version indique la version utilisée si aucune version n’est fournie.
  • latest_version pointe toujours vers la dernière version envoyée.
  • skill_reference.version accepte une chaîne de version telle que "2" ou "latest".
  • default_version exige également une chaîne de caractères lors de sa mise à jour.

Créer une version

Créer une version d’un Skill
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'

Définir la version par défaut

Définir la version par défaut d’un Skill
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"}'

Règles de suppression

  • Pour supprimer la version par défaut, vous devez d’abord en définir une autre par défaut.
  • Supprimer la dernière version restante supprime le Skill.
  • Supprimer un Skill supprime également toutes ses versions.

Skills du catalogue OpenAI

OpenAI maintient un ensemble de Skills qu’il développe et que vous pouvez référencer par leur identifiant (par exemple, openai-spreadsheets).

Référencer un Skill du catalogue OpenAI
{ "type": "skill_reference", "skill_id": "openai-spreadsheets", "version": "latest" }

Skills intégrés directement

Si vous ne souhaitez pas créer de Skill hébergé, vous pouvez inclure une archive ZIP encodée en base64 directement dans le tableau skills de l’environnement.

Intégrer directement l’archive d’un Skill
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"'"
        }
      }
    ]
  }'

Risques et sécurité

Il est important d’examiner chaque Skill utilisé avec l’API Responses. Les Skills présentent des risques de sécurité, notamment l’exfiltration de données à la suite d’une attaque par injection de prompt.

Si vous utilisez des Skills avec un accès au réseau, lisez attentivement la section sur les risques et la sécurité liés à l’accès au réseau.

Traiter les Skills comme du code et des instructions privilégiés

Le contenu d’un Skill peut influencer la planification, l’utilisation des outils et l’exécution des commandes. Lors de l’examen d’un Skill, considérez son contenu comme une entrée potentiellement non fiable tant que le développeur ne l’a pas validé.

Ne pas exposer de dépôt ouvert de Skills aux utilisateurs finaux

Évitez de concevoir des produits grand public qui permettent aux utilisateurs finaux de parcourir librement un catalogue ouvert de Skills, d’y choisir n’importe quel Skill ou de l’associer au produit. Ces possibilités augmentent sensiblement les risques suivants :

  • Attaques par injection de prompt et contournement des règles au moyen d’instructions malveillantes dans SKILL.md.
  • Exfiltration de données ou actions destructrices déclenchées par des automatisations non vérifiées.

Confier l’intégration des Skills au développeur

Le développeur doit examiner et intégrer les Skills, puis les rendre accessibles aux utilisateurs finaux uniquement dans le cadre de fonctionnalités bien délimitées. En pratique :

  • Associez les Skills à des workflows ou à des cas d’usage précis du produit.
  • Empêchez les utilisateurs finaux de sélectionner arbitrairement des Skills.
  • Soumettez toute action d’écriture ou à fort impact à une approbation explicite et à des contrôles de conformité aux règles applicables.

Exiger une approbation pour les actions sensibles

Pour les workflows susceptibles d’effectuer des actions d’écriture ou à fort impact, exigez une approbation explicite avant l’exécution.

Vérifier les exigences de résidence et de conservation des données

L’API Responses prend en charge deux modes d’exécution des Skills : en local ou dans un conteneur hébergé. Les Skills hébergés suivent le même cycle de vie que le conteneur du shell distant : les Skills montés et les fichiers du conteneur restent disponibles tant que le conteneur est actif, puis sont supprimés lorsque celui-ci expire ou est supprimé. Si vous souhaitez que l’exécution se déroule entièrement sur l’infrastructure que vous gérez, utilisez le mode shell local. Pour les bacs à sable de l’API Agents, consultez la section Cycle de vie du bac à sable. Pour en savoir plus, consultez notre documentation sur les contrôles des données.