CatchMe는 벡터 검색을 버리고 활동 트리를 순회하는 쪽을 택했다

홍콩대학교 Data Intelligence Lab이 공개한 오픈소스 AI 메모리 시스템 CatchMe의 캡처·인덱스·검색 아키텍처와 벡터 검색을 쓰지 않는 설계 철학, 프라이버시 고려사항을 정리한다.

2026-08-14 · 최초 발행 2026-04-03

AI 에이전트가 사용자의 맥락을 장기적으로 이해하려면 단순한 대화 이력을 넘어선 포괄적 메모리 시스템이 필요하다. 홍콩대학교(HKU) Data Intelligence Lab이 개발한 CatchMe는 사용자의 모든 디지털 활동을 자동으로 캡처하고, 계층적 활동 트리(Hierarchical Activity Tree)로 구조화해 AI 에이전트에게 장기 메모리를 제공하는 오픈소스 시스템이다.

채팅 기록만으로는 부족하다

CatchMe의 슬로건은 "Make Your AI Agents Truly Personal"이다. 이 프로젝트의 핵심 전제는 AI 에이전트가 진정한 개인화를 달성하려면 사용자의 디지털 활동 전체에 대한 기억이 필요하다는 것이다. 채팅 기록만으로는 사용자가 어떤 코드를 작성했는지, 어떤 문서를 읽었는지, 어떤 웹사이트를 탐색했는지 알 수 없다. CatchMe는 백그라운드 레코더를 통해 윈도우 포커스, 키스트로크, 마우스 움직임, 스크린샷, 클립보드, 알림 등을 자동으로 수집한다. 수집된 원시 데이터는 계층적 활동 트리로 자동 구조화되며, LLM이 트리를 순회하며 사용자의 질문에 정확한 답변을 생성한다.

캡처, 인덱스, 검색

CatchMe의 메모리 시스템은 캡처(Capture)·인덱스(Index)·검색(Retrieve) 단계로 구성된다.

원시 이벤트 스트림구조화된 활동 트리Retrieve: LLM 기반 트리 순회 검색사용자 질문트리 탑다운 순회관련 노드 선택원시 데이터 조사(스크린샷, 키스트로크 등)답변 합성Index: 계층적 활동 트리 구축Day 노드(일 단위 요약)Session 노드(활동 세션 단위)App 노드(애플리케이션 단위)Location 노드(파일/URL 단위)Action 노드(개별 행동 단위)Capture: 백그라운드 캡처윈도우 포커스 레코더키스트로크 레코더마우스 움직임 레코더스크린샷 레코더클립보드 레코더알림 레코더

Capture 단계에서는 백그라운드 레코더가 사용자의 디지털 활동을 실시간으로 수집한다. 각 레코더는 독립적으로 동작하며 시스템 성능에 미치는 영향을 최소화하도록 설계됐다.

레코더 수집 대상 용도
윈도우 포커스 활성 창, 애플리케이션 이름 앱 전환 패턴 추적
키스트로크 입력된 텍스트 코드 작성, 문서 편집 기록
마우스 움직임 클릭 위치, 스크롤 패턴 UI 인터랙션 추적
스크린샷 주기적 화면 캡처 시각적 컨텍스트 보존
클립보드 복사/붙여넣기 내용 정보 이동 경로 추적
알림 시스템/앱 알림 외부 이벤트 기록

Index 단계에서는 수집된 원시 이벤트가 활동 트리로 자동 정리된다. Day는 하루 전체의 디지털 활동 요약, Session은 연속적인 작업 세션 단위(예: "오전 코딩 세션", "오후 문서 작업"), App은 사용된 애플리케이션 단위(예: VS Code, Chrome, Slack), Location은 앱 내 구체적 위치(예: 특정 파일 경로, URL), Action은 개별 행동(예: 함수 작성, 텍스트 복사, 버튼 클릭)을 나타낸다. 각 노드에는 LLM이 생성한 요약(summary)이 자동으로 부여되는데, 상위 노드로 갈수록 추상적이고 하위 노드로 갈수록 구체적이다.

Retrieve 단계에서는 사용자의 질문이 입력되면 LLM이 활동 트리를 탑다운(top-down) 방식으로 순회한다. 먼저 Day 수준의 요약을 검토해 관련 있는 날짜를 선택하고, 해당 날짜 내의 Session·App·Location을 점진적으로 좁혀나간 뒤, 최종적으로 Action 수준의 원시 데이터(스크린샷, 키스트로크 등)를 조사해 정확한 답변을 합성한다.

벡터 DB 없이 검색한다는 결정

CatchMe의 가장 주목할 만한 기술적 결정은 벡터 임베딩과 벡터 검색(semantic search)을 쓰지 않는다는 점이다. 대부분의 AI 메모리 시스템이 벡터 데이터베이스를 핵심으로 채택하는 것과 대조적이다. CatchMe는 벡터 검색 대신 LLM 기반의 트리 순회를 택했는데, 그 근거는 이렇다. 벡터 검색은 개별 청크 간의 구조적 관계를 상실하지만 트리 구조는 시간적·계층적 맥락을 유지하는 구조적 맥락 보존, 각 노드의 LLM 생성 요약을 통해 전체 원시 데이터를 임베딩할 필요 없이 효율적 탐색이 가능한 요약 기반 탐색, 트리 순회 경로가 곧 검색 근거가 되므로 왜 특정 정보가 반환됐는지 추적할 수 있는 설명 가능성이다.

Rewind, Recall, Mem0과 나란히 놓으면

2026년 현재 개인화 AI 메모리 시장에는 여러 솔루션이 경쟁하고 있다.

비교 항목 CatchMe Rewind AI Microsoft Recall Mem0
라이선스 오픈소스 상용 Windows 내장 오픈소스
캡처 방식 레코더 (키보드, 마우스, 스크린샷 등) 스크린 녹화 기반 스크린샷 + OCR API 기반 대화 메모리
인덱싱 계층적 활동 트리 벡터 검색 벡터 검색 + OCR 벡터 검색
검색 방식 LLM 트리 순회 시맨틱 검색 시맨틱 검색 시맨틱 검색
적용 범위 모든 디지털 활동 모든 화면 활동 Windows 활동 LLM 대화 맥락
프라이버시 로컬 처리 (자체 LLM 가능) 로컬 처리 로컬 처리 (NPU) 클라우드 또는 로컬
에이전트 통합 직접 메모리 API 제공 제한적 Copilot 통합 다양한 프레임워크 통합

CatchMe의 핵심 차별점은 두 가지다. 벡터 검색이 아닌 LLM 트리 순회를 통한 구조적 맥락 보존, 그리고 AI 에이전트의 장기 메모리 백엔드로 설계돼 에이전트 프레임워크와 직접 통합이 가능하다는 점이다.

상시 기록이라는 양날의 검

CatchMe는 사용자의 모든 디지털 활동을 기록하므로 프라이버시 문제가 필연적으로 제기된다. 수집된 데이터와 활동 트리가 사용자의 로컬 머신에만 저장되는 완전 로컬 처리, OpenAI 호환 엔드포인트를 통해 Ollama 등 로컬 LLM을 써서 데이터가 외부로 전송되지 않는 환경을 구성할 수 있는 로컬 LLM 지원, 특정 애플리케이션이나 웹사이트를 캡처 대상에서 제외할 수 있는 선택적 캡처가 CatchMe의 대응 방식이다. 다만 키스트로크와 스크린샷을 상시 기록한다는 특성상, 비밀번호 입력이나 민감한 금융 정보 등이 의도치 않게 캡처될 수 있으므로 필터링 규칙의 세밀한 설정이 필요하다.

# 리포지토리 클론
git clone https://github.com/HKUDS/CatchMe.git
cd CatchMe

# 의존성 설치
pip install -r requirements.txt

# LLM 백엔드 설정 (OpenAI 호환 엔드포인트)
export CATCHME_LLM_ENDPOINT=http://localhost:11434/v1  # Ollama 예시
export CATCHME_LLM_MODEL=llama3.1:8b

# 캡처 시작
python catchme start

# 메모리 질의
python catchme query "어제 오후에 어떤 코드를 작성했지?"

CatchMe는 AI 에이전트의 개인화를 위해 사용자의 디지털 활동 전체를 계층적 활동 트리로 구조화하는 오픈소스 메모리 시스템이다. 벡터 검색 대신 LLM 기반 트리 순회를 채택해 구조적 맥락을 보존한다는 점이 기술적 핵심이다. 로컬 LLM과 결합하면 데이터가 외부로 전송되지 않는 완전한 프라이버시 보호 환경을 구성할 수 있으나, 상시 활동 기록이라는 특성상 민감 정보 필터링에 대한 세밀한 설정이 필수적이다.

Sources

CatchMeAI메모리HierarchicalActivityTree오픈소스개인화에이전트