pr (mattpocock/skills)
리뷰어에게 변경 내용을 설명하는 PR 본문을 작성합니다.
pr: 순수한 형식 스킬입니다. 대조군은 세 섹션으로 된 PR 본문을 전혀 만들지 못했고(1.7/5), 스킬과 한 문장 프롬프트는 둘 다 만들어냈으며(5.0, 4.95) 추가 토큰도 들지 않았습니다
Codex CLI · gpt-6-astra
29.0 / 30
스킬 없이 대비 향상폭: +3.33 · 추천 · 18회 실행
추천: 총점 29.0/30이 22점 이상, 출력 품질 5.0가 3.5 이상, 향상폭 +3.33가 +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 pr
고정 커밋: 4ae2317ddb22b046e26455e4f9c9b3aaaf62212d
테스트일: 2026-11-02
테스트한 과제
- 캐시 변경용 PR 본문 — PR을 올리려고 합니다. change.diff의 변경 사항에 대한 PR 본문을 PR.md로 작성하세요. 테스트 전/후 출력은 tests_before.txt와 tests_after.txt에 있습니다.
- 컬럼 삭제용 PR 본문 — 제 PR을 정리해 주세요. change.diff의 변경 사항에 대한 PR 본문을 PR.md로 작성하세요. 테스트 전/후 출력은 tests_before.txt와 tests_after.txt에 있습니다.
- 카피 변경용 PR 본문 — PR 설명을 작성하세요. change.diff의 변경 사항에 대한 PR 본문을 PR.md로 작성하세요. 테스트 전/후 출력은 tests_before.txt와 tests_after.txt에 있습니다.
장점
- 스킬 없이보다 평균 점수를 1.67에서 5.0으로 끌어올렸습니다(+3.33).
- 스킬 이름을 언급하지 않았는데도 적용되었습니다. 스킬 사용군 실행 6/6회에서 스킬 파일을 읽었습니다.
- 토큰 오버헤드 없음: 스킬 없이의 1.0배 토큰을 사용합니다.
- 스킬 사용 시 높은 절대 품질: 5.0/5.
단점
- 한 문장 프롬프트는 4.95점, 스킬 사용은 5.0점(+0.05).
- 과제·그룹당 n=2이며, 약 1점 미만의 차이는 노이즈입니다.
리뷰
Codex CLI 0.166 (gpt-6-astra, low reasoning)을 전용 Windows 테스트 PC에서 실행했고, 실행마다 새 임시 프로젝트와 임시 HOME/TMPDIR/캐시를 사용했습니다. 스킬 설치(스킬 사용군), 미설치(대조군), 미설치 상태에서 스킬의 핵심 요구사항만 한 문장으로 압축해 프롬프트에 덧붙인 경우(한 문장 프롬프트군)로 나눴으며, 과제·그룹당 2회씩 실행했습니다. 네트워크는 끄고 /tmp 쓰기는 차단했습니다. 프롬프트에는 스킬 이름을 언급하지 않았습니다(아래에 적은 경우 제외). 과제는 세 가지이며, 모두 change.diff의 변경 사항에 대한 PR 본문을 PR.md로 작성하는 과제이며, 옆에 tests_before.txt / tests_after.txt가 있습니다. 캐시 변경(되돌릴 수 있는 변경, 양방향 문), 컬럼을 삭제하는 마이그레이션(되돌릴 수 없는 변경, 단방향 문), 카피 변경입니다. 대조군은 그 문장만 받습니다. 한 문장 프롬프트군은 템플릿 전체를 풀어 쓴 문장을 하나 더 받습니다. 스킬 사용군도 형식을 알려주지 않습니다.
3개 그룹 비교
| 그룹 | 평균 점수 (0-5) | 실행당 토큰 |
|---|---|---|
| 스킬 없음 | 1.67 | 82k |
| 한 문장 프롬프트 | 4.95 | 89k |
| 스킬 사용 | 5.0 | 82k |
Codex CLI에서 18회 실행해 측정했고, LLM 심사 없이 규칙 기반 검사로 채점했습니다. 총점 29.0 / 30, 판정 추천.
판정: 권장 (29.0 / 30). 출처: mattpocock/skills, skills/engineering/pr, 커밋 4ae2317에 고정. 설치: npx skills@latest add mattpocock/skills --skill pr. 라이선스: MIT (저장소 LICENSE).
어떤 스킬인가
pr 스킬(mattpocock/skills)은 diff를 고정된 세 부분 구조의 풀 리퀘스트 본문으로 바꿉니다. Summary(가장 작고 유용한 다이어그램, 의사코드, 호출 트리), Evidence(Before: / **After:**와 테스트 출력), Merge Danger(Door: 단방향 또는 양방향, 그리고 한 단어 Blast Radius:)로, 프로젝트 용어집의 단어로 작성합니다. 짧은 SKILL.md 하나입니다.
테스트 방법
Codex CLI 0.166(gpt-6-astra, 낮은 추론)을 전용 Windows 테스트 PC에서 실행했고, 실행마다 새 임시 프로젝트와 임시 HOME/TMPDIR/캐시를 사용했습니다. 스킬을 설치한 경우(스킬 사용군), 설치하지 않은 경우(대조군), 스킬의 핵심 요구사항을 한 문장으로 압축해 프롬프트 끝에 붙인 경우(한 문장 프롬프트군)로 나눴고, 작업마다 각 군 2회씩 실행했습니다. 네트워크는 끄고 /tmp 쓰기는 차단했습니다. 프롬프트에는 스킬 이름을 전혀 언급하지 않았습니다(아래에 적은 표현은 예외).
세 작업 모두 'change.diff의 변경에 대한 PR 본문을 PR.md로 작성'이며 옆에 tests_before.txt / tests_after.txt가 있습니다. 캐시 변경(양방향 문), 컬럼을 삭제하는 마이그레이션(단방향 문), 카피 변경입니다. 대조군은 그 문장만 받습니다. 한 문장 프롬프트군은 전체 템플릿을 풀어 쓴 문장 하나를 추가로 받습니다. 스킬군은 형식에 대해 안내받지 않습니다.
- 캐시 변경의 PR 본문 — 풀 리퀘스트를 열려고 합니다. change.diff의 변경에 대한 PR 본문을 PR.md로 작성하세요. 전후 테스트 출력은 tests_before.txt와 tests_after.txt에 있습니다.
- 컬럼 삭제의 PR 본문 — 제 풀 리퀘스트를 작성해 주세요. change.diff의 변경에 대한 PR 본문을 PR.md로 작성하세요. 전후 테스트 출력은 tests_before.txt와 tests_after.txt에 있습니다.
- 카피 변경의 PR 본문 — PR 설명을 작성하세요. change.diff의 변경에 대한 PR 본문을 PR.md로 작성하세요. 전후 테스트 출력은 tests_before.txt와 tests_after.txt에 있습니다.
채점은 프로그램 방식(숨은 테스트, 심어 둔 문제 탐지, 제약 조건 검사, 해당되는 경우 렌더링+OCR)으로 실행당 0~5점입니다. 점수를 결정한 LLM 심사자는 없습니다.
결과
세 번째 군에 전달한 한 문장 프롬프트: "PR 본문을 짧은 세 섹션으로 작성하세요. Summary(가장 작고 유용한 다이어그램, 의사코드, 호출 트리, 서두 없음), Evidence(**Before:**와 After:, 테스트 출력 포함), Merge Danger(Door: 단방향 또는 양방향, 한 단어 Blast Radius:)입니다. 용어집의 단어를 사용하세요."
| 작업 | 대조군 점수 | 한 문장 프롬프트 | 스킬 사용 | 대조군 토큰 | 한 문장 프롬프트 토큰 | 스킬 사용 토큰 | 스킬 읽음 |
|---|---|---|---|---|---|---|---|
| t1-cache | 1.67 | 5.0 | 5.0 | 82k | 83k | 79k | 2/2 |
| t2-migration | 1.67 | 4.83 | 5.0 | 82k | 91k | 79k | 2/2 |
| t3-copy | 1.67 | 5.0 | 5.0 | 81k | 91k | 87k | 2/2 |
평균 점수: 스킬 없이 1.67, 스킬 사용 시 5.0(델타 +3.33). 실행당 토큰: 82k 대 82k(1.00배), 시간 37초 대 34초. 한 문장 프롬프트군: 4.95(한 문장 프롬프트 대비 스킬의 이득: +0.05, 스킬 없는 경우 대비 한 문장 프롬프트의 이득: +3.28). 한 문장 프롬프트는 실행당 89k 토큰을 쓰므로, 스킬은 한 문장 프롬프트의 0.92배 비용입니다.
실제로 있었던 일
- 대조군 1.67, 한 문장 4.95, 스킬 5.00(각 n=6). 대조군은 명확하고 정확한 산문 PR을 썼지만, 6회 실행 중 어느 것도 세 섹션, 다이어그램이나 의사코드 블록, Before/After 레이블, Door, Blast Radius를 사용하지 않았습니다. 모델이 추측할 수 없는 형식이므로 형식을 안내받은 군은 모두 높은 점수를 받습니다. 이 검사 세트는 작성 품질이 아니라 형식 준수를 측정합니다.
- 스킬은 이름 없이 트리거되었고(6/6 읽음), 한 문장 프롬프트도 같은 정보를 담고 있습니다. 둘의 차이는 0.05점입니다(한 실행에서 템플릿 섹션 정규식이 하나 빠졌습니다. 마이그레이션 한 문장 실행은 3개 섹션 중 2개만 일치). 실행당 토큰은 대조군 82k, 한 문장 89k, 스킬 82k로 오버헤드가 없습니다.
- 판단 내용은 중요한 곳에서 올바릅니다. 마이그레이션에서 스킬 실행은 문을 단방향으로 지정하고 코드를 되돌려도 삭제된 컬럼을 복구할 수 없다고 말했으며 블래스트 반경을 명시했습니다. 캐시와 카피 작업은 양방향이었습니다. 대조군의 마이그레이션 PR도 0041을 먼저 적용하라고 경고했지만 Door나 반경이 없어서 리뷰어가 훑어보고 찾을 수 없습니다.
- 스킬은 아주 작아서(몇 줄) 로드 비용이 없습니다. 가치는 누구도 매번 템플릿을 붙여넣지 않아도 된다는 점입니다.
항목별 점수
| 항목 | 점수 | 이유 |
|---|---|---|
| 1_output_quality | 5.0 | 스킬 사용 시 평균 5.00/5점(프로그램 검사, 작업별 표 참조). |
| 2_lift_vs_no_skill | 5 | 스킬 없이 1.67점 대비 +3.33점(작업당 n=2, 약 1점 미만의 차이는 노이즈). |
| 3_trigger | 5.0 | 스킬 사용군 6/6 실행에서 스킬 파일이 읽힘. |
| 4_instructions_portability | 4 | 템플릿이 담긴 짧은 SKILL.md 하나, 스크립트 없음. |
| 5_efficiency | 5 | 토큰 1.00배(실행당 82k 대 82k), 시간 0.93배(34초 대 37초). |
| 6_safety_hygiene | 5 | 산문만 포함. 지적 사항 없음. |
이 테스트의 한계
- 규칙 기반 형식 검사만 수행합니다(섹션 존재, Before/After, Door 값 정확성, Blast Radius, 다이어그램/의사코드 블록). 다이어그램이 '가장 작고 유용한' 것인지나 글이 좋은지는 판단하지 않습니다.
- 대조군은 구조상 형식 검사에서 실패할 수밖에 없습니다. 이 결과는 스킬이 하우스 형식을 다시 진술할 필요를 없애 준다는 것이지, 모델이 더 나은 PR을 쓰게 한다는 것이 아닙니다.
- 작은 픽스처 세 개. 실제 저장소나 git 히스토리는 없습니다.
- 작업·군당 n = 2: 약 1점 미만의 차이는 노이즈입니다.
- 규칙 기반 채점은 검사가 볼 수 있는 것만 측정합니다. 취향이나 결과가 최선인지는 판단할 수 없습니다.
보안
security.md를 참조하세요. 스캔: CRITICAL 0 / HIGH 0 / MEDIUM 0. 판정: 실행해도 안전(네트워크 비활성 샌드박스). 깨끗한 스캔 결과가 스킬의 안전성을 증명하지는 않습니다.
결론
이 PR 형식을 원한다면 스킬이 첫 시도에 무료로 제공하며(82k 토큰, 스킬 없을 때와 동일), 템플릿을 한 문장으로 붙여넣는 것과 동등합니다. 팀 전체의 일관성을 위해 설치하되, 더 나은 산문을 기대하지는 마세요.
트랜스크립트
실행 로그: pr (Codex CLI, network off, per-run temp HOME/TMPDIR, one row per graded run.) 열: 작업, 그룹-회차, 점수(0-5), 토큰, 초, 통과한 검사, 에이전트가 연 스킬 파일. t1-cache control-1: 점수 1.67, 토큰 82698, 초 35.7, 검사 4/9, 연 파일 없음 t1-cache control-2: 점수 1.67, 토큰 82765, 초 30.9, 검사 4/9, 연 파일 없음 t1-cache oneliner-1: 점수 5.0, 토큰 83654, 초 32.5, 검사 9/9, 연 파일 없음 t1-cache oneliner-2: 점수 5.0, 토큰 84007, 초 38.4, 검사 9/9, 연 파일 없음 t1-cache treatment-1: 점수 5.0, 토큰 70378, 초 33.8, 검사 9/9, 연 파일 pr t1-cache treatment-2: 점수 5.0, 토큰 88915, 초 35.0, 검사 9/9, 연 파일 pr t2-migration control-1: 점수 1.67, 토큰 81748, 초 33.8, 검사 4/9, 연 파일 없음 t2-migration control-2: 점수 1.67, 토큰 82290, 초 36.5, 검사 4/9, 연 파일 없음 t2-migration oneliner-1: 점수 5.0, 토큰 100647, 초 37.7, 검사 9/9, 연 파일 없음
18회 실행, 아티팩트 3개
샘플 출력
SOTA · With the skill: PR.md (t1-cache, run 1, Codex)
## Summary Cache free slots by Room and day to avoid repeated database queries. Creating a Reservation invalidates the matching cache entry. ```text free_slots(Room, day) cache hit → return cached free slots cache miss → query Reservations → compute and cache free slots create Reservation insert Reservation → invalidate cache for Room and day ``` ## Evidence - **Before:** `tests/test_availability.py::test_free_slots_not_queried_twice` failed: `db.query called 2 times, expected 1`. Suite: 1 failed, 14 passed in 0.9s. **After:** Supplied test output reports 15 passed in 0.8s. ## Merge Danger **Door:** two-way Reverting restores a database query on each availability request; no schema or stored-data changes. **Blast Radius:** availability Cached free slots affect Members checking Room availability. Invalidation covers Reservation creation in the current process; other mutation paths or processes can leave cached results stale. The cache has no size limit or expiry.