setup-pre-commit (mattpocock/skills)
현재 저장소에 Husky 커밋 전 훅을 설정하고 lint-staged, Prettier, 타입 검사, 테스트를 연결합니다.
setup-pre-commit: '커밋 훅 추가'라는 모호한 요청에 일반 Codex는 다른 방식(네이티브 git 훅)으로 구성하고, pnpm 저장소에서 npm을 호출하기도 합니다(한 실행에서 확인). 스킬과 한 문장 프롬프트는 모두 Husky + lint-staged 구성을 내놓습니다(5.0 대 1.4).
Codex CLI · gpt-6-astra
29.0 / 30
스킬 없이 대비 향상폭: +3.59 · 추천 · 18회 실행
추천: 총점 29.0/30이 22점 이상, 출력 품질 5.0가 3.5 이상, 향상폭 +3.59가 +1.0 이상입니다.
SOTA
통과Codex로 테스트
커버 대상 Codex, Claude Code
Codex CLI 0.166 (SOTA 티어): 채점된 실행 18회. 여기서 통과하면 티어 규칙에 따라 Claude Code도 커버되지만, 두 번째 티어에 대해서는 아무것도 말해주지 않습니다.
점수
각 차원은 0~5점이며 여섯 차원을 더하면 30점 만점의 총점이 됩니다. 모든 차원에서 5가 가장 좋습니다. 비용 5는 저렴하고 빠름, 설치 5는 쉬움을 뜻합니다.
- 트리거 신뢰도
- 5.0
- 스킬 없이 대비 향상폭
- 5.0
- 출력 품질
- 5.0
- 토큰 및 시간 비용
- 5.0
- 설치 및 이식성
- 4.0
- 안전성
- 5.0
보안 리뷰
안전정적 스캔: CRITICAL 0 / HIGH 0 / MEDIUM 0. 수동 검토: 네트워크가 차단된 샌드박스에서 실행 안전(발견 사항 없음). 스캔이 깨끗하다고 해서 스킬이 안전하다는 증거는 아닙니다.
설치
npx skills@latest add mattpocock/skills --skill setup-pre-commit
고정 커밋: 4ae2317ddb22b046e26455e4f9c9b3aaaf62212d
테스트일: 2026-11-02
테스트한 과제
- typecheck·test 스크립트가 있는 npm 프로젝트 — 커밋 훅을 추가하세요. 이 저장소에 pre-commit 훅을 설정하세요(네트워크를 사용할 수 없으니 설치하지 말고 파일과 package.json 변경 사항을 직접 작성하세요).
- typecheck 스크립트가 없는 pnpm 프로젝트 — 커밋 훅을 추가하세요. 이 저장소에 pre-commit 훅을 설정하세요(네트워크를 사용할 수 없으니 설치하지 말고 파일과 package.json 변경 사항을 직접 작성하세요).
- 기존 Prettier 설정이 유지되어야 함 — 커밋 훅을 추가하세요. 이 저장소에 pre-commit 훅을 설정하세요(네트워크를 사용할 수 없으니 설치하지 말고 파일과 package.json 변경 사항을 직접 작성하세요).
장점
- 스킬 없이보다 평균 점수를 1.41에서 5.0으로 끌어올렸습니다(+3.59).
- 스킬 이름을 언급하지 않았는데도 적용되었습니다. 스킬 사용군 실행 6/6회에서 스킬 파일을 읽었습니다.
- 토큰 오버헤드 없음: 스킬 없이의 0.99배 토큰을 사용합니다.
- 스킬 사용 시 높은 절대 품질: 5.0/5.
단점
- 한 문장 프롬프트는 5.0점, 스킬 사용은 5.0점(+0.00).
- 테스트 참고: 첫 채점 뒤 검사 하나를 수정했고(수정하지 않은 파일도 통과해야 함), 모든 실행을 다시 채점했습니다.
- 과제·그룹당 n=2이며, 약 1점 미만의 차이는 노이즈입니다.
리뷰
Codex CLI 0.166 (gpt-6-astra, low reasoning)을 전용 Windows 테스트 PC에서 실행했고, 실행마다 새 임시 프로젝트와 임시 HOME/TMPDIR/캐시를 사용했습니다. 스킬 설치(스킬 사용군), 미설치(대조군), 미설치 상태에서 스킬의 핵심 요구사항만 한 문장으로 압축해 프롬프트에 덧붙인 경우(한 문장 프롬프트군)로 나눴으며, 과제·그룹당 2회씩 실행했습니다. 네트워크는 끄고 /tmp 쓰기는 차단했습니다. 프롬프트에는 스킬 이름을 언급하지 않았습니다(아래에 적은 경우 제외). 작은 저장소 세 개를 사용했고 모두 같은 프롬프트를 넣었습니다: '커밋 훅을 추가하세요. 이 저장소에 pre-commit 훅을 설정하세요(네트워크를 사용할 수 없으니 설치하지 말고 파일과 package.json 변경 사항을 직접 작성하세요).' 대상은 typecheck·test 스크립트가 있는 npm 저장소, typecheck 스크립트가 없는 pnpm 저장소(pnpm-lock.yaml), 이미 .prettierrc가 있는 npm 저장소입니다. 한 문장 프롬프트군에는 스킬의 레시피를 한 문장으로 넣었습니다.
3개 그룹 비교
| 그룹 | 평균 점수 (0-5) | 실행당 토큰 |
|---|---|---|
| 스킬 없음 | 1.41 | 82k |
| 한 문장 프롬프트 | 5.0 | 75k |
| 스킬 사용 | 5.0 | 82k |
Codex CLI에서 18회 실행해 측정했고, LLM 심사 없이 규칙 기반 검사로 채점했습니다. 총점 29.0 / 30, 판정 추천.
참고: 첫 채점 후 검사 하나를 수정했고(건드리지 않은 파일도 통과해야 함), 모든 실행을 다시 채점했습니다.
판정: 추천 (29.0 / 30). 출처: mattpocock/skills, skills/misc/setup-pre-commit, 커밋 4ae2317에 고정. 설치: npx skills@latest add mattpocock/skills --skill setup-pre-commit. 라이선스: MIT (저장소 LICENSE).
어떤 스킬인가
setup-pre-commit 스킬(mattpocock/skills)입니다. lint-staged와 Prettier를 사용하는 Husky v9 pre-commit 훅을 설정합니다. 잠금 파일에서 패키지 관리자를 감지하고, lint-staged를 실행한 뒤 해당 패키지 관리자로 저장소의 typecheck와 test 스크립트를 실행하는 .husky/pre-commit(셔뱅 없음)을 작성하며(없는 스크립트는 건너뛰고 알림), prettier --ignore-unknown --write를 쓰는 .lintstagedrc를 추가하고, prepare: husky를 추가하며, .prettierrc가 없을 때만 새로 만듭니다.
테스트 방법
Codex CLI 0.166(gpt-6-astra, 낮은 추론)을 전용 Windows 테스트 PC에서 실행했고, 실행마다 새 임시 프로젝트와 임시 HOME/TMPDIR/캐시를 사용했습니다. 스킬을 설치한 경우(스킬 사용군), 설치하지 않은 경우(대조군), 스킬의 핵심 요구사항을 한 문장으로 압축해 프롬프트 끝에 붙인 경우(한 문장 프롬프트군)로 나눴고, 작업마다 각 군 2회씩 실행했습니다. 네트워크는 끄고 /tmp 쓰기는 차단했습니다. 프롬프트에는 스킬 이름을 전혀 언급하지 않았습니다(아래에 적은 표현은 예외).
작은 저장소 세 개를 사용했고 모두 같은 프롬프트를 받았습니다: '커밋 훅을 추가해 주세요. 이 저장소에 pre-commit 훅을 설정하세요(네트워크를 쓸 수 없으니 설치하지 말고 파일과 package.json 변경을 직접 작성하세요).' typecheck와 test 스크립트가 있는 npm 저장소, typecheck 스크립트가 없는 pnpm 저장소(pnpm-lock.yaml), 이미 .prettierrc가 있는 npm 저장소. 한 문장 프롬프트 = 스킬의 레시피를 한 문장으로.
- typecheck와 test 스크립트가 있는 npm 프로젝트 — 커밋 훅을 추가해 주세요. 이 저장소에 pre-commit 훅을 설정하세요(네트워크를 쓸 수 없으니 설치하지 말고 파일과 package.json 변경을 직접 작성하세요).
- typecheck 스크립트가 없는 pnpm 프로젝트 — 커밋 훅을 추가해 주세요. 이 저장소에 pre-commit 훅을 설정하세요(네트워크를 쓸 수 없으니 설치하지 말고 파일과 package.json 변경을 직접 작성하세요).
- 기존 Prettier 설정 유지 — 커밋 훅을 추가해 주세요. 이 저장소에 pre-commit 훅을 설정하세요(네트워크를 쓸 수 없으니 설치하지 말고 파일과 package.json 변경을 직접 작성하세요).
채점은 프로그램 방식(숨은 테스트, 심어 둔 문제 탐지, 제약 조건 검사, 해당되는 경우 렌더링+OCR)으로 실행당 0~5점입니다. 점수를 결정한 LLM 심사자는 없습니다.
결과
세 번째 군에 전달한 한 문장 프롬프트: "Husky v9를 lint-staged와 함께 설정하세요. 잠금 파일에서 패키지 관리자를 감지하고, .husky/pre-commit(셔뱅 없음)을 작성해 npx lint-staged를 실행한 뒤 해당 패키지 관리자로 저장소의 typecheck와 test 스크립트를 실행하세요(없는 스크립트는 생략하고 알려 주세요). prettier --ignore-unknown --write를 쓰는 .lintstagedrc, prepare: husky 스크립트를 추가하고, .prettierrc는 없을 때만 만드세요."
| 작업 | 대조군 점수 | 한 문장 프롬프트 | 스킬 사용 | 대조군 토큰 | 한 문장 프롬프트 토큰 | 스킬 사용 토큰 | 스킬 읽음 |
|---|---|---|---|---|---|---|---|
| t1-npm | 0.0 | 5.0 | 5.0 | 76k | 75k | 78k | 2/2 |
| t2-pnpm | 0.0 | 5.0 | 5.0 | 103k | 66k | 87k | 2/2 |
| t3-existing-prettier | 4.23 | 5.0 | 5.0 | 66k | 83k | 78k | 2/2 |
평균 점수: 스킬 없이 1.41, 스킬 사용 시 5.0(델타 +3.59). 실행당 토큰: 82k 대 82k(0.99배), 시간 58초 대 43초. 한 문장 프롬프트군: 5.0(한 문장 프롬프트 대비 스킬의 이득: +0.0, 스킬 없는 경우 대비 한 문장 프롬프트의 이득: +3.59). 한 문장 프롬프트는 실행당 75k 토큰을 쓰므로, 스킬은 한 문장 프롬프트의 1.09배 비용입니다.
실제로 있었던 일
- 대조군 1.41, 한 문장 프롬프트 5.00, 스킬 5.00(각 n=6). 도구를 지정하지 않자 대조군은 자체 설계를 택했습니다. npm과 pnpm 저장소(4회 실행)에서는 Husky도 lint-staged도 Prettier도 없이 네이티브 git 훅 폴더(.githooks/pre-commit과 README, prepare 스크립트)를 작성했고, pnpm 저장소에서는 저장소가 pnpm을 쓰는데도 훅이
npm test를 실행했습니다(실행 1에서 확인). 기존 .prettierrc가 있는 저장소만 Husky를 받았습니다(2회 실행). - 스킬과 한 문장 프롬프트 실행은 세부 사항이 모두 정확했습니다. pnpm 저장소는
pnpm exec lint-staged와pnpm run test를 사용했고, 없는 typecheck는 생략하고 그 사실을 알렸으며, 기존 .prettierrc는 다시 쓰지 않았고,prepare: husky와 devDependencies 세 개를 추가했습니다. 스킬은 어려운 엔지니어링이 아니라 의견(Husky + lint-staged + Prettier)으로 중요한 역할을 합니다. - 비용 없음: 스킬 82k, 대조군 82k, 한 문장 프롬프트 75k(실행당). 스킬은 이름을 밝히지 않아도 스킬 사용군 6/6 실행에서 읽혔습니다.
- 오프라인에서는 설치하거나 실행할 수 없어 생성된 훅은 하나도 실행되지 않았습니다. 두 군 모두 훅은
npm install전까지 비활성 상태라고 밝혔습니다.
항목별 점수
| 항목 | 점수 | 이유 |
|---|---|---|
| 1_output_quality | 5.0 | 스킬 사용 시 평균 5.00/5점(프로그램 검사, 작업별 표 참조). |
| 2_lift_vs_no_skill | 5 | 스킬 없이 1.41점 대비 +3.59점(작업당 n=2, 약 1점 미만의 차이는 노이즈). |
| 3_trigger | 5.0 | 스킬 사용군 6/6 실행에서 스킬 파일이 읽힘. |
| 4_instructions_portability | 4 | 짧은 SKILL.md 하나, 스크립트 없음. |
| 5_efficiency | 5 | 토큰 0.99배(실행당 82k 대 82k), 시간 0.73배(43초 대 58초). |
| 6_safety_hygiene | 5 | 산문만 포함. package.json을 편집하고 모든 커밋에서 실행되는 훅을 추가하라고 지시합니다. |
이 테스트의 한계
- 작성된 파일에 대한 규칙 기반 검사입니다. 훅은 실행되지 않았습니다(네트워크 없음, Husky 미설치).
- 대조군의 네이티브 훅 해법도 유효한 설계입니다. 검사는 요청된 Husky/lint-staged 레시피가 만들어졌는지를 측정하며, 대조군은 그것을 알 방법이 없었습니다.
- 한 검사(기존 .prettierrc 유지)는 변경되지 않은 파일이 복사되어 나오지 않아 처음에는 모든 실행에서 실패했습니다. 파일이 손대지 않은 경우 통과하도록 바꾸고 18회 실행을 모두 같은 규칙으로 다시 채점했습니다.
- 작업·군당 n = 2: 약 1점 미만의 차이는 노이즈입니다.
- 규칙 기반 채점은 검사가 볼 수 있는 것만 측정합니다. 취향이나 결과가 최선인지는 판단할 수 없습니다.
보안
security.md를 참조하세요. 스캔: CRITICAL 0 / HIGH 0 / MEDIUM 0. 판정: 실행해도 안전(네트워크 비활성 샌드박스). 깨끗한 스캔 결과가 스킬의 안전성을 증명하지는 않습니다.
결론
Husky + lint-staged + Prettier 구성을 원한다면, 이 스킬은 추가 토큰 없이 세 가지 저장소 형태(pnpm 감지, typecheck 누락, 기존 Prettier 설정) 모두에서 올바르게 해냅니다. 한 문장 레시피도 같은 일을 합니다. 레시피를 매번 다시 설명하지 않으려면 설치하되, 그 이상의 품질 향상은 기대하지 마세요.
트랜스크립트
실행 로그: setup-pre-commit (Codex CLI, network off, per-run temp HOME/TMPDIR, one row per graded run.) 열: 작업, 그룹-회차, 점수(0-5), 토큰, 초, 통과한 검사, 에이전트가 연 스킬 파일. t1-npm control-1: 점수 0.0, 토큰 84825, 초 49.0, 검사 0/7, 연 파일 없음 t1-npm control-2: 점수 0.0, 토큰 67687, 초 62.1, 검사 0/7, 연 파일 없음 t1-npm oneliner-1: 점수 5.0, 토큰 66754, 초 38.4, 검사 7/7, 연 파일 없음 t1-npm oneliner-2: 점수 5.0, 토큰 83997, 초 38.6, 검사 7/7, 연 파일 없음 t1-npm treatment-1: 점수 5.0, 토큰 69607, 초 37.3, 검사 7/7, 연 파일 setup-pre-commit t1-npm treatment-2: 점수 5.0, 토큰 87911, 초 42.1, 검사 7/7, 연 파일 setup-pre-commit t2-pnpm control-1: 점수 0.0, 토큰 102203, 초 77.9, 검사 0/8, 연 파일 없음 t2-pnpm control-2: 점수 0.0, 토큰 104460, 초 67.1, 검사 0/8, 연 파일 없음 t2-pnpm oneliner-1: 점수 5.0, 토큰 66597, 초 34.4, 검사 8/8, 연 파일 없음
18회 실행, 아티팩트 3개
샘플 출력
SOTA · With the skill: package.json (t1-npm, run 1, Codex)
{ "name": "app", "version": "1.0.0", "private": true, "scripts": { "prepare": "husky", "test": "vitest run", "typecheck": "tsc --noEmit" }, "devDependencies": { "husky": "^9.1.7", "lint-staged": "^15.5.2", "prettier": "^3.5.3", "typescript": "^5.4.0" } }