에이전트 루프 설계하기
(simonwillison.net)- Anthropic의 Claude Code와 OpenAI의 Codex CLI 같은 코딩 에이전트는 작동하는 코드 생성에서 LLM의 유용성을 근본적으로 향상시키며, 코드를 직접 실행하고 오류를 수정하며 기존 구현을 탐색하고 실험을 통해 효과적인 솔루션을 찾을 수 있음
- 이러한 도구의 잠재력을 최대한 활용하기 위한 핵심 기술은 에이전트 루프 설계이며, 코딩 에이전트를 명확한 목표와 도구 세트로 문제를 축소하면 무차별 대입 방식으로 효과적인 솔루션을 찾을 수 있는 도구로 이해할 수 있음
- LLM 에이전트의 정의는 목표를 달성하기 위해 루프 안에서 도구를 실행하는 것이며, 이를 잘 사용하는 기술은 에이전트가 사용할 도구와 루프를 신중하게 설계하는 것
- YOLO 모드(모든 명령이 기본적으로 승인됨)는 위험하지만 무차별 대입을 통한 가장 생산적인 결과를 얻는 데 핵심이며, 안전하게 실행하기 위해 Docker 샌드박스, GitHub Codespaces 같은 다른 컴퓨터 환경, 또는 위험 감수 중 선택 가능
- 올바른 도구 선택(셸 명령 및 패키지), 엄격하게 범위가 지정된 자격 증명 발급(테스트 환경, 예산 제한), 명확한 성공 기준과 시행착오가 필요한 문제(디버깅, 성능 최적화, 종속성 업그레이드, 컨테이너 최적화)에 적용하는 것이 에이전트 루프 설계의 핵심 원칙
YOLO 모드의 즐거움
-
에이전트의 위험성
- 에이전트는 본질적으로 위험함
- 잘못된 결정을 내리거나 악의적인 프롬프트 인젝션 공격의 희생양이 될 수 있음
- 도구 호출로 인한 해로운 결과 발생 가능
- 가장 강력한 코딩 에이전트 도구는 "셸에서 이 명령 실행"이므로, 불량 에이전트는 사용자가 직접 명령을 실행하여 할 수 있는 모든 작업 수행 가능
- Solomon Hykes의 인용:
AI 에이전트는 루프 안에서 환경을 파괴하는 LLM
- 에이전트는 본질적으로 위험함
-
기본 승인 모드의 한계
- Claude Code 같은 코딩 에이전트는 실행하는 거의 모든 명령에 대해 승인을 요청하는 것을 기본값으로 설정하여 대응
- 이는 다소 지루하지만, 더 중요하게는 무차별 대입을 통한 문제 해결 효과를 극적으로 감소시킴
-
YOLO 모드
- 각 도구는 모든 것이 기본적으로 승인되는 YOLO 모드의 자체 버전 제공
- 매우 위험하지만 가장 생산적인 결과를 얻는 데도 핵심
-
무인 YOLO 모드의 세 가지 주요 위험
- 1. 나쁜 셸 명령: 중요한 것을 삭제하거나 훼손
- 2. 유출 공격: 에이전트가 볼 수 있는 파일이나 데이터(소스 코드 또는 환경 변수에 저장된 비밀) 도용
- 3. 프록시 공격: 다른 대상에 대한 DDoS 또는 다른 해킹 공격의 출처를 위장하기 위해 머신을 프록시로 사용
YOLO 모드 실행 옵션
-
옵션 1: 보안 샌드박스
- 액세스할 수 있는 파일과 비밀, 만들 수 있는 네트워크 연결을 제한하는 보안 샌드박스에서 에이전트 실행
- 컨테이너 탈출 가능성이 존재하지만, Docker 또는 Apple의 새로운 컨테이너 도구를 사용하는 것은 대부분의 사람들에게 허용 가능한 위험
- Anthropic의 Safe YOLO 모드 문서:
- 인터넷 액세스 없이 컨테이너에서
--dangerously-skip-permissions
사용 - Docker Dev Containers를 사용한 참조 구현 제공
- 인터넷 액세스를 신뢰할 수 있는 호스트 목록으로 제한하는 것은 개인 소스 코드 도용을 방지하는 좋은 방법
- 인터넷 액세스 없이 컨테이너에서
-
옵션 2: 다른 사람의 컴퓨터 사용 (선호)
- 에이전트가 불량화되더라도 피해가 제한됨
-
GitHub Codespaces 사용 권장:
- 브라우저를 통해 액세스할 수 있는 온디맨드 완전 컨테이너 환경 제공
- 관대한 무료 티어 제공
- 문제 발생 시 어딘가에 있는 Microsoft Azure 머신이 CPU를 소모하며, 최악의 경우 환경에 체크아웃한 코드가 공격자에 의해 유출되거나 나쁜 코드가 연결된 GitHub 저장소로 푸시될 수 있음
- 다른 사람의 컴퓨터에서 코드를 실행하는 다른 에이전트형 도구들:
- ChatGPT와 Claude의 Code Interpreter 모드
- OpenAI의 Codex Cloud
-
옵션 3: 위험 감수
- 잠재적인 악의적 지시 출처에 노출되는 것을 피하려고 노력하고, 피해를 입히기 전에 실수를 잡기를 희망
- 대부분의 사람들이 선택하는 옵션
루프에 적합한 도구 선택
-
안전한 YOLO 모드 확보 후
- 다음 단계는 코딩 에이전트에서 사용할 수 있도록 해야 할 도구 결정
-
셸 명령 우선
- 이 시점에서 MCP(Model Context Protocol)를 혼합할 수 있지만, 대신 셸 명령 측면에서 생각하는 것이 일반적으로 더 생산적
- 코딩 에이전트는 셸 명령 실행에 정말 능숙함
- 환경이 필요한 네트워크 액세스를 허용하면 NPM, PyPI 등에서 추가 패키지를 가져올 수도 있음
- 무작위 패키지 설치가 주 컴퓨터의 것들을 망가뜨리지 않는 환경에서 에이전트가 실행되도록 하는 것도 중요한 고려사항
-
AGENTS.md 파일 활용
- MCP에 의존하기보다는 사용해야 할 것으로 생각되는 패키지에 대한 세부정보가 포함된 AGENTS.md(또는 동등한) 파일 생성을 선호
- 예시: 다양한 웹사이트의 스크린샷을 찍는 프로젝트의 경우 자신의 shot-scraper CLI 도구를 설치하고
AGENTS.md
에 다음을 추가:스크린샷을 찍으려면 다음을 실행: shot-scraper http://www.example.com/ -w 800 -o example.jpg
- 이 하나의 예시만으로도 에이전트가 다른 스크린샷을 위해 URL과 파일명을 교체하는 방법을 추측하기에 충분
-
기존 도구 활용
- 우수한 LLM은 이미 당혹스러울 정도로 많은 배열의 기존 도구 사용 방법을 알고 있음
- "playwright python 사용" 또는 "ffmpeg 사용"이라고 말하면 대부분의 모델이 효과적으로 사용
- 루프에서 실행되므로 처음에 저지른 실수에서 일반적으로 복구하고 추가 지침 없이 올바른 주문을 알아낼 수 있음
엄격하게 범위가 지정된 자격 증명 발급
-
자격 증명의 필요성
- 올바른 명령을 노출하는 것 외에도 해당 명령에 노출해야 할 자격 증명 고려 필요
- 이상적으로는 자격 증명이 전혀 필요하지 않지만(많은 작업이 로그인이나 API 키 제공 없이 수행 가능), 특정 문제는 인증된 액세스 필요
-
두 가지 핵심 권장사항
- 1. 테스트 또는 스테이징 환경에 대한 자격 증명 제공
- 피해가 잘 제한될 수 있는 환경
- 2. 예산 제한 설정
- 자격 증명이 돈을 쓸 수 있는 경우 엄격한 예산 제한 설정
- 1. 테스트 또는 스테이징 환경에 대한 자격 증명 제공
-
실제 사례: Fly.io 조사
- Fly.io에서 실행 중인 scale-to-zero 애플리케이션의 느린 콜드 스타트 시간 조사
- Claude Code가 Dockerfile을 직접 편집하고, Fly 계정에 배포하고, 시작하는 데 걸리는 시간을 측정할 수 있도록 함
-
안전한 설정
- Fly에서는 조직을 생성할 수 있으며, 해당 조직에 대한 예산 제한을 설정하고 해당 조직 내에서만 앱을 생성하거나 수정할 수 있는 Fly API 키 발급 가능
- 이 조사만을 위한 전용 조직 생성
- $5 예산 설정
- API 키 발급하고 Claude Code를 풀어놓음
- 이 특정 경우 결과가 충분히 유용하지는 않았지만, "에이전트 루프 설계"가 개발해야 할 중요한 기술임을 처음 깨달은 프로젝트
에이전트 루프 설계 시기
-
적합한 문제 패턴
- 모든 문제가 이 작업 패턴에 잘 반응하는 것은 아님
- 주목해야 할 것은 명확한 성공 기준이 있고 좋은 솔루션을 찾는 데 (잠재적으로 약간 지루한) 시행착오가 필요할 가능성이 있는 문제
- "으, 여기서 많은 변형을 시도해야 할 것 같아"라고 생각할 때마다 에이전트 루프를 시도해볼 가치가 있다는 강력한 신호
-
구체적 예시
-
디버깅
- 테스트가 실패하고 근본 원인을 조사해야 함
- 이미 테스트를 실행할 수 있는 코딩 에이전트는 추가 설정 없이 이를 수행할 수 있음
-
성능 최적화
- SQL 쿼리가 너무 느림, 인덱스 추가가 도움이 될까?
- 에이전트가 쿼리를 벤치마크하고 (격리된 개발 환경에서!) 인덱스를 추가 및 삭제하여 영향 측정
-
종속성 업그레이드
- 여러 종속성 업그레이드에서 뒤처짐
- 테스트 스위트가 견고하면 에이전트 루프가 모두 업그레이드하고 주요 변경사항을 반영하는 데 필요한 사소한 업데이트 수행 가능
- 관련 릴리스 노트 사본이 제공되거나 에이전트가 직접 찾을 수 있는 위치를 알고 있는지 확인
-
컨테이너 크기 최적화
- Docker 컨테이너가 불편할 정도로 큼
- 에이전트가 다른 기본 이미지를 시도하고 Dockerfile을 반복하여 축소를 시도하면서 테스트를 통과하도록 유지
-
-
공통 주제: 자동화된 테스트
- 이 모든 것의 공통 주제는 자동화된 테스트
- 코딩 에이전트 및 기타 LLM 코딩 도구에서 얻을 수 있는 가치는 깨끗하게 통과하는 우수한 테스트 스위트에 의해 대폭 증폭됨
- 다행히 LLM은 아직 없는 경우 이를 구성하는 프로세스를 가속화하는 데 탁월
여전히 매우 새로운 영역
-
에이전트 루프 설계는 매우 새로운 기술
- Claude Code는 2025년 2월에 처음 출시됨
- 명확한 이름을 부여하면 이에 대한 생산적인 대화를 나누는 데 도움이 될 수 있기를 희망
- 이러한 도구를 가능한 한 효과적으로 사용하는 방법에 대해 알아내야 할 것이 훨씬 더 많음