| name | investigation-script-loop |
| description | 버그를 재현하는 작은 일회용(throwaway) 스크립트를 직접 짜서 실행하고, 출력을 읽고, 근본 원인이 증명될 때까지 스크립트와 가설을 다듬는 디버깅 루프입니다. 사용자가 "버그 원인 끝까지 파줘", "재현 스크립트 짜서 원인 찾아줘", "왜 이러는지 스크립트로 증명해줘", "추측 말고 출력으로 확인해줘", "throwaway repro로 디버깅", "investigation script loop", "write a repro script to find the root cause", "prove the root cause with a probe script"처럼 추측 대신 실제 출력으로 근본 원인을 규명하고 싶을 때 사용하세요. (구분: 실패한 재현마다 디스크에 reflection을 남겨 같은 오답을 피하는 건 looping:reflexion-debug-loop, 테스트를 전부 통과(green)시키는 건 looping:test-until-green, 간헐 실패를 flaky/real로 분류하는 건 looping:flaky-test-triage, CI 실패를 로컬에서 재현해 고치는 건 looping:fix-ci-until-green) |
조사 스크립트 루프 (Investigation Script Loop)
버그를 재현하는 작은 일회용 스크립트를 짜서 실행하고, 출력을 읽고, 근본 원인이 증명될 때까지 반복합니다.
| 항목 | 값 |
|---|
| 카테고리 | 디버깅(Debugging) |
| 트리거 | 수동(manual) — 사람이 직접 시작 |
| 종료 조건(Exit) | 스크립트 출력으로 근본 원인이 증명되고, 짧은 글 요약으로 정리될 때 |
| 반복 한도(Max iterations) | 8 |
| 매 반복 체크 명령 | node scripts/investigate.mjs |
| 가드레일 | 강화됨(Hardened) |
| 지원 에이전트 | Claude Code · Cursor · Codex |
이 루프는 언제 쓰나
버그가 "왜" 나는지 모르는 채로 코드를 이리저리 고치며 추측에 시간을 쏟게 될 때 씁니다. 머릿속 가설로 본 코드를 바로 손대는 대신, 문제만 콕 집어 재현하는 20줄짜리 일회용 스크립트를 만들어 실행하고, 찍힌 출력(stdout/stderr)을 읽어 가설을 좁힙니다. 추측이 아니라 실제 출력이 근본 원인을 증명할 때까지 스크립트와 메모를 다듬는 게 핵심입니다. 원인이 증명되면 그 스크립트는 버리고, 짧은 요약만 남깁니다.
루프 흐름
수동 시작 → 탐침 스크립트 작성 → 실행하고 출력 읽기 → 가설 수정 →〔피드백 게이트〕근본 원인 증명됨?
↑ │ 아니오
└────────────────────────────────────────────────────────────┘
│ 예
종료
매 반복(pass)마다 하는 일
- 탐침 스크립트 작성 — 버그를 재현하거나 실패 상태를 조회하는 ~20줄 스크립트를 만듭니다. 파일은 하나만.
- 실행하고 출력 읽기 — 스크립트를 실행해 stdout/stderr를 잡아냅니다. 추측 금지 — 실제 출력을 읽습니다.
node scripts/investigate.mjs
- 가설 수정 — 출력을 바탕으로 스크립트나 메모를 갱신합니다. 근본 원인이 증명되면 멈춥니다.
가드레일 (점수 조작 방지 규칙)
종료 조건을 "가짜로" 통과시키지 못하게 막는 규칙입니다. 반드시 지키세요.
- 체크 명령이나 종료 기준을 고쳐서 억지로 성공시키지 않는다.
- 체크를 건너뛰거나 비활성화·우회해서 종료 조건을 통과시키지 않는다.
- 여러 번 반복해도 막히면, 지표를 조작하지 말고 멈추고 블로커를 보고한다.
Claude Code에서 실행하기
가장 간단합니다. 아래 kickoff 프롬프트를 그대로 붙여넣으면 에이전트가 스스로 반복합니다.
"조사 스크립트 루프(Investigation Script Loop)" 루프를 시작합니다.
목표: 최소 재현 스크립트로 근본 원인을 증명한다
최대 반복: 8
매 반복 사이 실행: node scripts/investigate.mjs
종료 조건: 스크립트 출력이 근본 원인을 드러낼 때
1단계: 문제를 재현하는 작은 일회용 스크립트를 작성한다. 실행한 뒤, 출력이 보여주는 내용을 바탕으로 반복한다.
이 루프를 스스로 페이싱(self-pace)하라. 매 반복 후 체크 명령을 실행하고 출력을 읽어, 종료
조건이 충족되지 않았을 때만 계속한다. 종료 조건이 통과하거나 최대 반복에 도달하면 멈춘다.
매 회차마다 한 줄 상태 업데이트를 남긴다.
팁: node scripts/investigate.mjs는 예시입니다. scripts/investigate.mjs는 당신이 새로 짜는 일회용 탐침 스크립트이므로, 스택에 맞춰 python scripts/investigate.py, ruby scripts/investigate.rb, go run ./scripts/investigate.go 등으로 바꾸세요.
팁 / 변형
- 다른 생태계로 교체: 체크 명령은 "방금 짠 탐침 스크립트를 실행"하는 것뿐입니다. 런타임만 바꾸면 됩니다 —
python, ruby, go run, deno run, 심지어 psql -f probe.sql로 DB 상태를 조회해도 됩니다.
- 출력을 좁혀서 읽기: 로그가 길면
node scripts/investigate.mjs 2>&1 | tail -40처럼 꼬리만 잡아 핵심 신호만 보게 하세요.
- 막힐 때: 같은 출력이 2회 반복돼도 가설이 안 좁혀지면 가드레일대로 멈추고, 지금까지의 출력과 남은 의문을 사람에게 보고하게 하세요.
- 연관 루프: 실패한 재현마다 reflection을 남겨 같은 오답을 피하려면
looping:reflexion-debug-loop, 원인을 찾은 뒤 테스트를 green까지 돌리려면 looping:test-until-green, CI 실패를 로컬에서 재현해 고치려면 looping:fix-ci-until-green.
원본 영어 kickoff (loops.elorm.xyz 원문)
Start the "Investigation Script Loop" loop.
Goal: prove the root cause with a minimal repro script
Max iterations: 8
Between iterations run: node scripts/investigate.mjs
Exit when: script output demonstrates root cause
Step 1: Write a tiny throwaway script that reproduces the issue. Run it and iterate on what the output shows.
Self-pace this loop. After each iteration, run the check command, read the output, and only continue if the exit condition is not met. Stop when the exit condition passes or max iterations is reached. Give a short status update each pass.
출처: https://loops.elorm.xyz/loops/investigation-script-loop