Mods 개요
기준일: 2026-10-23
공식 기준: Mods overview
개요
mod는 Claude Code의 모양과 동작을 바꾸는 플러그인입니다. JavaScript/TypeScript 이벤트 핸들러로 구성되며, 도구 호출·프롬프트 제출·화면 그리기 같은 이벤트가 생기면 Claude Code가 핸들러를 호출합니다. 핸들러는 이벤트를 관찰하거나 바꾸거나 직접 처리할 수 있습니다. 예: 요청마다 컨텍스트 사용량을 그리는 패널.
기존 hooks(설정 파일의 셸 명령, HTTP 요청, 프롬프트)도 이벤트에 반응합니다. mod의 핸들러는 Claude Code 안에서 도는 함수입니다. 공식 문서는 둘 다 hook이라 부르되, 이 문서군에서 "hook"은 mod의 핸들러, 설정 파일 쪽은 "settings hook"입니다.
대상 환경: 터미널은 v2.1.287 이상, Desktop 앱은 v2.1.286부터(앱에 내장된 Claude Code 기준). 조직 관리는 mods 관리, 만드는 법은 mod 만들기 참고.
핵심 개념
| 개념 | 설명 |
|---|---|
| mod | 이벤트 핸들러(hook)를 등록하는 코드를 가진 플러그인 |
| hook | mod 안의 핸들러. 이벤트가 나면 Claude Code가 먼저 실행 |
| hooks module | register.js. 어떤 이벤트에 어떤 함수를 돌릴지 등록 |
| settings hook | 설정 파일에 구성하는 셸/HTTP/프롬프트 방식 hook (mod와 구분) |
| mods API | 그리기·명령 추가·모델 호출·파일·네트워크 등 바깥 일을 하는 유일한 통로 |
| 내장 mod | /plugin의 Installed 탭 Built-in에 나오는 Claude Code 자체 기능 |
상세
mod가 할 수 있는 일
settings hook·skill·status line·MCP 서버는 Claude Code 바깥에서 동작합니다. mod는 안에서 동작해 다음이 가능합니다.
- 쓸 수 있는 인터페이스 그리기: 대화 옆 pane, 프롬프트 위 band, 탭·버튼·텍스트 필드
- Claude Code 자체 화면 다시 그리기: 도구 호출 행, 스피너, 질문 대화상자 교체·스타일 변경
- 도구 호출/요청 끼어들기: 도구 호출을 잡아 두고 사용자에게 질문, 실행 없이 응답, 요청을 다른 모델로 전송
- 명령 위에서 자기 코드 실행:
/command가 Claude 턴 없이, Claude가 작업 중이어도 즉시 함수 실행 - hook 간 데이터 공유: 한 mod 파일의 변수를 hook들이 공유 (예: 한 hook이 도구 호출 수를 세고 다른 hook이 스피너 옆에 표시)
mod는 Claude Code CLI, Desktop 앱 Code 탭, VS Code 확장에서 동작합니다.
mod 구하기
- 이미 있는 것 사용:
/diff등 일부는 mod (내장 mod) - 직접 만들기: 세션에서 원하는 것을 설명하면 Claude가 작성 (Ask Claude for a mod)
- 설치: 마켓플레이스의 플러그인으로 설치
경고: mod는 사용자 권한으로 실행되는 코드입니다. 파일 읽기/쓰기, 프로세스 시작, 네트워크 요청이 가능합니다. 신뢰하는 작성자·마켓플레이스에서만 설치하세요.
플러그인 이름 + @ + 마켓플레이스 이름으로 설치합니다 (예: 마켓 your-org의 token-chart).
- 세션에서:
/plugin install token-chart@your-org - 셸에서:
claude plugin install token-chart@your-org
마켓플레이스·scope·VS Code/Desktop·업데이트 유지는 Install plugins 그대로 적용됩니다. 세션이 열린 채 셸에서 설치·업데이트했다면 그 세션에서 /reload-plugins를 실행해야 로드됩니다. 아니면 다음 시작 때 로드됩니다.
샘플 mod
Anthropic이 claude-code-playground 저장소의 claude-code/mods에 샘플을 둡니다. 각각 완전한 플러그인이며 README에 제작 과정이 있고, 지원 없이 있는 그대로 제공됩니다.
| 샘플 | 동작 |
|---|---|
token-weather |
프롬프트 위에 컨텍스트 윈도우 예보를 그림 |
blast-radius |
rm -rf, force push 같은 위험한 셸 명령을 잡아 두고 변경 내용과 진행/취소 버튼 표시 |
replay-theater |
/replay 명령으로 직전 턴에서 Claude가 한 파일 편집을 단계별 재생 |
시험: 저장소를 clone → --plugin-dir로 한 세션만 로드. 계속 쓰려면 clone의 claude-code/mods 디렉터리를 마켓플레이스로 추가한 뒤 claude-code-playground-mods에서 설치합니다. 마켓이 clone을 가리키므로 clone을 옮기거나 지우면 로드되지 않습니다.
신뢰 판단
mod가 로드되면 할 수 있는 일:
- 내 계정으로 기기에서 행동: 사용자 계정이 닿는 모든 파일 읽기/쓰기, 프로그램 시작, 네트워크 요청
- 비밀 읽기: 환경 변수·설정 파일(그 안의 API 키 포함)
- 세션 보기: 보낸 모든 프롬프트와 Claude의 모든 도구 호출
- 세션 바꾸기: 프롬프트·도구 호출 재작성, 직접 입력한 것처럼 프롬프트 제출, 다른 세션에 메시지 전송
- 묻지 않고 행동: 질문 전에 도구 호출 승인
- 사용량 소비: 내 플랜·API 키로 모델 호출
mod는 샌드박스되지 않습니다. sandboxing을 켜도 격리되는 것은 Claude가 실행하는 Bash 명령뿐이고, mod가 시작한 프로세스는 샌드박스 밖에서 돕니다.
managed settings가 있거나 Team/Enterprise /login이 세션 자격 증명이면, 기본적으로 mod의 승인은 ask 규칙이나 PreToolUse hook을 넘지 못합니다. 둘 다 없으면 mod가 ask 규칙이 묻는 호출, 또는 PreToolUse hook이 막은 호출도 승인할 수 있습니다. deny 규칙까지 넘는 경우는 Extend permissions with hooks를 확인하세요. mod는 화면 대부분을 꾸밀 수 있어도 권한 프롬프트는 바꿀 수 없고, 프롬프트가 보여주는 내용도 바꿀 수 없습니다.
설치 전에 mod가 하는 일 나열
플러그인 파일을 먼저 받고(예: 저장소 clone) 셸에서 실행합니다. 실행하지 않고 처리하는 이벤트와 요청 내용(파일 읽기, 네트워크 요청 등)을 볼 수 있습니다.
claude plugin validate ./some-mod
출력의 hooks:와 calls: 줄이 mod가 처리하는 이벤트와 Claude Code에 요청하는 일을 나열합니다. 출력 예와 주의할 호출은 Review what a mod can do.
켜고 끄기
mod는 기본 켜짐. 버전 확인:
- 터미널:
claude --version(낮으면 업데이트) - Desktop 앱: Code 탭 로컬 세션에서
/status의 Claude Code 행 (예:2.1.286)
끄는 범위:
| 범위 | 방법 |
|---|---|
| mod 하나 | /plugin의 Installed 탭에서 해당 플러그인 비활성/삭제 |
| 설치한 모든 mod, 한 세션 | --safe-mode로 시작 (다른 커스터마이징도 함께 비활성) |
| 설치한 모든 mod, 모든 세션 | ~/.claude/settings.json에 "disableAllHooks": true (settings hook·커스텀 status line도 멈춤, 조직 관리분은 계속 동작) |
조직 관리자는 로드되는 mod를 제한할 수 있습니다 (Stop user-installed mods from loading). disableAllHooks와 조직의 allowManagedModsOnly는 mod만 멈추고 플러그인의 skill·명령·agent·MCP 서버는 그대로 로드합니다. 다른 설정·플래그는 더 넓게 작용합니다 (disableAllHooks, allowManagedHooksOnly가 실행시키는 것). 로드 가능 여부는 Check whether mods can load.
초기 접근 때
CLAUDE_CODE_ENABLE_FUNCTION_HOOKS를 설정했다면 제거하세요. v2.1.287 이상은 이를 무시하므로0으로 둬도 mod가 꺼지지 않습니다.
세션이 로드한 mod 확인
터미널 세션에서 /plugin을 실행하면 탭 아래 흐린 줄에 개수와 이름이 나옵니다. 예: 1 mod active · first-mod. 설치했는데 없다면 Find out why a mod does nothing.
mod 동작 구조
작은 mod의 파일 3개:
first-mod/
├── .claude-plugin/
│ └── plugin.json
└── hooks/
├── hooks.json
└── register.js
plugin.json: 플러그인 매니페스트hooks.json: 코드 파일을 가리킴register.js: hooks module. 어떤 이벤트에 어떤 함수를 돌릴지 등록
완전한 register.js 예: Claude의 도구 호출을 세어 작업 중 스피너 옆에 Thinking · tool calls: 3…처럼 표시.
// The count, shared by the two hooks below
let calls = 0
// Claude Code calls this once when the mod loads
export function register(on) {
// Runs each time Claude is about to use a tool
on('tool.call', async ($, e, next) => {
calls += 1
// Ask Claude Code to draw the interface again, so the new count shows
$.ui.invalidate('ui.render')
// Let the tool run as usual
return next(e)
})
// Runs each time Claude Code draws the spinner
on('ui.render', { component: 'Spinner' }, async ($, e, next) => {
// Keep Claude Code's spinner, with the count added after its word
return next({ ...e, props: { ...e.props, suffix: ' · tool calls: ' + calls + '…' } })
})
}
tool.callhook: Claude가 도구를 쓰기 직전.calls를 1 올리고 화면 재그리기를 요청한 뒤 도구를 평소대로 실행ui.renderhook: 스피너를 그릴 때. 기본 스피너를 유지하고 단어 뒤에 카운트 추가
hook이 이벤트로 할 수 있는 일
Claude Code는 이벤트를 처리하기 전에 hook을 실행하므로 hook이 다음 동작을 결정합니다.
- Observe: 보고 그대로 통과 (예:
tool.callhook) - Rewrite: 이벤트를 바꿔 계속 (예:
ui.renderhook이 스피너에 카운트 추가) - Answer: 이벤트를 직접 처리해 평소 동작을 막음 (예: 명령 거부)
hook이 자기 코드 밖의 일(그리기, 명령 추가, 모델 호출, 파일 읽기, 프로세스 시작, 네트워크 요청)을 하려면 mods API를 호출해야 하며 다른 방법이 없습니다. 그래서 설치 전에 mod가 하는 일을 나열할 수 있습니다. 상세: React to events, Use the mods API.
실행 환경
hook은 플러그인을 로드하는 모든 세션에서 모델 제공자(Amazon Bedrock, Google Cloud Agent Platform, Microsoft Foundry 포함)와 무관하게 실행됩니다. 그리기는 터미널, Desktop 앱, VS Code 확장에만 나타납니다.
| 실행 위치 | hook 실행 | mod가 그린 것 표시 |
|---|---|---|
터미널 claude (에디터 통합 터미널, JetBrains 플러그인 포함) |
예 | 예 |
| Desktop 앱 Code 탭 (WSL 세션 제외) | 예 | 예 (elements 표가 터미널 전용으로 표시한 요소 제외) |
| Desktop 앱 WSL 세션 | 아니오 (WSL 세션은 플러그인 미지원) | 아니오 |
| VS Code 확장 채팅 패널 | 예 | 예, 확장 2.1.299 이상. feature flag를 가져오지 않는 세션(예: Amazon Bedrock)은 2.1.304 이상 |
claude -p, Agent SDK |
예 | 아니오 |
| claude.ai/모바일 Remote Control | 예 (내 기기의 세션) | 내 기기의 터미널 |
| 클라우드 세션 | 예 (클라우드 세션에 전달되는 플러그인) | 아니오 |
그리는 mod는 어느 앱에서 도는지 확인해, 그릴 곳이 없으면 transcript 한 줄이나 명령의 텍스트 응답으로 대체할 수 있습니다. 렌더 사이트·요소별 지원은 render sites와 elements 표.
mod와 다른 확장 비교
비교 표(공식 원문 요약): mod는 Claude Code 안에서 도는 JavaScript/TypeScript 함수, 선택 기준은 "pane, 프롬프트 위 band, 커스텀 명령이 필요하거나 이벤트를 재작성하고 싶을 때". settings hook은 이미 있는 스크립트로 이벤트를 차단/허용/기록할 때, skill은 같은 지시를 계속 붙여넣을 때, MCP 서버는 외부 시스템에 닿아야 할 때. 하나의 플러그인에 모두 담을 수 있어 mod를 skill·MCP 서버와 함께 배포할 수 있습니다. 각각 Hooks, Skills, MCP.
내장 mod
/plugin의 Installed 탭 Built-in 아래에 나옵니다. 업데이트·삭제는 불가이며, mods active 줄에는 내장 mod가 빠집니다. disableAllHooks, --bare, --safe-mode는 내장 mod를 멈추지 않습니다.
/plugin의 이름 |
동작 | 켜지는 곳 | 끄는 법 |
|---|---|---|---|
cc-plugin-agents-md |
AGENTS.md를 프로젝트 지침으로 로드 |
AGENTS.md를 읽을 수 없는 세션 외 모든 세션 |
/plugin에서 비활성, 또는 로드할 지침 파일 선택 |
cc-plugin-diff |
/diff를 인계받아 pane 그림 |
인터랙티브 터미널 세션 | /plugin에서 비활성. /diff는 남고 Claude Code 내장 버전이 응답 |
cc-plugin-plugin-authoring |
mod 작성용 plugin-authoring skill 제공 (skill만, mod 코드 없음) |
Anthropic이 설치형 mod를 원격으로 끄지 않은 경우 | /plugin에서 비활성 |
cc-plugin-sec-default |
사용자가 설치한 mod로부터 조직 관리 항목을 보호 | 가드가 로드되는 곳 | 불가. 관리자가 managed settings에서 순서를 정함 |
cc-plugin-telemetry |
Claude Code와 내장 mod의 분석 기록 전송 | Claude Code 자체 분석이 켜진 곳 | /plugin에서 비활성, 또는 분석 off (예: DISABLE_TELEMETRY) |
cc-plugin-you-should-know |
You should know: side agent가 놓친 것을 프롬프트 위에 표시 | 켜기 전에는 꺼짐 | /plugin에서 비활성 |
cc-plugin-you-should-know는 2.1.287에서 내장 mod로 추가됐고 /plugin enable cc-plugin-you-should-know@builtin으로 켭니다(first-party 세션, 텔레메트리 켜짐 조건).
일부 소스는 Claude Code 저장소의 mods 디렉터리에 공개되어 있고 각각 hooks module과 테스트를 갖춘 완전한 플러그인입니다.
diff:/diffpane, 키보드 액션에 묶인 버튼, 직접 처리하는 스크롤agents-md:AGENTS.md로드,userConfig옵션 포함sec-default: 정책 강제 mod의 모델telemetry: 다른 mod가 호출할 메서드와 타입 제공
함께 보기
- Create a mod: 도구 호출 수를 세고 명령을 추가하는 mod와 편집·리로드 루프
- Manage mods for your organization: 기본값, managed settings, 리뷰, 정책 mod
- Draw in the interface, React to events, Use the mods API
- Test a mod, Troubleshoot a mod, Mods reference
기준일
- 문서 작성·동기화 기준일: 2026-10-23 (v2.1.309 반영)
- 원문: https://code.claude.com/docs/en/plugins/mods/overview