systematic-debugging (obra/superpowers)
버그, 테스트 실패, 예기치 않은 동작을 수정안을 내기 전에 체계적으로 조사합니다.
superpowers-systematic-debugging: 작은 버그 세 개에서 측정 가능한 이득이 없고 토큰을 약 1.3배 사용합니다.
Codex CLI · gpt-6-astra
22.4 / 30
스킬 없이 대비 향상폭: +0.00 · 상황에 따라 · 18회 실행
상황에 따라: 향상폭 +0.00가 +1.0 미만. 추천이 되려면 총점 22/30, 출력 품질 3.5, 향상폭 +1.0이 필요합니다.
SOTA
통과Codex로 테스트
커버 대상 Codex, Claude Code
Codex CLI 0.166 (SOTA 티어): 채점된 실행 18회. 여기서 통과하면 티어 규칙에 따라 Claude Code도 커버되지만, 두 번째 티어에 대해서는 아무것도 말해주지 않습니다.
점수
각 차원은 0~5점이며 여섯 차원을 더하면 30점 만점의 총점이 됩니다. 모든 차원에서 5가 가장 좋습니다. 비용 5는 저렴하고 빠름, 설치 5는 쉬움을 뜻합니다.
- 트리거 신뢰도
- 5.0
- 스킬 없이 대비 향상폭
- 2.0
- 출력 품질
- 4.5
- 토큰 및 시간 비용
- 3.0
- 설치 및 이식성
- 4.0
- 안전성
- 4.0
보안 리뷰
안전정적 스캔: CRITICAL 0 / HIGH 0 / MEDIUM 0. 수동 검토: 네트워크가 차단된 샌드박스에서 실행 안전(발견 사항 없음). 스캔이 깨끗하다고 해서 스킬이 안전하다는 증거는 아닙니다.
설치
npx skills@latest add obra/superpowers --skill systematic-debugging
고정 커밋: 2ce8aa15d05bd57213e6f746f953aafb7ded7a8b
테스트일: 2026-11-02
테스트한 과제
- 작은 함수의 오프바이원 오류 — movavg.py의 moving_average가 잘못된 숫자를 반환합니다. moving_average([2, 4, 6, 8, 10], 3)은 [2, 3, 4, 6, 8]이어야 하는데 뒤쪽 값이 잘못 나옵니다. 원인을 찾아 수정하세요. 테스트: python3 -m unittest.
- 파일 간 날짜 버그 — 주간 보고서 헤더가 연말연시에 잘못된 날짜를 표시합니다. 예를 들어 header('2026-W01')은 'Week 2026-W01: Dec 29 - Jan 04, 2026'이어야 합니다. 원인을 찾아 수정하세요.
- 실행 순서에 따라 달라지는 테스트 실패 — tests/test_settings.py의 테스트는 단독으로 실행하면 통과하지만 파일 전체를 실행하면 test_b가 실패하고, 설정이 이전 호출의 태그를 이어받는 것 같습니다. 진단하고 수정하세요.
장점
- 스킬 이름을 언급하지 않았는데도 적용되었습니다. 스킬 사용군 실행 6/6회에서 스킬 파일을 읽었습니다.
단점
- 스킬 없이보다 측정 가능한 향상 없음(+0.00, 노이즈 범위 안).
- 한 문장 프롬프트는 4.86점, 스킬 사용은 4.45점(-0.42).
- 테스트 참고: 한 문장 프롬프트군(6회 실행)은 나중에 대조군·스킬 사용군과 다른 머신에서 추가한 그룹입니다.
- 과제·그룹당 n=2이며, 약 1점 미만의 차이는 노이즈입니다.
리뷰
Codex CLI 0.166 (gpt-6-astra, low reasoning)을 Mac 테스트 머신에서 실행했고, 실행마다 새 임시 프로젝트와 임시 HOME/TMPDIR/캐시를 사용했습니다. 스킬 설치(스킬 사용군), 미설치(대조군), 미설치 상태에서 스킬의 핵심 요구사항만 한 문장으로 압축해 프롬프트에 덧붙인 경우(한 문장 프롬프트군)로 나눴으며, 과제·그룹당 2회씩 실행했습니다. 네트워크는 끄고 /tmp 쓰기는 차단했습니다. 프롬프트에는 스킬 이름을 언급하지 않았습니다. 채점은 프로그램 기반(숨은 테스트 / 심어 둔 문제 회수 / 제약 조건 검사 / 해당되는 경우 렌더링+OCR)으로 실행당 0–5점입니다. 어떤 점수도 LLM 심사자가 결정하지 않았습니다.
3개 그룹 비교
| 그룹 | 평균 점수 (0-5) | 실행당 토큰 |
|---|---|---|
| 스킬 없음 | 4.45 | 75k |
| 한 문장 프롬프트 | 4.86 | 98k |
| 스킬 사용 | 4.45 | 99k |
Codex CLI에서 18회 실행해 측정했고, LLM 심사 없이 규칙 기반 검사로 채점했습니다. 총점 22.4 / 30, 판정 상황에 따라.
참고: 한 문장 프롬프트군(6회)은 나중에 다른 머신에서 추가되어 대조군·스킬 사용군과 환경이 다릅니다.
판정: 상황에 따라 다름 (22.4 / 30). 출처: obra/superpowers, skills/systematic-debugging, 커밋 2ce8aa1에 고정. 설치: npx skills@latest add obra/superpowers --skill systematic-debugging. 라이선스: MIT (저장소 LICENSE).
어떤 스킬인가
obra/superpowers의 systematic-debugging 스킬입니다. '버그, 테스트 실패, 예상치 못한 동작을 만나면 수정을 제안하기 전에 사용'하라고 되어 있습니다. 네 단계(근본 원인 조사, 패턴 찾기, 가설, 수정), 수정을 겹쳐 쌓지 말라는 규칙, 동반 노트(근본 원인 추적, 심층 방어, 조건 기반 대기), 테스트 압박 시나리오, 셸 스크립트 하나(find-polluter.sh, 테스트 파일에 대한 로컬 이분 탐색)로 구성됩니다.
테스트 방법
Codex CLI 0.166(gpt-6-astra, 낮은 추론)을 Mac 테스트 머신에서 실행했고, 실행마다 새 임시 프로젝트와 임시 HOME/TMPDIR/캐시를 사용했습니다. 스킬을 설치한 경우(스킬 사용군), 설치하지 않은 경우(대조군), 스킬의 핵심 요구사항을 한 문장으로 압축해 프롬프트 끝에 붙인 경우(한 문장 프롬프트군)로 나눴고, 작업마다 각 군 2회씩 실행했습니다. 네트워크는 끄고 /tmp 쓰기는 차단했습니다. 프롬프트에는 스킬을 전혀 언급하지 않았습니다.
- 작은 함수의 오프바이원 — movavg.py의
moving_average가 잘못된 숫자를 반환합니다. moving_average([2, 4, 6, 8, 10], 3)은 [2, 3, 4, 6, 8]이어야 하는데 뒤쪽 값이 틀립니다. 원인을 찾아 수정하세요. 테스트:python3 -m unittest. - 파일 간 날짜 버그 — 주간 보고서 머리글이 연말 즈음 잘못된 날짜를 표시합니다. 예를 들어 header('2026-W01')은 'Week 2026-W01: Dec 29 - Jan 04, 2026'이어야 합니다. 원인을 찾아 수정하세요.
- 순서 의존 테스트 실패 — tests/test_settings.py의 테스트는 개별적으로는 통과하지만 파일 전체를 실행하면
test_b가 실패하고, configs가 이전 호출의 태그를 이어받는 것 같습니다. 진단하고 수정하세요.
채점은 프로그램 방식(숨은 테스트, 심어 둔 문제 탐지, 제약 조건 검사, 해당되는 경우 렌더링+OCR)으로 실행당 0~5점입니다. 점수를 결정한 LLM 심사자는 없습니다.
결과
세 번째 군에 전달한 한 문장 프롬프트: "체계적으로 디버깅하세요. 먼저 실패를 재현하고, 코드를 바꾸기 전에 근본 원인을 조사해 증거와 함께 한 번에 가설 하나를 세우고, 근본 원인에 대한 가장 작은 수정을 하며(추측을 겹쳐 쌓지 않음), 테스트로 검증하세요."
| 작업 | 대조군 점수 | 한 문장 프롬프트 | 스킬 사용 | 대조군 토큰 | 한 문장 프롬프트 토큰 | 스킬 사용 토큰 | 스킬 읽음 |
|---|---|---|---|---|---|---|---|
| t1-moving-average | 4.17 | 4.58 | 4.58 | 60k | 62k | 69k | 2/2 |
| t2-weekly-dates | 4.17 | 5.0 | 4.17 | 78k | 104k | 109k | 2/2 |
| t3-shared-state | 5.0 | 5.0 | 4.58 | 85k | 127k | 118k | 2/2 |
평균 점수: 스킬 없이 4.45, 스킬 사용 시 4.45(델타 +0.0). 실행당 토큰: 75k 대 99k(1.33배), 시간 34초 대 45초. 한 문장 프롬프트군: 4.86(한 문장 프롬프트 대비 스킬의 이득: -0.42, 스킬 없는 경우 대비 한 문장 프롬프트의 이득: +0.42). 한 문장 프롬프트는 실행당 98k 토큰을 쓰므로, 스킬은 한 문장 프롬프트의 1.01배 비용입니다.
실제로 있었던 일
- 결과: 두 군의 모든 실행에서 숨은 테스트가 통과했으므로 정확성에는 차이가 없었습니다.
- 과정 검사 '코드를 편집하기 전에 테스트를 실행했는가'(먼저 재현): 대조군은 6회 중 4회 놓쳤고, 스킬 사용군도 6회 중 4회 놓쳤습니다. 스킬의 첫 단계가 '재현'인데도 스킬을 가진 에이전트는 여전히 아무것도 실행하기 전에 패치하는 경우가 많았습니다.
- 스킬은 스킬 사용군 6/6 실행에서 읽혔으므로 발동은 문제가 아닙니다. 다만 이런 작은 버그에서는 행동을 바꾸지 못했습니다(버그는 코드를 읽어 찾을 수 있었습니다).
- 비용: 실행당 토큰이 약 1.3배(89k 대 67k).
- 한 문장 버전(먼저 재현, 한 번에 가설 하나, 가장 작은 수정, 검증): 평균 4.86으로 대조군 4.45, 스킬 4.45보다 높았고, 실행당 98k 토큰으로 대조군 75k(1.3배), 스킬 99k(1.0배)였습니다.
- 차이는 편집 전에 테스트를 실행했는지에 있습니다. 한 문장 프롬프트는 6회 중 5회 테스트를 실행했고, 대조군은 6회 중 2회, 스킬은 6회 중 2회뿐이었습니다. 그 행동을 바꾼 것은 스킬이 아니라 그것을 문장으로 명시한 쪽입니다. 모든 군이 모든 실행에서 근본 원인을 설명하고 작은 diff로 모든 숨은 테스트를 통과했습니다.
항목별 점수
| 항목 | 점수 | 이유 |
|---|---|---|
| 1_output_quality | 4.45 | 스킬 사용 시 평균 4.45/5점(프로그램 검사, 작업별 표 참조). |
| 2_lift_vs_no_skill | 2.0 | 스킬 없이 4.45점 대비 +0.00점(작업당 n=2, 약 1점 미만의 차이는 노이즈). |
| 3_trigger | 5.0 | 스킬 사용군 6/6 실행에서 스킬 파일이 읽힘. |
| 4_instructions_portability | 4 | |
| 5_efficiency | 3 | 토큰 1.33배(실행당 99k 대 75k), 시간 1.32배(45초 대 34초). |
| 6_safety_hygiene | 4 |
이 테스트의 한계
- 심어 둔 작은 버그 세 개(오프바이원, 파일 간 날짜 로직, 순서 의존 테스트 오염)로, 기준선도 고칠 만큼 쉬운 것들입니다.
- 이 스킬은 여러 번 시도해야 하는 어려운 버그를 위해 설계됐습니다. 그런 버그는 테스트하지 않았습니다.
find-polluter.sh는 실행해 보지 않았습니다.- 작업·군당 n = 2: 약 1점 미만의 차이는 노이즈입니다.
- 규칙 기반 채점은 검사가 볼 수 있는 것만 측정합니다. 취향이나 결과가 최선인지는 판단할 수 없습니다.
보안
security.md를 참조하세요. 스캔: CRITICAL 0 / HIGH 0 / MEDIUM 0. 판정: 실행해도 안전(네트워크 비활성 샌드박스). 깨끗한 스캔 결과가 스킬의 안전성을 증명하지는 않습니다.
결론
작은 버그 세 개에서 스킬은 토큰을 약 1.3배 더 쓰고 측정 가능한 변화를 만들지 못했습니다. 대조군과 스킬 모두 4.45점이었고, 편집 전에 테스트를 실행한 것도 둘 다 6회 중 2회뿐이었습니다. '먼저 재현하라'고 말한 한 문장 버전이 더 나았습니다(4.86, 6회 중 5회). 더 어려운 버그에서는 값어치를 할 수 있지만, 그 부분은 테스트하지 않았습니다.
트랜스크립트
실행 로그: systematic-debugging (Codex CLI, network off, per-run temp HOME/TMPDIR, one row per graded run.) 열: 작업, 그룹-회차, 점수(0-5), 토큰, 초, 통과한 검사, 에이전트가 연 스킬 파일. t1-moving-average control-1: 점수 4.17, 토큰 60337, 초 30.6, 검사 3/4, 연 파일 없음 t1-moving-average control-2: 점수 4.17, 토큰 60293, 초 24.1, 검사 3/4, 연 파일 없음 t1-moving-average oneliner-1: 점수 4.17, 토큰 62543, 초 30.2, 검사 3/4, 연 파일 없음 t1-moving-average oneliner-2: 점수 5.0, 토큰 62033, 초 32.0, 검사 4/4, 연 파일 없음 t1-moving-average treatment-1: 점수 5.0, 토큰 69716, 초 31.0, 검사 4/4, 연 파일 systematic-debugging t1-moving-average treatment-2: 점수 4.17, 토큰 69385, 초 26.6, 검사 3/4, 연 파일 systematic-debugging t2-weekly-dates control-1: 점수 4.17, 토큰 78575, 초 38.8, 검사 3/4, 연 파일 없음 t2-weekly-dates control-2: 점수 4.17, 토큰 78005, 초 39.5, 검사 3/4, 연 파일 없음 t2-weekly-dates oneliner-1: 점수 5.0, 토큰 96141, 초 41.5, 검사 4/4, 연 파일 없음
18회 실행, 아티팩트 3개
샘플 출력
SOTA · With the skill: movavg.py (t1-moving-average, run 1, Codex)
def moving_average(values, window): """Trailing moving average. Output i is the mean of the last `window` values ending at index i. For i < window - 1 only the values available so far are used. Raises ValueError if window < 1. """ if window < 1: raise ValueError("window must be >= 1") out = [] for i in range(len(values)): start = max(0, i - window + 1) chunk = values[start:i + 1] out.append(sum(chunk) / len(chunk)) return out