tech-leads-club/agent-skills는 보안 검증을 거친 AI 에이전트 스킬만 모아둔 중앙 레지스트리 + 설치 CLI + MCP 서버다. npx @tech-leads-club/agent-skills 한 줄이면 19개 이상의 AI 코딩 에이전트(Claude Code, Cursor, Copilot 등) 어디에든 같은 스킬을 깔 수 있다.
SKILL.md 기반 패키지. YAML 머리말(frontmatter)에 이름·설명·허용 도구를 적고, 본문에 "이런 상황엔 이렇게 행동해라"를 적어둔다. 필요하면 templates/, references/ 폴더를 함께 묶는다. "AI 에이전트용 매크로 + 레시피 카드"라고 생각하면 된다.예전엔 GitHub에 떠도는 스킬을 git clone으로 복사해 ~/.claude/skills/에 넣어 썼다. 그런데 그렇게 떠도는 스킬의 13.4%에 치명적 취약점(프롬프트 인젝션·임의 코드 실행·시크릿 누출)이 있었다.
핵심은 "검증 + 한 줄 설치 + 다중 에이전트 배포" 세 가지다. 설치 패키지 관리자(npm)의 편의성에, 보안 스캐너(Snyk)의 검증을 끼워 넣은 게 이 레포의 정체성이다.
① 출처 검증 없음: README에 "안전합니다"라고 적혀 있어도 확인할 방법이 없다. ② 업데이트 수동: 원본이 바뀌어도 모른다. 5개 스킬이면 5번 git pull. ③ 다중 에이전트 지옥: Claude Code는 .claude/skills/, Cursor는 .cursor/rules/, Copilot은 .github/copilot-instructions.md... 같은 스킬을 19곳에 따로 깔아야 한다.
레포에 들어오는 모든 스킬은 PR 단계에서 Snyk Agent Scan(구 mcp-scan)을 통과해야 머지된다. 머지 후엔 콘텐츠 해시 + 락파일로 다운로드 변조까지 막는다. npx 한 줄이면 어댑터가 에이전트별 폴더 형식에 맞게 알아서 배치한다.
Snyk 보안 연구진이 ClawHub·skills.sh에 올라온 3,984개 스킬을 전수 조사(2026-02-05 기준)한 결과, 13.4%(534개)가 최소 1개 이상의 치명적 보안 이슈(멀웨어 배포·프롬프트 인젝션·시크릿 노출)를 가졌다. "별 많이 받은 레포니까 괜찮겠지"가 통하지 않는다는 게 핵심이다.
| 비교 항목 | git clone 방식 | agent-skills |
|---|---|---|
| 출처 검증 | 없음 (직접 코드 읽어야) | PR마다 Snyk Agent Scan 통과 강제 |
| 변조 탐지 | 없음 | 콘텐츠 해시(SHA-256) + 락파일 |
| 업데이트 | 스킬별 수동 git pull | agent-skills update 한 번 |
| 다중 에이전트 | 19곳 수동 복사 | 어댑터가 형식 변환·자동 배치 |
| 재현성 | 없음 | 락파일로 팀 전체 동일 환경 |
| LLM 자율 검색 | 불가 | MCP 서버로 LLM이 직접 검색·설치 |
※ 비율은 GitHub 언어 통계 기준이며 시점에 따라 변동될 수 있음.
| 기술 | 역할 | 상세 |
|---|---|---|
| TypeScript | 핵심 언어 | CLI, MCP 서버, 어댑터를 타입 안전하게 구현 |
| Nx 모노레포 | 빌드 오케스트레이션 | CLI·MCP·카탈로그·문서를 한 레포에. 의존 그래프 캐싱(NX Cloud)으로 변경분만 재빌드 |
| Node.js | 런타임 | CLI: 22 이상 / MCP 서버·모노레포 빌드: 24 이상. npx로 실행 |
| Jest | 테스트 | 단위/통합 테스트 러너 |
| semantic-release | 배포 자동화 | 커밋 컨벤션 기반 자동 버전·릴리스 |
| MCP 서버 | LLM 연동 | stdio 위에서 카탈로그 검색 도구를 LLM에 노출 (읽기 전용) |
스킬 한 개는 디렉토리 하나다. 그 안의 SKILL.md가 본체이고, 보조 폴더가 따라붙는다.
# SKILL.md — YAML frontmatter + 마크다운 본문
---
name: aws-advisor
description: AWS 리소스 보안·비용을 점검할 때 사용
allowed-tools: [Bash, Read, Grep]
---
# 이 아래는 LLM이 따라야 할 행동 지침(자연어)
사용자가 AWS 점검을 요청하면:
1. `aws s3api get-bucket-policy`로 버킷 정책 확인
2. 퍼블릭 접근 차단 설정을 검사
3. 발견한 리스크를 표로 정리해 보고
| 계층 | 장치 | 막는 것 |
|---|---|---|
| PR 시점 | Snyk Agent Scan + 정적 분석(CI) | 악성 스킬이 레포에 들어오는 것 |
| 다운로드 | 콘텐츠 해시(SHA-256) | 전송 중 변조·바꿔치기 |
| 설치 | 경로 격리 · 심볼릭 링크 가드 | 설치 폴더 밖 쓰기, 디렉토리 탈출 |
| 재현 | 락파일(content-addressable) | 팀원 간 환경 불일치 |
| 운영 | 감사 로그(audit trail) | "누가·언제·뭘 깔았는지" 추적 불가 |
모든 스킬은 이름이 아니라 내용의 해시값으로 식별된다. 같은 내용이면 같은 ID, 한 글자라도 다르면 다른 ID.
사람을 이름으로 식별하면 동명이인이 있다. 지문으로 식별하면 절대 겹치지 않는다.
콘텐츠 해시는 파일의 지문이다. 누가 중간에 바꿔치기해도 지문이 달라지므로 즉시 들통난다. Git, 도커 이미지, IPFS 모두 같은 발상이다.
에이전트마다 폴더 구조가 제각각이다. 이걸 switch 폭주 없이 깔끔하게 분리하는 게 어댑터 패턴이다. GoF 디자인 패턴 교과서에 나오는 그대로다.
보안의 기본 원칙은 "한 줄 방어선에 의존하지 마라"다. 콘텐츠 해시가 우회돼도 심볼릭 링크 가드가 디렉토리 탈출을 막고, 그것도 뚫려도 감사 로그가 사후 추적을 가능하게 한다. PR 게이트 → 다운로드 검증 → 설치 격리 → 운영 로그까지 겹겹이 쌓아 한 겹이 뚫려도 다음 겹에서 막는다.
스킬 디렉토리 표준: SKILL.md(본체, YAML frontmatter + 지침) + templates/(파일 템플릿) + references/(참고 문서). 경로는 packages/skills-catalog/skills/(category)/(skill)/ 형태로 카테고리별로 나뉜다.
배울 것: CLI + MCP 서버 + 카탈로그 + 문서를 한 레포에 모으고도 빌드가 빠른 이유 — 의존 그래프 기반 캐싱으로 변경된 부분만 다시 빌드한다. 여러 패키지를 한 곳에서 버전·릴리스까지 일관되게 관리하는 법.
배울 것: LLM이 직접 호출할 수 있는 도구를 stdio 위에 노출하는 패턴. 읽기 전용·로컬·경로 검증으로 위협 표면을 좁게 설계하는 방법. 한 번 만들면 Claude·Cursor·VS Code가 같은 도구를 쓴다.
배울 것: 콘텐츠 해시(SHA-256) + 락파일로 "이 파일이 진짜 그 파일인가"를 보장하는 법. Git·도커·npm 락파일이 쓰는 바로 그 발상을 직접 구현으로 본다.
배울 것: 19개 에이전트마다 다른 폴더 구조를, switch 폭주 없이 공통 인터페이스 하나로 흡수하는 GoF 어댑터 패턴. 새 에이전트 = 어댑터 1개 추가(OCP, 개방-폐쇄 원칙)의 실전 예.
배울 것: PR 게이트(Snyk Scan) → 다운로드 검증 → 설치 격리 → 감사 로그로 이어지는 다층 방어(Defense in Depth)의 실제 코드. "별 많이 받은 레포 = 안전"이 왜 틀렸는지, 무엇으로 대체해야 하는지.
배울 것: npx 한 줄 실행, 인터랙티브 위저드, 락파일 기반 재현, semantic-release 기반 자동 버전·배포까지 — 사람이 쓰기 좋은 CLI를 만드는 표준 흐름.
| 항목 | 요구 | 비고 |
|---|---|---|
| Node.js | CLI: 22 이상 / MCP 서버·모노레포: 24 이상 | 패키지별 요구 버전이 다름. MCP 서버나 모노레포 전체 빌드를 돌리려면 nvm install 24 필요 |
| 패키지 실행기 | npx (npm 동봉) | 별도 글로벌 설치 없이 npx로 바로 실행 |
| 대상 에이전트 | 1개 이상 | Claude Code, Cursor, Copilot, Windsurf, Cline 등 |
| 네트워크 | 인터넷 연결 | CDN에서 카탈로그·스킬 다운로드 |
| OS | macOS / Linux / Windows | Node가 도는 곳이면 동작 |
| (선택) Git | 2.x+ | 락파일을 팀과 공유해 환경 재현 시 |
| 티어 | 에이전트 |
|---|---|
| 인기 | Claude Code, Cline, Cursor, GitHub Copilot, Windsurf |
| 신흥 | Aider, Antigravity, Gemini CLI, Kilo Code, Sourcegraph Cody, Tabnine |
| 엔터프라이즈 | Amazon Q, Augment, Droid (Factory.ai), OpenCode, Roo Code, TRAE |
※ 지원 목록은 README 기준이며 계속 추가되는 중. 정확한 최신 목록은 레포 README 확인.
npx @tech-leads-club/agent-skills를 실행해 위저드에서 aws-advisor 같은 스킬을 Claude Code에 글로벌 설치한다. 그 뒤 에이전트에게 "내 AWS S3 보안 한번 봐줘"라고 물어 스킬이 작동하는지 확인.
# 1. 어디에 깔렸나
ls ~/.claude/skills/
# 2. 스킬 본체 열어보기 (frontmatter 구조 관찰)
cat ~/.claude/skills/aws-advisor/SKILL.md
# 3. 락파일 — 버전·해시가 고정돼 있는지
cat .agents/.skill-lock.json
agent-skills audit로 최근 설치 이력을 출력해 어떤 정보가 기록되는지 분석한다. 이어 .agents/.skill-lock.json을 git에 커밋해 팀원에게 공유하고, 팀원이 agent-skills install만으로 정확히 같은 환경을 재현하는지 확인.
Claude Desktop의 claude_desktop_config.json에 @tech-leads-club/agent-skills-mcp를 등록한다. 그러면 LLM이 직접 카탈로그를 검색·설치할 수 있게 된다. "브라우저 자동화 스킬 깔아줘"라고 말로 시켜보자.
# claude_desktop_config.json
{
"mcpServers": {
"agent-skills": {
"command": "npx",
"args": ["-y", "@tech-leads-club/agent-skills-mcp"]
}
}
}
자기가 반복하는 작업 하나를 SKILL.md로 적어 레포에 PR을 보낸다. validate와 Snyk Agent Scan을 통과시키며 공급망 보안 감각을 직접 익힌다.
# my-skill/SKILL.md
---
name: changelog-writer
description: 커밋 로그로 CHANGELOG 항목을 만들 때 사용
allowed-tools: [Bash, Read, Edit]
---
사용자가 릴리스 노트를 요청하면:
1. `git log --oneline 직전태그..HEAD` 수집
2. feat/fix/docs로 분류
3. 사용자 친화 문장으로 CHANGELOG.md 상단에 추가
| 요일 | 학습 내용 | 실습 |
|---|---|---|
| 월 | 에이전트 스킬이란 무엇인가 | SKILL.md frontmatter 구조 읽기 |
| 화 | npx 설치 & 위저드 | aws-advisor를 Claude Code에 설치 |
| 수 | 설치 폴더·락파일 구조 | ~/.claude/skills/, .skill-lock.json 관찰 |
| 목 | update/remove/list 명령 | 스킬 갱신·제거·목록 확인 |
| 금 | 감사 로그 읽기 | agent-skills audit 분석 |
| 요일 | 학습 내용 | 실습 |
|---|---|---|
| 월 | 공급망 보안 개념 | Snyk ToxicSkills 보고서 읽기 |
| 화 | 콘텐츠 해시 / 무결성 | SHA-256으로 파일 지문 직접 계산 |
| 수 | 다층 방어 설계 | PR→다운로드→설치→운영 계층 정리 |
| 목 | 프롬프트 인젝션 이해 | 취약 스킬 예시 분석(방어 관점) |
| 금 | 락파일 기반 재현성 | 팀원과 동일 환경 재현 실험 |
| 요일 | 학습 내용 | 실습 |
|---|---|---|
| 월 | Nx 모노레포 구조 | packages/ 의존 그래프 그려보기 |
| 화 | Adapter 패턴 | 새 에이전트용 어댑터 의사코드 작성 |
| 수 | Progressive Disclosure | 메타데이터→본문→참조 로딩 흐름 추적 |
| 목 | CLI 코드 읽기 | install 명령 진입점부터 따라가기 |
| 금 | semantic-release | 커밋 컨벤션 → 자동 버전 규칙 이해 |
| 요일 | 학습 내용 | 실습 |
|---|---|---|
| 월 | MCP 프로토콜 개념 | MCP 공식 문서 읽기 |
| 화 | MCP 서버 등록 | Claude Desktop에 agent-skills-mcp 연결 |
| 수 | 읽기 전용 서버 설계 | 경로 검증·위협 표면 축소 분석 |
| 목 | 커스텀 스킬 작성 | SKILL.md 한 개 작성 + 로컬 검증 |
| 금 | PR & 보안 게이트 | 스킬 PR 제출, Snyk Scan 통과 |
| 키워드 | 설명 |
|---|---|
| 에이전트 스킬 | SKILL.md 기반으로 LLM 에이전트 동작을 확장하는 패키지. "AI용 매크로 + 레시피 카드" |
| SKILL.md | 스킬의 본체 파일. YAML frontmatter(이름·설명·허용 도구) + 행동 지침 본문 |
| frontmatter | 마크다운 맨 위 ---로 감싼 YAML 메타데이터 블록. 검색·로딩의 기준 |
| 레지스트리 | 검증된 스킬을 모아 둔 중앙 저장소. npm 레지스트리의 스킬 버전 |
| 어댑터(Adapter) | 에이전트마다 다른 폴더 형식으로 스킬을 변환·배치하는 모듈. GoF 어댑터 패턴 |
| Progressive Disclosure | 메타데이터→본문→참조 파일을 단계적으로만 로드해 토큰을 아끼는 기법 |
| 콘텐츠 해시 | 파일 내용의 SHA-256 지문. 이름이 아니라 내용으로 식별 = 변조 탐지 |
| Content-Addressable | 내용의 해시로 객체를 식별·저장하는 방식. Git·도커·IPFS와 동일 발상 |
| 락파일 | 설치된 스킬의 버전·해시를 고정 기록(.agents/.skill-lock.json). 환경 재현 보장 |
| 감사 로그(audit trail) | 누가·언제·뭘·어디에 설치했는지 영구 기록. 사고 시 추적 |
| 다층 방어(Defense in Depth) | PR→다운로드→설치→운영까지 여러 겹의 안전장치. 한 겹 뚫려도 다음 겹이 막음 |
| Snyk Agent Scan | 구 mcp-scan. PR마다 스킬의 인젝션·악성코드·시크릿 노출을 자동 검사 |
| 프롬프트 인젝션 | 스킬·문서에 숨긴 악성 지시로 LLM을 조종하는 공격. 대표적 스킬 취약점 |
| MCP | Model Context Protocol. LLM과 외부 도구를 잇는 표준(JSON-RPC 2.0). "에이전트의 USB-C" |
| Nx 모노레포 | 여러 패키지를 한 레포에 두고 의존 그래프 캐싱으로 변경분만 빌드하는 도구 |
| semantic-release | 커밋 메시지 컨벤션을 읽어 버전 결정·릴리스를 자동화하는 도구 |
| 심볼릭 링크 가드 | 설치 시 심볼릭 링크로 설치 폴더 밖을 건드리는 디렉토리 탈출을 차단 |