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.
Pelajari cara menggunakan Agent Skills untuk membuat dokumen dengan Claude API dalam waktu kurang dari 10 menit.
Pelajari cara menulis Skill yang efektif agar Claude dapat menemukan dan menggunakannya dengan sukses.
Skill terintegrasi dengan Messages API melalui alat eksekusi kode. 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 berjalan 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 | ID versi: skver_01AbCdEfGhIjKlMnOpQrStUv 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 dikelola.
Untuk menggunakan Skill, Anda memerlukan:
Skill tersedia secara umum di Claude API dan tidak memerlukan header anthropic-beta, baik untuk Skills API maupun untuk container.skills dalam permintaan Messages. Contoh-contoh dalam panduan ini tetap mengirimkan header beta skills-2025-10-02 (ditambah code-execution-2025-08-25 dalam permintaan Messages) dan menggunakan namespace beta dari SDK. Kedua header tetap merupakan opt-in yang valid, sehingga contoh-contoh tersebut berfungsi sebagaimana tertulis, dan Anda dapat menghilangkannya dalam permintaan Anda sendiri.
Skill memerlukan alat eksekusi kode, jadi gunakan model dari daftar kompatibilitas modelnya.
Skill ditentukan menggunakan parameter container di Messages API. Anda dapat menyertakan hingga 20 Skill untuk setiap permintaan.
Strukturnya identik untuk Skill Anthropic maupun kustom. Tentukan type dan skill_id yang wajib, dan secara opsional sertakan version untuk mengunci ke versi tertentu:
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"}],
)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 dibuat, di dalam blok hasil alat eksekusi kode (lihat Format respons).Untuk menyediakan file input agar dapat diproses oleh Skill, unggah file tersebut dengan Files API dan referensikan dalam permintaan Anda dengan blok unggahan container.
Contoh: membuat dan mengunduh file Excel
client = anthropic.Anthropic()
# Langkah 1: Gunakan Skill untuk membuat file
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"}],
)
# 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":
# setiap item konten adalah blok bash_code_execution_output yang membawa file_id
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_011CNha8iCJcU1wXNR6q4V8w"
# 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
for file in client.beta.files.list():
print(f"{file.filename} - {file.created_at}")
# Hapus file
client.beta.files.delete(file_id=file_id)Objek container dalam respons membawa id container dan timestamp expires_at (lihat Penggunaan ulang container untuk detail masa aktif). Gunakan kembali container yang sama di beberapa pesan dengan menentukan ID container:
client = anthropic.Anthropic()
# Permintaan pertama membuat kontainer
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"}],
)
# Lanjutkan percakapan dengan kontainer yang sama
messages = [
{"role": "user", "content": "Create a sample sales dataset and analyze it"},
{
# Teruskan teks asisten; container.id membawa status eksekusi
"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"}],
)Skill mungkin melakukan operasi yang memerlukan beberapa giliran. Tangani stop reason 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"}],
)
# Tangani pause_turn untuk operasi yang lama
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"}],
)Gabungkan beberapa Skill dalam satu permintaan untuk menangani alur kerja yang kompleks:
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"}],
)Bundel Skill adalah direktori yang berisi file SKILL.md di tingkat atas 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 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.
File diidentifikasi berdasarkan nama file yang Anda lampirkan (sufiks ;filename= dalam contoh cURL dan argumen nama file dalam contoh SDK). Untuk skill dalam panduan ini, buat zip dengan zip -r financial_skill.zip financial_skill/ dan gantikan placeholder example_skill.zip dalam opsi unggah zip dengan file tersebut.
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")Persyaratan:
SKILL.md di root unggahan (atau di bagian atas satu folder pembungkus)display_name bersifat opsional: jika dihilangkan, nilainya diturunkan dari name di SKILL.md; nilai eksplisit boleh hingga 255 karakter dan tidak perlu unik dalam workspacename: Maksimum 64 karakter, hanya huruf kecil/angka/tanda hubung, tanpa tag XML, tanpa kata yang dicadangkan ("anthropic", "claude")description: Maksimum 1024 karakter, tidak kosong, tanpa tag XMLUntuk skema permintaan/respons 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_01AbCdEfGhIjKlMnOpQrStUvMenghapus Skill juga menghapus semua versinya. Penghapusan berantai ini adalah perilaku khusus GA, jadi tidak seperti contoh lain dalam panduan ini, contoh-contoh berikut memanggil permukaan GA secara langsung alih-alih namespace beta.
ant skills delete \
--skill-id skill_01AbCdEfGhIjKlMnOpQrStUv >/dev/nullSkill mendukung pembuatan versi untuk mengelola pembaruan dengan aman:
Skill Anthropic:
20251013Skill Kustom:
skver_01AbCdEfGhIjKlMnOpQrStUv"latest" untuk selalu mendapatkan versi terbaruVersi baru adalah snapshot lengkap, bukan delta: unggah seluruh kumpulan file Skill setiap kali. File yang Anda hilangkan tidak akan dibawa ke versi baru, dan name di SKILL.md versi baru harus cocok dengan nama Skill yang sudah ada. Contoh berikut mengunggah ulang bundel financial_skill/ lengkap dari Membuat Skill.
# Buat versi baru
VERSION_NUMBER=$(ant beta:skills:versions create \
--skill-id skill_01AbCdEfGhIjKlMnOpQrStUv \
--file financial_skill.zip \
--transform version \
--raw-output)
# Gunakan versi tertentu
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
# Gunakan versi terbaru
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
YAMLLihat referensi API Create Skill Version untuk detail lengkap.
Ketika Anda menentukan Skill dalam container:
/skills/{skill-name}/. Direktori tersebut adalah nama Skill (pptx untuk Skill Anthropic, name dari SKILL.md untuk Skill kustom), bukan ID skill_01...-nya.Claude memuat instruksi Skill lengkap hanya ketika diperlukan.
Skill cocok untuk pekerjaan organisasi maupun pribadi. Organisasi menggunakannya untuk menerapkan format merek pada dokumen, menyusun catatan dan laporan berdasarkan templat perusahaan, dan menjalankan prosedur analitis khusus perusahaan. Individu menggunakannya untuk templat dokumen kustom, pipeline data khusus, serta konvensi pembuatan kode atau deployment.
Gabungkan Skill Excel dan Skill analisis DCF kustom:
from anthropic.lib import files_from_dir
client = anthropic.Anthropic()
# Buat Skill analisis DCF kustom
dcf_skill = client.beta.skills.create(
files=files_from_dir("/path/to/dcf_skill"),
)
# Gunakan dengan Excel untuk membuat model keuangan
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: Maksimum 64 karakter, hanya huruf kecil/angka/tanda hubung, tanpa tag XML, tanpa kata yang dicadangkan ("anthropic", "claude")description: Maksimum 1024 karakter, tidak kosong, tanpa tag XMLSkill berjalan di container eksekusi kode dengan batasan berikut:
Lihat Alat eksekusi kode untuk paket yang tersedia.
Gabungkan Skill ketika tugas melibatkan beberapa jenis dokumen atau domain:
Kasus penggunaan yang baik:
Hindari:
Tab SDK di bagian ini menunjukkan nilai container yang harus disertakan dalam permintaan Messages. Tab cURL dan CLI menunjukkan permintaan lengkap.
Untuk produksi: kunci ke versi tertentu, sehingga pembaruan Skill tidak pernah mengubah perilaku yang telah Anda deploy. Jika Anda menghilangkan version atau mengaturnya ke "latest", permintaan menggunakan versi terbaru dari Skill, sehingga versi yang diunggah oleh siapa pun di workspace langsung mengubah apa yang dijalankan oleh agen produksi Anda. ID versi berasal dari respons create-version di Pembuatan versi atau dari API List Skill Versions. ID selalu berupa string: beri tanda kutip pada ID timestamp epoch dalam JSON atau YAML.
# Sematkan ke versi tertentu untuk stabilitas
container = {
"skills": [
{
"type": "custom",
"skill_id": "skill_01AbCdEfGhIjKlMnOpQrStUv",
"version": "1759178010641129",
}
]
}Untuk pengembangan: gunakan latest untuk mengambil versi terbaru secara otomatis saat Anda melakukan iterasi.
# Gunakan latest untuk pengembangan aktif
container = {
"skills": [
{
"type": "custom",
"skill_id": "skill_01AbCdEfGhIjKlMnOpQrStUv",
"version": "latest",
}
]
}Jika Anda menggunakan Caching prompt, mengubah daftar Skill dalam container Anda akan merusak cache. Skill dirender ke dalam prompt sistem dalam urutan tetap, sehingga daftar yang sama menghasilkan prefiks yang sama dan dapat di-cache:
client = anthropic.Anthropic()
# Skill dirender ke dalam prompt sistem dengan urutan tetap yang ramah 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"}],
)
# Mengubah daftar Skill ([xlsx] vs [xlsx, pptx]) mengubah prefiks: cache miss, sedangkan daftar yang identik adalah cache hit
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"}],
)Untuk performa caching terbaik, jaga agar daftar Skill Anda, termasuk urutannya, konsisten di seluruh permintaan. Mengunci versi Skill kustom juga membantu: dengan "latest", menerbitkan versi baru dapat membatalkan prefiks yang di-cache jika hal itu mengubah deskripsi Skill.
Tangani error terkait Skill dengan baik:
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}")
# 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.
Jika organisasi Anda telah mengaktifkan Compliance API, Activity Feed-nya mencatat pembuatan dan penghapusan Skill serta versi Skill yang dilakukan dengan kunci API Claude atau dari Claude Console. Operasi yang terjadi saat Compliance API dinonaktifkan tidak dicatat dan tidak dapat dipulihkan kemudian, jadi siapkan Compliance API sebelum Anda mengandalkan jejak audit ini.
Referensi API lengkap dengan semua endpoint
Pelajari cara menulis Skill yang efektif agar Claude dapat menemukan dan menggunakannya dengan sukses.
Jalankan kode Python dan bash dalam container sandbox untuk menganalisis data, menghasilkan file, dan melakukan iterasi pada solusi.
Was this page helpful?