TECH 으로 돌아가기
TECH HACKER NEWS 오늘 8분 읽기 23 READS

'죽어도 이어지는' 에이전트: Pi Durable이 제시한 내구성 설계

'죽어도 이어지는' 에이전트: Pi Durable이 제시한 내구성 설계
SOURCE IMAGE · HACKER NEWS

Earendil과 Pi 커뮤니티가 코딩 에이전트 Pi의 1.0 버전을 내놓으면서, 함께 실험적 패키지인 Pi Durable을 공개했다. Pi 1.0은 원격 머신의 터미널 안에서 한 사람이 직접 몰고 가는 코딩 에이전트에 집중한다. 프로세스가 죽으면 무슨 일이 있었는지 사람이 들여다보고 '계속하라'고 지시하는 방식이다. Pi Durable은 이 지점을 다르게 접근한다. 오래 돌아가고(long-running), 중단에 강하며(durable), 손쉽게 고쳐 쓸 수 있는(malleable) 에이전트를, 자바스크립트 런타임이 있는 곳이라면 어디서든 돌리기 위한 하니스(harness) 프레임워크다.

Earendil은 Pi Durable을 코딩 에이전트의 대체재가 아니라 '모든 종류의 에이전트 애플리케이션을 만드는 틀'로 규정한다. 코드 일부(pi-ai)뿐 아니라 미니멀리즘과 가변성이라는 원칙도 Pi 코딩 에이전트와 공유한다. 여기서 검증된 설계와 교훈이 다시 코딩 에이전트 쪽으로 흘러 들어가는 구조다. 테스트를 제외한 전체 소스가 약 1만 5천 줄, 토큰으로는 GPT 기준 약 15만, Claude 기준 약 25만 수준이라는 점을 강조하는데, 이는 에이전트 스스로 자신의 하니스를 읽고 이해할 수 있게 하려는 의도다.

하니스를 어떻게 정의했나

Pi Durable에서 하니스는 '저장소(storage)에 더해, 여러 LLM 대화를 병렬로 돌리는 데 필요한 기계장치'로 정의된다. 대화(conversation)는 사람과 에이전트의 상호작용을 기록한 트랜스크립트이고, 에이전트는 모델과 설정(사고 수준 등), 호출 가능한 도구의 묶음이다. 도구는 실행 환경(execution environment) 안에서 작동하는데, 이 환경은 노트북일 수도, 원격 VM일 수도, 인메모리 샌드박스일 수도 있다. 모델 호출이든 도구 실행이든 하니스가 돌리는 모든 단위는 '태스크(task)'로 취급된다.

저장소는 메모리, SQLite, JSONL 세 가지가 기본 제공되며, 직접 만든 백엔드를 검증할 적합성 스위트와 벤치마크도 함께 들어 있다. SQLite와 JSONL 코드는 Node API를 쓰지 않아 작은 어댑터만 붙이면 Bun이나 Cloudflare Durable Object 안에서도 돈다. SQLite 위에서 하니스는 활성 트랜스크립트와 실행 중 태스크 등 작업 집합만 메모리에 두고 나머지는 디스크에 남긴다. 컴팩션이 오래된 메시지를 미리 요약해 맥락 창을 넘지 않게 하므로, 수만 건 규모의 대화도 메모리에 들어맞는다.

프로세스가 죽어도 이어진다

핵심은 복원력이다. 모든 단계가 다음으로 넘어가기 전 체크포인트를 저장하기 때문에, 노트북이 잠들거나 컨테이너가 재배포되거나 메모리가 부족해 프로세스가 죽어도, 새 프로세스가 같은 저장소를 열어 미완의 태스크를 마지막 체크포인트부터 이어받는다. 중단된 모델 요청은 다시 보내고 잘린 응답은 '중단됨'으로 표시해 남긴다. 도구 호출은 재실행이 안전하다고 선언한 경우에만 다시 돌고, 아니면 모델에게 '중단됐다'고 알려 판단을 맡긴다. requestId로 제출을 정확히 한 번만 처리해, 크래시 후 재시도한 클라이언트가 중복 제출 대신 원래 결과를 돌려받는다.

하나의 하니스가 여러 대화를 동시에 돌리면서 서로 막지 않는 점도 특징이다. 대화는 새로 시작하거나 다른 대화의 특정 시점에서 분기(fork)할 수 있고, 부모 이력을 복사 없이 참조한다. Earendil은 슬랙 채널을 하나의 대화로, 거기서 열린 스레드를 해당 메시지 지점의 포크로 비유한다. 각 대화는 자신의 에이전트(모델, 사고 수준, 선택한 확장과 활성 도구, 추가 지시, 작업 디렉터리)를 따로 저장하므로, 메인 에이전트 옆에 더 싼 모델과 읽기 전용 도구를 쓰는 리뷰어를 둘 수 있다.

확장·훅·태스크, 그리고 실무적 함의

모든 기능은 확장(extension) 단위로 꽂힌다. 확장은 시스템 프롬프트 섹션, 도구, 훅, 태스크의 묶음이며 대화는 이름만 저장해 선택한다. 시스템 프롬프트는 매 요청 전에 재구성되고 변경 내용이 트랜스크립트의 해당 위치에 기록돼, 재시작이나 포크 때도 모델이 봤던 것을 그대로 재현한다. 중간 변경을 지원하는 모델에서는 바뀐 부분만 전송해 프롬프트 캐시를 유지한다. 서브에이전트는 기본 제공되지 않지만, 도구가 자기 소유의 대화를 만들어 더 작은 모델을 붙이고 답을 기다리는 몇 줄로 구현된다. 훅은 모델 응답·도구 호출·컴팩션 같은 내장 태스크에 끼어들어 요청을 고쳐 쓰거나 호출을 막고 결과를 바꾸며, 크래시 후 재실행에 대비해 '먼저 쓴 값이 이긴다'는 메모에 결정을 저장한다.

컴팩션 역시 하나의 태스크로, 대화를 멈추지 않고 백그라운드에서 돈다. 맥락이 한계에 가까워지면 오래된 메시지를 요약해 다음 턴 경계에 끼워 넣고, 다음 요청이 들어가지 못할 때만 요약을 기다린다. reset()은 한발 더 나아가 핸드오프 노트에서 새 맥락을 시작하되 아무것도 삭제하지 않아, 이후 도구가 핸드오프 이전 내용까지 검색할 수 있다. 할 일 목록이나 플랜 같은 애플리케이션 상태는 문서(document)로 트랜스크립트와 같은 원자적 커밋에 묶여, 상태와 기록이 어긋나지 않는다.

실무자 관점에서 Pi Durable은 '장시간·다중 사용자·장애 복원'이 필요한 에이전트 서비스의 설계 참고서에 가깝다. 다만 이름 그대로 실험적 패키지이며 Earendil 스스로 커뮤니티의 참여로 '최고의 내구성 하니스'를 함께 만들자고 요청하는 단계다. 성능 수치나 실제 운영 사례는 제시되지 않았고, 현재 실행 범위도 자바스크립트 런타임으로 한정된다. 체크포인트·정확히-한-번 제출·소유권 트리 기반 정리 같은 개념은 분산 작업 시스템에서 익숙한 것들로, 이를 LLM 대화라는 맥락에 일관되게 녹여낸 점이 이 프로젝트가 주목받는 이유다.

SOURCE · HACKER NEWS
원문 전체 보기 → https://earendil.com/posts/pi-durable/
SHARE
NEXT · CHOOSE

변화를 읽었다면,
내가 만들 수익 구조를 고릅니다.

정보를 더 모으는 데서 멈추지 않고, 광고·외주·판매·중개·구독 중 내 상황에 맞는 출발점을 정해보세요.

21가지 수익 구조 살펴보기 →
처리 중...