완료된 스텝은 다시 실행되지 않아
“에이전트가 며칠 뒤 이어서 일하게 만드는 건 모델이 아니라 체크포인트야.”
Vercel이 2026년 6월 17일 오픈소스로 공개한 에이전트 프레임워크 eve의 문서를 읽어봤어. 실행 모델이 세 단어로 정리돼 있어. 대화 전체가 세션, 내가 보낸 메시지 하나와 그게 촉발한 작업이 턴, 그 턴 안의 저장 지점이 스텝이야.
How It Runs 문서에는 완료된 스텝은 다시 실행하지 않고 기록된 결과를 재생한다고 나와 있어. 그래서 턴이 사용자 답변을 기다리며 멈춰도, 한참 뒤에 답해도 그 자리에서 이어져.
용어 정의를 세션에 저장해두는 방법
튜토리얼 예제는 사내 지표 용어를 다뤄. defineState(name, initial)로 이름 있는 상태 슬롯을 만들고, glossary.get()으로 읽고 glossary.update()로 고쳐.
도구는 두 개야. define_metric이 정의를 기록하고 recall_metrics가 그걸 다시 읽어. 사용자가 “활성 고객은 최근 30일 안에 구매한 사람”이라고 한 번 말해두면, 나중 턴에서 다시 설명하지 않아도 에이전트가 그 정의를 꺼내 써.
상태는 세션 단위로 묶이고 에이전트마다 따로 잡혀. 서브에이전트가 부모 상태를 읽지 못하게 막아둔 것도 Remember Definitions 문서에 적혀 있어.
비용이 큰 쿼리는 승인 없이 안 돌아가
도구 정의에 approval 필드를 두면 execute가 돌기 전에 입력을 먼저 평가해. user-approval을 돌려주면 턴이 멈추고 사람 확인을 요청하고, not-applicable이면 그대로 실행돼.
Guard the Spend 문서의 run_sql 도구는 스캔량을 추정해서 게이트를 걸어. estimateScanGb()가 WHERE 절이 있는 쿼리는 1GB, 필터 없는 전체 스캔은 200GB로 잡고, 상수 THRESHOLD_GB = 50을 넘을 때만 승인을 요청해.
세션마다 살아 있는 이어받기 핸들은 하나뿐이야. 오래된 승인 핸들로 답하면 거부돼서, 같은 턴이 두 번 이어지는 일은 안 생겨.
직접 에이전트를 운영하는 팀이 먼저 확인할 것
- 중단된 스텝: 완료된 스텝은 재생되지만 중간에 끊긴 스텝은 다시 실행돼. 결제나 메일 발송처럼 두 번 일어나면 안 되는 작업은 멱등하게 만들거나 승인 게이트를 먼저 걸어야 해.
- 상태 범위: 세션 밖으로 넘겨야 하는 값이 있으면 이 상태 슬롯으로는 부족해. 외부 저장소를 따로 설계해야 해.
- 임계값 근거:
1GB와200GB는 문서 예제가 쓴 추정값이야. 실제 웨어하우스 통계로 바꿔야 승인 게이트가 의미를 가져.
며칠짜리 작업을 맡기려면 모델을 바꾸기 전에 이 세 가지를 정리하는 게 순서야. 급할 거 없어.