funes: 코드 에이전트를 위한 내구성 있는 메모리 계층

TL;DR

Hugging Face는 funes를 출시했습니다. 이는 코드 에이전트 세션 로그를 인덱싱되고 검색 가능한 데이터셋으로 변환하는 가벼운, 로컬에서 실행되는 메모리 시스템으로, Claude Code, Codex, pi, Hermes와 같은 에이전트가 원격 서비스에 데이터를 전송하지 않고도 머신과 모델 간에 정확한 이전 대화를 기억할 수 있게 해줍니다.


기존 에이전트에 대한 단일 명령어 메모리 통합

핵심 포인트: 에이전트에 funes를 추가하려면 단일 funes add <agent> 명령어만 사용하면 됩니다. 이 명령어는 초기 인덱스를 생성하고, recallget 도구를 주입하며, 완료된 모든 대화에 대해 증분 인덱싱을 설정합니다.

curl -fsSL https://huggingface.co/buckets/huggingface/funes/resolve/install.sh | sh
funes add claude   # 또는 codex, pi, hermes
  • 기본 추론 백엔드에는 ML 런타임 의존성 없음; 임베딩과 재정렬은 사용자 기계에서 실행됩니다.
  • 인덱싱은 증분적입니다: 전체 기록을 다시 임베딩하지 않고도 새로운 대화가 임베딩되어 추가됩니다.
  • recall은 대화의 원본 텍스트와 출처 메타데이터(에이전트, 타임스탬프, 세션, 대화 번호)를 반환하며, 주변 컨텍스트를 열 수 있는 get 명령어도 제공합니다.

"funes를 추가하면 recall이 대화 내부에서 발생합니다. 에이전트는 스스로 메모리를 뒤져 자신의 답변 뒤에 있는 세션을 명시합니다."

결정론적 파이프라인 및 랭킹 아키텍처

핵심 포인트: funes는 모든 지원되는 추적 형식을 통일된 대화 및 블록 표현으로 정규화한 후, 결정론적 파이프라인을 통해 처리합니다:

  1. 각 대화의 체킹(Chunking)
  2. 고정된 로컬 모델로 임베딩(Embedding)
  3. 로컬 Lance 추가 전용 데이터셋에 저장(Storage)
  4. 쿼리는 벡터 유사도와 BM25를 결합하고 랭킹을 융합하며, 크로스 인코더로 재정렬하고 최근성에 따라 재가중하며 인접한 청크를 첨부합니다.

이 설계는 세 가지 핵심 특성을 제공합니다:

  • 에이전트 간 통합된 메모리 – 모든 지원되는 에이전트가 동일한 형식으로 기록하므로, recall은 Claude Code, Codex, pi, Hermes의 기록을 모두 아우를 수 있습니다.
  • 원시 증거는 그대로 유지됨 – 쓰기 시 요약이 이루어지지 않으며, 모든 결과는 정확한 대화로 추적할 수 있습니다.
  • 기본적으로 로컬 운영 – 인덱싱, 임베딩, 재정렬에 대해 Hub 계정이나 외부 서비스가 필요하지 않습니다.

메모리를 호스팅 서비스가 아닌 데이터셋으로 취급

핵심 포인트: funes는 메모리를 Lance 데이터셋으로 간주하며, 선택적으로 개인 Hugging Face 데이터셋에 게시할 수 있어 기계 간 원활한 이식성이 가능합니다.

funes add codex acme/funes-memory   # 원격 데이터셋에 바인딩
  • 게시 시 인덱싱 중 자격 증명이 제거됩니다. 보안 스캐너(문서화된 SECURITY.md 참조)는 업로드 전에 명백한 비밀번호를 제거합니다.
  • 원격 메모리는 로컬에 캐시되므로, 이후 쿼리는 로컬 속도로 실행되며 Hub는 소유권, 접근 제어, 버전 관리, 배포를 제공합니다.
  • 이 워크플로우는 별도의 메모리-aaS 계정을 생성하지 않습니다. 동일한 바이너리는 로컬 및 원격 메모리 모두를 제공합니다.

ask vs. recall: 일회성 쿼리 vs. 통합 워크플로우

핵심 포인트: funes ask는 지속적인 에이전트 통합 없이도 메모리에 단일 질문을 할 수 있게 해줍니다.

funes ask claude "what did we decide about the streaming parser"
# 또는 게시된 메모리에 대해
funes ask claude "why is funes append-only" --memory huggingface/funes-memory
  • 명령어는 관련 문장들을 검색하여 선택된 코드 에이전트에 전달하고, 근거 있는 답변을 반환하며 출처를 인용합니다.
  • 검색된 문장들이 답변을 뒷받침하지 못할 경우, 에이전트는 명시적으로 한계를 밝히며, 재표현하거나 funes add를 통해 완전한 통합을 권장합니다.

에이전트 간 연속성 유지와 컨텍스트 손실 없음

핵심 포인트: 메모리가 모델에 독립적인 데이터셋이므로, Claude Code로 시작한 작업은 다른 머신에서 Codex(또는 지원되는 다른 에이전트)로 이어질 수 있으며, 후속 에이전트는 이전의 추론을 recall할 수 있습니다.

  • 기계 간: 각 호스트의 에이전트를 동일한 원격 메모리에 바인딩하여 스레드 연속성을 유지합니다.
  • 팀 간: 새 팀원은 공유 메모리에서 수개월간의 결정, 실패한 시도, 근거를 직접 검색할 수 있습니다.
  • 오픈소스 프로젝트: 유지보수자는 릴리스와 함께 메모리를 게시하여 검색 가능하고 버전 관리되는 CLAUDE.md를 만들 수 있으며, 전체 결정 과정을 기록할 수 있습니다.

게시된 메모리는 Hub에서 funes 태그를 통해 검색 가능하며, 누구나 --memory를 사용해 공개 프로젝트의 역사에 질의할 수 있습니다.

세션 압축 및 수작업 인수보다 비용 효율적인 대안

핵심 포인트: 수작업 인수 대 비추론 벤치마크에서, 한 작업에서는 비용이 8배 낮고, 다른 작업에서는 4배 낮았으며, 원시 증거를 유지했습니다.

  • 압축(요약)은 종종 중요한 세부 정보를 손실시켜 두 개의 벤치마크 작업 중 하나에서 실패했습니다.
  • 비추론은 원본 문장을 반환하므로 요약이 필요 없으며 토큰 사용량이 감소합니다.

두 작업에 걸쳐 다섯 개의 채널에 대한 성공적인 작업당 가중 토큰 수, 비추론이 두 번 모두 가장 짧은 막대

오픈소스 기반 및 커뮤니티 참여

핵심 포인트: funes는 기존 오픈소스 구성 요소를 기반으로 합니다:

  • 외부 API 없이 실행되는 로컬 임베딩 모델
  • 저렴한 증분 쓰기용 Lance 추가 전용 데이터셋
  • Hugging Face Hub의 데이터셋 캐싱 및 중복 제거 기능

이 프로젝트는 완전히 오픈소스이며 https://github.com/huggingface/funes에서 확인할 수 있습니다. 설치 문제, 누락된 비추론, 추가 에이전트 지원 요청은 이슈를 열어 주세요.


결론: funes는 코드 에이전트의 정적 로그를 로컬에서 작동하며, 개인 데이터셋으로 공유할 수 있고, 에이전트와 기계 간 원활한 연속성을 가능하게 하는 활성화되고 검색 가능한 메모리로 전환합니다. 단일 명령어와 외부 서비스 의존 없이 모든 것이 가능합니다.

Sources