내 옵시디언·마크다운 노트를 AI의 기억으로.
남의 데이터베이스가 아니라, 내 폴더 안의 파일로요.
목업이 아니에요. 나무위키 실제 문서 1,469개 볼트에서 0.1초 만에 답이 나오고, 오타는 API 없이 고쳐져요.
요즘 AI 메모리 제품들은 내 지식을 자기들 데이터베이스에 넣고 싶어 해요. 내가 한 말을 요약해서 행(row)으로 저장하죠. 저장할 때 정보가 깎이고, 나중에 원문을 확인할 수도 없고, 그 서비스를 떠나면 기억도 두고 나와야 해요.
저희 생각은 달라요. 내가 이미 가진 마크다운 파일이 더 좋은
데이터베이스예요. 날짜가 있고, 원문이 있고, 깃으로 관리되고,
rm 한 번이면 지워져요. Lemory는 그 파일들과 AI 사이에
앉아서 세 가지를 해요.
의미 검색 + 한국어에 강한 키워드 검색 + [[위키링크]] 그래프를 합친 하이브리드 검색이에요. 경쟁 제품 전부와 같은 조건에서 측정했고, 지는 항목도 공개해요.
결정과 사실이 볼트 안의 평범한 .md 노트로 저장돼요. 중복이면 표시하고, 관련 기억은 링크로 이어줘요.
모든 질의, AI가 쓴 모든 노트(클릭 한 번으로 되돌리기), 클라이언트별 사용량이 대시보드에 남아요. 전부 내 컴퓨터의 SQLite 파일 하나예요.
그리고 하나 더요. 이 분야 대부분은 한국어를 나중 일로 미뤄요. Lemory는 한글 바이그램 색인, 음절 단위 오타 교정("메플이스토리"로 메이플스토리를 찾아요), 조사·활용을 아는 매칭까지 한국어를 1등 시민으로 다뤄요. 영어 노트에 한국어로 물어도 찾아요.
모든 성능 수치는 커밋된 코드와 공개 데이터로 재현돼요. 지는 항목, 실패한 실험까지 BENCHMARKS.md에 전부 공개해요.
pipx install "git+https://github.com/jwgo/lemory"
pipx가 없으면 pip install로 해도 돼요. Python 3.10 이상이면 충분해요.
lemory up ~/Obsidian/MyVault
이 한 줄이 설정 → 색인 → 대시보드까지 전부 해요. 볼트는
.md 파일이 든 폴더면 뭐든 돼요. 옵시디언이 아니어도요.
lemory ask "요새 내가 하던 그 프로젝트 어디까지 했지?"
끝이에요. 오타를 내도, 반말로 물어도 돼요.
Gemini 키가 있으면 클라우드로, 없으면 기본 탑재된 온디바이스 스택(한국어 특화 e5-small-ko-v2 임베딩 + Gemma 4 답변)으로 돌아요. 완전 오프라인 모드에선 볼트 내용이 한 바이트도 밖으로 안 나가요. 망분리 환경에서도 그대로 써요.
| 모드 | 필요한 것 | 되는 것 |
|---|---|---|
| 온디바이스 (기본) | 키 없음, RAM 8GB+ | 검색 + 답변, 전부 오프라인 |
| 경량 로컬 | 키 없음, RAM 4GB | 검색만 (라즈베리파이급도 OK) |
| Gemini 클라우드 | 무료 키 1개 (카드 등록 없음) | 검색 + 답변, 하루 약 250질문 무료 |
색인할 때 LLM이 아예 안 돌아요. 노트 1,000개 색인 = LLM 호출 0회, 몇 초면 검색이 돼요.
"3분기 킥오프에서 예산 얼마로 잡았지?" "재택 정책, 작년이랑 뭐가 달라졌지?" 회의록이 쌓일수록 강해져요.
"이벤트 루프 뭐였지? 내 노트 기준으로" 인터넷 말고 내가 정리한 내용으로 답해요.
Claude·Cursor에 MCP로 연결하면, 세션이 끝나도 결정과 사실이 남아요. 다음 세션이 이어서 기억해요.
ChatGPT/Claude 대화 내보내기를 넣어두면 대화 속 결정들도 검색돼요. "내 여동생 이름 뭐랬지?"가 한 달 뒤에도 나와요.
"카오스 벨룸 준비물 뭐라고 적어놨더라?" "김치찌개 황금비율" 공략 노트도 레시피도요.
"오사카 그 라멘집 이름이 뭐였지?" "전세 갱신 거절당하면 뭐부터?" 적어둔 건 뭐든지요.
$ lemory ask "프로젝트 아틀라스 리드가 좋아하는 DB가 뭐더라?" # 멀티홉: 아틀라스 노트 → [[리드]] 링크 → 그 사람 노트에서 답을 찾아요 $ lemory ask "요새 내가 읽던 책 뭐였지?" # "지금" 책을 골라요 $ lemory ask "3월에 읽던 책은?" # 3월을 물으면 그때 기록으로
내 [[위키링크]]가 곧 지식그래프예요. 그걸 공짜로 읽는
Lemory의 멀티홉 점수(1.000)가, LLM으로 그래프를 만드는 제품들(0.53~0.81)보다
높게 측정됐어요.
lemory serve # http://127.0.0.1:8377
옵시디언 플러그인, Claude/MCP, 웹 대시보드가 전부 여기에 붙어요.
켜둔 동안 노트를 고치면 몇 초 안에 자동으로 다시 색인돼요.
lemory ask 한 줄은 서버 없이도 돼요.
claude mcp add lemory -- lemory mcp --vault ~/Obsidian/MyVault --client claude-desktop lemory skill install claude-code # 잘 쓰는 법까지 가르치기 lemory hooks install claude-code # 세션 끝나면 자동으로 기억 저장
Cursor, Windsurf, VS Code 등 MCP를 지원하면 뭐든 같은 방식이에요. 훅을 걸어두면 Claude Code 세션이 끝날 때마다 기억할 만한 결정이 날짜 붙은 노트 하나로 저장돼요. 부지런할 필요가 없어요.
lemory remember "VPN 갱신은 매년 3월, 담당 김하늘" --tags 업무 lemory search "tag:회의록 folder:2026 예산" # 범위를 좁혀서 검색 lemory suggest-links # 언급만 하고 링크 안 건 것들 제안 (주 1회 추천) lemory drift # 깨진 링크·방치된 중복 점검 lemory graph --open # 볼트 전체를 인터랙티브 그래프로
AI가 쓴 건 전부 대시보드 피드에 "누가 썼는지"와 되돌리기 버튼과 함께 떠요. 아무것도 몰래 지나가지 않아요.
--- lemory: false ---
노트 맨 위에 이 한 줄만 적으면 그 노트는 색인도, 검색도, 어떤 모델로도 전송되지 않아요. 일기장은 일기장으로 남아요.
내 볼트 (*.md) ──감시──► 파싱: frontmatter · 태그 · [[링크]] · 날짜
│
▼
SQLite 파일 하나: 청크 · BM25 · 링크 그래프 · 임베딩 캐시
│
질문 ─► 오타 교정 ─► 벡터 + 키워드 (융합) ─► 제목·최신성 부스트
│
1홉 그래프 확장 ← 멀티홉 답이 여기서 나와요
│
▼
날짜와 출처가 붙은 컨텍스트 ─► LLM ─► 답변 [n]
검색은 로컬이고 LLM이 없어요(3~13ms). 질문당 임베딩 1회(캐시됨), 답변 생성 1회예요. 청크 2만 개를 넘으면 벡터 인덱스가 자동으로 전환돼서 청크 100만 개에서도 질의당 5.9ms예요.
| 측정 | Lemory | 비교 |
|---|---|---|
| 멀티홉 answer-in-context@8 | 1.000 | LightRAG 0.807 · mem0 0.579 · qmd 0.526 |
| 검색 지연 (p50) | 약 3ms | mem0 212ms · qmd 0.6~59초 |
| KorQuAD recall@1 (키 없이 로컬) | 0.930 | BM25 0.900 · 벡터 단독 0.840 |
| LongMemEval 500문항 Recall@5 | 0.983 | API 호출 0회, 로컬 임베더만으로 |
| 색인 (노트 1,000개) | LLM 0회 | 일부 경쟁 제품은 54노트에 45분 |
전부 같은 조건에서 직접 측정했고, 재현 스크립트가 저장소에 있어요. 저희가 지는 항목(예: 작은 영어 볼트에선 벡터 단독이 한 문제 차로 이겨요)도 그대로 적어뒀어요.
import lemory
lemory.configure(vault="~/Obsidian/MyVault")
lemory.index()
print(lemory.ask("가격 정책 뭐라고 결정했더라?").text)
REST GET /search · POST /ask · POST /memory 등
TS/JS 의존성 0 클라이언트 (clients/js)
Python LangChain · LlamaIndex 리트리버
Docker 셀프호스팅
커넥터 SDK lemory connect script.py로 어떤 소스든 볼트 노트로
자세한 건 README 개발자 섹션을 보세요.