Claude Code 플러그인, 통째로 깔지 않고 알맹이만 빼왔다
지난 편 → 6편 — 챗GPT랑 클로드, 왜 서로 대화는 못 시킬까
Claude Code로 한동안 일하다 보면, 남이 만들어 둔 도구를 가져다 쓰고 싶어지는 순간이 옵니다. 마켓플레이스에 올라온 플러그인 중 하나가 눈에 들어왔습니다. 코드를 필요 이상으로 부풀리지 않게, "게으른 시니어 개발자"처럼 최소로만 짜도록 붙잡아 주는 도구였습니다. 마음에 들었습니다.
그런데 막상 설치하려니 손이 멈췄습니다. 제가 원한 건 그 안에 담긴 원칙 하나였는데, 플러그인은 그것 말고도 이런저런 것들을 통째로 데려옵니다. 안 쓸 기능까지 제 환경에 얹히는 게 영 내키지 않았습니다. 그래서 깔지 않고, 열어서 필요한 알맹이만 빼내기로 했습니다.
그러려면 먼저 "플러그인"과 "스킬"이 뭐가 다른지부터 알아야 했습니다.
스킬과 플러그인은 뭐가 다른가
한 줄로 하면 이렇습니다. 스킬은 부품 하나, 플러그인은 부품을 담은 상자.
스킬(Skill)은 최소 단위입니다. SKILL.md라는 마크다운 파일 하나가 전부고, 필요하면 옆에 보조 파일(스크립트·데이터)을 둘 수 있습니다. 두는 곳도 단순합니다.
- 개인용:
~/.claude/skills/<이름>/SKILL.md - 프로젝트용:
.claude/skills/<이름>/SKILL.md
파일 맨 위 frontmatter에 "이 스킬을 언제 써야 하는지"를 적어두면, Claude가 상황을 보고 알아서 불러 씁니다. 아니면 /스킬이름으로 직접 부를 수도 있습니다. 말하자면 "이 일은 이렇게 처리해라"라고 적어둔 지침 한 장입니다.
플러그인(Plugin)은 그 부품들을 담아 배포하는 상자입니다. .claude-plugin/plugin.json이라는 매니페스트를 중심으로, 여러 종류의 구성요소를 한 번에 묶습니다.
skills/— 스킬들agents/— 커스텀 에이전트(서브에이전트)hooks/— 특정 이벤트(도구 실행 전후 등)에 끼어드는 훅.mcp.json— 외부 서비스 연동(MCP 서버)- 그 밖에 LSP 서버, 백그라운드 모니터, 실행 파일 등
그리고 이 상자는 마켓플레이스를 통해 설치합니다.
/plugin marketplace add 소유자/저장소 /plugin install 플러그인이름@마켓플레이스
정리하면, 스킬은 재사용 가능한 기능 한 조각이고, 플러그인은 그 조각들에 훅·에이전트·MCP까지 묶어 배포하는 꾸러미입니다. 그래서 플러그인 안에는 스킬이 들어 있을 수 있지만, 반대로 스킬은 플러그인 없이도 .claude/skills/에 그냥 두면 혼자 동작합니다. 이 마지막 문장이 제가 노린 지점이었습니다. 스킬은 단독으로 살 수 있습니다.
상자를 열어보니
제가 원한 플러그인의 저장소를 열어보니, 예상대로 구조가 위에서 말한 그대로였습니다. 여러 폴더 중 skills/ 아래에 제가 탐내던 그 원칙이 SKILL.md 한 장으로 얌전히 들어 있었습니다. 훅도, MCP도, 에이전트도 아니고 딱 스킬 하나. 즉 상자를 통째로 들일 이유가 없었습니다. 그 한 장이면 됐습니다.
필요한 스킬만 빼서 내 것으로
이식 자체는 단순합니다.
- 플러그인에서
SKILL.md와 (있다면) 보조 파일을 통째로 복사합니다. - 제 스킬 폴더
~/.claude/skills/<이름>/에 넣습니다. - frontmatter를 제 환경에 맞게 손봅니다(설명 문구를 제 말투로 다듬는 정도).
다만 그대로 옮기면 안 되는 함정 세 가지가 있었습니다.
- 경로 변수: 플러그인 안에서만 통하는
${CLAUDE_PLUGIN_ROOT}같은 변수를 쓰고 있으면, 스킬만 떼어냈을 때 그 경로가 깨집니다. 상대 경로로 바꿔줘야 합니다. - 숨은 의존성: 그 스킬이 플러그인의 훅이나 MCP 서버에 기대고 있으면, 스킬만 가져왔을 때 반쪽만 동작하거나 조용히 실패합니다. "이 스킬이 혼자 설 수 있는가"를 먼저 확인해야 합니다. 제 경우엔 순수하게 지침만 담긴 스킬이라 깔끔하게 떨어졌습니다.
- 라이선스와 예의: MIT 같은 오픈 라이선스면 파일을 뜯어 재구성하는 데 법적 문제가 없습니다. 다만 원본 저장소 링크를 출처로 남겨두는 게 만든 사람에 대한 최소한의 예의고, 나중에 원본이 업데이트됐을 때 되짚어 보기에도 편합니다.
이 세 개만 통과하면, 남의 상자에서 부품 하나만 꺼내 제 서랍에 넣는 일은 몇 분이면 끝납니다.
그래서 언제 통째로 깔고, 언제 뜯나
둘 다 맞는 상황이 따로 있습니다.
플러그인째 설치가 나은 경우 — 그 도구의 여러 기능을 실제로 다 쓸 때, 특히 훅·MCP·에이전트가 서로 맞물려 하나의 워크플로로 돌아갈 때입니다. 이럴 땐 부품을 낱개로 뜯으면 오히려 연결이 끊겨 더 번거롭습니다. 상자째 들이고, 업데이트도 마켓플레이스로 받는 게 맞습니다.
뜯어서 스킬로 가져오는 게 나은 경우 — 제가 원한 게 그 안의 스킬 한 조각뿐일 때입니다. 나머지 기능이 필요 없는데 통째로 얹으면, 안 쓰는 것까지 제 환경을 채우고 관리 대상만 늘어납니다.
저는 후자였습니다. 그리고 이건 취향이 아니라 원칙에 가깝습니다. 안 쓸 것을 얹지 않는 것, 필요한 최소한만 취하는 것 — 마침 제가 그 플러그인에서 빼내려던 원칙이 정확히 그거였습니다. "최고의 코드는 아예 짜지 않은 코드"라는 말은, 도구를 들일 때도 똑같이 적용됩니다. 상자가 편해 보여도, 제게 필요한 게 부품 하나라면 그 하나만 가져오면 됩니다.
댓글
댓글 쓰기