zerovoids.dev
zerovoids.dev

Ø NEWS

AI 에이전트 · 하네스 설계

코드모드, 에이전트의 도구 호출을 코드로 묶는다

Armin Ronacher가 정리한 코드모드는 에이전트가 도구를 하나씩 호출하는 대신 하네스 안의 샌드박스에서 코드로 묶어 실행하게 해, 큰 출력을 통째로 컨텍스트에 밀어넣지 않고도 동시 작업과 상태 유지를 처리한다.

키워드ai-mlwasmtooling

에이전트가 bash로 셸 명령 하나를 실행하면, 그 결과 중 끝에서 2000줄까지만 모델 컨텍스트에 그대로 들어간다. 더 보려면 오버플로 파일을 따로 열어야 한다. 블로그 Armin Ronacher's Thoughts and Writings에 10월 6일 올라온 글 'What is Codemode'는 이 구조를 다르게 다루는 방법을 설명한다. 도구를 모델이 한 번에 하나씩 호출하는 대신, 코드로 묶어서 호출하게 하는 것이다.

Ronacher는 1년도 더 전에 쓴 글 'Code Is All You Need'와 'MCP needs code'에서, 도구나 MCP 서버를 모델 컨텍스트에 직접 올리지 말고 스크립트로 다루라고 권했다. Pi 1.0은 이제 그 권고를 MCP 자체에 적용해, 코드모드를 통한 MCP 지원을 추가했다.

bash만으론 안 되는 지점

하네스가 CLI와 bash를 선호해온 이유는 분명했다. 명령을 자유롭게 조합할 수 있고, echo foo > /tmp/test.txt를 실행하면 다음 호출에서 그 파일이 있다는 것까지 모델이 학습 데이터에서 이미 알고 있다. 문제는 bash가 실제로 실행되는 프로그램만 조합할 수 있다는 점이다. 이미지를 읽는 것처럼 프로토콜에 페이로드를 직접 끼워 넣어야 하는 작업은 cat으로 대체할 수 없고, 서브에이전트를 띄우고 오케스트레이션하는 것도 하네스가 제공하는 도구 없이는 까다롭다.

브레인과 핸드

Ronacher는 이 구도를 브레인과 핸드로 나눈다. 하네스, 즉 브레인은 한 머신에서 돌고 신뢰되는 쪽이다. 도구가 실제로 실행되는 쪽은 핸드, 그의 표현으로는 '실행 환경'이다. 둘은 서로 다른 파일시스템과 신뢰 수준 위에서 돈다. Gondolin 같은 샌드박스 솔루션을 쓰면 bash 쪽은 격리되지만, 하네스 자신은 격리되지 않는다.

코드모드는 모델이 복잡한 작업을 핸드가 아니라 브레인, 즉 하네스 쪽에서 표현하고 오케스트레이션하게 하는 방법이다. 코드모드 자체도 하네스 안의 또 다른 샌드박스에서 돈다. Pi에서는 QuickJS를 WASM 런타임 안에서 돌리는데, 네트워크도 파일시스템도 타이머도 없고 메모리도 제한돼 있다. 거기서 할 수 있는 유일한 일은 도구를 더 호출하는 것뿐이다. 이름 자체는 클라우드플레어가 먼저 붙였다.

같은 bash 호출도 일반 도구로 부르면 끝 2000줄만 컨텍스트에 들어가지만, 코드모드를 거치면 더 큰 출력이 구조화된 채로 전달된다.

코드가 여는 것들

코드모드는 자바스크립트이기 때문에 동시 작업과 간단한 워크플로를 표현할 수 있다. 실제 Pi 세션에서 자주 보이는 패턴은, 먼저 어떤 도구 응답에서 5~10개 항목만 떠봐서 모양을 확인한 뒤, 나머지를 처리하는 스크립트를 코드모드로 짜는 것이다. 코드모드는 상태를 트랜스크립트에 남겨둘 수도 있어서, 같은 세션의 다음 호출이 그 데이터를 다시 불러올 수 있다. 이건 샌드박스가 아니라 하네스 호스트 쪽에 남는다. Pi는 이미지 생성 모델이나 원샷 텍스트 분류 모델처럼, 일반 도구로 노출하면 컨텍스트만 낭비하는 API들도 코드모드를 통해서만 열어준다.

Pi에서 코드모드는 MCP가 켜져 있으면 기본으로 켜진다. 그렇지 않다면 설정에서 defaultTools에 +codemode를 추가하면 켤 수 있다.