콘텐츠로 이동

로컬 우선 · 프라이버시

memtomem은 기본적으로 기억 데이터를 외부로 보내지 않습니다. 저장·임베딩·검색·재정렬이 모두 내 컴퓨터에서 일어나며, 비밀값으로 보이는 내용은 캐시·색인·공유 단계에서 자동으로 걸러집니다.

  • 저장소 — 기본 저장소는 로컬 SQLite(~/.memtomem/)입니다. 외부로 노출되는 네트워크 포트가 없습니다.
  • 임베딩 — 임베딩은 내장 ONNX(fastembed)로 로컬에서 동작합니다. GPU·외부 API·클라우드가 필요 없고 비용도 없습니다. (Ollama·OpenAI 제공자는 선택 사항입니다.)
  • 재정렬(Reranking) — 재정렬을 켜면 기본 제공자는 로컬 ONNX(fastembed)이며, 외부 API가 필요 없습니다.
  • STM 프록시 — STM은 AI 클라이언트와 stdio로 통신하며, 프록시 서버 자체는 네트워크 포트를 열지 않습니다. 응답 캐시·메트릭·피드백 등 영속 저장소는 모두 ~/.memtomem/ 아래 로컬 SQLite 파일이며, 원격이나 호스트 간 공유가 없습니다.
  • 계정 불필요 — 로그인이나 가입 없이 동작합니다.
  • 유일한 예외 — 외부 제공자를 선택했을 때만 데이터가 기기를 벗어납니다. 두 가지 경우가 있습니다: OpenAI·Ollama 임베딩/재정렬을 쓸 때, 또는 STM이 외부 LLM으로 압축·추출을 수행할 때입니다. STM의 외부 LLM 경로에서는 기본값인 privacy_scan_enabled(켜짐)가 외부 호출 직전에 자격증명이 있는지 검사해, 발견되면 그 호출을 건너뜁니다. 이 설정을 끄면 응답 원문이 검사 없이 그대로 전송됩니다(이 경우 서버가 시작할 때 경고를 남깁니다).

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

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

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

STM 서피싱은 도구 호출에서 질의 텍스트를 추출해 LTM을 검색합니다. 이 질의 텍스트의 보존 방식을 제어할 수 있습니다.

  • MEMTOMEM_STM_SURFACING__PERSIST_QUERY_TEXT=false — 원문 대신 sha256:<16-hex> 다이제스트만 저장합니다.
  • MEMTOMEM_STM_SURFACING__QUERY_RETENTION_DAYS (기본 30) — 피드백 DB에 보존된 원문 질의 텍스트를 지정한 일수 후 삭제합니다.
  • 자격증명·PII로 보이는 민감한 내용은 설정과 무관하게 항상 해시로 저장됩니다.
  • 쓰기 도구 제외 — 상태를 변경하는 업스트림 도구에는 서피싱이 자동으로 비활성화됩니다.

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

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

STM은 기존 MCP 서버를 가져와 앞단에서 프록시하지만, 이 변경은 되돌릴 수 있습니다. mms eject는 가져온 서버를 원래 호스트 MCP 클라이언트 설정으로 복원하며, 복원이 검증된 뒤에야 STM 항목을 제거합니다.

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