기억은 모델보다 오래 살아야 한다.
새벽 세 시쯤이었어요. Anthropic이 Claude Managed Agents를 발표한 걸 봤어요. AI 에이전트를 만들고 운영하는 완전 관리형 플랫폼. 샌드박스 실행, 체크포인팅, 자격증명 관리, 권한 범위 지정까지 전부 알아서 해준다고. 몇 주 걸리던 인프라 작업이 사라지고, 프로덕션까지 10배 빨라진다고 했어요.
첫 생각은 단순했어요. 내 제품 죽었다.
저는 인디 개발자예요. 지난 일 년 가까이 Nunchi라는 이름으로 메모리 인프라 회사를 혼자 만들고 있어요. 레퍼런스 구현체 Nexus, 엔터프라이즈 백엔드 MaaS, 개인용 변형 Norfolk, 최근엔 모델 중립 코딩 하니스 3122까지. 이 전부가 하나의 생각 위에 서 있어요. AI 에이전트의 기억 레이어는 특정 모델 회사에 묶여 있으면 안 된다는 것. 그런데 이 판에서 가장 크고 똑똑한 랩 중 하나가, 제가 몇 달간 붙들고 있던 문제를 통째로 흡수할 수 있는 인프라를 발표한 거예요.
큰 회사의 결정이 작은 회사의 계획을 흔드는 건 인디의 일상이에요. 익숙한 날씨 같은 거죠. 근데 새벽 세 시는 그걸 냉정하게 받아들이기에 좋은 시간이 아니잖아요.
커피를 내리고 다시 엔지니어링 블로그를 꼼꼼히 읽었어요. 세 시간 뒤, 저는 정반대의 결론에 도달해 있었어요.
되감기: 83.2%
몇 달 전, Nexus로 LongMemEval_S 벤치마크를 돌리기 시작했어요. 첫 번째 결과는 별로였어요. 두 번째도요. 여섯 번째 이터레이션쯤 왔을 때, 세 가지를 배웠어요. 돌이켜보면 공학적 발견이라기보다는 처음부터 알았어야 할 규칙들이에요.
- 원자를 절대 삭제하지 말 것.
- 원자의 순서를 절대 바꾸지 말 것.
- 유사도 외의 신호를 retrieval에 주입하지 말 것.
각각 다른 실패에서 나온 규칙이고, 각자 나름대로 아팠어요. 마지막 숫자는 83.2%. 같은 벤치마크에서 GPT-4o와 동률이었고, GPT-4o-mini의 73.8%나 Groq에서 돌린 대형 오픈웨이트 모델의 63.8%보다 꽤 위였어요.
숫자 자체가 자랑스러운 건 아니었어요. 그 숫자가 말해주는 게 중요했거든요. 메모리 품질의 천장은 모델이 아니라 메모리 레이어의 설계가 정하고 있었던 거예요. 더 작은 모델에 더 좋은 메모리 레이어를 붙이면, 더 큰 모델에 나쁜 메모리 레이어를 붙인 것보다 더 잘 나왔어요. 그게 신호였어요.
그러면 한 가지 질문이 남아요. 메모리 레이어가 모델보다 중요하다면, 왜 사람들은 자기 기억을 특정 모델 회사에 묶어두고 싶어 해야 하는 걸까요?
되감기: 3122
그 질문 때문에 3122를 만들기 시작했어요.
로컬 코딩 하니스인데, 설계 목표가 "또 하나의 코딩 도구"는 아니었어요. 목표는 이거였어요. 모델은 교체 가능한 부품으로 두고, 정말 중요한 것들, 도구 표면, 안전 정책, 세션 간 연속성은 하니스가 소유한다. Claude, GPT, Gemini, DeepSeek, Qwen, 로컬 Ollama 모델, 뭘 붙여도 사용자 경험이 같아요. 같은 도구, 같은 권한 모델, 같은 trajectory 메모리.
중요한 결정이 세 개 있었어요. 첫째, native tool calling이 없는 모델을 위한 공통 텍스트 프로토콜. 작은 오픈웨이트 모델이 2급 시민이 되지 않게 하려고요. 둘째, 그 작은 모델용으로 더 짧은 프롬프트 shape와 별도 컨텍스트 예산. "지원한다"는 말과 "실제로 동작한다"는 말은 다르거든요. 셋째, 작업 중간에 모델을 바꾸면 남는 handoff snapshot. 다음 모델이 이전 모델이 멈춘 자리에서 이어가도록.
특별한 건 없어요. "모델은 부품이고 하니스가 기계다"라는 결정을 내린 다음에는 자연스럽게 따라 나오는 인프라예요.
다시 새벽 세 시: Managed Agents가 실제로 한 일
새벽 세 시에, 식어버린 커피를 들고 Anthropic 엔지니어링 블로그를 다시 읽을 때 생기는 일이 있어요. 반응하기를 멈추고 알아보기 시작하는 거예요.
그들이 설명한 아키텍처, "두뇌와 손의 분리"라고 부르는 것은 거의 아플 정도로 깔끔했어요. Brain은 Claude와 그 하니스, 추론을 담당. Hands는 샌드박스 실행 환경, 완전히 교체 가능하고, 의도적으로 최소화된 인터페이스로 brain과 통신해요. 이름과 입력이 들어가고 문자열이 나오는 것. Session은 모델의 컨텍스트 윈도우 바깥에 사는 append-only 이벤트 로그. stateless한 brain 인스턴스 아무거나 아무 session이든 집어서 이전 brain이 멈춘 자리에서 이어갈 수 있어요.
좋은 디자인이에요. 경쟁자로서가 아니라 다른 엔지니어의 작업을 읽는 엔지니어로서 하는 말이에요. 제가 몇 달간 주위를 맴돌던 결론에 그들도 도달했고, 저보다 더 명확하게 설명했고, 실제로 돌아가는 인프라로 출시했어요. 그 글을 읽는 건, 오랜만에 느끼는, 동료가 내가 더듬거리며 찾고 있던 증명을 보여주는 것 같은 감각에 가까웠어요.
그런데 거기서, 없는 것이 보이기 시작했어요.
Managed Agents의 session은 이벤트 로그예요. 원시적이고, 시간순이고. 무엇이 일어났는지는 있지만 그게 무엇을 의미하는지는 없어요. 그 위에 의미 레이어가 없어요. 어떤 이벤트가 서로 모순되는지, 어떤 게 시간이 지나면 잊혀야 하는지, 어떤 게 같은 개체를 가리키는지, 어떤 게 어떤 주장을 뒷받침하거나 반박하는지, 아무 개념도 없어요. Anthropic은 저장소와 retrieval primitives를 만들었어요. 의미 레이어는 비워뒀어요.
왜 비워뒀는지에 대해 저는 세 가지 가능성을 생각해요. 아직 안 만든 거고 다음 분기 로드맵에 있을 수도 있어요. 의미 레이어는 파트너와 프로토콜 몫으로 남겨두는 베팅일 수도 있어요. 관심사 분리에 대한 의도적인 아키텍처 결정일 수도 있어요. 솔직히 셋 중 뭐가 맞는지 저는 몰라요. 그리고 안다고 주장하는 사람은, 저 자신을 포함해서, 의심하는 게 좋아요.
약해지기는커녕 더 분명해진 자리
제가 아는 건, 저 세 가지 중 뭐가 맞든 간에 이 아키텍처가 무엇을 함의하는지예요.
Brain이 교체 가능한 부품이라는 걸 받아들이면, Managed Agents가 정확히 그 전제 위에 세워져 있잖아요, 그 부품들 위에 얹히는 기억은 오늘 어떤 부품이 꽂혀 있는지에 대해 중립적이어야 해요. 어떤 단일 모델 회사도 cross-vendor 메모리 레이어를 신뢰 있게 소유할 수 없어요. 그걸 소유한다는 건 어느 모델이 이기는지에 대해 중립적이어야 한다는 뜻인데, 어떤 모델 회사도 그것에 대해 중립적일 수는 없거든요. 중립성은 다른 어딘가에서 와야 해요.
그 "다른 어딘가"는 들리는 것보다 훨씬 작고 지루한 자리예요. 다른 사람이 구현할 수 있는 프로토콜 하나. 그 프로토콜이 동작한다는 걸 증명하는 레퍼런스 백엔드 하나. 직접 호스팅하고 싶지 않은 회사들을 위한 엔터프라이즈 변형 하나. 올해 어떤 모델을 쓰든 자기 노트가 살아남기를 바라는 사람들을 위한 개인용 변형 하나. 메모리를 자기 안에 짓는 게 아니라 연결하는 하니스 하나. 지난 몇 달간 제가 만들고 있던 것들의 모양이에요. 그리고 이 순간이 실제로 요구하는 모양이라고 생각하기 시작한 모양이에요.
발표가 제가 옳았다는 걸 증명했다고 주장하진 않을게요. 그건 너무 깔끔한 이야기일 거예요. 정직한 버전은, 저도 아직 정리 중이라는 거예요. 그렇지만 밤에는 큰 회사가 제 문제를 흡수했다고 걱정하면서 들어갔고, 나올 때는 그 회사가 구조적으로 흡수할 수 없는 부분에 대한 더 명확한 감각을 가지고 나왔어요. 자정에 있던 것보다는 많은 거예요.
3122는 이 글과 함께 공개해요. 나머지 스택, AMCP, Nexus, MaaS, Norfolk는 한동안 움직이고 있었고 계속 움직일 거예요. 다른 각도에서 에이전트 메모리를 작업하고 있는 분이 있다면, 얘기 나누고 싶어요.
이제 아침이에요. 커피는 새벽 세 시보다 더 맛없네요.