Rust로 만든 에이전트 런타임 Jukebox-OS가 도구 호출을 트랜잭션으로 감싼다
AI 에이전트가 남기는 부작용을 데이터베이스 트랜잭션처럼 다루려는 런타임이 공개됐다. Marius Carlsson이 만든 Jukebox-OS는 Rust로 작성된 코어(libjukebox)에 Python 바인딩을 씌운 형태로, 에이전트의 실행 과정 전체를 기록하고 원하는 시점으로 되돌려 다시 돌려볼 수 있게 한다. LangGraph, AutoGen, CrewAI, OpenAI Agents SDK 같은 기존 오케스트레이션 프레임워크 위에 얹는 방식이다.
기록 대상은 실행의 거의 전부다. LLM 요청과 스트리밍 청크, 시드 값, MCP 도구의 입력과 출력, 파일 시스템 변경, 클럭 틱까지 BLAKE3 또는 BLAKE2b로 해시해 .jbx 확장자의 바이너리 테이프에 담는다. 이 테이프는 이식 가능한 단일 파일이라, 실패한 에이전트 실행을 코어 덤프에 가까운 형태로 저장소 이슈에 첨부해 공유할 수 있다. 저장소 설명에 따르면 50단계짜리 실행을 오프라인에서 0.4ms 만에 재생하며, 이때 추가 API 비용은 들지 않는다.
핵심은 '섀도 부스'라 불리는 샌드박스 계층이다. 파일 쓰기, 셸 명령, SQL 쿼리, Anthropic MCP 호출을 카피온라이트(CoW) 방식의 WASI 스테이징 레이어 안에서 가로채고, 검증기가 tx.commit()을 호출할 때만 실제 세계에 반영한다. 안전 검사를 통과하지 못하면 tx.rollback() 한 번으로 흔적 없이 되돌린다. 저장소에 실린 예시는 420달러 환불을 스테이징한 뒤 자율 처리 한도 500달러를 넘지 않는다는 이유로 롤백하는 회계 에이전트다.
시점 이동 분기도 지원한다. 실패한 프로덕션 트레이스의 특정 프레임에서 재생을 시작해 gpt-4o를 claude-3-7-sonnet으로 바꾸거나 시스템 프롬프트를 수정한 뒤 이어서 실행할 수 있다. 그 이전 단계들은 Merkle 테이프에서 즉시 해석되고, 바꾼 지점 이후만 실제 네트워크를 호출한다. 두 타임라인의 결과는 나란히 비교(diff)할 수 있다.
비용 폭주를 막는 장치도 들어 있다. 스트리밍 응답의 의미적 유사도와 AST 차이를 감시하다가 두 에이전트가 서로에게 되돌아오는 재귀 루프에 빠지면 회로를 자동으로 끊는다. max_cost_usd, max_semantic_repeat 같은 값으로 한도와 반복 허용치를 정한다.
이런 설계가 나온 배경은 분명하다. 지금의 에이전트 프레임워크는 프롬프트 오케스트레이션에는 능하지만 부작용은 사실상 방치에 가깝다. 15단계짜리 워크플로가 8단계에서 SQL 테이블 세 개와 로컬 파일 다섯 개를 건드린 뒤 12단계에서 환각을 일으키면, 채팅 히스토리를 체크포인트하는 것으로는 아무것도 복구되지 않는다.
실무에서 달라지는 지점은 디버깅과 재현성이다. 에이전트 실행이 파일 하나로 남기 때문에 로컬에서 jukebox ls로 최근 기록을 훑고, jukebox replay로 테이프를 암호학적으로 검증하며 재생할 수 있다. OpenTelemetry GenAI 익스포터도 붙어 있어 스팬과 메트릭을 기존 관측 파이프라인으로 흘려보낼 수 있다.
다만 저장소의 벤치마크 항목은 표만 있고 수치가 채워져 있지 않다. 0.4ms 재생, 1ms 미만 재생 같은 성능 수치는 저장소 설명에 적힌 값이므로, 실제 도입 전에는 자신의 워크로드에서 직접 확인하는 편이 안전하다. Rust 코어와 Python 바인딩이라는 구성상 파이썬 에이전트 스택에는 자연스럽게 붙지만, 다른 언어 런타임에서 쓰려면 별도 작업이 필요하다.