EvanFlow – Claude Code용 TDD 기반 피드백 루프
EvanFlow – A TDD driven feedback loop for Claude Code
TL;DR Highlight
Claude Code에 TDD 루프 스킬 16개를 얹어 아이디어부터 구현까지 체크포인트로 통제
Who Should Read
Claude Code로 기능을 만들 때 에이전트가 테스트를 건너뛰거나 멋대로 커밋해 불안한 백엔드·풀스택 개발자
Core Mechanics
- brainstorm→plan→execute→iterate 루프
- "let's evanflow this"라고 말하면 evanflow-go가 전체 루프를 돌린다.
- 설계 승인, 계획 승인, iterate 이후에 체크포인트가 있다.
- 마지막은 STOP이고 사용자 지시를 기다린다.
- TDD는 별도 단계가 아니라 작업 안의 규율
- 실패 테스트 하나, 최소 구현, 리팩터링을 한 사이클씩 돈다.
- 리팩터링을 마지막으로 미루지 않는다.
- 테스트는 public 인터페이스로 동작을 검증해 리팩터링 후에도 살아남게 한다.
- iterate는 최대 5회
- diff를 다시 읽고 품질 검사를 돌리고 UI는 스크린샷을 찍는다.
- Five Failure Modes(환각 행동, 범위 확장, 연쇄 오류, 컨텍스트 손실, 도구 오용) 체크리스트를 쓴다.
- git은 절대 자동으로 안 건드린다
- 자동 커밋, 자동 스테이징, PR 제안을 하지 않는다.
- PreToolUse 훅이 git push, reset --hard, clean -f 같은 위험 명령을 막는다.
- 훅은 jq가 없으면 조용히 실패해 차단이 안 된다.
- 독립 작업 3개 이상이면 coder/overseer 병렬 모드
- 작업 단위마다 coder 하나와 읽기 전용 overseer 하나를 둔다.
- overseer는 Read, Grep, Glob만 쓸 수 있어 코드를 고칠 수 없다.
- 통합 overseer가 접점별 통합 테스트를 돌리고, 이 테스트가 실행 가능한 계약 역할을 한다.
- 규칙마다 출처를 달았다
- 값 지어내기 금지는 DAPLab/Columbia 실패 패턴 논문에 근거한다.
- LLM이 생성한 테스트 단언의 62% 넘게 틀렸다는 HumanEval 평가를 근거로 단언 정확성을 점검한다.
- 자동 커밋 금지와 스킬 강제 없음은 연구가 아닌 저자의 의견이라고 밝혔다.
Community Reactions
- TDD 부분은 이미 superpowers에 있다는 의견
- superpowers/brainstorming 스킬이 이미 TDD를 잘 한다는 댓글이 여러 개 있었다.
- 그래서 이 프로젝트의 필요성을 못 느낀다는 반응이다.
- 프롬프트가 아니라 훅으로 TDD를 강제하라는 의견
- nizos/tdd-guard가 훅으로 편집을 막아 TDD를 강제하는 유일한 프로젝트라는 댓글이 있었다.
- 프롬프트 기반은 컨텍스트가 길어지면 잊힌다는 주장이다.
- 병렬 모드는 워크트리 격리가 필요하다는 경험
- 병렬 에이전트는 각자 통과해도 합칠 때 접점이 깨진다는 댓글이 있었다.
- 브랜치마다 다른 브랜치의 green에 가려지지 않는 실패 테스트가 필요하고 워크트리 격리가 이를 해결한다고 한다.
- vertical slice와 리팩터링에 대한 반론
- vertical slice는 LLM이 구현에 맞춰 테스트를 쓰게 만들 수 있어 horizontal TDD를 고려했다는 의견이 있었다.
- AI 보조 TDD에서는 green 직후 리팩터링이 가장 먼저 사라진다는 의견도 있었다.
- 작성자가 사이클마다 리팩터링을 하도록 고쳤다는 취지의 언급이 있었다.
How to Apply
- 플러그인 설치하고 작은 기능 하나 돌려보기
- Claude Code에서 /plugin marketplace add evanklem/evanflow 후 /plugin install evanflow@evanflow를 실행하고 재시작한다.
- "Let's evanflow this — 작은 기능 X를 추가하고 싶다"로 루프를 시작한다.
- 설계 승인과 계획 승인 체크포인트에서 멈추는지 확인한다.
- jq 설치와 git 가드 훅 차단 확인하기
- jq가 없으면 훅이 조용히 실패하므로 먼저 apt install jq 또는 brew install jq를 실행한다.
- Bash 도구에서 git reset --hard HEAD를 시도해 BLOCKED 메시지가 뜨는지 본다.
- CLAUDE.md에 프로젝트 품질 검사 명령 적기
- typecheck, lint, test 명령을 정확히 적는다.
- 스킬이 완료 보고 전에 이 검사를 참조해 돌린다.
- 병렬 모드는 독립 작업 3개 이상일 때만 쓰기
- 계획 단계 2.5에서 병렬화 제안이 나오면 접점별 통합 테스트 이름을 계약에 먼저 적는다.
- 인증 미들웨어나 DB 쓰기 헬퍼 같은 프로젝트 관례를 계약 템플릿에 맞춰 고친다.
Try It
# Claude Code에 그대로 붙여넣기 (EvanFlow 방식의 간이 버전, 플러그인 없이 동작)
Let's work on {{기능 설명}} with this loop:
1. Brainstorm: propose 2–3 approaches and stress-test each (what breaks if a user does X? rollback? out of scope?). Wait for my approval.
2. Plan: list file structure first, then small tasks. Wait for my approval.
3. Execute with vertical-slice TDD: write ONE failing test, run it and show it fails, write minimal impl, refactor while the test is fresh, then next test. Test behavior through public interfaces. For each assertion, check whether a one-character bug in the implementation would still pass it.
4. Iterate (max 5 rounds): re-read the diff; check dead code, naming, and these failure modes: hallucinated actions, scope creep, cascading errors, context loss, tool misuse. Run {{typecheck/lint/test 명령}}.
Rules: never invent file paths, env vars, IDs, or APIs; ask if unsure. Never run git commit/add/push. When done, STOP and report.Terminology
관련 논문
모델이 그렇게 좋다면 OpenAI는 왜 회사 100개를 직접 안 차릴까
HN 댓글 답: 코드는 쉬워도 뭘 만들지 아는 건 별개라 토큰을 판다
OpenShell: 자율 AI 에이전트를 가두는 NVIDIA의 안전한 샌드박스 런타임
정책 파일로 에이전트의 파일·네트워크·자격증명 접근을 커널 수준에서 통제한다
Omnara: Claude Managed Agents의 오픈소스 대안 (셀프호스팅 가능)
어떤 모델·머신에서도 에이전트를 돌리는 오픈소스 managed agent 플랫폼
Rust off Rails: 코드 없이 Markdown 60개로 만든 AI 에이전트용 웹 스택
Markdown 규칙 60개로 에이전트가 Rust 웹앱을 짜게 한다는 프레임워크
LayerFS: AI 코딩 에이전트를 위한 파일시스템
에이전트마다 임시 Workspace를 마운트하고 결과만 커밋하는 파일시스템
Launch HN: Alter (YC S25) – 멀티유저 에이전트용 접근 제어
에이전트마다 별도 신원·정책·감사로 API 키 공유 문제를 푼다
Claude로 코드의 공격 표면(attack surface) 줄이기
Claude로 25개 오픈소스를 분석해 불필요하게 열린 코드 493건을 찾았다
WhatsApp 도움말 페이지에 숨겨진 LLM 지시문: 규제기관을 추천하지 말라
WhatsApp 도움말에 화면엔 안 보이는 AI 지시문 102개가 숨어 있었다