본문으로 건너뛰기

Create pull request

· 약 2분
JS Koo
Developer
시리즈 안내

이 글은 Claude Code Notifier 개발기 시리즈의 마지막 편입니다.

마우스 커서가 버튼 위에서 멈췄다.

초록색 버튼. "Create pull request"라고 쓰여 있었다.

발견

Claude Code를 만든 보리스의 글을 봤다. "customize it, and hack it however you like"라고 했다. 원하는 대로 고쳐서 쓰라고.

그래서 Claude Code 레포지토리를 뒤져봤다. plugins 디렉토리가 있었다. 13개의 공식 플러그인. code-review, commit-commands, pr-review-toolkit.

근데 알림 플러그인은 없었다. 왜 없지? 작업 끝나면 알려주는 게 당연히 있을 줄 알았는데.

그래서 만들기로 했다.

준비

일주일 동안 기존 플러그인들을 뜯어봤다.

구조가 있었다. .claude-plugin/plugin.json이 필수였고, hooks 디렉토리에 Hook 정의가 들어갔다. 경로는 ${CLAUDE_PLUGIN_ROOT}라는 환경변수를 써야 했다.

내 코드를 그 구조에 맞게 고쳤다. 경로를 바꾸고, 변수명을 정리하고, README를 영어로 다시 썼다.

plugins/notifier/
├── .claude-plugin/
│ └── plugin.json
├── commands/
│ └── notifier.md
├── hooks/
│ └── hooks.json
├── hooks-handlers/
│ ├── common.sh
│ ├── notify.sh
│ └── notifiers/
│ ├── macos.sh
│ ├── linux.sh
│ └── windows.ps1
└── README.md

13개 파일, 748줄.

테스트

macOS, Linux(Docker), Windows, WSL 각각 테스트했다.

플러그인 스펙

기존 플러그인들을 뜯어보니 스펙이 보였다. 아 역시 규칙이 있구나.

필수 구조:

plugins/플러그인명/
├── .claude-plugin/
│ └── plugin.json # 플러그인 메타데이터
├── hooks/
│ └── hooks.json # Hook 정의
└── README.md

plugin.json 예시:

{
"name": "notifier",
"version": "1.0.0",
"description": "Cross-platform notifications"
}

hooks.json 예시:

{
"hooks": {
"Stop": [{
"hooks": [{
"type": "command",
"command": "${CLAUDE_PLUGIN_ROOT}/hooks-handlers/notify.sh"
}]
}]
}
}

${CLAUDE_PLUGIN_ROOT}는 플러그인 루트 경로로 치환된다. 이걸 써야 경로가 꼬이지 않는다.

PR

스펙대로 정리하고 PR을 올렸다. #18151.

그래서

이 글을 쓰는 지금 PR은 열려 있다.

머지되면 14번째 공식 플러그인이 된다. 아니면 내 개인 프로젝트로 남는다. 어느 쪽이든 괜찮다.


머지되면 업데이트하겠다.


시리즈 목차:


PR: anthropics/claude-code#18151

문서: Claude Code Notifier Docs

GitHub: https://github.com/js-koo/claude-code-notifier