For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
기본 탐색 메뉴
Theme

스킬

에이전트에 재사용 가능한 지침과 보조 파일을 제공하세요.

에이전트 스킬은 에이전트가 작업에 재사용할 수 있는 지침과 보조 파일을 제공합니다. Responses API 셸 도구에서 스킬을 사용하거나 Agents API 샌드박스에 스킬을 배치하세요.

아래의 업로드, 첨부, 버전 관리 지침은 Responses API 셸 도구에 적용됩니다. Agents API 세션은 샌드박스의 디렉터리에서 스킬을 찾습니다.

Responses API는 스킬을 로컬에서 실행하거나 호스팅 컨테이너에서 실행하는 두 가지 방식을 지원합니다. 자신의 컴퓨터에서 코드를 실행하려면 셸 도구의 로컬 실행 모드를 사용하세요.

스킬이란?

스킬은 SKILL.md 매니페스트(프런트매터와 지침)를 포함하는 디렉터리입니다. 스킬을 사용하면 회사 스타일 가이드부터 여러 단계의 워크플로우까지 다양한 절차와 규칙을 모듈식 지침으로 정리할 수 있습니다. 업로드한 스킬은 버전별 번들로 관리됩니다.

스킬은 개방형 에이전트 스킬 표준과 호환됩니다.

SKILL.md 예시
---
name: basic-math
description: Add or multiply numbers.
---

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

모델은 스킬을 탐색할 때 스킬의 이름과 설명을 확인합니다. 설명에는 스킬의 기능과 사용 시점을 모두 명시하세요. 예를 들어 “대체 조항을 활용해 공급업체 계약서를 검토하고 수정 사항을 표시합니다”라고 쓰면 “법무 업무를 지원합니다”보다 모델이 스킬의 용도를 파악하기 쉽습니다.

주요 지침은 SKILL.md에 작성하고 필요에 따라 보조 파일에 링크하세요.

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

references/에는 참고 자료를, scripts/에는 반복 작업용 스크립트를, assets/에는 재사용할 템플릿을 저장하세요.

스킬 만들기

디렉터리를 멀티파트 폼 데이터로 업로드하거나 최상위 폴더 하나를 포함하는 .zip 파일을 업로드할 수 있습니다.

방법 1: 디렉터리 업로드(멀티파트)

여러 개의 files[] 파트를 업로드하세요. 각 파트에는 같은 최상위 폴더 안의 파일 경로가 포함되어야 합니다.

스킬 만들기(멀티파트)
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'

방법 2: ZIP 파일 업로드

최상위 폴더를 ZIP 형식으로 압축한 후 압축 파일을 업로드하세요.

스킬 만들기(ZIP)
curl -X POST 'https://api.openai.com/v1/skills' \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -F 'files=@./basic_math.zip;type=application/zip'

업로드한 버전이 준비될 때까지 기다리기

새로 업로드한 버전이 준비되기 전에는 조회 요청에 일시적으로 404가 반환될 수 있습니다. 컨테이너나 Live 세션에 첨부하기 전에 GET /v1/skills/{skill_id}/versions/{version}으로 해당 버전을 조회하세요. 업로드에 성공한 직후 조회 요청에 404가 반환되면 타임아웃을 설정하고 잠시 기다렸다가 재시도하세요. 조회에 성공하면 반환된 버전 문자열을 스킬 참조에 사용하세요.

호스팅 셸에서 스킬 사용하기

호스팅 셸 환경에 스킬을 마운트하려면 셸 도구를 호출할 때 tools[].environment.skills에 스킬을 첨부하세요.

호스팅 셸에서 스킬 사용하기
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."
  }'

프롬프트로 스킬 사용 지시하기

스킬을 마운트하면 모델이 스킬을 사용할 시점을 판단할 수 있습니다. 모델이 특정 스킬을 사용하도록 하려면 필요한 시점에 “<skill name> 스킬을 사용하세요”라고 명시적으로 지시하세요.

로컬 셸 모드에서 스킬 사용하기

로컬 셸 모드에서도 스킬을 사용할 수 있지만, 로컬 셸과 호스팅 셸이 지원하는 스킬 첨부 형식은 다릅니다.

  • 호스팅 셸에서는 업로드한 스킬을 skill_reference 형식으로 첨부할 수 있습니다. 엄선된 스킬을 참조하거나 버전을 명시할 수도 있습니다.
  • 로컬 셸은 skill_reference 형식의 첨부를 지원하지 않습니다. 직접 관리하는 런타임의 로컬 파일 경로로 스킬 파일을 제공하세요.

로컬 셸 실행에 관한 자세한 내용은 셸 가이드를 참고하세요.

JavaScript 예시를 실행하려면 Node.js가 설치되어 있고 Docker 데몬이 실행 중이어야 합니다. 상대 경로로 모듈을 가져올 수 있도록 Docker 어댑터를 support/local-skill-sandbox.mjs로, 예시를 tools/skills/local-shell.mjs로 저장하세요. OPENAI_API_KEY를 설정한 후 support와 tools가 있는 디렉터리에서 다음 명령어로 SDK를 설치하고 어댑터가 지정한 버전의 이미지를 내려받은 다음 예시를 실행하세요.

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

어댑터의 헬퍼 함수는 다음 작업을 담당합니다.

헬퍼 함수 애플리케이션이 수행하는 작업
withLocalSkillSandbox(name, workflow) /workspace/skills/csv-insights/SKILL.md와 /workspace/reports.csv를 포함하는 격리된 Python 환경을 만들고 workflow를 호출할 때 AbortSignal을 전달합니다. 워크플로우가 끝나면 환경을 제거합니다.
executeShellCall(name, call, signal) 해당 환경에서 요청된 명령어를 실행하고 shell_call_output을 반환합니다. 여기에는 원래의 call_id, 표준 출력, 표준 오류, 종료 결과 또는 타임아웃 여부가 포함됩니다.
readSkillReport(name, signal) 해당 환경에서 생성된 /workspace/report.md를 읽되, 읽는 데이터의 크기를 제한합니다.

어댑터는 실행 시간과 출력 크기 제한을 반드시 적용해야 합니다. 이 예시에서는 생성된 명령어를 격리된 런타임 안에서만 실행합니다.

로컬 셸 모드에서 스킬 사용하기
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."
  }'

Agents API

Agents API에서 스킬을 사용하려면 샌드박스에 스킬 디렉터리를 배치하고 세션을 생성할 때 상위 디렉터리를 environment.capability_directories에 등록하세요. 이렇게 등록한 상위 디렉터리를 기능 디렉터리라고 합니다. 하네스는 이 디렉터리에서 스킬을 찾습니다. 이 구성에서는 호스팅 셸의 skill_reference 첨부 형식을 사용하지 않습니다.

예를 들어 계약 검토 스킬과 Pull Request 검토 스킬을 샌드박스에 다음과 같이 배치하세요.

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

세션 생성 요청에 다음 환경 설정을 사용하세요.

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

기능 디렉터리는 다음 요구 사항을 충족해야 합니다.

  • 경로는 샌드박스 안의 디렉터리를 가리켜야 합니다.
  • 각 경로는 고유한 절대 경로여야 하며, . 또는 .. 경로 세그먼트를 포함할 수 없습니다.
  • 세션당 기능 디렉터리를 최대 32개까지 등록할 수 있습니다.
  • 디렉터리는 등록 전에 환경에 이미 존재해야 합니다.

샌드박스가 준비되면 하네스가 이 디렉터리에서 SKILL.md 파일을 찾아 각 스킬의 이름과 설명을 컨텍스트에 추가합니다. 모델은 관련 스킬을 선택하고 해당 스킬의 전체 지침과 보조 파일을 읽을 수 있습니다.

세션 설정은 에이전트 구성을, 실행 환경은 샌드박스 연결을 참고하세요. 에이전트에 스킬을 제공하기 전에 스킬과 보조 파일을 검토하고 샌드박스 보안 지침을 따르세요.

사용자 프롬프트에 포함되는 스킬 정보

Responses API 셸 도구를 사용할 때 플랫폼은 모델이 어떤 스킬을 사용할 수 있는지 알 수 있도록 각 스킬의 name, description, path를 사용자 프롬프트 컨텍스트에 추가합니다.

모델은 이 메타데이터를 바탕으로 스킬을 호출할지 결정합니다. 스킬을 호출하면 path를 사용해 SKILL.md에서 전체 Markdown 지침을 읽습니다.

스킬 지침은 시스템 프롬프트가 아닌 사용자 프롬프트의 입력이므로 사용자가 제공한 다른 지침과 동일한 우선순위로 처리됩니다. 사용할 스킬을 직접 지정하려면 모델에 “<skill name> 스킬을 사용하세요”라고 지시할 수 있습니다.

제한 및 유효성 검사

  • SKILL.md 파일을 찾을 때는 대소문자를 구분하지 않습니다.
  • 스킬 번들에는 skill.md/SKILL.md 파일이 정확히 하나만 있어야 합니다.
  • 스킬 프런트매터의 유효성 검사는 에이전트 스킬 명세를 따릅니다.
  • 업로드할 수 있는 ZIP 파일의 최대 크기는 50 MB입니다.
  • 스킬 버전당 최대 파일 수는 500개입니다.
  • 압축을 풀었을 때 개별 파일의 최대 크기는 25 MB입니다.

네트워크 액세스 시 보안

Responses API에서 사용할 스킬은 모두 점검하세요. 스킬에는 프롬프트 인젝션으로 인한 데이터 유출 등의 보안 위험이 있습니다. 이 도구를 사용하기 전에 아래의 위험 및 안전 수칙을 주의 깊게 검토하세요.

스킬 버전 관리

버전 포인터

  • 버전을 지정하지 않으면 default_version을 사용합니다.
  • latest_version은 가장 최근에 업로드한 버전을 가리킵니다.
  • skill_reference.version에는 "2" 또는 "latest"와 같은 버전 문자열을 지정할 수 있습니다.
  • default_version을 업데이트할 때도 문자열을 지정해야 합니다.

새 버전 만들기

새 스킬 버전 만들기
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'

기본 버전 설정하기

스킬의 기본 버전 설정하기
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"}'

삭제 규칙

  • 기본 버전은 삭제할 수 없습니다. 먼저 다른 버전을 기본 버전으로 설정하세요.
  • 마지막 남은 버전을 삭제하면 스킬도 삭제됩니다.
  • 스킬을 삭제하면 해당 스킬의 모든 버전이 함께 삭제됩니다.

엄선된 스킬

OpenAI는 직접 개발한 스킬을 엄선해 관리합니다. 이러한 스킬은 ID(예: openai-spreadsheets)로 참조할 수 있습니다.

엄선된 스킬 참조하기
{ "type": "skill_reference", "skill_id": "openai-spreadsheets", "version": "latest" }

인라인 스킬

호스팅 스킬을 만들고 싶지 않다면 Base64로 인코딩한 ZIP 번들을 환경의 skills 배열에 직접 포함할 수 있습니다.

스킬 번들을 인라인으로 포함하기
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"'"
        }
      }
    ]
  }'

위험 및 안전 수칙

Responses API에서 사용하는 모든 스킬을 점검하는 것이 중요합니다. 스킬에는 프롬프트 인젝션으로 인한 데이터 유출 등의 보안 위험이 있습니다.

네트워크 액세스와 함께 스킬을 사용할 때는 네트워크 사용 시 위험 및 안전 수칙을 주의 깊게 검토하세요.

스킬을 높은 권한으로 실행되는 코드와 지침으로 취급하기

스킬의 내용은 모델의 계획 수립, 도구 사용, 명령어 실행에 영향을 줄 수 있습니다. 개발자가 검증하기 전까지는 모든 스킬을 신뢰할 수 없는 입력일 가능성을 염두에 두고 검토하세요.

최종 사용자에게 공개 스킬 리포지터리를 직접 노출하지 않기

일반 사용자가 공개 카탈로그에서 임의의 스킬을 자유롭게 탐색하거나 선택하거나 첨부할 수 있도록 제품을 설계하지 마세요. 이런 설계는 다음과 같은 위험을 크게 높입니다.

  • 악성 SKILL.md 지침을 통한 프롬프트 인젝션 및 정책 우회
  • 검증되지 않은 자동화로 인한 데이터 유출 또는 파괴적 작업 실행

개발자가 스킬 통합하기

개발자가 스킬을 점검하고 통합한 후, 최종 사용자는 제품에서 정한 범위 안에서만 스킬을 사용할 수 있도록 하세요. 다음 원칙을 적용하세요.

  • 스킬을 구체적인 제품 워크플로우나 사용 사례에 연결하세요.
  • 최종 사용자가 임의로 스킬을 선택하지 못하도록 하세요.
  • 쓰기 작업이나 영향이 큰 작업은 명시적인 승인을 받고 정책 검사를 통과한 후에만 실행하도록 하세요.

민감한 작업에 승인 요구하기

쓰기 작업이나 영향이 큰 작업을 수행할 수 있는 워크플로우에서는 실행 전에 명시적인 승인을 요구하세요.

데이터 레지던시 및 보존 요구 사항 확인하기

Responses API는 스킬의 로컬 실행과 호스팅 컨테이너 기반 실행을 지원합니다. 호스팅 스킬에는 호스팅 셸과 동일한 컨테이너 수명 주기가 적용됩니다. 컨테이너가 활성 상태인 동안에는 마운트된 스킬과 컨테이너 파일을 사용할 수 있으며, 컨테이너가 만료되거나 삭제되면 모두 폐기됩니다. 모든 실행을 직접 관리하는 인프라 안에서 처리하려면 로컬 셸 모드를 사용하세요. Agents API 샌드박스에 대해서는 샌드박스 수명 주기를 참고하세요. OpenAI의 데이터 제어에 관한 자세한 내용도 확인하세요.