"한국 서비스 95개를 AI 에이전트가 대신 처리하게 해주는 사용 설명서 묶음"입니다. 우리가 쓰는 코레일·당근마켓·쿠팡·정부24·홈택스 같은 서비스는 전부 한국어이고, 공식 API가 없거나 인증이 까다롭습니다. ChatGPT·Claude 같은 글로벌 LLM은 이런 한국 특화 서비스를 "어떻게 다뤄야 하는지"를 모릅니다. k-skill은 각 서비스마다 "이 사이트는 이렇게 접근하면 된다"는 레시피를 문서(SKILL.md)와 코드로 만들어 에이전트에게 쥐여 줍니다. 그러면 에이전트가 그 문서를 읽고 직접 명령어를 실행해 일을 끝냅니다.
이름 'k-skill'은 'Korea(한국) + skill(스킬)'입니다. 핵심은 한국 특화 + Agent Skills 표준 + 경량 실행이라는 조합입니다. 만든 곳은 한국 AI 오픈소스 그룹 NomaDamas(RAG 평가 프레임워크 AutoRAG로 유명)이고, 라이선스는 MIT(누구나 자유 사용)입니다. Claude Code 사용자는 명령 한 줄(/plugin install)로 95개 스킬을 통째로 설치할 수 있습니다.
아주 유능한 외국인 비서를 새로 고용했다고 합시다. 영어 문서 정리, 코딩, 번역은 척척 해냅니다. 그런데 "SRT 예매해줘", "오늘 미세먼지 어때?", "당근에서 중고 자전거 찾아줘"라고 하면 막힙니다. 코레일 앱이 어떻게 생겼는지, 미세먼지 데이터를 어디서 받는지 모르니까요.
k-skill은 이 비서에게 "SRT는 이 사이트에서 이렇게, 미세먼지는 이 공공데이터에서 이렇게 가져온다"는 메뉴얼 95장을 한 번에 건네주는 것입니다. 비서는 이제 그 메뉴얼만 펼쳐 보고 한국 서비스를 막힘없이 처리합니다. 새 서비스가 생기면 메뉴얼 한 장만 더 끼워 넣으면 됩니다.
SKILL.md라는 설명 파일을 넣는 게 핵심이다. 에이전트는 사용자의 요청에 맞는 스킬을 골라 그 문서를 읽고, 안에 적힌 절차·명령어를 그대로 실행한다. k-skill은 이 표준을 따른 95개 스킬의 모음이다.2026년 들어 Claude Code·Codex·Gemini CLI 같은 에이전트형 도구가 대중화되면서, "스킬(skill)"이 가장 뜨거운 키워드가 됐습니다. TrendShift 트렌딩 상위권이 온통 '-skill' 레포로 채워질 정도입니다. 그 흐름 속에서 k-skill은 "한국인이라면 무조건 한 번은 쓸 일이 생긴다"는 명확한 타깃과, 95개라는 압도적 규모로 한국 AI 커뮤니티에서 화제가 됐습니다.
| 항목 | 직접 API 코딩 | 브라우저 자동화(스크래핑) | k-skill |
|---|---|---|---|
| 준비 작업 | 서비스마다 SDK·키 발급 | DOM 선택자 일일이 분석 | 스킬 설치 한 줄 |
| 한국 서비스 지원 | 거의 없음(영어권 위주) | 가능하나 깨지기 쉬움 | 95개 사전 패키징 |
| 유지보수 | 내가 다 떠안음 | 사이트 바뀌면 깨짐 | 커뮤니티가 함께 수선 |
| 키 관리 | 내 코드에 노출 위험 | 해당 없음 | 프록시가 서버에 은닉 |
| 에이전트 연동 | 직접 연결 코드 작성 | 별도 글루 코드 | 표준 스킬이라 자동 인식 |
| 안전장치 | 직접 설계 | 없음 | 결제·인증 가드레일 내장 |
코레일·KRX·NEIS·공공데이터포털·당근·쿠팡처럼 한국어이고 비표준이며 공식 API가 빈약한 서비스는 글로벌 에이전트가 가장 못 다루는 영역입니다. k-skill은 바로 이 빈틈을 95개 레시피로 메웁니다. "외국 도구로는 안 되던 한국 일"을 되게 만든 것이 인기 비결입니다.
k-skill은 두꺼운 클라이언트 라이브러리를 강요하지 않습니다. 각 SKILL.md에 에이전트가 그대로 실행할 bash·curl·python 블록이 들어 있어, 읽는 즉시 작동합니다. 의존성도 의도적으로 최소(핵심 npm 패키지는 의존성 0개, Node 내장 fetch만 사용)라 가볍고 깨질 일이 적습니다.
공공데이터포털 API는 키 발급이 번거롭습니다. k-skill은 k-skill-proxy라는 중계 서버를 두어, upstream API 키를 서버에만 숨기고 사용자는 키 없이 HTTP만 호출하게 합니다. "키 없이 미세먼지·날씨·지하철 도착 정보를 바로 받는" 경험은 다른 스킬 모음집에 없는 강점입니다.
k-skill은 서비스마다 가장 안정적인 통로를 고릅니다. ① 공식 MCP 서버가 있으면 그것을, ② API 키가 필요하면 프록시를, ③ 공개 endpoint면 사용자 컴퓨터에서 직접 호출합니다. 화면 스크래핑(브라우저 자동화)은 최후의 수단입니다. 덕분에 사이트가 조금 바뀌어도 잘 안 깨지고, 속도도 빠릅니다.
k-skill은 단일 언어 프로젝트가 아니라 Node.js(주력)와 Python이 한 저장소에 공존하는 다언어 모노레포입니다. 루트 package.json은 npm workspaces로 묶여 있고, 릴리스는 @changesets/cli로 자동화됩니다. 런타임 의존성은 의도적으로 최소화되어 있어, 프록시 서버만 fastify 하나에 의존하고 나머지 npm 스킬 패키지는 의존성 0개로 Node 18 내장 fetch만 씁니다.
| 레이어 | 기술 | 역할 |
|---|---|---|
| 스킬 표준 | Anthropic Agent Skills (SKILL.md + YAML frontmatter) | 모든 스킬의 공통 포맷 |
| 주력 언어 | Node.js ≥ 18 (npm workspaces) | 스킬 패키지·프록시 구현 |
| 보조 언어 | Python 3 (표준 라이브러리 위주) | scripts/ 의 단발 실행 스킬 |
| 프록시 서버 | Fastify 5 + Google Cloud Run | API 키 은닉·중계(50+ 라우트) |
| 비밀 관리 | GCP Secret Manager + WIF(OIDC) | upstream 키를 서버에만 보관 |
| 릴리스 자동화 | Changesets(npm) · release-please(Python) | 버전 bump·자동 publish |
| CI/CD | GitHub Actions | lint·test·프록시 자동 배포 |
| 배포 채널 | Claude Code 플러그인 · skills CLI · Manus.ai | 3가지 설치 경로 |
k-skill의 진짜 기술적 묘미는 "스킬마다 구현 방식이 다르다"는 점입니다. 가장 단순한 건 문서만 있는 스킬이고, 복잡한 건 별도 npm 패키지나 프록시 라우트를 갖습니다.
| 유형 | 구현 위치 | 동작 방식 | 예시 스킬 |
|---|---|---|---|
| SKILL.md 전용 | 스킬 폴더 1개 | 에이전트가 문서의 bash/python을 직접 실행 | srt-booking, kakaotalk-mac |
| npm 패키지 | packages/* | Node 라이브러리를 설치해 호출 | lotto-results(k-lotto) |
| 프록시 경유 | k-skill-proxy | 키 은닉 서버에 HTTP 요청 | fine-dust, seoul-subway |
| Python 스크립트 | scripts/*.py | 표준 라이브러리 스크립트 실행 | korean-spell-check, sillok |
packages/ 아래 여러 패키지를 한 번에 설치·관리하게 해준다. k-skill은 스킬 문서 95개 + npm 패키지 24개 + Python 스크립트를 한 저장소에 모아, 스킬끼리 공유 규칙(검증·릴리스)을 통일한다./v1/fine-dust/report)만 노출한다. 키 발급의 번거로움을 없애고, 키 유출도 막는다.k-skill의 동작을 한 문장으로 줄이면 이렇습니다. "에이전트가 요청에 맞는 SKILL.md를 골라 읽고, 그 안에 적힌 가장 안정적인 통로(직접 HTTP / 프록시 / MCP)로 한국 서비스를 호출한다." 무거운 미들웨어가 없는 대신, 각 스킬 문서가 "어디로 어떻게 호출하라"는 라우팅 지식을 품고 있는 구조입니다.
여기서 가장 중요한 설계 원칙은 "키가 필요할 때만 프록시"입니다. 공개 endpoint(예: 부동산 실거래가)는 사용자 컴퓨터에서 직접 호출하고, 공공데이터포털처럼 키가 있어야만 열리는 곳만 프록시를 거칩니다. 유료·개인 계정 API는 프록시 금지입니다. 이 규칙이 프록시 서버의 부하와 책임 범위를 좁게 유지합니다.
k-skill-proxy는 Fastify 기반 단일 서버로 Google Cloud Run(asia-northeast1, 서울 근처)에 떠 있습니다. 50개 이상의 /v1/... 라우트를 노출하며, 각 라우트는 upstream별 모듈(airkorea.js, krx-stock.js, kakao-map.js 등)로 분리돼 있습니다. 보안을 위해 허용 목록(allowlist)으로 호출 가능한 upstream 함수를 제한합니다.
// allowlist 예시 — 허용된 upstream 함수만 통과시킨다
const ALLOWED_AIRKOREA_ROUTES = new Map([
["MsrstnInfoInqireSvc", new Set([
"getMsrstnList", "getNearbyMsrstnList", "getTMStdrCrdnt",
])],
["ArpltnInforInqireSvc", new Set([
"getMsrstnAcctoRltmMesureDnsty", "getCtprvnRltmMesureDnsty",
])],
]);
// 목록에 없는 함수 호출은 거부 → upstream 키 오남용 차단
로또 확인(lotto-results)은 k-lotto라는 npm 패키지로 구현됩니다. 의존성 없이 Node 내장 fetch만으로 동행복권 공식 endpoint를 직접 호출합니다. 파싱 로직은 별도 파일로 분리하고, 실제 HTML/JSON 샘플을 fixture로 두어 node --test로 회귀 테스트합니다.
// packages/k-lotto/src/index.js (요지)
const LATEST_URL = "https://www.dhlottery.co.kr/lt645/result";
const DETAIL_URL = "https://www.dhlottery.co.kr/lt645/selectPstLt645InfoNew.do";
async function getLatestRound() {
const html = await fetchText(LATEST_URL);
return extractLatestRoundFromHtml(html); // HTML에서 최신 회차 추출
}
async function getDetailResult(round) {
const url = new URL(DETAIL_URL);
url.searchParams.set("srchLtEpsd", String(round));
return normalize(await fetchJson(url.toString())); // 공식 JSON endpoint
}
가장 핵심적인 발상입니다. SKILL.md 안에는 설명뿐 아니라 에이전트가 그대로 복붙해 실행할 명령 블록이 들어 있습니다. 로또 스킬의 경우:
# 0단계: 없으면 전역 설치 (다른 구현으로 우회 금지)
npm install -g k-lotto
export NODE_PATH="$(npm root -g)"
# 1단계: 최신 회차 조회
node - <<'JS'
const lotto = require("k-lotto");
lotto.getLatestRound().then((r) => console.log(r));
JS
스킬이 무거운 런타임 없이 "읽으면 바로 실행되는 문서"이기 때문에, ① 새 스킬 추가가 폴더+문서 하나로 끝나고 ② 에이전트 종류(Claude·Codex·Gemini)를 가리지 않으며 ③ 사람이 직접 읽고 검증하기도 쉽습니다. 각 SKILL.md는 Done when(완료 조건)·Failure modes(실패 모드)까지 명시해, 에이전트가 "성공했는지"를 스스로 판단하게 합니다.
예매·금융·정부 스킬은 위험이 큽니다. k-skill은 SKILL.md frontmatter와 본문에 "결제까지 자동화 금지 / 비밀번호를 채팅창에 직접 받지 말 것 / CAPTCHA·로그인은 사람이 직접" 같은 경계를 명시합니다. 비밀은 KSKILL_<서비스>_<항목> 환경변수 → 에이전트 vault → ~/.config/k-skill/secrets.env(권한 0600) 순으로 찾고, 없으면 사용자에게 물어봅니다. 심지어 "깃허브 스타도 에이전트가 자동으로 누르지 말고 사용자 동의 후에"라고 못박아, 에이전트의 자율 행동을 제한합니다.
저장소 루트에는 스킬 폴더 95개가 평면적으로 나열되고, 그와 별개로 공유 인프라(packages/, scripts/, docs/, .claude-plugin/)가 있습니다. 별도 레지스트리 파일 없이 "최상위에 SKILL.md를 가진 폴더 = 스킬"로 자동 발견하는 구조라, 폴더만 추가하면 곧 스킬이 됩니다.
주목할 점은 같은 스킬이라도 구현은 세 곳에 흩어질 수 있다는 것입니다. 예컨대 미세먼지 스킬은 ① 루트의 fine-dust-location/SKILL.md(에이전트가 읽는 매뉴얼), ② scripts/fine_dust.py(좌표→측정소 변환 등 실행 코드), ③ k-skill-proxy의 /v1/fine-dust/report 라우트(키 은닉 중계)로 구성됩니다. "문서·실행·인프라"가 역할별로 분리된 설계입니다.
plugin.json은 이 플러그인이 제공하는 스킬 목록(95개)을 적고, marketplace.json은 "이 저장소를 플러그인 마켓으로 등록"하는 정의다. 사용자가 /plugin install k-skill를 치면 이 파일들을 읽어 95개 스킬을 한 번에 설치한다. 이 매니페스트는 generate:plugin-manifest 스크립트로 자동 생성된다.k-skill은 Anthropic Agent Skills 표준(SKILL.md frontmatter)의 대규모 실전 교본입니다. 95개 스킬을 비교하며 읽으면, 좋은 스킬 description(에이전트가 정확히 골라내게 하는 문구), When to use / When not to use의 경계 설정, Done when·Failure modes로 완료/실패를 정의하는 법을 익힐 수 있습니다.
srt-booking과 lotto-results의 SKILL.md를 나란히 열고, frontmatter 필드와 본문 섹션 구조가 어떻게 같고 다른지 표로 정리해 보세요. 내가 만들 스킬의 템플릿이 됩니다.k-skill-proxy를 파면 "민감한 키를 클라이언트에 노출하지 않는" 실전 패턴을 배웁니다. Fastify 라우팅, allowlist로 호출 범위 제한, GCP Secret Manager, Cloud Run 배포, /health 스모크 테스트까지 — 작은 코드베이스에 보안 프록시의 정석이 담겨 있습니다.
/v1/rate로 중계하는 미니 Fastify 프록시를 직접 만들어 보세요. allowlist도 흉내 내 봅니다.k-skill의 기여 가이드는 "화면 구조를 감으로 고정하지 말라"고 강조합니다. 공식 API → 공개 JSON → RSS/sitemap → 모바일 페이지 순으로 안정적인 입구를 먼저 찾고, 화면 스크래핑은 최후로 미룹니다. 이 방법론은 모든 크롤링·자동화 작업에 그대로 전이됩니다.
npm 패키지 24개를 어떻게 일관되게 버전 올리고 배포하는지(Changesets), 프록시가 main 병합 시 어떻게 자동 재배포되는지(GitHub Actions + WIF) 살펴보면, 오픈소스 운영의 자동화 파이프라인을 통째로 배웁니다.
.changeset/ 폴더의 메모 파일 하나를 열어보고, 그게 어떻게 "Version Packages" PR과 npm publish로 이어지는지 docs/releasing.md로 흐름을 따라가 보세요.| 항목 | 요구사항 |
|---|---|
| 에이전트 | Claude Code(권장) · Codex · OpenCode 등 Agent Skills 지원 도구 |
| Node.js | 18 이상(engines 명시). npm 패키지형 스킬 실행에 필요 |
| Python | Python 3 — scripts/ 스킬 실행 시(표준 라이브러리 위주, 일부는 pip install 안내) |
| OS | macOS · Windows · Linux. 단 kakaotalk-mac 등 일부는 macOS 전용 |
| 네트워크 | 대부분 외부 서비스 호출 → 인터넷 필수 |
| 메모리/CPU | 스킬 자체는 매우 가벼움(문서+경량 스크립트) — 사양 부담 거의 없음 |
| 계정/키(일부) | SRT·토스증권·DART 등 "로그인 필요" 스킬은 본인 계정·발급 키 필요 |
| 브라우저(일부) | catchtable-sniper 등은 Chrome MCP + 로그인 세션 필요 |
k-skill 자체는 사양을 거의 안 탑니다. 진짜 주의할 건 로그인·결제·개인정보가 얽힌 스킬입니다. 비밀번호는 채팅창에 직접 넣지 말고 환경변수/시크릿 파일로 관리하고, 예매·송금 같은 비가역 작업은 "결제 직전 사람이 확인"하는 흐름을 지켜야 합니다. 공공/유료 API는 호출 한도·요금이 있으니 본인 키 사용 시 사용량도 챙기세요.
Claude Code에서 /plugin marketplace add NomaDamas/k-skill → /plugin install k-skill@k-skill로 설치한 뒤, /k-skill:lotto-results로 최신 로또 당첨 번호를 조회해 보세요. 키도 로그인도 필요 없는 스킬부터 시작하는 게 핵심입니다.
fine-dust-location/SKILL.md를 열어 frontmatter, When to use, Workflow, Failure modes를 한 줄씩 읽어보세요. 그리고 실제로 미세먼지를 조회해 본 뒤, "문서에 적힌 절차"와 "에이전트가 실제로 한 일"이 어떻게 맞아떨어지는지 비교합니다.
docs/adding-a-skill.md를 따라, 좋아하는 한국 공개 서비스(예: 특정 도서관 신착도서, 동네 행사 정보)를 위한 새 스킬 폴더와 SKILL.md를 작성해 보세요. site-agnostic discovery로 공개 endpoint를 먼저 찾고, 실행 블록과 실패 모드를 채웁니다.
k-skill-proxy의 라우트 하나(예: fine-dust)를 본떠, 무료 공개 API를 키 없이 중계하는 Fastify 프록시를 직접 만들고 로컬에서 띄워 보세요. allowlist로 허용 함수를 제한하고, /health 엔드포인트와 환경변수 기반 키 주입까지 흉내 냅니다.
k-skill의 validate-skills.sh를 참고해, "모든 폴더에 SKILL.md가 있고 name이 폴더명과 일치하는지" 검사하는 검증 스크립트를 짜 보세요. 그런 다음 작은 npm 패키지에 Changesets를 붙여 버전 bump → publish(dry-run)까지 자동화 파이프라인을 경험합니다.
| 주차 | 주제 | 학습 내용 |
|---|---|---|
| 1주차 | Agent Skills 기초 | SKILL.md 구조·frontmatter, Claude Code 플러그인 설치/호출, 키 없는 스킬 10개 실사용 |
| 2주차 | 스킬 제작 | adding-a-skill.md 정독, site-agnostic discovery로 endpoint 찾기, 나만의 스킬 1~2개 작성 |
| 3주차 | 백엔드·프록시 | Fastify 라우팅, allowlist 보안, 환경변수/시크릿 관리, Cloud Run 배포 개념, MCP 연동 이해 |
| 4주차 | 모노레포 운영 | npm workspaces, Changesets/release-please 릴리스 자동화, GitHub Actions CI, 검증 스크립트 작성 |
처음부터 프록시·CI 같은 인프라로 가지 마세요. "SKILL.md 한 편을 읽고 쓰는" 1~2주차가 가장 중요합니다. 스킬이 결국 "에이전트가 읽는 잘 쓰인 매뉴얼"임을 체득하면, 나머지(프록시·릴리스)는 일반적인 백엔드·DevOps 지식의 응용일 뿐입니다. 좋은 description 한 줄을 쓰는 감각이 핵심 자산입니다.
---로 감싸 적는 메타데이터 머리말. SKILL.md에서는 name(폴더명과 정확히 일치해야 함)·description(에이전트가 스킬을 고르는 기준)·license·metadata(category·locale·phase)를 적는다. CI가 이 필드들을 강제 검증한다.v1은 안정적으로 동작하는 스킬, v1.5는 기능을 추가하는 중인 스킬을 뜻한다. frontmatter의 metadata.phase에 적어, 사용자와 기여자가 "이 스킬을 믿고 써도 되는지"를 가늠하게 한다.korean-jangbu-for·korean-privacy-terms가 예로, upstream의 Apache-2.0 라이선스 파일을 함께 동봉해 출처와 라이선스를 명확히 한다.공식 — 깃허브 NomaDamas/k-skill · 만든 그룹 NomaDamas(AutoRAG 제작) · 라이선스 MIT
설치 — Claude Code: /plugin marketplace add NomaDamas/k-skill → /plugin install k-skill@k-skill · 범용 CLI: npx --yes skills add NomaDamas/k-skill --all -g · Manus.ai: .skill 번들 드래그-드롭. 설치 후 k-skill-setup으로 인증 셋업.
기여·문서 — 저장소의 CONTRIBUTING.md(한국어 소통, PR은 dev 브랜치) · docs/adding-a-skill.md(새 스킬 추가 가이드) · docs/security-and-secrets.md(비밀 관리) · docs/releasing.md(릴리스 자동화).
관련 배경 — Anthropic Agent Skills 개념 · Model Context Protocol(MCP) · 공공데이터포털(여러 스킬의 upstream).