개발자를 위한 Claude Skills 및 SKILL.md: VS Code, JetBrains, Cursor

실무에서도 견고한 Claude 스킬 만들기

Page content

대부분의 팀은 Claude Skills를 두 가지 방식 중 하나로 오용합니다. SKILL.md 파일을 대충 내용을 쏟아 넣는 쓰레기통으로 만들거나, 거대하고 복사-붙여넣기 한 프롬프트에서 벗어나지 못합니다.

두 가지 접근법 모두 부실합니다. 실제 개발 워크플로에서 Skills가 제대로 작동하기를 원한다면, 프롬프트 시가 아니라 코드와 운영 로직처럼 다뤄야 합니다.

laptop with claude skill

Claude Skills는 SKILL.md 파일로 앵커가 되는 디렉터리이며, 선택적인 스크립트, 참조 자료, 에셋을 포함합니다. 점진적 공개(Progressive Disclosure) 덕분에 작동합니다. 에이전트는 먼저 스킬 이름과 설명 같은 컴팩트한 메타데이터만 로드한 후, 작업이 일치할 때만 전체 지침을 읽습니다. 이를 통해 에이전트는 세션 시작부터 부풀어 오르지 않으면서도 많은 수의 스킬을 사용할 수 있게 됩니다.

Hermes Agent도 운영한다면, 동일한 디스크 구조는 Hermes가 문서화한 agentskills 스타일 스펙과 일치합니다—조건부 활성화, 허브 스캐닝, 시크릿과 설정의 구분은 Hermes Agent Skill Authoring — SKILL.md Structure and Best Practices에서 명시되어 있습니다.

Anthropic 자체의 가이드는 의도된 역할 분담을 꽤 명확하게 보여줍니다. CLAUDE.md는 지속적이고 항상 켜져 있는 프로젝트 컨텍스트를 위한 것입니다. Skills는 필요할 때 로드되어야 하는 재사용 가능한 지식, 플레이북, 호출 가능한 워크플로를 위한 것입니다. 이는 Skills를 스펙 기반 개발 루프—규격화, 계획, 구현, 검증—를 인코딩하는 자연스러운 장소로 만듭니다. ‘바이브 코딩(vibe coding)‘보다 더 구조화되되, 완전한 Spec Kit 스캐폴드보다 의식이 적은 경우 말입니다. Claude Code 스킬이 휴대 가능하고 IDE 통합된 대안과 어떻게 비교되는지는 GitHub Spec Kit vs Kiro vs Claude Code SDD Workflows를 참조하세요. 그 루프를 직접 작성하기보다 사전에 구축되고 강제되는 형태로 설치하기를 원한다면, Superpowers는 브레인스토밍, 계획, 서브에이전트 리뷰, TDD와 같은 이 유형의 스킬 스택을 설치 가능한 플러그인 형태로 패키징합니다.

Claude Code는 구형 커스텀 커맨드를 동일한 메커니즘으로 통합했기 때문에 레거시 .claude/commands/*.md 파일은 여전히 작동하지만, Skills가 이제 더 나은 장기적인 형태입니다—그리고 AI 기반 개발 워크플로에서 가장 재사용 가능한 빌딩 블록입니다.

Claude Skills 사용 시점: CLAUDE.md vs Skills vs Hooks

Claude Skill은 동일한 체크리스트, 동일한 배포 플레이북, 동일한 코드 리뷰 평가 기준, 또는 동일한 내부 API 함정을 채팅에 계속 붙여넣고 있을 때 만들 가치가 있습니다. Anthropic은 동일한 절차를 재사용할 때나 CLAUDE.md의 섹션이 사실(Fact)이 아니라 프로세스(Process)로 성장했을 때 스킬을 만들 것을 명시적으로 권장합니다. 이것이 “Claude Skill이란 무엇이며 언제 사용해야 하는가"라는 FAQ 질문에 대한 실용적인 답변입니다. 일반적인 취향이나 광범위한 저장소 규칙이 아니라 반복 가능한 절차를 위해 Skill을 사용하세요.

진정한 이점은 컨텍스트 비용과 행동에 대한 제어입니다. 좋은 Skill은 관련 있을 때만 로드되는 반면, 부풀어 오른 CLAUDE.md는 모든 세션에서 로드됩니다. Anthropic은 CLAUDE.md를 짧게 유지하고 도메인 지식이나 절차를 Skills로 이동할 것을 권장하는데, 이는 온디맨드 로딩이 에이전트가 눈앞의 작업에 집중하게 유지하기 때문입니다.

제 의견이 담긴 규칙은 단순합니다. 지침이 모든 세션에 적용되어야 한다면 CLAUDE.md에 속합니다. 지침이 때때로만 중요한 재사용 가능한 방법, 체크리스트, 워크플로라면 Skill에 속합니다. 행사가 모든 매칭 이벤트마다 자동으로 발생해야 한다면, 아마도 Skill이 아니라 훅(Hook)에 속할 것입니다. Anthropic의 기능 개요는 거의 정확히 이러한 레이어링 모델로 그 도구들을 설명합니다.

레이어 도구 사용 시점
CLAUDE.md 항상 로드 프로젝트 사실, 지속적 컨벤션, 저장소 전체 규칙
Skill 온디맨드 로드 반복 가능한 절차, 플레이북, 도메인 체크리스트
Hook 이벤트 트리거 파일 저장, 커밋, 세션 시작 시 자동 부수 효과

각각에 대한 실용적인 신호(Smell): 모든 채팅에 동일한 지침을 붙여넣고 있다면, 그것은 Skill입니다. CLAUDE.md 섹션이 단계별 프로세스로 성장했다면, 그것을 Skill로 추출하세요. 파일이 저장될 때마다 조용히 무언가가 발동되기를 원한다면, 대신 훅을 작성하세요. 알아두어야 할 네 번째 레이어도 있습니다: 작업이 메인 세션을 어지럽히지 않기를 원하는 노이즈가 많은 중간 출력을 많이 생성할 때—코드베이스 탐색, 대규모 테스트 실행—그것은 Skill이 아니라 서브에이전트의 일입니다.

Claude Skills IDE 지원: VS Code, JetBrains, Cursor, 및 Codex

Claude Code는 CLI, 데스크톱, VS Code, JetBrains, 웹, 모바일 관련 원격 제어 플로우를 가로질러 실행됩니다. Anthropic은 CLI를 가장 완전한 로컬 서페이스라고 설명하는 반면, IDE 통합은 편집기 네이티브 리뷰, 파일 컨텍스트, 더 긴밀한 워크플로 인체공학성을 위해 일부 CLI 전용 기능을 트레이드오프합니다. 설정, 프로젝트 메모리, MCP 서버는 로컬 서페이스 간에 공유되므로, .claude 설정은 하나의 편집기에 갇히는 것이 아니라 당신을 따라다닙니다.

VS Code의 경우, Anthropic은 확장 프로그램이 편집기 내에서 권장되는 인터페이스라고 말합니다. 이는 계획 리뷰, 인라인 디프, 파일 멘션 지원, CLI 통합 액세스를 제공합니다. 동일한 설치 플로우는 Cursor를 위한 직접적인 경로를 노출합니다. JetBrains의 경우, 현재 지원 목록에는 IntelliJ IDEA, PyCharm, Android Studio, WebStorm, PhpStorm, GoLand이 포함되어 있으며, 디프 뷰잉, 선택 공유, 파일 참조 단축키, 진단 공유가 플러그인에 내장되어 있습니다.

JetBrains 지원은 많은 개발자가 생각하는 것보다 좋습니다. IDE의 통합 터미널에서 claude를 실행하면 통합 기능이 자동으로 활성화됩니다. 외부 터미널에서 시작하는 경우, Anthropic은 Claude Code를 JetBrains 세션에 다시 연결하기 위한 /ide 커맨드를 문서화했으며, Claude가 IDE가 보는 것과 동일한 파일을 보도록 동일한 프로젝트 루트에서 시작할 것을 명시적으로 권장합니다. JetBrains에서 자동 편집 모드를 사용하는 경우, Anthropic은 IDE 설정 파일이 편집 가능한 서페이스의 일부가 될 수 있으므로, 그 환경에서는 수동 승인(MANUAL approvals)이 더 안전한 기본값이라고 경고합니다.

이제 더 큰 포인트입니다. Claude Skills는 Claude Code만의 것이 아닙니다. Agent Skills는 오픈 표준입니다. 공식 Agent Skills 퀵스타트는 동일한 스킬이 GitHub Copilot, Claude Code, OpenAI Codex의 VS Code에서 작동할 수 있다고 말하며, OpenAI의 자체 Codex 문서도 Skills가 Codex CLI, IDE 확장, 앱에서 사용 가능하다고 말합니다. Agent Skills 구현 가이드는 중요한 휴대성(Portability) 세부 사항을 추가합니다: .agents/skills가 클라이언트 간 컨벤션으로 부상했으며, 일부 클라이언트는 실용적인 호환성을 위해 .claude/skills도 스캔합니다.

따라서 제가 권장하는 실용적인 호환성 규칙은 다음과 같습니다. Claude Code만을 위해 먼저 구축하는 경우, .claude/skills에서 작성하세요. 진정한 클라이언트 간 휴대성을 원한다면, 오픈 Agent Skills 형태를 대상으로 하고 .agents/skills를 정경(Canonical) 경로로 사용하세요. 그 두 가지 목표가 동일하다고 가장하지 마세요. 그것들은 관련은 있지만 동일하지는 않습니다.

간단한 호환성 참조:

클라이언트 Skills 경로 비고
Claude Code CLI .claude/skills/ 또는 ~/.claude/skills/ 가장 완전한 서페이스; 완전한 allowed-tools 지원
VS Code + Claude 확장 .claude/skills/ 인라인 디프, 계획 리뷰, 파일 멘션
Cursor .claude/skills/ VS Code와 동일한 설치 경로
JetBrains (IDEA, PyCharm 등) .claude/skills/ IDE 터미널에서 claude 실행 또는 /ide 사용으로 재연결
GitHub Copilot, OpenAI Codex .agents/skills/ 오픈 Agent Skills 표준; 클라이언트 간 휴대성
Claude.ai 웹 UI를 통해 업로드 디렉터리 이름은 name 필드와 일치해야 함; 200자 설명 제한

SKILL.md 파일의 구조, 폴더 레이아웃, 및 저장 위치

적절한 Skill은 저장소 루트에 놓인 무작위 마크다운 파일이 아니라 폴더입니다. 핵심 스펙은 SKILL.md 파일이 있는 디렉터리를 요구하며, 선택적인 scripts/, references/, assets/ 디렉터리를 허용합니다. SKILL.md에는 YAML frontmatter 뒤에 마크다운 지침이 포함되어야 합니다. 스펙에서 namedescription은 필수이며, name은 소문자, 숫자, 하이픈을 사용하여 64자로 제한되고, compatibility는 실제 환경 요구사항에만 사용되며, allowed-tools는 구현에 걸쳐 명시적으로 실험 단계입니다.

Claude Code는 이름이 디렉터리에서 파생되고 description이 누락되면 첫 단락으로 폴백할 수 있기 때문에 휴대 가능한 스펙보다 약간 느슨합니다. 휴대성이나 예측 가능성을 중시한다면 이에 의존하지 않아야 합니다. Claude.ai는 디렉터리 이름이 name 필드와 일치해야 하며, 더 넓은 스펙이 훨씬 더 많은 것을 허용함에도 불구하고 커스텀 스킬 업로드 경로에서 설명을 200자로 제한합니다. 휴대 가능한 선택은 명시적인 name을 설정하고, 디렉터리를 동일하게 유지하며, 좁은 제한에 들어가는 정확한 설명을 작성하는 것입니다. 이는 “SKILL.md 파일에는 무엇을 포함해야 하는가"라는 FAQ 주제를 모호함 없이 답변합니다.

이렇게 지루한 구조에서 시작하세요:

repo/
  .claude/
    skills/
      review-pr/
        SKILL.md
        scripts/
          review.sh
        references/
          checklist.md
        assets/
          comment-template.md

Skills 호환 클라이언트 간 휴대성이 Claude Code의 편의성보다 더 중요하면, 동일한 내부 형태를 유지하고 .claude/skills/.agents/skills/로 교체하세요. 폴더 구조는 어느 쪽이든 동일한 아이디어입니다.

Claude Code의 경우, 저장 위치는 직관적입니다. 프로젝트 스킬은 .claude/skills/<skill-name>/SKILL.md에 있습니다. 개인 스킬은 ~/.claude/skills/<skill-name>/SKILL.md에 있습니다. 플러그인 배포 스킬은 <plugin>/skills/<skill-name>/SKILL.md 아래에 있습니다. Anthropic은 내장 스코프 간 우선순위를 엔터프라이즈 > 개인 > 프로젝트로 문서화하며, 플러그인 스킬은 plugin-name:skill-name과 같은 네임스페이스된 형태를 사용하여 충돌을 피합니다. Windows에서 ~/.claude%USERPROFILE%\.claude로 해석되며, CLAUDE_CONFIG_DIR은 전체 베이스 디렉터리를 재위치시킬 수 있습니다.

프로젝트와 개인 스코프 사이의 선택은 직관적입니다. Skill이 해당 코드베이스와 긴밀하게 결합되어 있을 때 저장소 안에 .claude/skills/를 사용하세요—예를 들어, 특정 클러스터 이름을 아는 배포 플레이북이나 팀의 컨벤션에 맞게 조정된 리뷰 평가 기준. 프로젝트 사이에서 당신과 함께 이동하는 Skills에는 ~/.claude/skills/를 사용하세요: 개인 체크리스트, 범용 변경 로그 생성기, 선호하는 디버깅 워크플로. dotfiles 저장소에 넣을 모든 것은 개인 스코프에 속합니다.

기억할 가치가 있는 몇 가지 날카로운 모서리가 있습니다. SKILL.md는 정확히 그 대소문자로 명명되어야 합니다. Anthropic의 PDF 가이드는 kebab-case 폴더 이름을 권장하며, 작동하는 문서가 SKILL.md 또는 references/에 있어야 하므로 스킬 폴더 안에 README.md를 배치하지 말라고 명시합니다. 동일한 가이드는 또한 SKILL.md 명명이 대소문자를 구분한다는 점을 강조합니다. 이들은 지루한 제약이지만, 지루한 제약이 도구 신뢰성을 만드는 것입니다.

Claude Code는 모노레포에 대해 올바른 일을 합니다. 서브디렉터리에서 작업할 때 중첩된 .claude/skills/ 디렉터리를 자동으로 발견하므로, 패키지 수준 또는 서비스 수준의 스킬에 이상적입니다. 또한 현재 세션 중에 라이브 변경 사항을 위해 기존 스킬 디렉터리를 감시합니다. 재시작 함정 하나만 있습니다: 세션이 시작될 때 존재하지 않았던 최상위 스킬 디렉터리를 생성하는 경우입니다. Anthropic은 이것이 새 디렉터리를 감시하기 위해 재시작이 필요한 경우로 문서화합니다.

Claude Skills 모범 사례: 설명, 스크립트, 및 범위

무용한 Skill을 만드는 가장 빠른 방법은 LLM에게 일반적 훈련 지식에서 하나를 발명하게 하는 것입니다. Anthropic의 모범 사례 가이드는 정확히 그 것을 경고합니다. 가치 있는 부분은 도메인 특정 수정, 엣지 케이스, 도구 선택, 모델이 스스로 신뢰할 수 있게 발명하지 못할 컨벤션입니다. 올바른 워크플로는 에이전트로 작업을 한 번 해결하고, 작동할 때까지 수정한 후, 그 방법을 Skill로 추출하는 것입니다.

Skill의 범위는 위키가 아니라 좋은 함수처럼 설정하세요. Anthropic은 Skills가 일관된 작업 단위를 캡슐화해야 한다고 말합니다. 너무 좁으면 하나의 작업을 위해 여러 스킬을 스택해야 합니다. 너무 넓으면 에이전트가 그것들을 정확하게 활성화할 수 없습니다. 모범 사례 가이드는 과하게 포괄적인 스킬이 관련 없는 지침을 추격하고 신호를 잃기 때문에 도움이 되는 것보다 해가 될 수 있다고 단호하게 말합니다.

설명 품질은 장식적인 문제가 아닙니다. 그것은 라우팅 레이어입니다. Anthropic과 Agent Skills 문서 모두 description 필드가 모델이 Skill을 로드할지 여부를 결정하는 데 사용하는 주요 메커니즘이라고 말합니다. 좋은 설명은 Skill이 무엇을 하는지, 언제 사용해야 하는지, 사용자가 실제로 언급할 트리거 구문이나 파일 유형을 말합니다. 나쁜 설명은 모호하거나, 지나치게 기술적이거나, 헛소리에 매칭될 만큼 넓습니다. 이것이 “왜 Claude Skill이 트리거되지 않는가"라는 FAQ 질문에 대한 진정한 답변입니다. 보통 라우터가 나쁜 것이지, 모델이 나쁜 것이 아닙니다.

대조는 나란히 놓으면 명확합니다:

나쁜 설명 — 신뢰할 수 있게 라우팅하기에 너무 모호함:

  • 코딩 리뷰에 도움 — 모든 것에 매칭, 아무것도 구별하지 않음
  • 개발 작업에 유용 — 검색 쿼리보다 넓음
  • 작성 지원 — 라우터가 아니라 그냥 카테고리 라벨

좋은 설명 — 구체적인 트리거 언어:

  • 보안 문제, 마이그레이션 리스크, 누락된 테스트를 위한 풀 리퀘스트 리뷰. PR, git diff, 또는 릴리스 중요한 변경사항을 리뷰할 때 사용.
  • git log 출력을 사용하여 변경 로그 생성. 릴리스 준비, 릴리스 노트 작성, 또는 마지막 태그 이후 커밋 요약 시 사용.
  • 요청 검증과 에러 미들웨어를 가진 새로운 Go HTTP 핸들러 스캐폴딩. Go 서비스에 새로운 엔드포인트나 라우트를 추가할 때 사용.

패턴은 매번 동일합니다: Skill이 무엇을 하는지 명시하고, 그것을 활성화해야 할 정확한 사용자 구문을 이름으로 부르고, 관련이 있는 파일 유형이나 도구를 선택적으로 이름으로 부르세요. 당신의 설명이 일반적인 Google 쿼리에 매칭된다면, 그것은 충분히 구체적이지 않습니다.

워크플로에 부수 효과가 있다면, 수동으로 만드세요. Claude Code는 그것을 직접 노출합니다. disable-model-invocation: true는 Skill을 사용자 호출 전용으로 만드는데, Anthropic은 배포, 커밋, 또는 아웃바운드 메시지 같은 행위에 대해 이것을 권장합니다. user-invocable: false는 반대 방향으로 가고, Claude가 배경 지식으로 사용하도록 허용하면서 슬래시 메뉴에서 Skill을 숨깁니다. 이는 “스킬이 자동이 아니라 수동이어야 하는 시점은 언제인가"라는 FAQ 주제를 한 문장으로 답변합니다: 위험에 대해서는 수동, 안전한 반복 가능한 지침에 대해서는 자동.

SKILL.md를 이해 가능하게 유지할 만큼 작게 유지하세요. Anthropic은 500줄 미만과 약 5,000 토큰을 유지할 것을 권장하며, 자세한 자료는 명시적인 로드 지침이 있는 references/ 또는 유사한 파일로 이동합니다. “API가 200이 아닌 값을 반환하면 references/api-errors.md를 읽어라"는 좋은 패턴입니다. “참조 자료를 보라"는 게으릅니다. Claude Code는 렌더링된 Skill을 대화에 메시지로 주입하고, 이후 턴에서 파일을 다시 읽지 않습니다. 컨텍스트 압축 후, 토큰 예산 내에서 최근 Skill 콘텐츠만 전달됩니다. 따라서 거대한 Skills는 단순히 지저분한 것이 아닙니다. 긴 세션에 걸쳐 취약합니다.

좋은 SKILL.md는 매우 평범하게 유지될 수 있습니다:

---
name: review-pr
description: Review pull requests for security issues, migration risk, and missing tests. Use when reviewing a PR, git diff, or release critical change.
compatibility: Designed for Claude Code. Requires git and gh.
disable-model-invocation: true
allowed-tools: Bash(git diff *) Bash(gh pr diff *) Read Grep Glob
---
# Review PR

명령어를 실행하기 전에 references/checklist.md를 읽어라.

1. 디프와 변경된 파일 수집.
2. 정확성, 보안, 테스트 커버리지 문제 플래깅.
3. 파일 참조와 함께 심각도별로 그룹화된 발견 사항을 반환.
4. 가장 작은 안전한 수정을 먼저 제안.

결정성이 우아함보다 중요할 때 스크립트를 사용하세요. Skills 스크립트 가이드는 여기서 훌륭합니다. 이는 에이전트 대상 스크립트는 인터랙티브 프롬프트를 피해야 하고, --help를 통해 사용법을 문서화하고, 유용한 에러 메시지를 출력하고, stdout에 JSON이나 CSV와 같은 구조화된 출력을 선호하며, 진단을 stderr로 보내고, 재시도 안전한 사용을 지원해야 한다고 말합니다. 또한 일회성 도구 버전을 고정하고, 환경에 올바른 패키지가 있다고 가정하기보다 SKILL.md 또는 compatibility 필드에서 런타임 요구사항을 명시적으로 설명할 것을 권장합니다.

최소이지만 올바른 에이전트 대상 스크립트는 다음과 같습니다:

#!/usr/bin/env bash
# scripts/collect-diff.sh — called by review-pr skill
# Usage: collect-diff.sh <base-ref> [<head-ref>]
set -euo pipefail

BASE="${1:?Usage: collect-diff.sh <base-ref> [<head-ref>]}"
HEAD="${2:-HEAD}"

# 에이전트가 파싱할 수 있도록 stdout에 구조화된 출력
git diff "${BASE}...${HEAD}" --stat --name-only \
  | jq -Rs '{
      "changed_files": split("\n") | map(select(length > 0))
    }' \
  || { printf '{"error":"git diff failed"}\n' >&2; exit 1; }

세 가지가 이것을 에이전트 안전하게 만듭니다. set -euo pipefail은 스크립트가 조용히 진행하지 않고 실패 시 명확하게 종료되도록 보장합니다. stdout의 JSON은 에이전트가 추측 없이 파싱할 수 있는 형식을 제공합니다. 진단은 stdout 스트림이 깨끗하게 유지되도록 stderr로 갑니다. 이 중 어느 것도 지혜로운 것이 아닙니다. 모두 필요합니다.

allowed-tools의 미묘한 함정 하나입니다. 스펙에서는 실험 단계이며 지원이 다양합니다. Claude Code에서는 Skill이 활성일 때 특정 도구를 사전 승인하지만, 호출 가능한 도구의 우주 전체를 제한하지는 않으며, deny 규칙은 여전히 Claude Code 권한에 속합니다. Claude Agent SDK에서, Anthropic은 SKILL.mdallowed-tools frontmatter가 적용되지 않는다고 명시적으로 말하므로, SDK 앱은 대신 메인 allowed_tools 또는 allowedTools 구성에서 도구 액세스를 강제해야 합니다. 그 차이를 무시하면, 당신의 Skill은 CLI와 SDK 기반 자동화에서 다르게 행동할 것입니다.

가져와야 할 가치가 있는 고급 패턴 하나 더. 워크플로가 메인 스레드를 로그, 파일 검색, 또는 긴 연구 출력으로 범람시킬 때, Claude Code는 context: forkExplore와 같은 agent를 사용하여 Skill이 포크된 서브에이전트에서 실행되도록 허용합니다. Anthropic은 연구 워크플로에 대해 이것을 보여주는데, 여기서 힘든 작업이 격리된 컨텍스트에서 발생하고 메인 대화는 요약을 받습니다. 깊은 코드베이스 탐색에 대해, 그것은 메인 세션을 오염시키는 거대한 인라인 Skill보다 훨씬 더 나은 설계입니다.

포크된 Skill은 frontmatter에서 다음과 같습니다:

---
name: explore-codebase
description: Deep exploration of an unfamiliar codebase. Use when onboarding to a new repo, auditing architecture, or mapping module dependencies.
context: fork
agent: Explore
compatibility: Requires Claude Code CLI.
---
# Explore Codebase

1. 디렉터리 트리를 순회하고 최상위 모듈을 요약.
2. 메인 엔트리 포인트와 그 책임 식별.
3. 패키지 간 의존성 그래프 매핑.
4. 메인 세션에 구조화된 요약을 반환 — 원시 파일 목록이 아니라.

핵심 줄은 context: fork입니다. 이것 없이는 탐색 출력이 대화에 인라인으로 떨어집니다. 이것을 사용하면, 서브에이전트가 자신의 컨텍스트 윈도우에서 실행되고 요약을 돌려줍니다. 탐색 자체만으로도 수천 개의 토큰을 소모할 수 있는 대형 저장소에서 이 차이는 중요합니다.

Claude Skills 테스트: 트리거, 정확성, 및 베이스라인 비교

Skill은 한 번의 해피 패스 데모가 작동했기 때문에 테스트되는 것이 아닙니다. Anthropic의 가이드는 테스트를 세 가지 레이어로 나눕니다: Claude.ai에서의 수동 테스트, Claude Code에서의 스크립트 테스트, Skills API를 통한 프로그래매틱 테스트. 권장 평가 영역은 트리거링, 기능적 정확성, Skill이 없는 상태에 대한 성능 대비입니다. 이것 또한 “스킬이 신뢰할 수 있는지 어떻게 테스트하는가"라는 FAQ 질문에 대한 최고의 답변입니다. 모델이 자신감 있어 보였는지만이 아니라, 라우트 선택, 출력 품질, 효율성을 테스트합니다.

공식 평가 가이드는 테스트 케이스에 대해 깔끔한 구조를 제공합니다. 각 케이스에는 현실적인 사용자 프롬프트, 예상 출력을 인간 가독성 있게 설명한 것, 선택적인 입력 파일이 포함되어야 합니다. 문서는 Skill 디렉터리 안의 evals/evals.json에 그것들을 저장하는데, 자신의 하네스를 작성하더라도 합리적인 컨벤션입니다.

픽스처 파일과 무난한 eval 레이아웃을 이렇게 사용하세요:

{
  "skill_name": "review-pr",
  "evals": [
    {
      "id": 1,
      "prompt": "Review this PR for security issues and missing tests",
      "expected_output": "Findings grouped by severity with file references and at least one test recommendation.",
      "files": ["evals/files/pr-diff.patch"]
    },
    {
      "id": 2,
      "prompt": "Summarise last week's commits",
      "expected_output": "The skill should not activate.",
      "files": []
    }
  ]
}

제 테스트 규칙은 대부분의 팀이 사용하는 것보다 더 엄격하지만, 공식 가이드와 일치합니다. 모든 진지한 Skill은 트리거해야 할 쿼리, 트리거하지 말아야 할 쿼리, 최소 하나의 엣지 케이스 테스트, Skill이 없는 베이스라인 비교가 있어야 합니다. “작동한다"는 것이 “워크플로를 개선한다"는 것과 같지 않기 때문에, Anthropic의 예시는 Skill이 있는 것과 없는 것의 도구 호출, 실패한 API 호출, 명확화 루프, 토큰 사용을 비교합니다.

Claude Agent SDK를 통해 테스트하는 경우, 배관(plumbing)을 기억하세요. 거기서 Skills는 프로그래매틱한 등록이 아니라 파일시스템 아티팩트입니다. Anthropic은 "Skill" 도구를 활성화하고 settingSources 또는 setting_sources를 통해 관련 파일시스템 설정을 로드해야 한다고 말합니다. user 또는 project를 생략하거나, cwd를 잘못된 곳으로 가리키면, SDK는 Skill을 발견하지 못할 것입니다. Anthropic은 직접 발견 체크로 “사용 가능한 Skills는 무엇인가?“라고 묻는 것을 권장합니다.

실제로 출시할 의도가 있는 모델과 클라이언트에서도 테스트하세요. 오픈 Agent Skills 퀵스타트는 도구 사용 신뢰성이 모델 간에 다양하며, 일부 모델은 Skill이 의도하는 커맨드를 실행하는 대신 직접 답변할 수 있다고 명시적으로 경고합니다. 그것은 항상 Skill 설계 문제가 아닙니다. 때로는 모델 선택 문제이며, 테스트 매트릭스가 그것을 드러내야 합니다.

Claude Skills 문제 해결: 일반적인 실패 및 수정

Skill이 이상 행동을 할 때, 지능보다 패키징을 의심하세요. 가장 일반적인 실패는 여전히 지루한 것들입니다.

  • Skill이 아예 발견되지 않는다면, 파일이 올바른 디렉터리 안에 정확히 SKILL.md로, 올바른 대소문자로 명명되었는지 확인하세요. Anthropic의 문제 해결 가이드는 파일명 대소문자를 명시적으로 지적하며, 그 Claude Code 및 SDK 문서는 첫 번째 체크로 .claude/skills/*/SKILL.md~/.claude/skills/*/SKILL.md를 가리킵니다.
  • frontmatter가 무효하다면, 먼저 YAML 구분자와 인용부호를 확인하세요. Anthropic의 예시는 고전적인 실수를 보여줍니다: 누락된 ---, 닫히지 않은 인용부호, 공백과 대문자가 있는 무효한 이름. Skill 이름은 소문자와 하이픈이어야 합니다.
  • Skill이 존재하지만 트리거되지 않는다면, 설명이 보통 너무 모호합니다. Claude Code의 자체 문제 해결은 사용자가 자연스럽게 말할 키워드를 포함하고, “사용 가능한 스킬은 무엇인가?“라고 물었을 때 Skill이 표시되는지 확인하고, 설명에 더 가깝게 재언어화하는 것을 시도하라고 말합니다. Anthropic의 PDF 가이드는 훌륭한 진단 트릭을 추가합니다: Claude에게 언제 Skill을 사용할지 물어보고, 그것이 당신에게 설명을 어떻게 다시 패러프레이징하는지 들어보세요.
  • Skill이 너무 자주 트리거된다면, 범위를 좁히세요. Anthropic은 설명을 더 구체적으로 만들고, 음성 트리거를 추가하고, 명시적인 커맨드로만 원하는 워크플로에 disable-model-invocation: true를 사용할 것을 권장합니다. 과도한 트리거링은 보통 지정되지 않은 라우팅 언어일 뿐입니다.
  • Skill이 긴 세션에서 영향을 잃는 것처럼 보인다면, 많은 스킬이 존재할 때 Claude Code 카탈로그에서 설명이 단축될 수 있고, 호출된 Skills는 압축 후 토큰 예산 내에서 나중에 전달된다는 점을 기억하세요. Anthropic은 설명에서 키워드를 앞쪽에 배치하고, 과도한 텍스트를 다듬고, 특히 Claude Code의 경우 설명 목록이 너무 공격적으로 압축되고 있다면 SLASH_COMMAND_TOOL_CHAR_BUDGET을 조정할 것을 권장합니다.
  • 번들된 스크립트가 멈추거나 불규칙하게 행동한다면, 그것이 인터랙티브 입력을 기대하는지 확인하세요. 스크립트 가이드는 에이전트가 비인터랙티브 셸에서 실행되므로, TTY 프롬프트, 비밀번호 다이얼로그, 확인 메뉴는 설계 버그라고 말합니다. 플래그, 환경 변수, 또는 stdin을 통해 입력을 받아들이고 실패를 명시적으로 만드세요.
  • SDK가 당신의 Skill을 보지 못한다면, allowed_tools"Skill"이 포함되어 있는지, settingSources 또는 setting_sourcesuser 또는 project가 포함되어 있는지, cwd가 실제로 .claude/skills/를 포함하는 디렉터리를 가리키는지 확인하세요. 그 설정 없이는, 당신의 마크다운이 얼마나 정확해 보여도 Skill 시스템은 활성화되지 않습니다.
  • MCP 기반 Skill이 로드되지만 도구 호출이 실패한다면, Anthropic의 문제 해결 체크리스트는 합리적입니다: MCP 서버가 연결되었는지 확인하고, 인증과 스코프를 확인하고, Skill 없이 MCP 도구를 직접 테스트한 후, 그것들이 대소문자를 구분하기 때문에 정확한 도구 이름을 확인하세요.

지루한 진실은 좋은 Claude Skills가 좋은 운영 엔지니어링처럼 보인다는 것입니다. 명확한 이름. 작은 파일. 명시적인 트리거. 필요할 때 결정론적인 스크립트. 실제 테스트. 당신의 Skill이 매끄러운 런북처럼 읽힌다면, 에이전트는 싸울 기회가 있습니다. 브레인스토밍처럼 읽힌다면, 당신은 단순히 혼돈을 폴더에 숨긴 것입니다.

구독하기

시스템, 인프라, AI 엔지니어링에 관한 새 글을 받아보세요.