byteforce

CPN 한국어 자습서 · 러닝패스 1 / 4 — Agent Skills

5장

스킬 공유하기

Introduction to agent skills · Sharing skills

스킬은 혼자 쓸 때보다 팀과 나눌 때 더 강해집니다. 나만 쓰는 PR 리뷰 스킬도 도움이 되지만, 팀 전체가 같은 스킬로 리뷰하면 기준이 통일됩니다. 이 장에서는 스킬을 공유하는 세 가지 방법과, 작업을 위임하는 서브에이전트에 스킬을 연결하는 방법을 살펴봅니다. 낯선 단어가 나와도 괜찮습니다 — 바로 아래에서 풀어 둡니다.

이 장에서 배우는 것What you'll learn

약 30분
1

스킬을 저장소에 커밋해 팀과 공유하기

2

플러그인·마켓플레이스로 여러 프로젝트에 배포하기

3

엔터프라이즈 관리 설정으로 조직 전체에 배포하기

4

커스텀 서브에이전트에 스킬을 연결해 위임 작업에 적용하기

이 자습서를 보는 법

영어 영상을 먼저 본 뒤, 여기서 한국어로 따라 읽고 손으로 익히는 교재입니다. 점선 친 단어는 올리거나 탭하면 뜻이 나오고, 아래쪽엔 개념을 직접 눌러 보는 위젯이 있습니다. 읽은 만큼 ‘완료’를 누르면 위 진도 바가 찹니다.

실습 환경

먼저, 이 장에 나오는 낯선 단어
저장소 (Repository)
코드와 설정을 함께 보관하고 여러 사람이 같이 쓰는 곳입니다. 보통 Git으로 관리합니다.
커밋 · 푸시 · 풀 · 클론 (Git 동작)
변경을 저장(커밋), 원격에 올리기(푸시), 원격에서 받기(풀), 원격 저장소를 통째로 복제(클론). 평소 협업하던 방식 그대로입니다.
플러그인 (Plugin) · 마켓플레이스
플러그인은 Claude Code에 기능을 더하는 꾸러미이고, 마켓플레이스는 그 꾸러미를 올리고 내려받는 장터입니다.
서브에이전트 (Subagent)
큰 작업의 일부를 따로 맡기는 보조 일꾼입니다. 메인 대화와 분리된, 깨끗한 기억 공간에서 시작합니다.
관리 설정 (Managed settings)
조직 관리자가 구성원 전체에 적용하는 설정입니다. 엔터프라이즈 배포에 쓰입니다.

스킬은 나눌 때 강해진다

잘 만든 스킬을 나 혼자만 쓰면 효과가 거기서 멈춥니다. 같은 스킬을 팀이나 조직이 함께 쓰면, 모두가 같은 기준으로 일하게 됩니다.

예를 들어 PRPull Request. 코드 변경 사항을 팀에 제안해, 합치기 전에 검토받는 단위. 리뷰 스킬을 팀 전체가 쓰면, 누가 리뷰하든 같은 항목을 같은 방식으로 점검합니다. 이 장에서는 공유 범위에 따라 세 가지 방법을 살펴봅니다.

그리고 마지막으로, 작업을 위임하는 서브에이전트에 스킬을 연결하는 방법까지 다룹니다.

영상 내용, 한국어로

Video walkthrough

먼저 영상을 보세요. 영어가 어렵다면 아래 한국어를 같이 읽으면 됩니다. 자동 번역과 달리, 낯선 용어를 풀어서 옮겼습니다.

영상 · Sharing skills약 4분 · 영어코스에서 영상 보기 →

영상 대본 — 영어 영상을 보며 같이 읽으세요 (타임스탬프 기준).

0:02스킬은 공유할 때 더 가치가 커집니다.
0:05나만 쓰는 PR 리뷰 스킬도 도움이 되지만, 같은 스킬을 팀 전체가 쓰면 코드 리뷰 기준이 통일되고 조직 전체가 일관된 경험을 갖게 됩니다. 훨씬 낫죠.
0:16스킬을 공유하는 방법들을 살펴보겠습니다.
0:20가장 간단한 방법은 스킬을 저장소에 커밋하는 것입니다. .claude/skills 폴더에 넣으세요.
0:27그 저장소를 클론하는 사람은 누구나 이 스킬을 자동으로 받습니다. 따로 설치할 필요가 없어요 — 평소 하던 작업 그대로입니다. 업데이트를 푸시하면, 다음 풀에서 모두에게 전달됩니다.
0:38팀 코딩 표준, 프로젝트 전용 작업 흐름, 코드베이스 구조를 참고하는 스킬에 잘 맞습니다.
0:47또 다른 방법은 플러그인으로 배포하는 것입니다. 플러그인은 Claude Code에 기능을 더하는 꾸러미인데, 여러 팀과 프로젝트가 나눠 쓰도록 설계된 것입니다.
1:01플러그인 프로젝트 안에 skills라는 폴더를 만듭니다. 프로젝트의 .claude 폴더와 비슷한 구조로, 스킬 이름 폴더 안에 SKILL.md 파일을 둡니다.
1:13플러그인을 마켓플레이스에 배포하면, 다른 사람들이 자기 Claude Code로 내려받아 쓸 수 있습니다.
1:20스킬이 특정 프로젝트에만 묶이지 않고 커뮤니티에서도 쓸 만할 때 가장 좋은 방법입니다.
1:30관리자는 관리 설정을 통해 조직 전체에 스킬을 배포할 수 있습니다. 엔터프라이즈 스킬이 가장 높은 우선순위를 가집니다.
1:38앞에서 본 것처럼, 같은 이름이면 개인·프로젝트·플러그인 스킬을 덮어씁니다. 필수 표준, 보안 요구사항, 컴플라이언스 작업 흐름,
1:47조직 전체에서 반드시 일관돼야 하는 코딩 관행에 씁니다. 핵심어는 ‘반드시’입니다. 여기서 많은 분이 놀라는 점이 있습니다.
1:56서브에이전트는 여러분의 스킬을 자동으로 보지 못합니다. 작업을 서브에이전트에 위임하면, 그 에이전트는 메인 대화와 분리된
2:03깨끗한 컨텍스트에서 시작합니다. Explorer·Plan·Verify 같은 내장 에이전트는 스킬에 아예 접근할 수 없습니다. 여러분이 정의한
2:10커스텀 서브에이전트만 스킬을 쓸 수 있고, 그것도 명시적으로 적어 줬을 때만입니다. 스킬을 가진 커스텀 서브에이전트를 만들려면 .claude/agentsagent.md 파일을 두고, skills 필드에 불러올 스킬을 적습니다.
2:22이 스킬들은 메인 대화처럼 필요할 때 불러오는 게 아니라, 서브에이전트가 시작할 때 한꺼번에 로드됩니다. 이 점을 염두에 두세요.
2:35먼저 스킬이 실제로 있는지 확인합니다. 있다면, Claude Code의 서브에이전트 생성기로 새로 만들거나, 이미 있는 서브에이전트라면 그 agent.md 파일로 갑니다.
2:47거기에 skills 필드를 만들고 스킬을 추가합니다. 이 서브에이전트에 작업을 위임하면, 적어 둔 스킬이 모두 로드된 상태로 모든 리뷰에 적용됩니다.
2:58이 방식은 특정 전문성을 가진, 독립된 작업을 위임하고 싶을 때 잘 맞습니다.
3:05서브에이전트마다 필요한 스킬이 다를 수 있습니다 — 프런트엔드 리뷰어와 백엔드 리뷰어처럼요. 프롬프트에 의존하지 않고 위임한 작업에도 표준을 강제하고 싶을 때 유용합니다.
3:13단, 그 서브에이전트의 목적에 ‘항상’ 필요한 스킬만 적으세요.
3:21정리하면, 팀이 함께 쓰려면 프로젝트 디렉터리로, 여러 저장소에 배포하려면 플러그인으로, 조직 전체 표준에는 엔터프라이즈 배포로 공유합니다.
3:29서브에이전트는 스킬을 자동으로 물려받지 않으므로 skills 필드에 명시적으로 적습니다. 내장 에이전트는 접근할 수 없고, .claude/agents의 커스텀 서브에이전트만 가능합니다. 스킬은 시작할 때 로드되니, 목적에 항상 필요한 스킬만 적으세요.

저장소로 공유하기

Commit to your repository

가장 간단한 방법입니다. 스킬을 .claude/skills 폴더에 두고 커밋변경 사항을 저장소에 기록하는 Git 동작.·푸시기록한 변경을 원격 저장소(GitHub 등)에 올리는 동작.하면 됩니다. 그 저장소를 클론하는 사람은 누구나 별도 설치 없이 스킬을 함께 받습니다.

스킬을 고쳐서 다시 푸시하면, 팀원은 다음 에서 자동으로 최신 버전을 받습니다. 새로 배포하거나 따로 안내할 필요가 없습니다. .claude 폴더에는 스킬뿐 아니라 에이전트·훅·설정이 함께 들어 있어, 평소 쓰던 Git 흐름 그대로 버전 관리되고 공유됩니다.

한눈에

이 방법은 팀 코딩 표준, 프로젝트 전용 작업 흐름, 코드베이스 구조를 참고하는 스킬에 잘 맞습니다. 같은 저장소를 쓰는 사람들에게 곧바로 퍼집니다.

저장소 공유 흐름 — 커밋·푸시·클론·풀로 스킬이 어떻게 퍼지는지 단계별로 눌러 보세요.

직접 해보기 · 저장소로 공유

[다음 단계]를 누르면 스킬이 내 컴퓨터 → 원격 저장소 → 팀원으로 퍼지고, 수정한 버전이 어떻게 전달되는지 보입니다.


        

내 컴퓨터.claude/skills

원격 저장소GitHub 등

팀원.claude/skills

직접 해보기 내 저장소에 스킬 올리기

스킬을 .claude/skills에 둔 다음, 평소처럼 커밋·푸시합니다.

팀원이 git pull 하면, 별도 설치 없이 같은 스킬을 받습니다.

저장소 작업은 PC(Claude Code·Git) 전용입니다. 위 단계 위젯으로 흐름을 익혀 두고, PC에서 직접 확인해 보세요.

플러그인으로 배포하기

Distribute through plugins

플러그인Claude Code에 기능을 더하는 꾸러미. 여러 팀·프로젝트가 나눠 쓰도록 설계된 것.은 한 저장소를 넘어 여러 프로젝트·팀·커뮤니티에 스킬을 나눌 때 씁니다. 플러그인 프로젝트 안에 skills 폴더를 만들고, 프로젝트의 .claude 폴더와 같은 구조로 스킬을 둡니다.

플러그인 안의 스킬 구조 — 스킬 이름 폴더 안에 SKILL.md.

my-plugin/
├─ .claude-plugin/
│  └─ plugin.json      ← 플러그인 정보
└─ skills/             ← 여기에 스킬을 둡니다
   └─ pr-review/
      └─ SKILL.md

이 플러그인을 마켓플레이스플러그인을 올리고 내려받는 장터.에 배포하면, 다른 사람들이 자기 Claude Code로 내려받아 씁니다.

핵심

스킬이 특정 프로젝트에만 묶이지 않고 커뮤니티에서도 쓸 만할 때 가장 좋은 방법입니다.

엔터프라이즈 관리 설정

Enterprise managed settings

조직 관리자조직 전체의 설정을 관리하는 권한을 가진 사람.관리 설정을 통해 조직 전체에 스킬을 배포할 수 있습니다. 엔터프라이즈 스킬은 가장 높은 우선순위를 가집니다 — 같은 이름이면 개인·프로젝트·플러그인 스킬을 덮어씁니다.

관리 설정 예시 — 정확한 필드 이름은 공식 문서를 따르세요.

managed-settings.json
관리자 전용 · 조직 전체 적용
1
2
3
4
5
6
7
8
{
  "extraKnownMarketplaces": {
    "company": {
      "source": { "source": "git", "url": "https://github.com/acme/skills" }
    }
  },
  "enabledPlugins": ["secure-standards@company"]
}

여기에 들어가는 표준은 반드시 지켜야 하는 것입니다 — 필수 표준, 보안 요구사항, 컴플라이언스 작업 흐름, 조직 전체에서 일관돼야 하는 코딩 관행. 핵심어는 ‘반드시’입니다. 관리자는 플러그인을 어떤 마켓플레이스에서 받을 수 있는지도 함께 정할 수 있습니다.

쉽게 말하면

같은 이름의 스킬이 여러 곳에 있어도, 엔터프라이즈가 항상 이깁니다. 조직 차원의 규칙을 위에서 정해 두는 셈입니다.

어떤 방법을 고를까

Choosing a method

세 방법은 공유 범위로 갈립니다. 같은 저장소면 커밋, 여러 곳에 널리 나누면 플러그인, 조직 전체에 강제하면 엔터프라이즈입니다. 아래에서 상황을 골라, 어떤 방법이 맞는지 확인해 보세요.

직접 해보기 · 공유 방법 고르기

상황을 고르면, 맞는 공유 방법이 켜지고 이유가 표시됩니다.

저장소에 커밋.claude/skills/추천

같은 저장소를 클론·풀한 사람 모두에게 자동으로 전달됩니다.

플러그인 → 마켓플레이스skills/<이름>/SKILL.md추천

내려받은 누구나 쓸 수 있어, 여러 프로젝트·커뮤니티에 배포하기 좋습니다.

엔터프라이즈 관리 설정관리자 배포추천

조직 전체에 적용되고, 같은 이름이면 다른 스킬을 덮어쓰는 최우선입니다.

서브에이전트와 스킬

Skills and subagents

여기서 많은 분이 놀랍니다. 서브에이전트큰 작업의 일부를 따로 맡기는 보조 일꾼. 메인 대화와 분리된 깨끗한 컨텍스트에서 시작합니다.는 여러분의 스킬을 자동으로 물려받지 않습니다. 작업을 위임하면 메인 대화와 분리된, 깨끗한 컨텍스트에서 시작하기 때문입니다.

커스텀 서브에이전트는 .claude/agentsagent.md 파일로 정의하고, skills 필드에 불러올 스킬을 적습니다.

agent.md — code-reviewer
.claude › agents › code-reviewer.md
1
2
3
4
5
6
7
8
9
---
name: code-reviewer
description: Reviews pull requests for code quality and security.
skills:
  - pr-review
  - security-checklist
---

You are a code reviewer. Apply the loaded skills to every review.

이 서브에이전트에 작업을 위임하면, skills에 적은 스킬이 모두 로드된 채 모든 리뷰에 적용됩니다. 아래에서 에이전트 종류를 바꿔 가며 직접 위임해 보세요.

서브에이전트 스킬 시뮬레이터 — 내장 vs 커스텀, 그리고 skills에 무엇을 넣는지에 따라 결과가 달라집니다.

직접 해보기 · 서브에이전트와 스킬

에이전트 종류를 고르고, 커스텀이라면 skills에 넣을 스킬을 켠 뒤 [위임]하세요.

내장 에이전트는 스킬에 접근할 수 없습니다.

Explorer·Plan·Verify는 스킬을 불러오지 못합니다. 스킬을 쓰려면 커스텀 서브에이전트를 만들어야 합니다.

ExplorerPlanVerify

skills 필드에 넣을 스킬 (서브에이전트 시작 시 로드)

skills: 

내장(Explorer) 탭으로 바꿔 같은 작업을 위임해 보세요 — 스킬이 하나도 로드되지 않습니다. 또 커스텀에서 스킬을 모두 끄면, 명시하지 않은 셈이라 역시 아무것도 안 올라옵니다.

서브에이전트에는 그 목적에 ‘항상’ 필요한 스킬만 적으세요. 프런트엔드 리뷰어와 백엔드 리뷰어는 서로 다른 스킬이 필요할 수 있습니다.

한 줄 정리

스스로 점검

Check yourself

정답을 먼저 떠올려 본 뒤 골라 보세요. 맞히면 설명이 나옵니다.

Q1스킬을 저장소(.claude/skills)에 커밋하면, 그 저장소를 클론한 팀원은 어떻게 되나요?

Q2엔터프라이즈(관리 설정) 스킬과 같은 이름의 개인 스킬이 있으면 어떻게 되나요?

Q3서브에이전트와 스킬의 관계로 맞는 것은?

생각해보기

LAB · 실습 콘솔SUBAGENT SKILLS

서브에이전트 스킬 가시성

서브에이전트가 시작할 때 실제로 로드하는 스킬만 남기고, 무엇이 걸러지는지 규칙대로 확인합니다.

index.js
// 서브에이전트 스킬 가시성 — 많은 분이 놀라는 규칙이다.
// 서브에이전트는 여러분의 스킬을 '자동으로' 보지 못한다.
//  · 내장 에이전트(Explorer·Plan·Verify)는 스킬에 접근할 수 없다.
//  · 커스텀 서브에이전트는 자기 skills 필드에 '명시적으로' 적은 스킬만 쓴다.
//  · 그 스킬들은 필요할 때 불려 오는 것이 아니라, 시작할 때 한꺼번에 로드된다.

// 서브에이전트 하나가 실제로 로드하는 스킬을 계산한다.
// available = .claude/skills 에 실제로 존재하는 스킬 이름들.
function resolveSkills(agent, available) {
  // 내장 에이전트 — skills 필드가 있어도 무시된다. 접근 자체가 막혀 있다.
  if (agent.type === "built-in") {
    return { loaded: [], missing: [], note: "내장 에이전트는 스킬에 접근할 수 없습니다" };
  }
  // 커스텀 — 명시한 스킬 중 실제로 존재하는 것만 로드, 없는 이름은 경고.
  const listed = agent.skills || [];
  const loaded = listed.filter(function (n) { return available.indexOf(n) !== -1; });
  const missing = listed.filter(function (n) { return available.indexOf(n) === -1; });
  return { loaded: loaded, missing: missing, note: null };
}

// ── 여기서부터 직접 고쳐 보세요 ──
// .claude/skills 에 실제로 있는 스킬들.
const available = ["pr-review", "commit-message", "brand-guide"];

// 서브에이전트 정의. type이 built-in이면 skills 필드를 적어도 소용없습니다.
// custom 에이전트의 skills 목록을 고쳐, 무엇이 로드되는지 확인해 보세요.
const agents = [
  { name: "Explorer",          type: "built-in" },
  { name: "frontend-reviewer", type: "custom", skills: ["pr-review", "brand-guide"] },
  { name: "backend-reviewer",  type: "custom", skills: ["pr-review", "typo-lint"] },
];
// ── 여기까지 ──

agents.forEach(function (agent) {
  const r = resolveSkills(agent, available);
  const kind = agent.type === "built-in" ? "내장" : "커스텀";
  console.log(agent.name + " (" + kind + ")");
  if (r.note) {
    console.log("  → 로드되는 스킬 없음 — " + r.note);
  } else if (r.loaded.length === 0) {
    console.log("  → 로드되는 스킬 없음 — skills 필드에 적은 스킬이 없습니다");
  } else {
    console.log("  → 시작할 때 로드: " + r.loaded.join(", "));
  }
  r.missing.forEach(function (n) {
    console.log("  ⚠ " + n + " — 존재하지 않는 스킬입니다. 이름을 확인하세요(로드되지 않음).");
  });
  console.log("");
});