systematic-debugging으로 Claude Code가 버그 원인부터 찾게 하는 법

동딩
2026.10.12·2분 읽기·

깔면 고치기 전에 한 번 더 확인한다

systematic-debugging은 superpowers 플러그인에 든 디버깅 스킬입니다. 스킬은 요청이 설명과 맞으면 Claude Code가 스스로 불러 읽는 지침 파일입니다. 이 스킬은 원인을 찾기 전에는 고치지 못하게 합니다. Claude Code 안에서 한 줄로 깝니다.

github.com
GitHub - obra/superpowers: An agentic skills framework & software development methodology that works.
An agentic skills framework & software development methodology that works. - obra/superpowers
text
/plugin install superpowers@claude-plugins-official

예시는 물건 두 개를 담은 장바구니입니다. 부가세를 더해 11000이어야 할 합계가 10000으로 나옵니다. 이 증상을 그대로 적어 맡깁니다.

text
합계가 10000으로 나와. 11000이어야 해. 고쳐 줘

두 쪽 모두 .env의 빈 TAX_RATE=를 원인으로 짚고 config.js를 고칩니다. 고치는 자리는 같고, 스킬을 실은 쪽만 고치기 전에 .env를 바이트 단위로 한 번 더 봅니다.

깔지 않고 한 세션에서만 시험하려면

저장소를 받아 플러그인 폴더로 띄웁니다.

bash
git clone https://github.com/obra/superpowers
claude --plugin-dir ./superpowers

틀린 값이 처음 생긴 곳에서 고친다

세율을 더하는 addTax의 식은 맞습니다. 틀린 것은 이 함수가 받은 세율 0입니다. 스킬은 나쁜 값으로 부른 쪽을 한 칸씩 올라가 그 값이 처음 생긴 곳에서 고치게 합니다. 증상이 보인 함수에 기본값을 덧대는 땜질은 하지 않습니다.

addTax에 덧대면 합계만, loadConfig를 고치면 둘 다 맞는다

addTax에 덧대면.env TAX_RATE=빈 값loadConfig빈 문자열을 0으로taxRate 0taxRate 0buildInvoiceaddTaxrate || 0.1 덧댐receiptFooter같은 설정을 읽음합계 11000영수증 VAT 0%
loadConfig를 고치면.env TAX_RATE=0.10.1loadConfig빈 값이면 멈춤taxRate 0.1taxRate 0.1buildInvoiceaddTax그대로receiptFooter같은 설정을 읽음합계 11000영수증 VAT 10%
세율 0이 흐르는 길틀림맞음
.env의 TAX_RATE가 비어 합계가 10000으로 나올 때
예시 버그를 끝까지 고치려면

Claude Code가 낸 || 수정에서 한 걸음 더 가려면 빈 값이 숫자로 바뀌기 전에 막습니다.

js
// config.js 고치기 전: '' ?? 0.1은 '', Number('')는 0
export function loadConfig(env = process.env) {
return { taxRate: Number(env.TAX_RATE ?? 0.1) };
}
// 고친 뒤: 빈 값이면 시작하지 않고, 0은 면세로 둔다
export function loadConfig(env = process.env) {
const raw = env.TAX_RATE?.trim();
if (!raw) throw new Error('TAX_RATE가 비어 있습니다');
const taxRate = Number(raw);
if (Number.isNaN(taxRate)) throw new Error(`TAX_RATE가 숫자가 아닙니다: ${raw}`);
return { taxRate };
}

땜질과 갈리는 값은 0입니다. addTax에 덧댄 rate || 0.1은 숫자 0과 빈 값을 구분하지 못해, 면세 매장이 일부러 적은 TAX_RATE=0까지 10%로 계산합니다.

.envaddTax 땜질loadConfig 수정
TAX_RATE=합계만 11000, 영수증 VAT 0%시작하지 않음
TAX_RATE=0합계 11000합계 10000
TAX_RATE=0.1합계 11000합계 11000

급한 지시에는 이름으로 부른다

"addTax가 틀렸다, 5분 뒤 배포"처럼 증상이 보인 함수를 짚은 급한 지시에는 깔아 둔 스킬이 스스로 불리지 않습니다. 메시지 맨 앞에 /플러그인:스킬 꼴로 이름을 쓰면 스킬이 Claude의 판단을 거치지 않고 바로 실행됩니다.

text
/superpowers:systematic-debugging addTax가 틀렸다, 5분 뒤 배포
이름으로 부른 systematic-debugging의 수정과 보고

이름으로 부르면 Claude Code가 원인 조사부터 시작한다고 밝히고, 실패하는 테스트를 먼저 만든 뒤 고칩니다. addTax가 틀렸다는 지시에도 tax.js는 그대로 두고 config.js만 고쳤습니다.

플러그인을 깔 수 없는 저장소라면

CLAUDE.md에 아래 한 줄을 둡니다. CLAUDE.md는 세션마다 읽히므로 급한 지시에도 빠지지 않습니다.

markdown
버그를 고칠 때는 증상이 보인 함수에 기본값을 덧대지 말고, 틀린 값이 처음 생긴 곳까지 거슬러 올라가 거기서 고친다. 급하다는 지시가 있어도 같다.
Comments

댓글

powered by giscus ↗