[Claude Code 스킬] 스킬 호출 제어 — /deploy를 Claude가 스스로 못 부르게 잠그기 | DAKER 커뮤니티
Claude Code에서 스킬(SKILL.md)은 기본적으로 문이 두 개 열려 있습니다. 내가 /이름으로 직접 여는 문, 그리고 Claude가 상황을 보고 알아서 여는 문. 호출 제어는 프론트매터 한 줄로 이 문을 각각 잠그는 기능입니다.
무엇
스킬은 폴더 하나와 SKILL.md 한 장으로 만드는 절차서입니다. 커스텀 커맨드(.claude/commands/deploy.md)도 이제 스킬로 통합되어 .claude/skills/deploy/SKILL.md와 똑같이 /deploy를 만듭니다. 여기서 프론트매터 두 필드가 호출 주체를 나눕니다. disable-model-invocation: true는 Claude의 자동 로드를 막고 사람만 부르게 하며, user-invocable: false는 반대로 / 메뉴에서 숨겨 Claude만 쓰게 합니다. 실행 위치를 바꾸는 context: fork, 그 턴에만 도구 승인을 미리 해두는 allowed-tools까지 합치면 "누가 부르고, 어디서 돌고, 무엇을 쥐는가"가 전부 파일 안에서 결정됩니다.
언제 쓰나
부작용이 있는 워크플로 —
/deploy,/commit,/send-slack-message. "코드가 준비된 것 같으니 배포할까"를 모델이 판단하게 두지 않습니다. v2.1.196부터는 예약 작업이 그 스킬을 프롬프트로 실행하는 것도 함께 막힙니다.사람이 부를 일 없는 배경 지식 — 팀 코딩 규약, 도메인 용어집처럼 Claude만 참조하면 되는 문서는
user-invocable: false로/메뉴에서 치웁니다.컨텍스트가 무거운 조사 — 코드베이스 전수 조사처럼 중간 산출물이 많은 작업은
context: fork로 서브에이전트에 떠넘겨 메인 대화를 깨끗하게 유지합니다.승인 팝업이 잦은 스킬 —
gh·git같은 고정 명령을 쓰는 스킬은allowed-tools로 그 턴만 미리 승인합니다.
사용법
1) 사람만 부를 수 있는 배포 스킬. 포크 실행까지 함께 걸어 메인 대화를 보호합니다.
# .claude/skills/deploy/SKILL.md
---
name: deploy
description: Deploy the application to production
context: fork
disable-model-invocation: true
---
Deploy the application:
1. Run the test suite
2. Build the application
3. Push to the deployment target2) 격리된 조사 스킬. 스킬 본문 자체가 서브에이전트의 프롬프트가 되고, 대화 기록은 넘어가지 않습니다.
# .claude/skills/research/SKILL.md
---
name: research
description: Research a topic across the codebase
context: fork
agent: Explore
---
Research $ARGUMENTS thoroughly:
1. Find relevant files using Glob and Grep
2. Read and analyze the code
3. Summarize findings with specific file references호출은 /research 인증 흐름처럼 인자를 붙이면 됩니다. $ARGUMENTS는 전체 인자, $ARGUMENTS[0]은 0번째 인자(축약형 $0)입니다.
3) 실행 전에 셸 출력을 본문에 미리 박아 넣는 동적 컨텍스트 + 턴 한정 승인.
# .claude/skills/pr-summary/SKILL.md
---
name: pr-summary
description: Summarize changes in a pull request
context: fork
agent: Explore
allowed-tools: Bash(gh *)
---
## Pull request context
- PR diff: !`gh pr diff`
- PR comments: !`gh pr view --comments`
- Changed files: !`gh pr diff --name-only`백틱 앞의 ! 구문은 Claude가 실행하는 명령이 아니라 전처리입니다. 명령이 먼저 돌고, 그 출력이 자리표시자를 대체한 뒤에야 Claude가 완성된 프롬프트를 봅니다. 치환은 원본 파일을 한 번만 훑기 때문에 명령 출력 안의 !`...`는 다시 실행되지 않습니다.
팁
allowed-tools는 방패가 아니라 출입증입니다. 도구를 제한하는 게 아니라 그 턴 동안 승인을 미리 해두는 장치이고, 다음 메시지를 보내면 만료됩니다. 도구를 아예 빼앗으려면
disallowed-tools, 세션 내내 승인하려면 settings.json의 permissions 규칙을 씁니다. 프로젝트에 체크인된 스킬은 워크스페이스 신뢰를 수락한 뒤부터 이 승인이 적용되므로, 남의 저장소를 신뢰하기 전에 스킬을 한 번 읽어보는 편이 안전합니다.description이 곧 검색어입니다. Claude는 description을 보고 스킬을 고릅니다. description과 when_to_use를 합친 텍스트는 스킬 목록에서 1,536자에서 잘리므로 핵심 용례를 맨 앞에 둡니다.
자동 컴팩트 생존 규칙. 대화가 요약될 때 스킬은 최근 호출분부터 각각 앞 5,000토큰까지, 합계 25,000토큰 예산 안에서만 다시 붙습니다. 한 세션에서 스킬을 많이 부르면 오래된 것부터 통째로 사라집니다.
버전 차이를 확인하세요. 불리언에 yes/no/on/off/1/0을 쓰려면 v2.1.218 이상,
background필드도 같은 버전부터입니다. 그 이전에는 포크된 스킬이 항상 턴을 붙잡고 기다렸습니다.claude --version으로 확인합니다.이름이 겹치면 enterprise > personal > project 순으로 덮어씁니다. 플러그인 스킬은
plugin-name:skill-name네임스페이스라 충돌하지 않습니다.