Les Agent Skills étendent les capacités de Claude grâce à des dossiers organisés contenant des instructions, des scripts et des ressources. Ce guide vous montre comment utiliser des Skills préconstruits et personnalisés avec l'API Claude.
Apprenez à utiliser les Agent Skills pour créer des documents avec l'API Claude en moins de 10 minutes.
Apprenez à écrire des Skills efficaces que Claude peut découvrir et utiliser avec succès.
Les Skills s'intègrent à l'API Messages via l'outil d'exécution de code. Que vous utilisiez des Skills préconstruits gérés par Anthropic ou des Skills personnalisés que vous avez téléversés, la forme d'intégration est identique : les deux nécessitent l'exécution de code et utilisent la même structure container.
Les Skills s'intègrent de manière identique dans l'API Messages, quelle que soit leur source. Vous spécifiez les Skills dans le paramètre container avec un skill_id, un type et une version optionnelle, et ils s'exécutent dans l'environnement d'exécution de code.
Vous pouvez utiliser des Skills provenant de deux sources :
| Aspect | Skills Anthropic | Skills personnalisés |
|---|---|---|
| Valeur de type | anthropic | custom |
| ID de Skill | Noms courts : pptx, xlsx, docx, pdf | Générés : skill_01AbCdEfGhIjKlMnOpQrStUv |
| Format de version | Basé sur la date : 20251013 ou latest | ID de version : skver_01AbCdEfGhIjKlMnOpQrStUv ou latest |
| Gestion | Préconstruits et maintenus par Anthropic | Téléversez et gérez via l'API Skills |
| Disponibilité | Disponibles pour tous les utilisateurs | Privés à votre espace de travail |
Les deux sources de Skills sont renvoyées par le point de terminaison List Skills (utilisez le paramètre source pour filtrer). La forme d'intégration et l'environnement d'exécution sont identiques. La seule différence réside dans la provenance des Skills et la manière dont ils sont gérés.
Pour utiliser les Skills, vous avez besoin de :
Les Skills sont en disponibilité générale sur l'API Claude et ne nécessitent pas d'en-tête anthropic-beta, que ce soit pour l'API Skills ou pour container.skills dans les requêtes Messages. Les exemples de ce guide envoient néanmoins l'en-tête bêta skills-2025-10-02 (ainsi que code-execution-2025-08-25 dans les requêtes Messages) et utilisent l'espace de noms beta des SDK. Les deux en-têtes restent des options d'activation valides, de sorte que les exemples fonctionnent tels quels, et vous pouvez les omettre dans vos propres requêtes.
Les Skills nécessitent l'outil d'exécution de code, utilisez donc un modèle figurant dans sa liste de compatibilité des modèles.
Les Skills sont spécifiés à l'aide du paramètre container dans l'API Messages. Vous pouvez inclure jusqu'à 20 Skills par requête.
La structure est identique pour les Skills Anthropic et personnalisés. Spécifiez les champs obligatoires type et skill_id, et incluez éventuellement version pour épingler une version spécifique :
client = anthropic.Anthropic()
response = client.beta.messages.create(
model="claude-opus-5",
max_tokens=4096,
betas=["code-execution-2025-08-25", "skills-2025-10-02"],
container={
"skills": [{"type": "anthropic", "skill_id": "pptx", "version": "latest"}]
},
messages=[
{"role": "user", "content": "Create a presentation about renewable energy"}
],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)Lorsque les Skills créent des documents (Excel, PowerPoint, PDF, Word), ils renvoient des attributs file_id dans la réponse. Vous devez utiliser l'API Files pour télécharger ces fichiers.
Fonctionnement :
file_id pour chaque fichier créé, à l'intérieur des blocs de résultat de l'outil d'exécution de code (voir Format de réponse).Pour fournir des fichiers d'entrée sur lesquels les Skills doivent travailler, téléversez-les avec l'API Files et référencez-les dans votre requête avec un bloc de téléversement de conteneur.
Exemple : création et téléchargement d'un fichier Excel
client = anthropic.Anthropic()
# Étape 1 : Utiliser une Skill pour créer un fichier
response = client.beta.messages.create(
model="claude-opus-5",
max_tokens=4096,
betas=["code-execution-2025-08-25", "skills-2025-10-02"],
container={
"skills": [{"type": "anthropic", "skill_id": "xlsx", "version": "latest"}]
},
messages=[
{
"role": "user",
"content": "Create an Excel file with a simple budget spreadsheet",
}
],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)
# Étape 2 : Extraire les ID de fichier de la réponse
def extract_file_ids(response):
file_ids = []
for item in response.content:
if item.type == "bash_code_execution_tool_result":
content_item = item.content
if content_item.type == "bash_code_execution_result":
# chaque élément de contenu est un bloc bash_code_execution_output portant un file_id
for file in content_item.content:
file_ids.append(file.file_id)
return file_ids
# Étape 3 : Télécharger le fichier via l'API Files
for file_id in extract_file_ids(response):
file_metadata = client.beta.files.retrieve_metadata(file_id=file_id)
file_content = client.beta.files.download(file_id=file_id)
# Étape 4 : Enregistrer sur le disque
file_content.write_to_file(file_metadata.filename)
print(f"Downloaded: {file_metadata.filename}")Opérations supplémentaires de l'API Files :
client = anthropic.Anthropic()
file_id = "file_011CNha8iCJcU1wXNR6q4V8w"
# Obtenir les métadonnées du fichier
file_info = client.beta.files.retrieve_metadata(file_id=file_id)
print(f"Filename: {file_info.filename}, Size: {file_info.size_bytes} bytes")
# Lister tous les fichiers
for file in client.beta.files.list():
print(f"{file.filename} - {file.created_at}")
# Supprimer un fichier
client.beta.files.delete(file_id=file_id)L'objet container de la réponse contient l'id du conteneur et l'horodatage expires_at (voir Réutilisation du conteneur pour les détails sur la durée de vie). Réutilisez le même conteneur sur plusieurs messages en spécifiant l'ID du conteneur :
client = anthropic.Anthropic()
# La première requête crée le conteneur
response1 = client.beta.messages.create(
model="claude-opus-5",
max_tokens=4096,
betas=["code-execution-2025-08-25", "skills-2025-10-02"],
container={
"skills": [{"type": "anthropic", "skill_id": "xlsx", "version": "latest"}]
},
messages=[
{"role": "user", "content": "Create a sample sales dataset and analyze it"}
],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)
# Poursuivre la conversation avec le même conteneur
messages = [
{"role": "user", "content": "Create a sample sales dataset and analyze it"},
{
# Transmettre le texte de l'assistant ; container.id conserve l'état d'exécution
"role": "assistant",
"content": "\n".join(
block.text for block in response1.content if block.type == "text"
),
},
{"role": "user", "content": "What was the total revenue?"},
]
response2 = client.beta.messages.create(
model="claude-opus-5",
max_tokens=4096,
betas=["code-execution-2025-08-25", "skills-2025-10-02"],
container={
"id": response1.container.id, # Reuse container
"skills": [{"type": "anthropic", "skill_id": "xlsx", "version": "latest"}],
},
messages=messages,
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)Les Skills peuvent effectuer des opérations nécessitant plusieurs tours. Gérez les motifs d'arrêt pause_turn :
client = anthropic.Anthropic()
messages = [{"role": "user", "content": "Generate and process a large sample dataset"}]
max_retries = 10
response = client.beta.messages.create(
model="claude-opus-5",
max_tokens=4096,
betas=["code-execution-2025-08-25", "skills-2025-10-02"],
container={
"skills": [
{
"type": "custom",
"skill_id": "skill_01AbCdEfGhIjKlMnOpQrStUv",
"version": "latest",
}
]
},
messages=messages,
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)
# Gérer pause_turn pour les opérations longues
for _ in range(max_retries):
if response.stop_reason != "pause_turn":
break
messages.append({"role": "assistant", "content": response.content})
response = client.beta.messages.create(
model="claude-opus-5",
max_tokens=4096,
betas=["code-execution-2025-08-25", "skills-2025-10-02"],
container={
"id": response.container.id,
"skills": [
{
"type": "custom",
"skill_id": "skill_01AbCdEfGhIjKlMnOpQrStUv",
"version": "latest",
}
],
},
messages=messages,
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)Combinez plusieurs Skills dans une seule requête pour gérer des flux de travail complexes :
client = anthropic.Anthropic()
response = client.beta.messages.create(
model="claude-opus-5",
max_tokens=4096,
betas=["code-execution-2025-08-25", "skills-2025-10-02"],
container={
"skills": [
{"type": "anthropic", "skill_id": "xlsx", "version": "latest"},
{"type": "anthropic", "skill_id": "pptx", "version": "latest"},
{
"type": "custom",
"skill_id": "skill_01AbCdEfGhIjKlMnOpQrStUv",
"version": "latest",
},
]
},
messages=[
{"role": "user", "content": "Analyze sales data and create a presentation"}
],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)Un bundle de Skill est un répertoire contenant un fichier SKILL.md au niveau supérieur avec un frontmatter YAML name et description, ainsi que tous les scripts ou ressources de support. Consultez Démarrer avec les Agent Skills dans l'API pour en créer un, et la liste Exigences suivant les exemples pour l'ensemble des contraintes.
Téléversez votre Skill personnalisé pour le rendre disponible dans votre espace de travail. Vous pouvez téléverser une archive zip ou des objets fichiers individuels. Le SDK Python fournit également une fonction d'aide files_from_dir qui accepte un chemin de répertoire.
Les fichiers sont identifiés par le nom de fichier que vous attachez (le suffixe ;filename= dans l'exemple cURL et les arguments de nom de fichier dans les exemples SDK). Pour le Skill de ce tutoriel, créez un zip avec zip -r financial_skill.zip financial_skill/ et substituez-le à l'espace réservé example_skill.zip dans les options de téléversement zip.
zip -r financial_skill.zip financial_skill/
ant beta:skills create \
--file financial_skill.zip \
--beta skills-2025-10-02---
name: financial-skill
description: Docs example skill.
---print("financial analysis helper")Exigences :
SKILL.md à la racine du téléversement (ou au sommet d'un unique dossier englobant)display_name est optionnel : lorsqu'il est omis, il est dérivé du name de SKILL.md ; une valeur explicite peut comporter jusqu'à 255 caractères et n'a pas besoin d'être unique au sein de l'espace de travailname : maximum 64 caractères, uniquement des lettres minuscules/chiffres/tirets, pas de balises XML, pas de mots réservés (« anthropic », « claude »)description : maximum 1024 caractères, non vide, pas de balises XMLPour les schémas complets de requête/réponse, consultez la référence de l'API Create Skill.
Récupérez tous les Skills disponibles dans votre espace de travail, y compris les Skills préconstruits Anthropic et vos Skills personnalisés. Utilisez le paramètre source pour filtrer par type de Skill :
# Lister toutes les Skills
ant beta:skills list
# Lister uniquement les Skills personnalisées
ant beta:skills list --source customConsultez la référence de l'API List Skills pour les options de pagination et de filtrage.
Obtenez les détails d'un Skill spécifique :
ant beta:skills retrieve \
--skill-id skill_01AbCdEfGhIjKlMnOpQrStUvLa suppression d'un Skill supprime également toutes ses versions. Cette cascade est un comportement propre à la disponibilité générale (GA), donc contrairement aux autres exemples de ce guide, ceux-ci appellent directement la surface GA plutôt que l'espace de noms beta.
ant skills delete \
--skill-id skill_01AbCdEfGhIjKlMnOpQrStUv >/dev/nullLes Skills prennent en charge la gestion des versions pour gérer les mises à jour en toute sécurité :
Skills Anthropic :
20251013Skills personnalisés :
skver_01AbCdEfGhIjKlMnOpQrStUv"latest" pour toujours obtenir la version la plus récenteUne nouvelle version est un instantané complet, pas un delta : téléversez l'ensemble complet des fichiers du Skill à chaque fois. Les fichiers que vous omettez ne sont pas reportés, et le name dans le SKILL.md de la nouvelle version doit correspondre au nom existant du Skill. Les exemples suivants retéléversent le bundle complet financial_skill/ de la section Création d'un Skill.
# Créer une nouvelle version
VERSION_NUMBER=$(ant beta:skills:versions create \
--skill-id skill_01AbCdEfGhIjKlMnOpQrStUv \
--file financial_skill.zip \
--transform version \
--raw-output)
# Utiliser une version spécifique
ant beta:messages create \
--beta code-execution-2025-08-25,skills-2025-10-02 <<YAML
model: claude-opus-5
max_tokens: 4096
container:
skills:
- type: custom
skill_id: skill_01AbCdEfGhIjKlMnOpQrStUv
version: "$VERSION_NUMBER"
messages:
- role: user
content: Use updated Skill
tools:
- type: code_execution_20250825
name: code_execution
YAML
# Utiliser la dernière version
ant beta:messages create \
--beta code-execution-2025-08-25,skills-2025-10-02 <<YAML
model: claude-opus-5
max_tokens: 4096
container:
skills:
- type: custom
skill_id: skill_01AbCdEfGhIjKlMnOpQrStUv
version: latest
messages:
- role: user
content: Use latest Skill version
tools:
- type: code_execution_20250825
name: code_execution
YAMLConsultez la référence de l'API Create Skill Version pour tous les détails.
Lorsque vous spécifiez des Skills dans un conteneur :
/skills/{skill-name}/. Le répertoire correspond au nom du Skill (pptx pour un Skill Anthropic, le name de SKILL.md pour un Skill personnalisé), et non à son ID skill_01....Claude ne charge les instructions complètes d'un Skill que lorsque c'est nécessaire.
Les Skills conviennent aussi bien au travail organisationnel que personnel. Les organisations les utilisent pour appliquer une mise en forme de marque aux documents, structurer des notes et des rapports autour de modèles d'entreprise, et exécuter des procédures analytiques propres à l'entreprise. Les particuliers les utilisent pour des modèles de documents personnalisés, des pipelines de données spécialisés, et des conventions de génération de code ou de déploiement.
Combinez les Skills Excel et d'analyse DCF personnalisée :
from anthropic.lib import files_from_dir
client = anthropic.Anthropic()
# Créer un Skill personnalisé d'analyse DCF
dcf_skill = client.beta.skills.create(
files=files_from_dir("/path/to/dcf_skill"),
)
# Utiliser avec Excel pour créer un modèle financier
response = client.beta.messages.create(
model="claude-opus-5",
max_tokens=4096,
betas=["code-execution-2025-08-25", "skills-2025-10-02"],
container={
"skills": [
{"type": "anthropic", "skill_id": "xlsx", "version": "latest"},
{"type": "custom", "skill_id": dcf_skill.id, "version": "latest"},
]
},
messages=[
{
"role": "user",
"content": "Build a DCF valuation model for a SaaS company",
}
],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)
print(response)name : maximum 64 caractères, uniquement des lettres minuscules/chiffres/tirets, pas de balises XML, pas de mots réservés (« anthropic », « claude »)description : maximum 1024 caractères, non vide, pas de balises XMLLes Skills s'exécutent dans le conteneur d'exécution de code avec les limitations suivantes :
Consultez Outil d'exécution de code pour les packages disponibles.
Combinez des Skills lorsque les tâches impliquent plusieurs types de documents ou domaines :
Bons cas d'usage :
À éviter :
Les onglets SDK de cette section montrent la valeur container à inclure dans une requête Messages. Les onglets cURL et CLI montrent la requête complète.
Pour la production : épinglez une version spécifique, afin que les mises à jour de Skill ne modifient jamais votre comportement déployé. Si vous omettez version ou la définissez à "latest", les requêtes utilisent la version la plus récente du Skill, de sorte qu'une version téléversée par n'importe qui dans l'espace de travail modifie immédiatement ce que vos agents de production exécutent. L'ID de version provient de la réponse de création de version dans Gestion des versions ou de l'API List Skill Versions. L'ID est toujours une chaîne de caractères : mettez les ID d'horodatage epoch entre guillemets en JSON ou YAML.
# Épingler à des versions spécifiques pour la stabilité
container = {
"skills": [
{
"type": "custom",
"skill_id": "skill_01AbCdEfGhIjKlMnOpQrStUv",
"version": "1759178010641129",
}
]
}Pour le développement : utilisez latest pour récupérer automatiquement la version la plus récente au fil de vos itérations.
# Utilisez latest pour le développement actif
container = {
"skills": [
{
"type": "custom",
"skill_id": "skill_01AbCdEfGhIjKlMnOpQrStUv",
"version": "latest",
}
]
}Si vous utilisez la mise en cache des prompts, modifier la liste des Skills dans votre conteneur invalide le cache. Les Skills sont rendus dans l'invite système dans un ordre fixe, de sorte que la même liste produit le même préfixe pouvant être mis en cache :
client = anthropic.Anthropic()
# Les Skills sont rendues dans l'invite système dans un ordre fixe, favorable au cache
response1 = client.beta.messages.create(
model="claude-opus-5",
max_tokens=4096,
betas=[
"code-execution-2025-08-25",
"skills-2025-10-02",
],
container={
"skills": [{"type": "anthropic", "skill_id": "xlsx", "version": "latest"}]
},
messages=[{"role": "user", "content": "Analyze sales data"}],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)
# Modifier la liste de Skills ([xlsx] vs [xlsx, pptx]) modifie le préfixe : un échec de cache, tandis qu'une liste identique est un succès de cache
response2 = client.beta.messages.create(
model="claude-opus-5",
max_tokens=4096,
betas=[
"code-execution-2025-08-25",
"skills-2025-10-02",
],
container={
"skills": [
{"type": "anthropic", "skill_id": "xlsx", "version": "latest"},
{
"type": "anthropic",
"skill_id": "pptx",
"version": "latest",
}, # prefix change: cache miss
]
},
messages=[{"role": "user", "content": "Create a presentation"}],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)Pour de meilleures performances de mise en cache, gardez votre liste de Skills, y compris son ordre, cohérente entre les requêtes. Épingler les versions des Skills personnalisés aide également : avec "latest", la publication d'une nouvelle version peut invalider le préfixe mis en cache si elle modifie la description du Skill.
Gérez les erreurs liées aux Skills de manière élégante :
client = anthropic.Anthropic()
try:
response = client.beta.messages.create(
model="claude-opus-5",
max_tokens=4096,
betas=["code-execution-2025-08-25", "skills-2025-10-02"],
container={
"skills": [
{
"type": "custom",
"skill_id": "skill_01AbCdEfGhIjKlMnOpQrStUv",
"version": "latest",
}
]
},
messages=[{"role": "user", "content": "Process data"}],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)
except anthropic.BadRequestError as e:
if "skill" in str(e):
print(f"Skill error: {e}")
# Gérer les erreurs spécifiques aux compétences
else:
raiseLes Agent Skills ne sont pas couverts par les accords ZDR. Les définitions de Skills et les données d'exécution sont conservées conformément à la politique standard de conservation des données d'Anthropic.
Pour l'éligibilité ZDR de toutes les fonctionnalités, consultez API et conservation des données.
Si votre organisation a activé l'API Compliance, son flux d'activité enregistre la création et la suppression de Skills et de versions de Skills effectuées avec une clé API Claude ou depuis la Claude Console. Les opérations qui se produisent lorsque l'API Compliance est désactivée ne sont pas enregistrées et ne peuvent pas être récupérées ultérieurement, donc configurez l'API Compliance avant de vous appuyer sur cette piste d'audit.
Référence API complète avec tous les points de terminaison
Apprenez à écrire des Skills efficaces que Claude peut découvrir et utiliser avec succès.
Exécutez du code Python et bash dans un conteneur isolé pour analyser des données, générer des fichiers et itérer sur des solutions.
Was this page helpful?