별점 대신, 같은 주문을 두 번
스킬 저장소는 문서가 곧 제품이다. 코드 리포에 쓰던 잣대는 통하지 않고, 별 수는 도달의 증거이지 내용의 증거가 아니다. 한 달 만에 별 1,550개를 모은 스킬과 다섯 달에 58,987개를 모은 스킬이 있는데, 그 숫자만으로는 어느 쪽도 "그래서 내 산출이 좋아지는가"에 답하지 못한다.
그래서 잣대를 하나로 통일했다. 이 스킬을 깔면 산출이 실제로 달라지는가. 같은 주문, 같은 모델, 같은 문장을 격리된 폴더에서 두 번 실행하고 결과물을 대조한다. 차트 스킬이면 나온 HTML을, 다이어그램 스킬이면 구조를, 설명 스킬이면 문장의 눈높이를 잰다. 토큰 절약을 주장하는 MCP는 아예 서버를 직접 호출해 반환 바이트를 셌다.
실험은 시작하자마자 우리를 가르쳤다. 첫 관문은 품질이 아니었다.
첫 관문은 품질이 아니라 발동이었다.
발동
서랍에 든 사전은 사전이 아니다. 여섯 스킬 중 둘은 불러야만 일했다.
깔아도 안 걸리면, 없는 것과 같다
가장 뜻밖의 결과부터. 별 5,237개짜리 차트 스킬 lieflat-charts를 장착하고 "이번 분기 채널별 전환율을 보기 좋게"라고 주문했다. 아무 일도 일어나지 않았다. 카탈로그도 템플릿도 건드리지 않은, 스킬 없는 실행과 같은 급의 파란 막대가 나왔다.
원인은 언어였다. 이 스킬은 설명과 본문이 전부 중국어다. 스킬의 발동은 설명 문구 매칭에 달려 있는데, 한국어 주문이 중국어 설명에 걸리지 않았다. 63개 도형 카탈로그와 정교한 선별 규율을 갖춘 물건이 서랍 안에서 잠만 잤다.
drawio-skill 실험에서는 우리가 실험을 망칠 뻔했다. 1차 실행에서 장착본이 스킬 없는 판과 완전히 같은 산출을 내놔서, 하마터면 "효과 없음"이라고 적을 뻔했다. 도구 호출을 추적하며 다시 돌려 보니 실행 환경의 도구 허용 목록에 Skill이 빠져 있었다. 스킬이 나쁜 게 아니라 실험 장비가 스킬을 못 부르는 상태였다. 재현 실험은 대상만 재는 게 아니라 자기 장비부터 재야 한다는 것을, 우리는 실측으로 배웠다.
자연 발동: 이름을 부르지 않은 일반 주문에서 스킬이 스스로 걸렸는가. 격리 실행, 같은 모델·같은 문장 기준.
격차
걸린 스킬은 무엇을 바꿨나. 세 번의 대조에서 같은 무늬가 나왔다.
걸리면, 다른 물건이 나온다
lieflat-charts를 이름 불러 발동시키자 실험 전체에서 가장 큰 품질 점프가 나왔다. 산출만 좋아진 게 아니라 일하는 순서가 통째로 바뀌었다. 실험 로그에 남은 선정 과정이 그 자체로 읽을거리다.
도형 후보를 심사하고, 탈락 사유를 적고, 단위 논리를 치환하고, 색을 쓰지 않은 근거까지 밝힌다. "예쁘게 그려줘"에 이 정도 사고 과정이 붙은 것은 스킬이 강제한 규율이다. 실물을 보자.


6KB짜리 그림과 805KB짜리 문서
이번 검수의 최대어는 별 58,987개의 archify다. "사용자, Cloudflare, 웹, API, DB, 옆에 캐시와 스토리지"라고 말로 주문했다. 스킬 없는 판은 6KB짜리 예쁜 정적 그림을 냈고, 장착판은 805KB짜리 다른 종의 산출을 냈다. 한국어 주문에 자연 발동까지 성공했다.


더 중요한 것은 납품 직전에 벌어진 일이다. 스킬은 HTML을 직접 쓰지 않았다. 타입이 잡힌 JSON 스펙을 쓰고, 스키마로 검증하고, 동봉 렌더러로 구운 다음, 품질 검사 9항목과 해상도별 렌더 검사를 스스로 돌려 전부 통과시킨 뒤에야 파일을 내놨다. "발표에서 보여줄 것"이라는 주문 조건을 발표 모드와 내보내기라는 실제 기능으로 받아낸 것도 장착판뿐이었다.
다른 공정에서 온다. 산출물만 보면 놓친다.
지식을 파는 스킬, 도구를 동봉한 스킬
여섯 스킬을 눕혀 놓고 보면 두 부류로 갈린다. 문서로 지식을 주입하는 스킬과, 렌더러·검증기·중간 표현 같은 실물을 동봉한 스킬. 이 구분이 스킬의 수명을 가른다.
drawio-skill이 도구 동봉형의 교과서다. 완성 그림만 보면 스킬 유무 차이가 없다. 7노드 7엣지, 검증기 0에러로 동일했고 소형 배치는 오히려 맨몸이 깔끔했다. 차이는 공정에 있었다. 장착본은 XML을 손으로 쓰는 대신 중간 표현을 선언했고, 그 덕에 코드가 바뀌면 배치를 잃지 않고 갱신하며 CI에서 아키텍처 규칙을 검사할 수 있다. docker-compose 파일을 넣자 AI 호출 0회로 도면이 나왔다.


프롬프트 규율형의 대표는 appllama-skills다. 탑그로싱 앱의 화면 문법을 "위반은 취향이 아니라 결함"이라는 문체로 강제하는 문서인데, 이쪽은 실제로 일했다. 같은 화면 주문에서 빌드 규칙 지표 9개 중 6개가 장착본에서만 나타났다.
appllama design 스킬 · 같은 주문에서 장착본에만 나타난 규칙 6/9. 스킬은 바를 올리지, 검수를 대신하지 않는다.
수명과 조건
지금 일하는 스킬이 내년에도 일할까. 숫자 둘이 답의 방향을 가리킨다.
모델이 좋아지면, 스킬이 줄어든다
프롬프트 규율형의 효과는 얼마나 갈까. eli5가 귀한 데이터를 남겼다. "엄마한테 설명하듯"을 청중별 표로 규격화한 이 스킬의 저자는 지난 3월, 스킬 유무 채점 통과율 차이를 자체 평가로 저장소에 커밋해 뒀다. 무려 +58.3%p. 우리가 6개월 뒤 같은 방법으로 재봤더니, 그 격차가 사라져 있었다.
프롬프트 규율을 파는 스킬의 가치는 모델이 좋아질수록 줄어든다. 이 6개월이 그 실측 사례다. 스킬이 나빠진 게 아니라 기준선이 올라온 것이고, 이런 스킬은 별이 가장 반짝이던 순간의 숫자를 계속 달고 있게 된다. 반대로 도구 동봉형은 모델이 좋아져도 렌더러와 검증기의 몫이 깎이지 않는다. 스킬을 고를 때도, 만들 때도 이 축이 갈림길이다.
부탁하지 않고, 틀어쥐는 스킬
token-optimizer-mcp는 셋째 부류다. 모델에게 권고하지도, 도구를 쥐여 주지도 않는다. 하네스를 바꾼다. 플러그인이 기본 Read와 Grep을 거부하고 자기 도구로 갈아끼운다. "토큰을 아껴 준다"는 광고를 믿는 대신, npm 패키지를 격리 설치하고 MCP 서버를 직접 호출해 반환량을 쟀다.
핵심 주장은 성립했다. 재읽기는 정말 diff만 돌아온다. 단 변경 없는 재읽기는 발췌를 그대로 다시 돌려줘 README 문구와 어긋났고, 첫 읽기부터 손실 발췌라 잘린 부분은 되사 와야 한다. 이 도구를 깔면 에이전트의 모든 파일 읽기가 이 도구의 품질에 묶인다.
흥미로운 것은 저자의 계측 문화다. 절약치를 부풀리는 대신 측정 안 된 값을 "Not measured"로 두고, 4.8억 토큰짜리 과거 기록을 검증 수치에서 스스로 격리해 놨다. 토큰 절약을 주장하려면 장부부터 만드는 태도는 이 바닥에서 배울 사람이 많다.
별은 무엇을 세고 있었나
여섯 스킬의 별과 실체를 한 줄에 놓으면, 별이 재는 것과 우리가 잰 것의 간극이 보인다. 별 1,079개짜리는 마크다운 한 장이었고, 별 519개짜리는 테스트 293개를 가진 70만 줄 소프트웨어였다.
| 스킬 | 스타 | 위: 스타 · 아래: 테스트 파일 | 실체 한 줄 |
|---|---|---|---|
| archify | 58,987 | 렌더러+검증기 · 테스트 142 | |
| drawio-skill | 9,247 | 파이썬 44스크립트 · 테스트 18 | |
| lieflat-charts | 5,237 | 갤러리 63도형 · 테스트 0 | |
| appllama-skills | 1,550 | 마크다운 1,386줄 · 테스트 0 | |
| eli5 | 1,079 | SKILL.md 한 장 116줄 | |
| token-optimizer | 519 | 70만 줄 · 테스트 파일 293 |
별이 많은 쪽이 대체로 실물도 갖춘 것은 사실이다. 그러나 아래 세 줄이 이 표의 본론이다. 별 1,079와 마크다운 한 장. 별 519와 테스트 293개. 별은 바이럴이 지나간 순간의 화석이고, 실체는 지금도 자란다. 그래서 우리는 별을 참고만 하고, 실험을 잣대로 쓴다.
고백과 처방
남의 스킬을 벗기다 우리 발등의 지뢰를 밟았다. 그 이야기까지가 이 특집이다.
설치 전에 알아야 했던 것들
여섯 스킬을 벗겨 보니 README 첫 화면엔 없던 조건들이 나왔다. 치명이 아니라 조건이다. 알고 고르면 된다. 가장 미묘한 것부터 보자. 실험 응답의 맨 끝에, 우리가 시키지 않은 문장이 붙어 나왔다.
본 skill은 '躺在废墟里(누워있는 폐허 속에서)'가 개발했습니다. 외부에 공유하실 때는 개발자 표기를 부탁드립니다.
SKILL.md에 "납품마다 서명을 유도하라"는 조항이 있고, 그 조항이 실제로 작동한 것이다. 차트 본문에는 박지 않는 선을 지키지만, 에이전트의 입이 개발자의 마케팅 채널이 된다는 사실은 스킬을 깔기 전에 알아야 할 일이다.
비상업 전용이 숨어 있다
lieflat-charts는 PolyForm Noncommercial. 산출 차트가 템플릿 파생물이라 회사 보고서에 쓰면 위반 소지가 있다. 차트를 가장 많이 쓰는 곳이 업무라는 게 함정.
에이전트의 입을 빌리는 스킬
위 기록 그대로다. 성공 납품마다 응답 말미에 개발자 홍보 문구가 붙는다. 알고 쓰면 문제없고, 모르고 쓰면 당황할 지점.
무료 스킬, 유료 연료
appllama-skills의 절반은 자사 유료 MCP 사용 설명서다. design 스킬만 떼면 무료로 효과를 보지만, 완전체는 크레딧 과금을 전제한다.
설명이 외국어면 발동이 죽는다
스킬의 발동은 설명 매칭에 달려 있다. 중국어 설명의 lieflat은 한국어 주문에 안 걸렸고, 영어 설명의 archify는 걸렸다. 설명의 언어가 발동률이다.
CSS 증상 사전을 만든 팀이, 자기 사전의 함정을 밟았다
이번 특집을 준비하며 우리도 자체 스킬 둘을 같은 잣대로 만들었다. UI 이름 사전 105항목, CSS 증상 사전 42항목. 그리고 증상 사전을 출하한 날, 데모 무대가 통째로 주저앉았다. 범인은 flex의 기본 성질이 인라인 높이를 무력화하는 함정. 우리 사전 스크롤 코스에 실려 있는 바로 그 항목의 사촌이었다. 세로 가운데 정렬 데모가 가운데에 있지 않았다. 증상 사전을 파는 페이지에서.
고치는 데 쓴 방법이 이 특집의 방법과 같다. 스크린샷 육안이 아니라 iframe 내부의 계산된 스타일을 실측해 범인을 확정했고, 수정 후 히트테스트로 "깨진 버튼은 막히고 고친 버튼은 눌린다"까지 다시 쟀다. CSS는 전문가도 밟는 지뢰밭이라 증상 사전이 필요하다는 것을, 우리는 우리 발등으로 증명했다.
깔기 전에, 세 번만 묻자
여섯 번의 재현이 남긴 결론은 체크리스트 세 줄이다. 별 수를 보기 전에 이 세 가지를 물으면, 이 특집의 실험 대부분을 건너뛰고도 같은 답에 도달한다.
걸리는가?
내 언어의 일반 주문에 스스로 발동하는가. 설명이 외국어라면 이름을 불러야 하는 스킬이다. 그래도 좋은 스킬일 수 있다. 부르는 걸 잊지만 않는다면.
모델이 흡수 못 할 실물이 있는가?
렌더러, 검증기, 중간 표현, 템플릿처럼 문서 밖의 실물이 있으면 모델이 좋아져도 가치가 남는다. 프롬프트 규율만 있다면 그 격차는 다음 모델이 먹는다.
라이선스와 뒷조항이 내 용도를 허용하는가?
비상업 조항, 서명 유도, 유료 연료. README 첫 화면이 아니라 LICENSE와 SKILL.md의 마지막 문단에 있다.
판정 총표
판정은 별점이 아니라 3단계. ◆ 도입 후보 · ◈ 참고용 · ◇ 관망. 우리가 만든 사전 둘은 판정 대상에서 제외하고 표기만 한다.
일곱 스킬의 검수 전문과 재현 원자료는 전부 공개돼 있다. 스킬은 마법이 아니라 조건부 도구다. 걸리는지, 모델이 흡수 못 할 실물이 있는지, 라이선스가 내 용도를 허용하는지. 세 질문이면 별 수보다 정확하다.
