claudecode
-
/investigate — Trivial pass의 뿌리를 캐는 자리 (gstack 시리즈 6/6)IT 2026. 5. 20. 23:00
시리즈 5편의 /qa는 화면 위의 버그를 잡았다. 마지막 글은 한 단계 더 들어가 본다 — 테스트가 분명히 통과하는데, 그 통과가 의미 있는 통과인지 의심하는 자리, /investigate가 car-game에서 어떤 기여를 했는지.왜 이런 스킬이 필요했나테스트가 통과하면 안심하고 넘어가고 싶다. 그런데 통과의 종류가 두 가지다.의미 있는 통과 (meaningful pass): 테스트가 의도한 조건이 실제로 실행됐고, 그 결과가 약속과 일치한다.사소한 통과 (trivial pass): 테스트가 의도한 조건이 실행되지도 않은 채로 단언이 통과한다. 두 빈 캔버스를 비교하면서 "다르지 않다"고 통과하는 식.가장 위험한 건 trivial pass다. 통과는 통과인데, 검증은 일어나지 않았다. 이런 테스트는 있다..
-
/qa — 함수가 옳아도 화면에 안 나타나는 버그를 잡는 자리 (gstack 시리즈 5/6)IT 2026. 5. 20. 22:00
시리즈 4편의 /review는 코드의 의미를 본다. 그런데 의미가 옳아도 화면 위에서 사라지는 버그가 있다. /qa는 그 자리, 곧 사용자가 실제로 보는 픽셀을 검증하는 자리다.왜 이런 스킬이 필요했나car-game은 6일째 충격적인 상태에 놓였다. 단위 테스트 384개가 모두 통과한 채로, 게임을 띄워 Lv6~10을 플레이하면 도로가 온통 녹색이었다. 풀이 도로를 덮은 게 아니라 도로 자체가 풀색으로 렌더링되고 있었다.이 상황은 단위 테스트의 본질적 한계를 보여 준다. 단위 테스트는 함수의 약속을 본다 — "이 함수에 X를 주면 Y가 나온다"는 약속이 지켜지는가. 그러나 사용자는 함수의 약속을 보지 않는다. 사용자는 픽셀을 본다. 함수가 약속을 지켜도 그 결과가 다음 함수의 입력에서 깨지면, 함수 단위..
-
/review — 테스트가 못 보는 의미 부패를 청소하는 자리 (gstack 시리즈 4/6)IT 2026. 5. 20. 21:00
시리즈 3편에서 세 시선의 plan-review를 거쳐 PLAN v2를 도출했다. 이번 글부터는 PLAN을 들고 들어간 구현 사이클 차원의 게이트 — 그 첫 번째 /review가 car-game에서 무엇을 청소했는지를 다룬다.왜 이런 스킬이 필요했나ralph-loop은 코드를 빠르게 늘린다. 그런데 빠르다는 건 두 가지 부작용을 동시에 가져온다.잔재 누적: 어제 추가한 코드가 오늘은 더 이상 호출되지 않는다. 그런데 자동으로 지워지지는 않는다.의미와 값의 분리: 어제 LANE_COUNT = 3이 맞는 값이었지만, 오늘 4차로로 바뀌면서 이 상수는 거짓말이 된다. 그래도 테스트는 통과한다 — 테스트는 "값의 일치"만 보지 "의미의 일치"는 못 보기 때문이다.테스트가 모두 초록불일 때도 코드 안에는 부패한 ..
-
/plan-* 3종 — 한 PLAN 문서를 세 시선으로 통과시키기 (gstack 시리즈 3/6)IT 2026. 5. 19. 23:00
시리즈 2편에서 /office-hours로 컨셉의 모서리를 깎았다. 이번 글은 그 정제된 컨셉을 PLAN으로 옮길 때 한 머리가 아닌 세 시선을 통과시키는 자리, /plan-ceo-review·/plan-eng-review·/plan-design-review 3종이 car-game의 PLAN v1을 v2로 만들어 낸 과정을 다룬다.왜 이런 스킬이 필요했나PLAN을 한 사람이 짜면 그 사람의 사각지대가 PLAN에 그대로 박힌다. car-game의 PLAN v1은 엔지니어 머리로 짠 plan이었다 — 모듈을 어떻게 나눌지, 어떤 자료구조를 쓸지에는 답이 있었지만, "이 plan대로 가면 1주일 안에 끝나나?", "사용자가 Lv1과 Lv10을 같은 게임으로 느끼나?" 같은 질문에는 답이 없었다.문제는 한 사람..
-
/office-hours — 막연한 컨셉을 plan으로 갈 수 있게 깎는 자리 (gstack 시리즈 2/6)IT 2026. 5. 19. 22:00
시리즈 1편에서 ralph-loop 위에 gstack 게이트를 얹는 흐름을 소개했다. 이번 글은 그 흐름의 가장 앞단, 기획 단계에 놓이는 /office-hours가 car-game 프로젝트에 어떤 기여를 했는지를 다룬다.왜 이런 스킬이 필요했나LLM에게 "장애물 피하는 자동차 게임 만들어줘" 한 줄을 던지면 결과는 두 가지 중 하나다.그럴듯한데 내가 원하던 게 아닌 무언가너무 일반적이라 어디서부터 손대야 할지 모를 무언가문제는 입력이 막연하면 LLM이 빈 부분을 자기 마음대로 채운다는 점이다. 그 자기 마음대로 채워진 결정들이 코드 베이스 곳곳에 박힌 상태로 며칠 지나면 — 사용자가 만들고 싶었던 게임과 코드가 만들어 놓은 게임이 다른 게임이 된다. ralph-loop이 빠르게 코드를 늘릴수록 이 격차..
-
Ralph-loop만으로는 부족한 이유, 그리고 gstack의 자리 — gstack 시리즈 (1/6)IT 2026. 5. 19. 21:00
car-game(HTML5 Canvas 자동차 게임) 한 작품을 만드는 동안, 백그라운드로 ralph-loop(자율 LLM 코딩 루프)을 돌리면서 동시에 gstack 스킬을 단계별로 직접 호출했다. 그 경험을 6편 시리즈로 정리한다. 이 글은 시리즈의 도입부 — 왜 ralph-loop만으로는 부족한가, gstack은 그 부족함의 어디를 메우는가.ralph-loop이라는 진척 도구자율 LLM 코딩 루프(이하 ralph-loop)는 매력적이다. 한 줄짜리 프롬프트와 N분의 시간만 있으면 코드가 알아서 늘어난다. car-game의 첫 5일을 ralph-loop만으로 굴렸다. 그러다 6일째, 게임을 켜보고 멈췄다 — Lv10 도로가 온통 녹색이었다. 단위 테스트 384개는 모두 통과한 상태였다.ralph-loo..
-
Ralph Loop — bash while true + LLM CLI가 만든 어이없게 강력한 에이전트 패턴IT 2026. 5. 7. 23:00
"deterministically bad in an undeterministic world"2025년 중반, 호주 개발자 Geoffrey Huntley가 이상한 블로그 글을 하나 올렸다. 제목은 "Ralph Wiggum as a software engineer". 핵심은 이 한 줄이었다.while :; do cat PROMPT.md | claude-code ; done무한 루프로 LLM CLI를 계속 호출한다. 그게 전부다. 이름은 Simpsons의 Ralph Wiggum에서 왔다. Huntley 본인이 "비결정적 세계에서 결정적으로 멍청하게 반복한다"고 표현한 그 바보같은 캐릭터다. 글의 맨 앞에 붙은 밈은 "이 기법이 얼마나 멍청해 보이는지를 인정하는 농담"이었다.놀랍게도 이게 작동했다. Huntle..
-
CLI를 sub-agent처럼 사용하기 — claude -p 헤드리스 모드의 실전 패턴IT 2026. 5. 2. 22:00
Main agent가 만드는 sub-agent 말고, 내가 직접 만들기Claude Code에서 main agent가 자동으로 Task tool로 sub-agent를 띄우는 구조는 익숙하다. 그런데 역방향도 가능하다. CLI 도구(claude -p, codex exec, cursor-agent -p)를 파이프로 부르면 내가 임의로 sub-agent를 만들 수 있다. 2026년 이 패턴은 Anthropic 공식 플러그인에 편입됐고, 개인 개발자들이 Bash 한 줄로 구현하는 수준까지 내려왔다.한마디로 CLI가 sub-agent protocol 그 자체가 됐다. Python/TypeScript SDK도 내부적으로 claude CLI를 subprocess로 띄우고 stdin/stdout JSON으로 통신한다. ..