| name | reflexion-debug-loop |
| description | 디버깅이 같은 잘못된 수정을 빙빙 도는 걸 막아주는 디버깅 루프입니다. 재현(repro)에 실패할 때마다 무엇을 시도했고 왜 실패했는지, 다음엔 뭘 피할지 한 줄 회고를 `.loops/reflexion.md`에 적어 두고, 그 기억을 읽은 뒤 이전과 다른 표적 수정을 시도해 이전에 실패하던 테스트가 통과(종료 코드 0)할 때까지 반복합니다. 사용자가 "이 버그 계속 못 고치겠어 회고 남기면서 디버그해줘", "같은 수정 반복하지 말고 기록하면서 고쳐줘", "리플렉션 디버그", "회고 기반 디버깅 루프", "reflexion debug loop", "debug with reflection memory", "stop repeating the same failed fix"처럼 요청하거나, 디버깅이 제자리걸음일 때 사용하세요. (구분: 버려도 되는 재현 스크립트를 짜서 근본 원인을 증명하는 건 looping:investigation-script-loop, 같은 실패가 두 번 나면 가드레일을 .ralph/guardrails.md에 적는 건 looping:guardrails-learning-loop, 전체 테스트 스위트를 그냥 green까지 돌리는 건 looping:test-until-green, 불안정·간헐 실패를 분류하는 건 looping:flaky-test-triage) |
리플렉션 디버그 루프 (Reflexion Debug Loop)
재현(repro)에 실패할 때마다 짧은 회고를 디스크에 적고, 그 기억을 안고 다시 시도 — 같은 잘못된 수정을 반복하지 않습니다.
| 항목 | 값 |
|---|
| 카테고리 | 디버깅(Debugging) |
| 트리거 | 수동(manual) — 사람이 직접 시작 |
| 종료 조건(Exit) | repro 테스트가 종료 코드 0으로 끝날 때 |
| 반복 한도(Max iterations) | 8 |
| 매 반복 체크 명령 | npm test -- --testNamePattern=<failing-test> |
| 설치 파일 | 있음 — .loops/reflexion.md가 디스크에 있어야 함 |
| 가드레일 | 강화됨(Hardened) |
| 지원 에이전트 | Claude Code · Cursor |
이 루프는 언제 쓰나
까다로운 버그를 붙잡고 있을 때, 에이전트(혹은 사람)는 같은 잘못된 수정을 조금씩 바꿔가며 무한히 시도하는 함정에 빠지기 쉽습니다. 이전 시도를 기억하지 못하니 한 바퀴를 또 돕니다.
이 루프는 거기에 외부 메모리를 붙입니다. 재현에 실패할 때마다 "무엇을 시도했고, 무엇이 실패했고, 다음 패스에서 피할 가설 하나"를 .loops/reflexion.md에 한 줄씩 덧붙입니다. 다음 패스를 시작할 때 그 파일을 먼저 읽고, 앞선 시도와는 다른 수정을 — 증상이 아니라 근본 원인을 — 시도합니다. AI 에이전트 연구에서 말하는 "Reflexion"(자기 회고로 학습) 기법을 디버깅에 그대로 옮긴 것입니다.
같은 헛수고를 반복하지 않으니, 막다른 길을 빠르게 소거하고 진짜 원인으로 수렴합니다.
루프 흐름
수동 시작 → 버그 재현 → 실패 회고 기록(.loops/reflexion.md) → 표적 수정 →〔피드백 게이트〕이전에 실패하던 테스트 통과?
↑ │ 아니오
└────────────────────────────────────────────────────────────────────────────┘
│ 예
종료
매 반복(pass)마다 하는 일
- 버그 재현 — 최소 재현 절차 또는 실패하는 테스트를 돌리고, 정확한 에러 출력을 그대로 수집합니다.
npm test -- --testNamePattern=<failing-test>
- 실패 회고 기록 —
.loops/reflexion.md에 덧붙입니다: 이번에 무엇을 시도했는지, 무엇이 실패했는지, 다음 패스에서 피할 가설 하나.
- 표적 수정 —
reflexion.md를 읽고, 앞선 시도들과 다른 수정을 적용합니다. 증상보다 근본 원인을 우선합니다.
가드레일 (점수 조작 방지 규칙)
종료 조건을 "가짜로" 통과시키지 못하게 막는 규칙입니다. 반드시 지키세요.
- 체크 명령이나 종료 기준을 고쳐서 억지로 성공시키지 않는다.
- 체크를 건너뛰거나 비활성화·우회해서 종료 조건을 통과시키지 않는다.
- 여러 번 반복해도 막히면, 지표를 조작하지 말고 멈추고 블로커를 보고한다.
Claude Code에서 실행하기
이 루프는 수동(manual) 트리거입니다. 아래 kickoff 프롬프트를 그대로 붙여넣으면 에이전트가 스스로 반복합니다.
먼저 회고 메모리 파일이 디스크에 있어야 합니다. 없으면 한 번 만들어 두세요.
mkdir -p .loops && touch .loops/reflexion.md
그다음 kickoff를 붙여넣습니다.
"리플렉션 디버그(Reflexion Debug Loop)" 루프를 시작합니다.
목표: 실패하던 테스트 또는 repro가 통과
최대 반복: 8
매 반복 사이 실행: npm test -- --testNamePattern=<failing-test>
종료 조건: repro 테스트가 종료 코드 0으로 끝날 때
1단계: 버그를 재현한다. 실패하면 새 수정을 시도하기 전에 .loops/reflexion.md에 회고를 한 줄 덧붙인다.
이 루프를 스스로 페이싱(self-pace)하라. 매 반복 후 체크 명령을 실행하고 출력을 읽어, 종료
조건이 충족되지 않았을 때만 계속한다. 종료 조건이 통과하거나 최대 반복에 도달하면 멈춘다.
매 회차마다 한 줄 상태 업데이트를 남긴다.
팁: npm test -- --testNamePattern=<failing-test>는 예시입니다. <failing-test>는 실제로 깨진 테스트 이름/패턴으로 바꾸고, 러너에 맞게 pytest -k <패턴>, go test -run <패턴>, cargo test <패턴> 등으로 교체하세요.
팁 / 변형
- 체크 명령 교체: 테스트가 없는 버그라면 체크를 재현 명령 그대로 쓰세요 — 예:
node scripts/repro.mjs, curl -s localhost:3000/health. 핵심은 "종료 코드 0 = 고쳐짐"이 성립하게 만드는 것입니다.
- 회고 파일 활용:
.loops/reflexion.md는 사람이 읽어도 유용합니다. 막혀서 에스컬레이션할 때 이 파일을 그대로 첨부하면 "이미 시도한 것들"이 한눈에 보입니다.
- 막힐 때: 같은 실패가 2회 반복되거나 8회 한도에 닿으면, 가드레일대로 멈추고
reflexion.md의 가설 목록과 함께 블로커를 보고하게 하세요.
- 연관 루프: 재현 스크립트로 근본 원인을 증명하는
looping:investigation-script-loop, 같은 실패가 두 번 나면 가드레일을 적어 두는 looping:guardrails-learning-loop, 전체 스위트를 green까지 돌리는 looping:test-until-green.
원본 영어 kickoff (loops.elorm.xyz 원문)
Start the "Reflexion Debug Loop" loop.
Goal: the failing test or repro passes
Max iterations: 8
Between iterations run: npm test -- --testNamePattern=<failing-test>
Exit when: the repro test exits 0
Step 1: Reproduce the bug. If it fails, append a reflection to .loops/reflexion.md before trying a new fix.
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/reflexion-debug-loop