Ralph loop
-
한 285줄 스크립트가 self-recovering 자율 시스템이 되기까지 — ralph-loop.sh 의 8 commit 진화사 (Ralph Loop 시리즈 8편 통합)IT 2026. 5. 18. 22:00
한 주말 취미 프로젝트에서 자동차 회피 게임을 AI 에이전트한테 자율적으로 시켜보려고 285줄짜리 bash 스크립트를 짰다. 그 스크립트는 처음부터 self-recovering 시스템이 아니었다 — 단순한 while true; do opencode run; done 한 줄에서 시작해서, 사고 한 번에 한 줄씩 늘어나며 어떻게 끝나든 자기 자원을 정리하고 / vLLM 죽음을 자동 복구하고 / 막힌 항목을 자동 우회하고 / 거짓 보고를 외부 검증으로 잡는 시스템이 됐다.이 글은 시리즈 8편 통합편이다. 1~7편에서 각 디자인 결정의 왜와 어떻게 를 한 편씩 풀었다면, 이 글은 그 모든 결정이 한 스크립트 안에서 어떻게 합쳐져 자율성을 만드는가 를 본다. 8개의 commit 으로 진화한 ralph-loop.s..
-
AI 자율 루프의 dead-letter 패턴 — 3-strike 자동 스킵과 진척률 80%가 사실은 32%였던 이야기 (Ralph Loop 시리즈 7편)IT 2026. 5. 18. 21:00
자동 진행 루프를 짤 때 가장 어려운 결정은 막힌 항목을 어떻게 처리할까 다. 처음 ralph-loop 를 짤 때는 단순했다 — 검증 후크가 실패하면 즉시 exit 2. 사람이 들어와서 보고 다시 시작하라는 의도였다. 결과는 — 자율성 0. 한 시간 자리 비웠다 돌아오면 ralph-loop 가 첫 항목에서 막힌 채 멈춰있었다.이 글은 그 이후 도입한 3-strike 자동 스킵 패턴과, 그 패턴이 만든 진척률 거짓말 함정 — 진척률 80% 가 사실은 32% 였던 — 을 다룬다. 자율성을 위해 한 결정이 어떻게 진척의 의미를 흐리는지, 그리고 사용자가 직접 짚어준 통찰로 어떻게 한 줄로 회복했는지. 시리즈 7편이고 1~6편은 컨텍스트 / 부팅·셧다운 / vLLM 헬스 / prompt 다층 / opencode..
-
AI 가 "다 했다" 라고 보고할 때 의심하라 — 외부 검증 후크 두 줄의 의미 (Ralph Loop 시리즈 6편)IT 2026. 5. 17. 23:00
자율 에이전트가 가장 위험할 때는 실패할 때 가 아니라 실패했는데 성공했다고 보고할 때 다. ralph-loop 초반에 가장 자주 본 실패 패턴이 이거였다 — 모델이 "작업 완료, CHECKLIST 토글, 커밋 했음" 이라고 응답을 끝냈는데 정작 git log 에는 commit 이 없거나, CHECKLIST.md 의 라인이 그대로 - [ ] 인 경우. 응답 텍스트만 보면 진척이 잘 되는 것 같은데 실제로는 작업이 안 되어 있다.이 글은 그 거짓 보고를 잡기 위해 ralph-loop.sh 가 매 iter 끝에 수행하는 두 줄짜리 외부 검증 후크 — (1) CHECKLIST 라인이 진짜 토글됐는가 (2) 직전 3분 안에 git commit 이 진짜 생성됐는가 — 를 분해한다. 단순한 grep 두 번이지만 그..
-
opencode 한 줄 호출에 숨은 3가지 함정 — `--` 구분자, 5분 timeout, 직후 헬스체크 (Ralph Loop 시리즈 5편)IT 2026. 5. 17. 22:00
자율 코딩 루프의 핵심은 결국 외부 CLI 한 줄 호출 이다. opencode run --model X -f file1 -f file2 -- "" 라는 한 줄. 그런데 이 한 줄에 세 가지 함정 이 숨어있어 ralph-loop 를 짜면서 모두 한 번씩 부딪혔다. 함정마다 한 번씩 사고를 겪고 한 줄씩 추가해서 — 이제는 안전한 호출이 됐다.이 글은 그 한 줄의 진화를 따라간다. (1) yargs 의 -f array 가 prompt 를 삼키는 함정, (2) vLLM 응답 hang 시 무한 대기를 끊는 timeout, (3) opencode 호출 직후 vLLM 죽음 감지하는 헬스체크. 시리즈 5편이고, 1~4편은 컨텍스트 3축, 부팅·셧다운, vLLM 헬스 보장, prompt 다층 메시지를 다뤘다.최종 형태..
-
프롬프트만으로는 못 고친다 — 도구 가이드를 5단으로 줘도 schema 에러는 그대로였다 (Ralph Loop 시리즈 4편)IT 2026. 5. 17. 21:00
자율 코딩 루프를 짜면서 가장 답답했던 시기는 모델이 도구 호출 시 필수 필드를 빠뜨리는 schema 에러 가 매 iter 평균 3.7회 발생하던 때였다. filePath 누락 43회, description 누락 26회, content 누락 23회. 가장 기본적인 식별자조차 빠뜨리는 모델 을 두고 처음엔 prompt 가이드로 해결할 수 있다고 믿었다. 그래서 prompt 안에 도구 사용 필수 사항을 5단으로 명시했다 — Bash 도구의 두 필드, Edit 도구의 세 필드, Write 도구의 두 필드, commit 메시지 형식, 실패 시 즉시 재시도 명령. 결과는 — 효과가 사실상 0이었다.이 글은 ralph-loop.sh 의 prompt 템플릿이 어떻게 수행 순서 + 도구 사용 가이드 + 제약 조건 의 ..
-
vLLM 이 매 iter 도중 자살할 수 있다 — 헬스 보장과 진단 자산을 한 함수에 (Ralph Loop 시리즈 3편)IT 2026. 5. 16. 23:00
장기 실행 자율 스크립트의 가장 짜증나는 실패 모드는 의존성 서비스가 도중에 죽고 우리는 한참 후에 알아차리는 케이스다. Ralph Loop 를 돌리던 어느 날, 30분간 진척이 0이 되어 의아해하다가 발견했다 — vLLM 이 KV cache 의 off-by-one assertion 으로 자살하고 docker compose 의 restart: "no" 정책 때문에 자동 재기동이 안 되어 컨테이너가 죽은 채로 방치된 상황이었다. 그동안 opencode 는 죽은 endpoint 에 호출을 던지고 5분 timeout 으로 종료하기를 반복하고 있었다.이 글은 그 이후 추가한 ensure_vllm_alive() 함수 — 매 iter 시작 시 + opencode 직후에 vLLM 헬스를 확인하고, 죽었으면 진단을 캡..
-
자율 스크립트의 부팅과 셧다운 — 외부 자원을 잡았다면 정확히 한 번만 놓아라 (Ralph Loop 시리즈 2편)IT 2026. 5. 16. 22:00
자율 코딩 루프 같은 장기 실행 스크립트의 시작과 끝은 의외로 까다롭다. 시작에서 외부 자원 — GPU lock, vLLM 컨테이너, 임시 파일 — 을 잡는 건 어렵지 않은데, 스크립트가 어떻게 끝나든 정확히 한 번 정리(cleanup)되도록 보장 하는 게 진짜 일이다. 정상 종료, Ctrl-C, kill -TERM, 스크립트 자체 exit 4, 또는 bash 의 set -e 가 발동시킨 갑작스런 종료까지 — 이 다섯 가지 종료 경로가 모두 같은 cleanup 함수로 합류하면서 동시에 중복 호출은 차단 되어야 한다.이 글은 ralph-loop.sh 의 startup·shutdown 시퀀스를 본다. 한 30줄 정도의 코드인데 그 안에 자율 스크립트가 외부 자원을 다룰 때 빠지기 쉬운 실수 4가지의 답이 들..
-
AI 한테 코드를 자동으로 시킬 때 — 컨텍스트를 3축으로 쪼개라 (Ralph Loop 시리즈 1편)IT 2026. 5. 16. 21:00
로컬 LLM 으로 자율 코딩 루프를 돌려본 적이 있다면 한 번쯤 마주치는 장면이 있다. 매 iteration 마다 모델이 "방금 내가 뭘 만들었더라" 부터 다시 헤매는 장면이다. 5분 전에 분명히 spawner.js 를 만들고 commit 까지 끝냈는데, 다음 iter 에 들어가면 모델은 그 사실을 모르고 처음부터 디렉토리를 훑는다. 더 나쁜 건 이미 만든 파일을 또 만들겠다고 시도 하다가 충돌을 일으키거나, "다 했다" 고 보고하고 끝내는데 정작 git log 에는 commit 이 없는 상황이다.이 글은 그 문제를 해결하기 위해 직접 짜본 Ralph Loop 패턴의 첫 디자인 결정을 다룬다. 결론부터 적으면 — LLM 한테 매 iter 던지는 컨텍스트를 한 덩어리로 던지지 말고, 불변·가변·실측 세 축..