How I turned my AI CLI into an autonomous agent with Playwright and Sub-agents 🚀

개요

Codey CLI는 Playwright와 Sub-agents를 통합하여 보안, 지속성, 향상된 개발자 경험을 갖춘 자율 에이전트 런타임으로 발전했습니다.

주요 내용

- 인간과 유사한 브라우징 (Playwright + Vision):
* Playwright 기반 웹 도구를 통합하여 문서 열람, GitHub 이슈 확인, UI 디버깅 기능을 제공합니다.
* 스크린샷 캡처 및 Base64 인코딩 과정의 디스크 I/O를 제거하여 메모리 내 직접 처리 방식으로 최적화했습니다.
* Chromium 설치 실패 시 자동으로 playwright install chromium을 실행하고 재시도하는 자가 치유 종속성 기능을 구현했습니다.
* URL 입력 시 자동으로 웹 도구를 주입하고 web.navigate()를 트리거하는 스마트 프롬프팅을 적용했습니다.

- 서브 에이전트 및 지속성 터미널:
* 독립적인 도구 루프, 히스토리, 컨텍스트를 가진 자율 서브 에이전트를 실행하여 하위 작업을 위임하고 요약 결과를 반환합니다.
* start, send, peek, stop 액션을 통해 Next.js 개발 서버와 같은 프로세스를 백그라운드에서 지속적으로 실행하고 로그를 확인할 수 있는 지속성 터미널 기능을 추가했습니다.
* AI가 불확실할 때 실행을 일시 중지하고 대화형 객관식 프롬프트를 렌더링하여 인간의 개입을 유도하는 ask 기능을 도입했습니다.

- 보안 강화:
* eval() 함수 사용을 중단하고, 안전한 연산자, 함수, 상수를 엄격히 화이트리스트로 지정한 ast.parse() 검증으로 대체하여 임의 코드 실행 취약점을 해결했습니다.
* subprocess.run([...])shlex.split()을 사용하여 문자열 연결 및 직접 쉘 실행 방식에서 안전한 인자 파싱으로 전환하여 쉘 인젝션 문제를 개선했습니다.
* create_file, edit_file, read_files 작업 시 assert_within_project() 검사를 추가하여 경로 탐색 공격을 방지하고, CONFIRM_SHELL=true 환경 플래그로 파괴적인 명령어 실행 전 사용자 확인을 강제합니다.

- 상태 관리 및 개발자 경험:
* 프로젝트별 history.jsonl 파일 대신 별도의 세션 파일을 생성하고, 메시지 수와 미리보기 정보를 포함한 대화형 시작 선택기를 제공하여 이전 작업을 재개하거나 새롭게 시작할 수 있도록 멀티 세션 워크플로우를 개선했습니다.
* 토큰 단위 스트리밍을 통해 응답 속도를 높였으며, 무한 루프 및 API 비용 증가를 방지하기 위해 trim_history()MAX_TOOL_ROUNDS를 추가했습니다.

시사점

Codey의 발전은 에이전트 오케스트레이션 및 Python CLI 개발 분야에서 중요한 진전을 보여주며, AI 코딩 도구 구축 및 활용에 대한 새로운 가능성을 제시합니다.

원문 읽기 →
원문을 불러오는 중...

댓글

GitHub Discussions