Agent Skills memperluas kemampuan Claude melalui folder terorganisir yang berisi instruksi, skrip, dan sumber daya. Panduan ini menunjukkan cara menggunakan Skill bawaan maupun Skill kustom dengan Claude API.
Untuk referensi API lengkap termasuk skema request/response dan semua parameter, lihat:
Fitur ini tidak memenuhi syarat untuk Zero Data Retention (ZDR). Data disimpan sesuai dengan kebijakan retensi standar fitur ini.
Buat Skill pertama Anda
Praktik terbaik untuk menulis Skill
Untuk pembahasan mendalam tentang arsitektur dan penerapan Agent Skills di dunia nyata, baca postingan blog engineering: Equipping agents for the real world with Agent Skills.
Skill terintegrasi dengan Messages API melalui code execution tool. Baik menggunakan Skill bawaan yang dikelola oleh Anthropic maupun Skill kustom yang telah Anda unggah, bentuk integrasinya identik: keduanya memerlukan eksekusi kode dan menggunakan struktur container yang sama.
Skill terintegrasi secara identik di Messages API terlepas dari sumbernya. Anda menentukan Skill dalam parameter container dengan skill_id, type, dan version opsional, dan Skill tersebut dieksekusi di lingkungan eksekusi kode.
Anda dapat menggunakan Skill dari dua sumber:
| Aspek | Skill Anthropic | Skill Kustom |
|---|---|---|
| Nilai type | anthropic | custom |
| Skill ID | Nama pendek: pptx, xlsx, docx, pdf | Dihasilkan otomatis: skill_01AbCdEfGhIjKlMnOpQrStUv |
| Format versi | Berbasis tanggal: 20251013 atau latest | Epoch timestamp: 1759178010641129 atau latest |
| Pengelolaan | Dibuat dan dikelola oleh Anthropic | Unggah dan kelola melalui Skills API |
| Ketersediaan | Tersedia untuk semua pengguna | Privat untuk workspace Anda |
Kedua sumber Skill dikembalikan oleh endpoint List Skills (gunakan parameter source untuk memfilter). Bentuk integrasi dan lingkungan eksekusinya identik. Satu-satunya perbedaan adalah dari mana Skill berasal dan bagaimana Skill tersebut dikelola.
Untuk menggunakan Skill, Anda memerlukan:
code-execution-2025-08-25 - Mengaktifkan eksekusi kode (diperlukan untuk Skill)skills-2025-10-02 - Mengaktifkan Skills APIfiles-api-2025-04-14 - Untuk mengunggah/mengunduh file ke/dari containerSkill ditentukan menggunakan parameter container di Messages API. Anda dapat menyertakan hingga 8 Skill per permintaan.
Strukturnya identik untuk Skill Anthropic maupun Skill kustom. Tentukan type dan skill_id yang diperlukan, dan secara opsional sertakan version untuk mengunci ke versi tertentu:
client = anthropic.Anthropic()
response = client.beta.messages.create(
model="claude-opus-4-8",
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"}],
)Ketika Skill membuat dokumen (Excel, PowerPoint, PDF, Word), Skill mengembalikan atribut file_id dalam respons. Anda harus menggunakan Files API untuk mengunduh file-file ini.
Cara kerjanya:
file_id untuk setiap file yang dibuatContoh: Membuat dan mengunduh file Excel
client = anthropic.Anthropic()
# Langkah 1: Gunakan Skill untuk membuat file
response = client.beta.messages.create(
model="claude-opus-4-8",
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"}],
)
# Langkah 2: Ekstrak ID file dari respons
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":
# list dengan tipe konkret: List[BashCodeExecutionOutputBlock]
for file in content_item.content:
file_ids.append(file.file_id)
return file_ids
# Langkah 3: Unduh file menggunakan Files API
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)
# Langkah 4: Simpan ke disk
file_content.write_to_file(file_metadata.filename)
print(f"Downloaded: {file_metadata.filename}")Operasi Files API tambahan:
client = anthropic.Anthropic()
file_id = "file_abc123"
# Dapatkan metadata file
file_info = client.beta.files.retrieve_metadata(file_id=file_id)
print(f"Filename: {file_info.filename}, Size: {file_info.size_bytes} bytes")
# Daftar semua file
files = client.beta.files.list()
for file in files.data:
print(f"{file.filename} - {file.created_at}")
# Hapus file
client.beta.files.delete(file_id=file_id)Untuk detail lengkap tentang Files API, lihat dokumentasi Files API.
Gunakan kembali container yang sama di beberapa pesan dengan menentukan ID container:
# Permintaan pertama membuat kontainer
response1 = client.beta.messages.create(
model="claude-opus-4-8",
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 this sales data"}],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)
# Lanjutkan percakapan dengan kontainer yang sama
messages = [
{"role": "user", "content": "Analyze this sales data"},
{"role": "assistant", "content": response1.content},
{"role": "user", "content": "What was the total revenue?"},
]
response2 = client.beta.messages.create(
model="claude-opus-4-8",
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"}],
)Skill mungkin melakukan operasi yang memerlukan beberapa turn. Tangani stop reason pause_turn:
messages = [{"role": "user", "content": "Process this large dataset"}]
max_retries = 10
response = client.beta.messages.create(
model="claude-opus-4-8",
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"}],
)
# Tangani pause_turn untuk operasi yang lama
for i 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-4-8",
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"}],
)Respons mungkin menyertakan stop reason pause_turn, yang menunjukkan bahwa API menjeda operasi Skill yang berjalan lama. Anda dapat memberikan respons tersebut kembali apa adanya dalam permintaan berikutnya agar Claude dapat melanjutkan turn-nya, atau memodifikasi konten jika Anda ingin menginterupsi percakapan dan memberikan panduan tambahan.
Gabungkan beberapa Skill dalam satu permintaan untuk menangani alur kerja yang kompleks:
response = client.beta.messages.create(
model="claude-opus-4-8",
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"}],
)Bundle Skill adalah direktori yang berisi file SKILL.md di tingkat teratas dengan frontmatter YAML name dan description, ditambah skrip atau sumber daya pendukung apa pun. Lihat Memulai dengan Agent Skills di API untuk membuatnya, dan daftar Persyaratan setelah contoh-contoh berikut untuk batasan lengkapnya.
Unggah Skill kustom Anda agar tersedia di workspace Anda. Anda dapat mengunggah arsip zip atau objek file individual; SDK Python juga menyediakan helper files_from_dir yang menerima path direktori.
# Opsi 1: Unggah file individual (satu flag --file per file)
ant beta:skills create \
--display-title "Financial Analysis" \
--file financial_skill/SKILL.md \
--file financial_skill/analyze.py \
--beta skills-2025-10-02
# Opsi 2: Unggah arsip zip
ant beta:skills create \
--display-title "Financial Analysis" \
--file financial_analysis_skill.zip \
--beta skills-2025-10-02Persyaratan:
name: Maksimum 64 karakter, hanya huruf kecil/angka/tanda hubung, tanpa tag XML, tanpa kata yang dicadangkan ("anthropic", "claude")description: Maksimum 1024 karakter, tidak boleh kosong, tanpa tag XMLUntuk skema request/response lengkap, lihat referensi API Create Skill.
Ambil semua Skill yang tersedia untuk workspace Anda, termasuk Skill bawaan Anthropic dan Skill kustom Anda. Gunakan parameter source untuk memfilter berdasarkan jenis Skill:
# Daftar semua Skill
ant beta:skills list
# Daftar hanya Skill kustom
ant beta:skills list --source customLihat referensi API List Skills untuk opsi paginasi dan pemfilteran.
Dapatkan detail tentang Skill tertentu:
ant beta:skills retrieve \
--skill-id skill_01AbCdEfGhIjKlMnOpQrStUvUntuk menghapus Skill, Anda harus terlebih dahulu menghapus semua versinya:
# Langkah 1: Hapus semua versi
ant beta:skills:versions list \
--skill-id skill_01AbCdEfGhIjKlMnOpQrStUv \
--transform version --raw-output \
| while read -r VERSION; do
ant beta:skills:versions delete \
--skill-id skill_01AbCdEfGhIjKlMnOpQrStUv \
--version "$VERSION" >/dev/null
done
# Langkah 2: Hapus Skill
ant beta:skills delete \
--skill-id skill_01AbCdEfGhIjKlMnOpQrStUv >/dev/nullMencoba menghapus Skill yang masih memiliki versi akan mengembalikan error 400.
Skill mendukung versioning untuk mengelola pembaruan dengan aman:
Skill Anthropic:
20251013Skill Kustom:
1759178010641129"latest" untuk selalu mendapatkan versi terbaru# Buat versi baru
VERSION_NUMBER=$(ant beta:skills:versions create \
--skill-id skill_01AbCdEfGhIjKlMnOpQrStUv \
--file updated_skill/SKILL.md \
--transform version --raw-output)
# Gunakan versi tertentu
ant beta:messages create \
--beta code-execution-2025-08-25 \
--beta skills-2025-10-02 <<YAML
model: claude-opus-4-8
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
# Gunakan versi terbaru
ant beta:messages create \
--beta code-execution-2025-08-25 \
--beta skills-2025-10-02 <<'YAML'
model: claude-opus-4-8
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
YAMLLihat referensi API Create Skill Version untuk detail lengkap.
Ketika Anda menentukan Skill dalam container:
/skills/{directory}/Arsitektur "progressive disclosure" (pengungkapan progresif) memastikan penggunaan konteks yang efisien: Claude hanya memuat instruksi Skill lengkap saat diperlukan.
Merek & Komunikasi
Manajemen Proyek
Operasi Bisnis
Pembuatan Konten
Analisis Data
Pengembangan & Otomatisasi
Gabungkan Skill Excel dan Skill analisis DCF kustom:
# Buat Skill analisis DCF kustom
from anthropic.lib import files_from_dir
dcf_skill = client.beta.skills.create(
display_title="DCF Analysis",
files=files_from_dir("/path/to/dcf_skill"),
)
# Gunakan dengan Excel untuk membuat model keuangan
response = client.beta.messages.create(
model="claude-opus-4-8",
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 with the attached financials",
}
],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)
print(response)name: Maksimum 64 karakter, hanya huruf kecil/angka/tanda hubung, tanpa tag XML, tanpa kata yang dicadangkan ("anthropic", "claude")description: Maksimum 1024 karakter, tidak boleh kosong, tanpa tag XMLSkill berjalan di container eksekusi kode dengan batasan berikut:
Lihat Code execution tool untuk paket yang tersedia.
Gabungkan Skill ketika tugas melibatkan beberapa jenis dokumen atau domain:
Kasus penggunaan yang baik:
Hindari:
Untuk produksi:
# Sematkan ke versi tertentu untuk stabilitas
container = {
"skills": [
{
"type": "custom",
"skill_id": "skill_01AbCdEfGhIjKlMnOpQrStUv",
"version": "1759178010641129", # Specific version
}
]
}Untuk pengembangan:
# Gunakan latest untuk pengembangan aktif
container = {
"skills": [
{
"type": "custom",
"skill_id": "skill_01AbCdEfGhIjKlMnOpQrStUv",
"version": "latest", # Always get newest
}
]
}Saat menggunakan caching prompt, perhatikan bahwa mengubah daftar Skill di container Anda akan membatalkan cache:
# Permintaan pertama membuat cache
response1 = client.beta.messages.create(
model="claude-opus-4-8",
max_tokens=4096,
betas=[
"code-execution-2025-08-25",
"skills-2025-10-02",
"prompt-caching-2024-07-31",
],
container={
"skills": [{"type": "anthropic", "skill_id": "xlsx", "version": "latest"}]
},
messages=[{"role": "user", "content": "Analyze sales data"}],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)
# Menambah/menghapus Skill merusak cache
response2 = client.beta.messages.create(
model="claude-opus-4-8",
max_tokens=4096,
betas=[
"code-execution-2025-08-25",
"skills-2025-10-02",
"prompt-caching-2024-07-31",
],
container={
"skills": [
{"type": "anthropic", "skill_id": "xlsx", "version": "latest"},
{
"type": "anthropic",
"skill_id": "pptx",
"version": "latest",
}, # Cache miss
]
},
messages=[{"role": "user", "content": "Create a presentation"}],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)Untuk performa caching terbaik, jaga agar daftar Skill Anda tetap konsisten di seluruh permintaan.
Tangani error terkait Skill dengan baik:
client = anthropic.Anthropic()
try:
response = client.beta.messages.create(
model="claude-opus-4-8",
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}")
# Tangani error spesifik skill
else:
raiseAgent Skills tidak tercakup dalam pengaturan ZDR. Definisi Skill dan data eksekusi disimpan sesuai dengan kebijakan retensi data standar Anthropic.
Untuk kelayakan ZDR di semua fitur, lihat API dan retensi data.
Referensi API lengkap dengan semua endpoint
Praktik terbaik untuk menulis Skill yang efektif
Pelajari tentang lingkungan eksekusi kode
Was this page helpful?