콘텐츠로 이동

로컬 우선 · 정보 보호

memtomem은 로컬 우선으로 동작합니다. 기본 저장소와 검색 인덱스는 내 컴퓨터에 둡니다. 원격 임베딩·LLM·리랭커, 원격 MCP/LTM 연결, 웹훅, Toolgraph 서버, Langfuse 추적을 직접 설정했을 때만 해당 외부 서비스와 통신합니다.

경로기본 상태내 컴퓨터 밖으로 내용이 나갈 수 있나?
SQLite 저장, BM25 검색, 로컬 ONNX 임베딩·리랭킹로컬파일을 별도로 동기화하거나 공개하지 않으면 나가지 않음
MCP stdio, STM 캐시·지표, 루프백 Web UI로컬사용자가 연결한 upstream MCP 서버와의 통신을 제외하면 나가지 않음
원격 Ollama, OpenAI 호환 임베딩·LLM, Cohere 리랭킹직접 설정할 때만 사용설정한 주소로 전송될 수 있음
원격 MCP/LTM, 웹훅, Toolgraph, Langfuse직접 설정할 때만 사용해당 연동 설정에 따라 전송될 수 있음

모든 처리를 로컬에 두려면 Minimal 또는 로컬 ONNX 경로를 사용하고, Web UI와 데몬은 루프백에 유지하며, 선택형 원격 제공자를 설정하지 마세요.

  • 저장소 — 기본 저장소는 로컬 SQLite(~/.memtomem/)입니다. MCP stdio 연결은 네트워크 포트를 열지 않습니다. mm web도 기본적으로 내 컴퓨터에서만 접속할 수 있는 루프백 주소에 연결됩니다.
  • 임베딩 — 키워드 전용 모드는 임베딩 서비스가 필요 없습니다. 내장 ONNX(fastembed)는 로컬에서 실행되며 Ollama와 OpenAI 호환 제공자는 선택적으로 설정하는 경계입니다.
  • 재정렬(Reranking) — 재정렬을 켜면 기본 제공자는 로컬 ONNX(fastembed)이며, 외부 API가 필요 없습니다.
  • STM 프록시 — 기본 연결 방식은 stdio입니다. 응답 캐시·측정값·피드백은 ~/.memtomem/ 아래의 로컬 SQLite 파일에 저장됩니다. 연결한 MCP 서버나 원격 LTM을 사용할 때는 해당 서버와 통신합니다.
  • 계정 불필요 — 로그인이나 가입 없이 동작합니다.
  • 선택적 외부 연결 — OpenAI 호환 임베딩, Cohere 리랭킹, 외부 주소의 Ollama, 압축·추출용 외부 LLM, 원격 MCP/LTM, 웹훅, Toolgraph, Langfuse는 설정한 주소로 데이터를 보낼 수 있습니다. STM의 privacy_scan_enabled는 기본적으로 자격 증명을 검사합니다. 민감 정보가 발견되면 외부 LLM으로 보내지 않고 로컬에서 처리합니다. 이 검사를 끄면 연결한 MCP 서버의 응답이 검사 없이 외부 서비스로 전송될 수 있으며, 시작할 때 경고가 표시됩니다.

데이터 디렉터리(~/.memtomem/)는 생성 시 0o700 권한으로 만들어지고 내부 파일은 0o600(소유자 전용 읽기·쓰기)으로 기록됩니다. 별도로, 서버의 pid·lock 파일이 담기는 런타임 디렉터리($XDG_RUNTIME_DIR/memtomem 또는 /tmp/memtomem-<uid>)는 0o700으로 생성되며 그룹·기타 사용자에게 접근 권한이 남아 있으면 시작 시점에 거부합니다.

memtomem은 자격증명·토큰·키로 보이는 내용이 저장소나 공유 범위로 흘러가지 않도록 여러 지점에서 차단합니다.

  • STM 민감 정보 자동 감지 — API 키, 토큰, 개인 키 패턴(예: sk-…, ghp_…, AWS AKIA…, JWT)이 포함된 응답은 캐시나 선택 기록에 저장되지 않습니다. 외부 LLM으로 압축하기 전 민감 정보가 발견되면 로컬 truncate 방식으로 대신 처리합니다. 기본 STM 실행 환경은 응답을 LTM에 쓰지 않습니다.
  • 색인 자격증명 제외 — LTM 색인은 내장 자격증명 차단 목록(oauth_creds.json, credentials*, id_rsa*, *.pem, *.key, .ssh/** 등)을 적용합니다. 사용자가 !negation 패턴을 추가해도 이 내장 패턴은 해제되지 않습니다.
  • 공유 시 재검사mem_agent_share로 기억을 더 넓은 네임스페이스에 복사하면 민감 정보 차단 검사를 다시 실행합니다. 비밀값으로 보이는 내용은 공유하지 않습니다.
  • Context Gatewayproject_shared 계층(깃 추적 대상)으로 쓰거나 옮길 때 비밀값이 감지되면 --force 없이 무조건 거부합니다(깃 이력은 영구적이므로). user·project_local 계층은 검토 후 재정의할 수 있습니다.

검색어 보호(STM 관련 기억 자동 제시)

섹션 제목: “검색어 보호(STM 관련 기억 자동 제시)”

STM 서피싱은 도구 호출에서 검색어를 만들어 LTM을 검색합니다. 다음 설정으로 검색어를 저장하는 방식을 제어할 수 있습니다.

  • MEMTOMEM_STM_SURFACING__PERSIST_QUERY_TEXT=false — 원문 대신 sha256:<16-hex> 다이제스트만 저장합니다.
  • MEMTOMEM_STM_SURFACING__QUERY_RETENTION_DAYS (기본 30) — 피드백 DB에 저장된 원문 검색어를 지정한 일수 후 삭제합니다.
  • 자격 증명이나 이메일 주소처럼 민감 정보 패턴과 일치하는 검색어는 설정과 관계없이 해시로 저장합니다.
  • 쓰기 도구 제외 — 연결한 MCP 서버의 도구가 상태를 변경하면 서피싱을 자동으로 건너뜁니다.

되돌릴 수 있는 도입 · 잠금 없음

섹션 제목: “되돌릴 수 있는 도입 · 잠금 없음”

STM은 기존 MCP 서버를 가져와 앞단에서 중계합니다. 이 변경은 언제든 되돌릴 수 있습니다. mms eject는 가져온 서버를 원래 MCP 클라이언트 설정으로 복원하고, 복원이 확인된 뒤 STM 항목을 제거합니다.

  • STM은 로컬 AI 클라이언트와 사용자가 연결한 MCP 서버를 신뢰합니다. 신뢰할 수 있는 서버만 STM에 연결하세요.
  • 선택적 서피싱 데몬은 내 컴퓨터 안에서만 연결을 받고(루프백 127.0.0.1), 시작할 때마다 무작위 토큰으로 인증합니다. MEMTOMEM_STM_DAEMON__HOST를 루프백이 아닌 주소로 바꾸지 마세요.
  • LTM 웹 UI(mm web)는 기본적으로 127.0.0.1에만 바인딩됩니다.
  • 취약점은 공개 이슈 대신 GitHub 보안 권고 또는 contact@dapada.co.kr로 제보해 주세요.