Agent Skills는 조직화된 지침, 스크립트 및 리소스 폴더를 통해 Claude의 기능을 확장합니다. 이 가이드는 Claude API와 함께 사전 구축된 Skills와 사용자 정의 Skills를 모두 사용하는 방법을 보여줍니다.
요청/응답 스키마 및 모든 매개변수를 포함한 완전한 API 참조는 다음을 참조하세요:
This feature is not eligible for Zero Data Retention (ZDR). Data is retained according to the feature's standard retention policy.
Agent Skills의 아키텍처 및 실제 응용 프로그램에 대한 심층 분석은 엔지니어링 블로그 게시물을 읽으세요: Equipping agents for the real world with Agent Skills.
Skills는 코드 실행 도구를 통해 Messages API와 통합됩니다. Anthropic에서 관리하는 사전 구축된 Skills를 사용하든 업로드한 사용자 정의 Skills를 사용하든, 통합 형태는 동일합니다: 둘 다 코드 실행이 필요하며 동일한 container 구조를 사용합니다.
Skills는 소스에 관계없이 Messages API에서 동일하게 통합됩니다. container 매개변수에서 skill_id, type 및 선택적 version으로 Skills를 지정하면 코드 실행 환경에서 실행됩니다.
두 가지 소스에서 Skills를 사용할 수 있습니다:
| 측면 | Anthropic Skills | 사용자 정의 Skills |
|---|---|---|
| Type 값 | anthropic | custom |
| Skill ID | 짧은 이름: pptx, xlsx, docx, pdf | 생성됨: skill_01AbCdEfGhIjKlMnOpQrStUv |
| 버전 형식 | 날짜 기반: 20251013 또는 latest | Epoch 타임스탬프: 1759178010641129 또는 latest |
| 관리 | Anthropic에서 사전 구축 및 유지 관리 | Skills API를 통해 업로드 및 관리 |
| 가용성 | 모든 사용자가 사용 가능 | 워크스페이스에 비공개 |
두 가지 Skill 소스 모두 List Skills 엔드포인트에서 반환됩니다(source 매개변수를 사용하여 필터링). 통합 형태와 실행 환경은 동일합니다. 유일한 차이점은 Skills의 출처와 관리 방식입니다.
Skills를 사용하려면 다음이 필요합니다:
code-execution-2025-08-25 - 코드 실행 활성화 (Skills에 필수)skills-2025-10-02 - Skills API 활성화files-api-2025-04-14 - 컨테이너에서 파일 업로드/다운로드Skills는 Messages API의 container 매개변수를 사용하여 지정됩니다. 요청당 최대 8개의 Skills를 포함할 수 있습니다.
구조는 Anthropic과 사용자 정의 Skills 모두에 대해 동일합니다. 필수 type 및 skill_id를 지정하고, 선택적으로 version을 포함하여 특정 버전으로 고정합니다:
client = anthropic.Anthropic()
response = client.beta.messages.create(
model="claude-opus-4-7",
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"}],
)Skills가 문서(Excel, PowerPoint, PDF, Word)를 생성할 때, 응답에 file_id 속성을 반환합니다. 이러한 파일을 다운로드하려면 Files API를 사용해야 합니다.
작동 방식:
file_id가 포함됩니다예제: Excel 파일 생성 및 다운로드
추가 Files API 작업:
client = anthropic.Anthropic()
file_id = "file_abc123"
# 파일 메타데이터 가져오기
file_info = client.beta.files.retrieve_metadata(
file_id=file_id, betas=["files-api-2025-04-14"]
)
print(f"Filename: {file_info.filename}, Size: {file_info.size_bytes} bytes")
# 모든 파일 나열
files = client.beta.files.list(betas=["files-api-2025-04-14"])
for file in files.data:
print(f"{file.filename} - {file.created_at}")
# 파일 삭제
client.beta.files.delete(file_id=file_id, betas=["files-api-2025-04-14"])Files API에 대한 전체 세부 정보는 Files API 문서를 참조하세요.
컨테이너 ID를 지정하여 여러 메시지에서 동일한 컨테이너를 재사용합니다:
# 첫 번째 요청이 컨테이너를 생성합니다
response1 = client.beta.messages.create(
model="claude-opus-4-7",
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"}],
)
# 동일한 컨테이너로 대화를 계속합니다
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-7",
max_tokens=4096,
betas=["code-execution-2025-08-25", "skills-2025-10-02"],
container={
"id": response1.container.id, # 컨테이너를 재사용합니다
"skills": [{"type": "anthropic", "skill_id": "xlsx", "version": "latest"}],
},
messages=messages,
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)스킬은 여러 턴이 필요한 작업을 수행할 수 있습니다. pause_turn 중지 이유를 처리합니다:
messages = [{"role": "user", "content": "Process this large dataset"}]
max_retries = 10
response = client.beta.messages.create(
model="claude-opus-4-7",
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"}],
)
# 장기 작업에 대해 pause_turn을 처리합니다
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-7",
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"}],
)응답에는 API가 장기 실행 스킬 작업을 일시 중지했음을 나타내는 pause_turn 중지 이유가 포함될 수 있습니다. 응답을 그대로 후속 요청에 제공하여 Claude가 턴을 계속하도록 할 수 있으며, 또는 대화를 중단하고 추가 지침을 제공하려면 콘텐츠를 수정할 수 있습니다.
단일 요청에서 여러 Skills을 결합하여 복잡한 워크플로우를 처리합니다:
response = client.beta.messages.create(
model="claude-opus-4-7",
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"}],
)커스텀 Skill을 업로드하여 워크스페이스에서 사용 가능하게 만듭니다. 디렉토리 경로 또는 개별 파일 객체를 사용하여 업로드할 수 있습니다.
# Option 1: Upload individual files (one --file flag 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
# Option 2: Upload a zip archive
ant beta:skills create \
--display-title "Financial Analysis" \
--file financial_analysis_skill.zip \
--beta skills-2025-10-02요구사항:
name: 최대 64자, 소문자/숫자/하이픈만 사용, XML 태그 없음, 예약어 없음("anthropic", "claude")description: 최대 1024자, 비어있지 않음, XML 태그 없음전체 요청/응답 스키마는 Skill 생성 API 참조를 참조하세요.
워크스페이스에서 사용 가능한 모든 Skills를 검색합니다. 여기에는 Anthropic 사전 구축 Skills과 커스텀 Skills이 포함됩니다. source 매개변수를 사용하여 Skill 유형으로 필터링합니다:
# List all Skills
ant beta:skills list
# List only custom Skills
ant beta:skills list --source custom페이지 매김 및 필터링 옵션은 Skills 나열 API 참조를 참조하세요.
특정 Skill에 대한 세부 정보를 가져옵니다:
ant beta:skills retrieve \
--skill-id skill_01AbCdEfGhIjKlMnOpQrStUvSkill을 삭제하려면 먼저 모든 버전을 삭제해야 합니다:
# 단계 1: 모든 버전 삭제
ant beta:skills:versions list \
--skill-id skill_01AbCdEfGhIjKlMnOpQrStUv \
--transform version --format yaml \
| tr -d '"' \
| while read -r VERSION; do
ant beta:skills:versions delete \
--skill-id skill_01AbCdEfGhIjKlMnOpQrStUv \
--version "$VERSION" >/dev/null
done
# 단계 2: Skill 삭제
ant beta:skills delete \
--skill-id skill_01AbCdEfGhIjKlMnOpQrStUv >/dev/null기존 버전이 있는 Skill을 삭제하려고 하면 400 오류가 반환됩니다.
Skills는 업데이트를 안전하게 관리하기 위해 버전 관리를 지원합니다:
Anthropic 관리 Skills:
20251013사용자 정의 Skills:
1759178010641129"latest"를 사용하여 항상 최신 버전을 가져옵니다# 새 버전 생성
VERSION_NUMBER=$(ant beta:skills:versions create \
--skill-id skill_01AbCdEfGhIjKlMnOpQrStUv \
--file updated_skill/SKILL.md \
--transform version --format yaml)
# 특정 버전 사용
ant beta:messages create \
--beta code-execution-2025-08-25 \
--beta skills-2025-10-02 <<YAML
model: claude-opus-4-7
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
# 최신 버전 사용
ant beta:messages create \
--beta code-execution-2025-08-25 \
--beta skills-2025-10-02 <<'YAML'
model: claude-opus-4-7
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
YAML전체 세부 사항은 Skill 버전 생성 API 참조를 참조하세요.
컨테이너에서 Skills를 지정할 때:
/skills/{directory}/의 컨테이너에 복사됩니다점진적 공개 아키텍처는 효율적인 컨텍스트 사용을 보장합니다: Claude는 필요할 때만 전체 Skill 지침을 로드합니다.
브랜드 및 커뮤니케이션
프로젝트 관리
비즈니스 운영
콘텐츠 생성
데이터 분석
개발 및 자동화
Excel과 맞춤형 DCF 분석 Skills 결합:
# Create custom DCF analysis Skill
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"),
betas=["skills-2025-10-02"],
)
# Use with Excel to create financial model
response = client.beta.messages.create(
model="claude-opus-4-7",
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"}],
)name: 최대 64자, 소문자/숫자/하이픈만 사용, XML 태그 없음, 예약어 없음description: 최대 1024자, 비어있지 않음, XML 태그 없음Skills는 코드 실행 컨테이너에서 다음 제한사항과 함께 실행됩니다:
사용 가능한 패키지는 코드 실행 도구 설명서를 참조하세요.
작업이 여러 문서 유형 또는 도메인을 포함할 때 Skills를 결합하세요:
좋은 사용 사례:
피해야 할 사항:
프로덕션의 경우:
# Pin to specific versions for stability
container = {
"skills": [
{
"type": "custom",
"skill_id": "skill_01AbCdEfGhIjKlMnOpQrStUv",
"version": "1759178010641129", # Specific version
}
]
}개발의 경우:
# Use latest for active development
container = {
"skills": [
{
"type": "custom",
"skill_id": "skill_01AbCdEfGhIjKlMnOpQrStUv",
"version": "latest", # Always get newest
}
]
}프롬프트 캐싱을 사용할 때, 컨테이너의 Skills 목록을 변경하면 캐시가 깨집니다:
# First request creates cache
response1 = client.beta.messages.create(
model="claude-opus-4-7",
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"}],
)
# Adding/removing Skills breaks cache
response2 = client.beta.messages.create(
model="claude-opus-4-7",
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"}],
)최적의 캐싱 성능을 위해 요청 전체에서 Skills 목록을 일관되게 유지하세요.
Skill 관련 오류를 우아하게 처리합니다:
client = anthropic.Anthropic()
try:
response = client.beta.messages.create(
model="claude-opus-4-7",
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}")
# Handle skill-specific errors
else:
raiseAgent Skills은 ZDR 약정의 적용을 받지 않습니다. Skill 정의 및 실행 데이터는 Anthropic의 표준 데이터 보관 정책에 따라 보관됩니다.
모든 기능에 걸친 ZDR 적격성을 위해 API 및 데이터 보관을 참조하세요.
Was this page helpful?