linggen-memory
당신이 사용하는 모든 에이전트가 공유하는 하나의 기억 — Claude Code, Codex, OpenClaw, 그리고 Linggen 자체의 Ling과 Yinyue.
월요일에 Claude Code에게 무언가를 말하면, 화요일에는 Codex가 그것을 알고 있습니다. 로컬 데몬 하나, 당신의 기기에 저장되는 스토어 하나. SaaS도 없고, API 키도 없고, 가입할 필요도 없습니다.
단순히 기억하고 회상하는 것을 넘어 — 뇌가 하는 모든 것. 좋은 기억은 어떤 것은 하루 동안 붙잡아 두고 어떤 것은 수년간 간직하며, 중요한 것을 되살리고 중요하지 않은 것은 놓아주며, 중복을 통합하고, 함께 속한 것을 병합하며, 자신의 작업을 점검하고, 모순을 발견하면 이를 해결합니다. 이것이 ling-mem이 하는 일입니다.
스스로 작동합니다. 이미 사용하고 있는 에이전트에 설치하기만 하면 되고, 그 이상은 원치 않으면 그만두셔도 됩니다. 또한 Linggen의 메모리이기도 합니다 — 그래서 만약 그곳의 동반자인 Yinyue를 만나게 된다면, 그녀는 첫날부터 당신을 알고 있습니다.
상태: stable — 최신 릴리스 1.8.2. 스토어 스키마와 CLI/HTTP/MCP 계약은 고정되었습니다. macOS Apple Silicon 및 Linux x86_64용 사전 구축된 바이너리가 제공됩니다. 리팩터링 전 코드 인덱싱 도구는 v0-legacy git 태그에서 보존되어 있습니다.
작동 방식
┌──────────────────────── IN YOUR TURN ────────────────────────┐
│ the Linggen engine + the plugin — on every host │
│ │
...
루프의 양쪽 절반은 같은 스토어에서 만납니다. '낮(day)' 부분은 플러그인이 설치된 모든 곳에서 실행됩니다. '밤(night)' 부분은 미션 스케줄러를 제공하는 Linggen이 필요합니다 — 루프를 완성하려면 Claude Code나 Codex와 함께 설치하세요.
| stage | when | what it does |
|---|
| capture | live | 신호는 나타나는 턴에 저장됩니다. 당신이 명시적으로 말하는 것은 장기 기억으로 가고, 나머지는 단기 기억에 단계화됩니다. |
| ... | | |
구성 요소
ling-mem — 스토어를 소유하는 단일 바이너리 및 로컬 데몬 (LanceDB + Qwen3-Embedding-0.6B, 1024차원, 다국어). 쓰기(write), 검색(search), 중복 제거(dedup), 아카이브(archive), 내보내기(export) 등 모든 기계적 작업을 수행합니다. 내부에서 LLM이 실행되지 않으며, 모든 프론트엔드는 이를 거치므로 프론트엔드를 제거해도 행(row)을 잃지 않습니다.
- Linggen 엔진 — 모든 에이전트를 위한 메모리 도구, 각 세션 상단에 항상 활성화된 정체성 블록, 턴별 리콜 주입(per-turn recall injection), 그리고 시스템 프롬프트 내의 캡처 프로토콜. 이것은 사용자가 타이핑하는 동안 실행되는 절반입니다.
- 메모리 에이전트 + 드림 미션 — 오프라인 판단 두뇌로, 새벽 3시에 스케줄링되며 기계가 잠자고 있었다면 24시간 따라잡습니다. 메모리 앱의 버튼은 동일한 미션을 트리거하므로 UI와 스케줄이 어긋날 수 없습니다.
linggen 플러그인 & 스킬 — Claude Code, Codex, OpenClaw 내부에 있는 동일한 스토어: 각 턴을 리콜하고, 캡처 프로토콜, 런북(runbooks), 그리고 메모리 앱 UI(캘린더, 대시보드, 행 브라우저). 다른 호스트도 데몬의 /mcp memory_* 그룹을 통해 동일한 행에 접근합니다.
세 가지 계층
행은 얼마나 지속적이었는지에 따라 분리되며, 야간 패스가 이들을 선반 사이로 이동시킵니다.
- Core — 사람에 대한 몇 가지 고신뢰성 보편적인 정보(이름, 역할, 업무 규칙). 모든 세션에 존재하며 검색 비용이 들지 않습니다.
- Long-term — 그 외의 모든 지속 가능한 것들로, 필요할 때 검색됩니다. 상태와 교훈이지, 사건은 아닙니다 — 테스트는 이 행이 3개월 후에도 여전히 중요할지 여부입니다.
- Short-term — 턴별 작업 캡처. 사건과 불확실한 신호가 저렴하게 여기에 저장되며, 나머지가 사라지기 전에 드림(dream)이 자리를 얻을 가치가 있는 것을 결정합니다.
빠른 살펴보기
ling-mem add "간결한 답변을 선호하며, 모호하게 말하지 않음" \
--type preference --from user --tier semantic \
...
기본 출력은 stdout의 NDJSON 형식입니다. 모든 모델, 스크립트 또는 쉘이 이를 파싱할 수 있습니다. 사람이 읽을 수 있는 줄을 원하면 --format text를 사용하세요.
데몬(ling-mem start)은 또한 http://127.0.0.1:9528에서 사용 가능한 내장 데이터 브라우저를 제공하여 필터링/편집/일괄 삭제 작업을 할 수 있습니다. 모든 행은 읽거나, 편집하거나, 삭제할 수 있는 사용자 소유의 정보입니다.
설치 (Install)
에이전트 자체 마켓플레이스에서 설치하세요. 이곳에서는 업데이트 관리와 Claude Code 및 Codex에서의 턴별 리콜 후크(per-turn recall hook)를 처리합니다. 호스트당 하나의 채널만 선택하세요.
Claude Code claude plugin marketplace add linggen/linggen-memory
claude plugin install linggen@linggen-memory
Codex codex plugin marketplace add linggen/linggen-memory
...
이 명령어들은 에이전트 프롬프트가 아닌 셸(shell)에서 실행해야 합니다. @linggen-memory 한정자(qualifier)가 필요합니다. Claude Code 및 Codex의 경우, 플러그인을 로드하려면 이후에 에이전트를 재시작하세요.
마켓플레이스 명령어들은 git을 사용하여 클론(clone)합니다. Mac을 사용하는데 git이 없는 경우(새로운 Mac은 커맨드 라인 툴즈 스텁만 가지고 있어 설치 대화 상자가 열립니다), 다음 원라인 명령어를 사용하세요. 이 명령어는 해당 릴리스의 플러그인 번들(plugin bundle)을 Claude Code 및 Codex에 설치하고, git이 존재하면 그것을 사용합니다:
curl -fsSL https://linggen.dev/install-plugin.sh | bash
ling-mem 바이너리는 첫 사용 시 자동으로 가져와져(고정되며, SHA-256으로 검증됨) 모든 호스트에서 공통되는 위치인 ~/.local/bin/ling-mem에 저장됩니다. 바이너리만 수동으로 설치하려면 다음을 사용하세요:
bash <(curl -fsSL https://raw.githubusercontent.com/linggen/linggen-memory/main/plugins/linggen/scripts/install-bin.sh) --version '^1'
macOS Apple Silicon 및 Linux x86_64용 사전 구축된 바이너리는 릴리스 페이지에서 확인할 수 있습니다.
대신 소스(source)로부터 빌드하려면:
git clone https://github.com/linggen/linggen-memory
cd linggen-memory
cargo build --release
...
크로스 컴파일 및 서명 과정에 대한 자세한 내용은 doc/tech-spec.md → Release process를 참조하세요.
레이아웃 (Layout)
linggen-memory/
├── Cargo.toml # 단일 크레이트(single crate)
├── src/ # 모든 Rust 코드 (CLI, HTTP 데몬, 임베드 파이프라인,
...
시스템의 엔진 부분, 즉 메모리 도구(memory tools), 메모리 에이전트(memory agent), 그리고 드림 미션(dream mission)은 [`linggen/linggen`](https://github.com/linggen/linggen) 엔진 리포지토리에 있습니다. 시스템 전체에 대한 제품 사양은 그곳의 [`doc/memory-spec.md`](https://github.com/linggen/linggen/blob/main/doc/memory-spec.md)에서 확인할 수 있으며, 개요 페이지는 [linggen.dev/memory](https://linggen.dev/memory)에 있습니다.
---
## 원격 측정 (Telemetry)
`ling-mem`은 사용자가 이 기능을 사용하는지, 그리고 어떤 기능이 중요한지 알 수 있도록 익명의 사용량 데이터를 소량 `https://linggen.dev/api/track`으로 전송합니다. 구체적으로는 다음과 같습니다:
- **`install`** — 기기에서 최초 실행 시 한 번, 그리고 업그레이드 후 매번 발생합니다. 설치 출처(예: `wrapper`, `linggen`, `clawhub`, `unknown`)와 이전 버전 및 현재 버전을 포함합니다.
- **`command`** — `Memory.*` HTTP 호출당 하나의 이벤트가 기록되며, 동사 이름만 포함됩니다(`memory.search`, `memory.add`, `memory.forget`, …).
일별/주별 활성 사용자 수는 모든 이벤트 행에서 서버 측으로 파생되므로 별도의 하트비트 핑(heartbeat ping)은 없습니다. 활동적인 사용자는 이미 매일 최소 하나의 `command` 이벤트를 생성합니다.
**절대 전송되지 않는 것:** 사실 콘텐츠, 쿼리 텍스트, 임베딩, 파일 경로, 사용자 IP 주소(수신 측에서 저장하지 않음), 또는 사용자 식별 문자열은 전혀 전송되지 않습니다. `installation_id`는 최초 실행 시 생성되는 무작위 UUIDv4이며 `~/.linggen/installation_id`에 저장됩니다.
**원격 측정 비활성화:**
- 런타임: `LING_MEM_NO_TELEMETRY=1`을 설정하거나, `touch ~/.linggen/no-telemetry`를 실행합니다.
- 컴파일 시간: `cargo build --release --no-default-features`로 빌드합니다(원격 측정 코드가 아예 링크되지 않습니다).
클라이언트 측은 공개되어 있으며 이 리포지토리의 [`src/telemetry/`](src/telemetry/)에서 확인할 수 있습니다. 실제로 무엇이 전송되는지 정확히 읽어보세요. 수신기는 `linggen.dev`에 있는 Cloudflare 함수이며, 이는 공개된 리포지토리가 아닙니다.
---
## 라이선스 (License)
MIT. `LICENSE`를 참조하세요.
하나의 서브트리만 다릅니다: **`plugins/linggen/skills/linggen/`은 MIT-0 라이선스**를 가지며, 해당 위치에 자체 `LICENSE`가 포함되어 있습니다. 이 서브트리는 ClawHub에 게시되는 번들(bundle)이며, ClawHub는 *모든* 스킬을 MIT-0 하에 배포합니다. 레지스트리에서는 해당 필드를 `"MIT-0"|null"`로 지정하고 둘 다에 대해 `PLATFORM_SKILL_LICENSE`를 렌더링하며, `clawhub skill publish` 명령어는 푸시(push)할 때마다 `acceptLicenseTerms: true`를 전송합니다. 따라서 이 번들은 사용자가 실제로 받는 조건을 명시합니다. 여기에 더 엄격한 조건을 선언하는 것은 플랫폼이 전달하지 않는 권한을 광고하는 것이 됩니다. 이 부분은 플러그인 트리가 이곳에 스캐폴딩(scaffolded)되었을 때 `linggen/skills` 레포지토리로부터 상속받아 2026-08-14까지 Apache 2.0 라이선스를 가졌습니다.
가장 가까운 `LICENSE`가 적용되므로, 나머지 `plugins/linggen/`은 MIT를 유지하며, 이 레포지토리 외부의 모든 것은 자체 조건을 유지합니다 — 엔진(engine)은 Apache 2.0입니다. 게시된 스킬 번들만 이동했을 뿐입니다.
---
## 히스토리 (History)
이 레포지토리는 코드 인덱싱 도구(코드베이스에 대한 검색 증강 생성(RAG), tree-sitter AST, 로컬 LLM 채팅)로 시작했습니다. 2026년에는 AI 어시스턴트를 위한 범용 의미론적 메모리 저장소로 리팩터링되었습니다. 원래의 인덱싱 로직을 복구해야 할 경우, 리팩터링 이전 트리는 `v0-legacy` git 태그에서 보존되어 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43