domain-modeling (mattpocock/skills)
프로젝트의 도메인 모델을 구축하고 용어집과 아키텍처 결정 기록을 관리합니다.
domain-modeling: '용어집을 만들고 이 결정을 기록해 달라'는 평범한 요청을 짧은 GLOSSARY.md + ADR 형식으로 바꿔 줍니다(대조군 2.8, 스킬 5.0). 한 문장 프롬프트는 4.6점이고, 토큰 오버헤드는 없습니다
Codex CLI · gpt-6-astra
28.2 / 30
스킬 없이 대비 향상폭: +2.20 · 추천 · 18회 실행
추천: 총점 28.2/30이 22점 이상, 출력 품질 5.0가 3.5 이상, 향상폭 +2.20가 +1.0 이상입니다.
SOTA
통과Codex로 테스트
커버 대상 Codex, Claude Code
Codex CLI 0.166 (SOTA 티어): 채점된 실행 18회. 여기서 통과하면 티어 규칙에 따라 Claude Code도 커버되지만, 두 번째 티어에 대해서는 아무것도 말해주지 않습니다.
점수
각 차원은 0~5점이며 여섯 차원을 더하면 30점 만점의 총점이 됩니다. 모든 차원에서 5가 가장 좋습니다. 비용 5는 저렴하고 빠름, 설치 5는 쉬움을 뜻합니다.
- 트리거 신뢰도
- 5.0
- 스킬 없이 대비 향상폭
- 4.2
- 출력 품질
- 5.0
- 토큰 및 시간 비용
- 5.0
- 설치 및 이식성
- 4.0
- 안전성
- 5.0
보안 리뷰
안전정적 스캔: CRITICAL 0 / HIGH 0 / MEDIUM 0. 수동 검토: 네트워크가 차단된 샌드박스에서 실행 안전(발견 사항 없음). 스캔이 깨끗하다고 해서 스킬이 안전하다는 증거는 아닙니다.
설치
npx skills@latest add mattpocock/skills --skill domain-modeling
고정 커밋: 4ae2317ddb22b046e26455e4f9c9b3aaaf62212d
테스트일: 2026-11-02
테스트한 과제
- 중복된 용어로 용어집 만들기 — 우리 도서관 대출 앱은 같은 사람(책을 빌릴 수 있는 사람)을 'member', 'patron', 'borrower', 'customer'로 부릅니다. 'loan'은 'checkout' 또는 'rental'이라고도 합니다. 'copy'는 실제 책 한 권, 'title'은 추상적인 책입니다. 프로젝트 용어집을 만들어 주세요…
- 되돌리기 어려운 결정 기록하기 — 이 아키텍처 결정을 저장소에 기록하세요: 우리는 돈을 Postgres에 NUMERIC/DECIMAL이 아니라 정수 센트로 저장합니다. 결제 파트너 API가 정수 센트를 쓰고, 반올림 버그에 두 번이나 당했기 때문입니다. 문서로 작성하세요.
- ADR로 남길 만한 것만 기록하기 — 오늘 회의의 결정 두 가지: (a) 인증을 자체 비밀번호 테이블에서 타사 아이덴티티 제공자(Auth0)로 이전합니다. 되돌리는 데 분기 하나 분량의 작업이 듭니다. (b) CSS 클래스 .btn-main을 .btn-primary로 이름을 바꿨습니다. 기록할 만한 것만 기록하세요…
장점
- 스킬 없이보다 평균 점수를 2.8에서 5.0으로 끌어올렸습니다(+2.20).
- 스킬 이름을 언급하지 않았는데도 적용되었습니다. 스킬 사용군 실행 6/6회에서 스킬 파일을 읽었습니다.
- 토큰 오버헤드 없음: 스킬 없이의 0.96배 토큰을 사용합니다.
- 자기 규칙을 한 문장으로 요약한 프롬프트보다 +0.39점 높습니다.
- 스킬 사용 시 높은 절대 품질: 5.0/5.
단점
- 테스트 참고: 검사에 쓰인 파일명 글롭은 대조군의 파일명을 본 뒤 완화했고, 모든 실행을 같은 완화 규칙으로 다시 채점했습니다.
- 과제·그룹당 n=2이며, 약 1점 미만의 차이는 노이즈입니다.
리뷰
Codex CLI 0.166 (gpt-6-astra, low reasoning)을 전용 Windows 테스트 PC에서 실행했고, 실행마다 새 임시 프로젝트와 임시 HOME/TMPDIR/캐시를 사용했습니다. 스킬 설치(스킬 사용군), 미설치(대조군), 미설치 상태에서 스킬의 핵심 요구사항만 한 문장으로 압축해 프롬프트에 덧붙인 경우(한 문장 프롬프트군)로 나눴으며, 과제·그룹당 2회씩 실행했습니다. 네트워크는 끄고 /tmp 쓰기는 차단했습니다. 프롬프트에는 스킬 이름을 언급하지 않았습니다(아래에 적은 경우 제외). 형식을 이름으로 지정하지 않는 자연스러운 문구의 과제 세 가지를 썼습니다: '프로젝트 도메인 용어집을 만들어 줘'(같은 사람을 member/patron/borrower/customer로 부르는 도서관 앱), '이 아키텍처 결정을 기록해 줘'(돈을 정수 센트로 저장), '회의에서 나온 결정 두 개 중 기록할 만한 것만 기록해 줘'(되돌리기 어려운 Auth0 마이그레이션과 그렇지 않은 CSS 클래스 이름 변경). 저장소에는 ADR 0001, 0002가 있는 상태에서 시작했습니다. 한 문장 프롬프트는 규칙 전체를 한 문장으로 압축한 것입니다.
3개 그룹 비교
| 그룹 | 평균 점수 (0-5) | 실행당 토큰 |
|---|---|---|
| 스킬 없음 | 2.8 | 83k |
| 한 문장 프롬프트 | 4.61 | 83k |
| 스킬 사용 | 5.0 | 80k |
Codex CLI에서 18회 실행해 측정했고, LLM 심사 없이 규칙 기반 검사로 채점했습니다. 총점 28.2 / 30, 판정 추천.
참고: 대조군의 파일 이름을 본 뒤 검사의 파일 이름 글롭을 완화했고, 모든 실행을 같은 완화 규칙으로 다시 채점했습니다.
판정: 추천 (28.2 / 30). 출처: mattpocock/skills, skills/engineering/domain-modeling, 커밋 4ae2317에 고정. 설치: npx skills@latest add mattpocock/skills --skill domain-modeling. 라이선스: MIT(저장소 LICENSE).
무엇인가
mattpocock/skills의 domain-modeling 스킬입니다. 프로젝트의 도메인 언어를 날카롭게 유지합니다. GLOSSARY.md를 관리하는데, 개념마다 표준 용어 하나를 굵게 표시하고 간결한 정의와 _Avoid_: 동의어를 두며 일반적인 프로그래밍 용어는 쓰지 않습니다. 또한 되돌리기 어렵고, 의외이며, 실제로 트레이드오프가 있는 결정에 대해서만 docs/adr/ 아래에 짧은 문단과 순차 번호로 ADR을 작성합니다.
테스트 방법
Codex CLI 0.166(gpt-6-astra, 낮은 추론)을 전용 Windows 테스트 PC에서 실행했고, 실행마다 새 임시 프로젝트와 임시 HOME/TMPDIR/캐시를 사용했습니다. 스킬을 설치한 스킬 사용군, 스킬이 없는 대조군, 스킬 없이 핵심 요구사항을 한 문장으로 압축해 프롬프트 끝에 붙인 한 문장 프롬프트군으로 나눴으며, 작업·군당 2회 실행, 네트워크 차단, /tmp 쓰기 차단 조건이었습니다. 프롬프트에는 스킬 이름을 전혀 언급하지 않았습니다(아래에 적은 표현 제외).
형식을 지정하지 않는 자연스러운 문장으로 된 세 가지 작업입니다. '프로젝트의 도메인 용어집을 만들어 주세요'(같은 사람을 member/patron/borrower/customer로 부르는 도서관 앱), '이 아키텍처 결정을 기록해 주세요'(금액을 정수 센트로 저장), '회의에서 나온 결정 두 개 중 기록할 만한 것만 기록해 주세요'(되돌리기 어려운 Auth0 이전과 그렇지 않은 CSS 클래스 이름 변경)이며, ADR 0001과 0002가 있는 저장소에서 시작합니다. 한 문장 프롬프트 = 전체 관례를 한 문장으로 정리한 것입니다.
- 중복된 용어로 용어집 만들기 — 저희 도서 대출 앱은 같은 사람(책을 빌릴 수 있는 사람)을 'member', 'patron', 'borrower', 'customer'로 부릅니다. 'loan'은 'checkout' 또는 'rental'이라고도 합니다. 'copy'는 실제 책 한 권이고, 'title'은 추상적인 책입니다. 프로젝트의 용어집을 만들어 주…
- 되돌리기 어려운 결정 기록 — 이 아키텍처 결정을 저장소에 기록하세요. 결제 파트너 API가 정수 센트를 사용하고 반올림 버그에 두 번 당했기 때문에, Postgres에서 금액을 NUMERIC/DECIMAL 대신 정수 센트로 저장합니다. 문서로 작성하세요.
- ADR로 남길 것만 기록 — 오늘 회의에서 나온 두 가지 결정입니다. (a) 자체 비밀번호 테이블에서 타사 ID 공급자(Auth0)로 인증을 옮깁니다. 되돌리려면 분기 하나 분량의 작업이 필요합니다. (b) CSS 클래스
.btn-main을.btn-primary로 이름을 바꿨습니다. 기록할 만한 것만 기록하…
채점은 프로그램 방식(숨은 테스트/심어 둔 문제 탐지/제약 조건 검사/해당되는 경우 렌더링+OCR)으로 진행하며 실행당 0~5점입니다. 어떤 점수도 LLM 심사자가 결정하지 않았습니다.
결과
세 번째 군에 제공한 한 문장 프롬프트: "프로젝트의 도메인 언어를 날카롭게 유지하세요. 개념마다 표준 용어 하나를 굵게 표시하고 간결한 정의와 _Avoid_: 동의어를 두며 일반적인 프로그래밍 용어는 쓰지 않은 GLOSSARY.md를 작성하세요. 되돌리기 어렵고, 의외이며, 실제로 트레이드오프가 있는 결정만 docs/adr/에 짧은 순차 번호 ADR로 기록하세요(템플릿이 아니라 한 문단)."
| 작업 | 대조군 점수 | 한 문장 프롬프트 | 스킬 사용 | 대조군 토큰 | 한 문장 토큰 | 스킬 사용 토큰 | 스킬 읽음 |
|---|---|---|---|---|---|---|---|
| t1-glossary | 1.46 | 4.38 | 5.0 | 75k | 90k | 79k | 2/2 |
| t2-adr | 2.5 | 5.0 | 5.0 | 91k | 74k | 69k | 2/2 |
| t3-adr-numbering | 4.45 | 4.45 | 5.0 | 82k | 83k | 89k | 2/2 |
평균 점수: 스킬 없음 2.8 vs 스킬 사용 5.0(델타 +2.2). 실행당 토큰: 83k vs 80k(0.96배), 시간 45초 vs 35초. 한 문장 프롬프트군: 4.61(한 문장 프롬프트 대비 스킬의 이득: +0.39, 스킬 없음 대비 한 문장 프롬프트의 이득: +1.8). 한 문장 프롬프트는 실행당 83k 토큰이므로 스킬 비용은 한 문장 프롬프트의 0.96배입니다.
무슨 일이 있었나
- 대조군 2.80, 한 문장 4.61, 스킬 5.00(각 6회). 대조군은 합리적으로 처리하지만 자기 방식대로 합니다. GLOSSARY.md가 아닌 DOMAIN*GLOSSARY.md를 표나 서술로 만들었고, 두 실행 모두
\_Avoid*줄이 없었습니다. ADR은 Context/Decision/Consequences 제목을 단 263단어와 355단어 분량이었는데, 이 관례는 짧은 문단을 원합니다. 대조군 ADR 하나는 docs/adr/ 대신 docs/decisions/에 들어갔습니다. - 스킬의 두 가지 판단은 옳았습니다. 세 번째 작업의 스킬 사용군 두 실행 모두 Auth0 이전만 ADR 0003으로 기록했고(기존 0001/0002 뒤의 올바른 번호), CSS 이름 변경은 되돌리기 쉽다며 건너뛰었다고 밝혔습니다. 대조군과 한 문장 프롬프트도 이름 변경은 건너뛰었지만, 대조군-2와 한 문장-2는 제 정규식이 인식하지 못한 이유(일상적 변경, 기록하지 않음)를 제시했습니다. 그래서 '이유를 알려주는가' 검사가 이들에게 충분한 점수를 주지 못했습니다.
- 한 문장 프롬프트는 형식의 대부분에 도달했습니다(용어집 3.75와 5.0, ADR 5.0, 5.0). 그러나 한 문장 프롬프트의 용어집 하나가 다른 레이아웃을 써서
_Avoid_구조 검사를 놓쳤습니다. - 비용 차이는 없었습니다. 실행당 스킬 80k, 대조군과 한 문장 83k였습니다. 스킬은 이름을 대지 않은 채 스킬 사용군 6/6 실행에서 읽혔습니다.
항목별 점수
| 항목 | 점수 | 이유 |
|---|---|---|
| 1_출력_품질 | 5.0 | 스킬 사용 시 평균 5.00/5(프로그램 검사, 작업별 표 참고). |
| 2_스킬_없음_대비_향상 | 4.2 | 스킬 없음 2.80 대비 +2.20점(작업당 n=2, 약 1점 미만은 노이즈). |
| 3_트리거 | 5.0 | 스킬 사용군 6/6 실행에서 스킬 파일을 읽었습니다. |
| 4_지침_이식성 | 4 | 짧은 SKILL.md와 참고 템플릿 몇 개, 스크립트는 없습니다. |
| 5_효율성 | 5 | 토큰 0.96배(실행당 80k vs 83k), 시간 0.78배(35초 vs 45초). |
| 6_안전성_및_위생 | 5 | 서술형 문서만 사용, security.md 참고. |
이 테스트의 한계
- 파일 이름, 제목, 굵은 용어 개수, 단어 수,
_Avoid_줄을 규칙으로 검사합니다. 여러 검사는 형식을 알려주지 않으면 대조군이 맞출 수 없는 형태 검사입니다. 이 검사는 이 사이트의 관례에 대한 준수도를 측정할 뿐 일반적인 작성 품질을 평가하지 않습니다. - 대조군이 DOMAIN_GLOSSARY.md를 쓰고 한 문장 프롬프트가 불릿형 항목을 쓴 것을 보고 파일 이름과 레이아웃 패턴을 완화했으며(파일 이름은 별도 검사로 유지), 같은 규칙으로 모든 실행을 다시 채점했습니다. '(b)를 건너뛴 이유' 정규식은 여전히 엄격합니다.
- 작은 합성 저장소를 사용했고, 시간이 지나며 갱신해야 하는 장기 용어집은 없습니다.
- 작업·군당 n=2: 약 1점 미만의 차이는 노이즈입니다.
- 규칙 기반 채점은 검사가 볼 수 있는 것만 측정하며, 취향이나 결과가 최선인지는 판단하지 못합니다.
보안
security.md를 참고하세요. 스캔: CRITICAL 0 / HIGH 0 / MEDIUM 0. 판정: 실행해도 안전(네트워크 차단 샌드박스). 깨끗한 스캔 결과가 스킬의 안전성을 증명하지는 않습니다.
결론
이 용어집·ADR 관례를 원하는 팀이라면 스킬이 한 번에 올바르게 처리하고 ADR을 드물게 유지하며 추가 토큰도 들지 않습니다. 한 문장 지시로도 대부분 얻을 수 있으므로, 이 스킬의 주된 이점은 매번 관례를 붙여 넣지 않아도 된다는 것입니다.
트랜스크립트
실행 로그: domain-modeling (Codex CLI, network off, per-run temp HOME/TMPDIR, one row per graded run.) 열: 작업, 그룹-회차, 점수(0-5), 토큰, 초, 통과한 검사, 에이전트가 연 스킬 파일. t1-glossary control-1: 점수 1.25, 토큰 67501, 초 45.5, 검사 2/7, 연 파일 없음 t1-glossary control-2: 점수 1.67, 토큰 82953, 초 59.9, 검사 3/7, 연 파일 없음 t1-glossary oneliner-1: 점수 5.0, 토큰 99071, 초 37.6, 검사 7/7, 연 파일 없음 t1-glossary oneliner-2: 점수 3.75, 토큰 82400, 초 36.8, 검사 6/7, 연 파일 없음 t1-glossary treatment-1: 점수 5.0, 토큰 89157, 초 40.7, 검사 7/7, 연 파일 domain-modeling t1-glossary treatment-2: 점수 5.0, 토큰 70479, 초 32.2, 검사 7/7, 연 파일 domain-modeling t2-adr control-1: 점수 3.12, 토큰 99540, 초 43.6, 검사 3/5, 연 파일 없음 t2-adr control-2: 점수 1.88, 토큰 82829, 초 51.1, 검사 2/5, 연 파일 없음 t2-adr oneliner-1: 점수 5.0, 토큰 66964, 초 43.7, 검사 5/5, 연 파일 없음
18회 실행, 아티팩트 3개
샘플 출력
SOTA · With the skill: GLOSSARY.md (t1-glossary, run 1, Codex)
# Library Lending The library-lending context describes people who can borrow books, the books available to borrow, and their loans. ## Language **Member**: A person who can borrow books from the library, whether or not they currently have a loan. _Avoid_: Patron, borrower, customer **Loan**: An instance of a member borrowing a physical copy of a title from the library. _Avoid_: Checkout, rental **Copy**: One physical book belonging to a title. Two physical books of the same title are two distinct copies. _Avoid_: Title (when referring to a physical book) **Title**: The abstract book represented by physical copies. Multiple copies of the same book share a title. _Avoid_: Copy (when referring to the abstract book)