memory.wiki / spec

AI 시대 wiki의 공개 스펙.

memory.wiki는 어떤 AI도 읽을 수 있는 개인 지식 wiki입니다. 이 페이지는 URL 계약, retrieval API, llms.txt 매니페스트, bundle digest를 문서화합니다 — memory.wiki 레퍼런스 구현이 오늘 ship하는 같은 primitives. 다른 도구도 이 스펙을 구현해서 플랫폼 lock-in 없이 interop 가능합니다.

엔진 라이선스: MIT. 레퍼런스 구현: memory.wiki. 스펙 버전: 0.1 (draft, 2026-05-15).

00

이 스펙이 존재하는 이유

모든 AI 개발 도구 — Claude Code, Cursor, Codex, Gemini CLI, Windsurf, Aider — 가 프로젝트별 컨텍스트를 원합니다. 오늘 사용자는 CLAUDE.md / AGENTS.md / .cursor/rules에 그 컨텍스트를 손으로 큐레이션하고, 한 주 안에 stale해집니다. memory.wiki는 큐레이션 단계를 AI-readable URL로 대체합니다 — 한 사람의 지식 그래프를 구조화한 표현을 반환. 이 스펙을 따르는 어떤 도구든 같은 payload를 fetch해서 동기화 유지 가능.

스펙은 의도적으로 미니멀합니다. 콘텐츠는 마크다운, 주소는 URL, 토큰-경제 노브는 쿼리 파라미터. 특수 스키마 없음, SDK lock-in 없음. 이건 의도된 것 — 스펙이 adoption을 얻는 유일한 방법은 구현 비용이 싼 것.

01

URL 계약

세 가지 스코프, 각각 주소 지정 가능, 각각 AI-readable.

memory.wiki/{id} — 단일 문서. 토큰 비용 최소; 한 노트, 한 결정.

memory.wiki/b/{id} — 큐레이션된 문서 묶음 + 사전 계산된 그래프 분석 (themes, insights, concept relations). 프로젝트 레벨 도구 설정의 권장 스코프.

memory.wiki/@{user} — 전체 hub. 넓은 컨텍스트, hub-wide concept index 포함. 사용 자제.

02

Raw 마크다운 변형

모든 공개 URL은 /raw/...에서 clean-markdown sibling을 제공:

http
GET /raw/{docId}
GET /raw/b/{bundleId}
GET /raw/hub/{slug}
GET /raw/hub/{slug}/c/{concept}

응답은 text/markdown, UTF-8. Frontmatter(YAML)는 AI가 attribute하고 재사용하는 데 필요한 정보를 담음 — title, canonical URL, updated ISO, source, 그리고 추출된 tags + concept/relation 카운트:

markdown
---
mw_doc: 1
title: "React hooks 속성"
url: https://memory.wiki/abc123
updated: 2026-05-26T10:14:00Z
source: "ChatGPT"
tags: ["react", "hooks", "useEffect"]
concept_count: 9
relation_count: 7
---

# React hooks 속성
…clean markdown body…

## Concepts (this doc)
- **React Hooks** — 함수형 컴포넌트의 stateful API
- **useState** — 컴포넌트 로컬 state
- …

## Concept relations (this doc)
- **useState** → *is a* → **React Hooks**
- **Stale closure** → *caused by* → **useEffect**
- …

본문 끝의 ConceptsConcept relations 섹션은 문서 레벨 knowledge graph — 백그라운드 doc_ontology 잡(Claude Haiku)이 첫 저장과 매 수정 시 추출. 번들 레이어와 같은 typed-edge vocabulary (supports / elaborates / contradicts / exemplifies / contains / defines / depends_on / is a / causes). 본문만 원하면 ?compact로 부록 제거.

미들웨어가 {id}.md / /b/{id}.md / /hub/{slug}.md도 같은 곳으로 라우팅 — .md 접미사 paste만으로 raw form 접근.

03

쿼리 노브

raw 응답의 토큰 경제를 제어하는 세 가지 노브:

?compact — 공백 제거, noisy quote 블록 drop, 긴 라인 압축. 모든 raw URL에서 동작. 일반적으로 30~50% 토큰 감소.

?full=1 — bundle 전용. 분석 섹션 뒤에 모든 멤버 doc 본문 인라인. 디폴트는 digest (링크 리스트).

?graph=0 — bundle 전용. 캔버스 분석 섹션 drop. 받는 AI가 doc 인벤토리만 원할 때 사용.

노브 조합 가능. ?compact&full=1은 모든 doc 인라인 + 공백 제거 — one-shot 전체 번들 컨텍스트에 유용. ?compact&graph=0은 doc 인벤토리만, 분석 없음.

04

llms.txt 매니페스트

llms.txt 표준을 따름: 모든 공개 hub는 다음 위치에 크롤 매니페스트 publish:

http
GET /hub/{slug}/llms.txt

본문은 모든 공개 doc와 bundle의 title, URL, ≤200자 설명 + ?compact?digest 변형 포인터. 매니페스트 크롤을 선호하는 에이전트는 llms.txt를 먼저 fetch 후 필요한 doc로 walk.

/hub/{slug}/llms-full.txt는 디폴트 80k 토큰 (override: ?cap=)으로 더 densely 묶인 변형 — one-shot fetch 선호 AI 도구용.

05

Bundle digest 형태

Bundle 응답은 캔버스 분석을 인라인으로 ship — 받는 AI가 이전 AI의 작업을 무료로 이어받음:

markdown
---
mw_bundle: 1
id: <bundleId>
title: "..."
url: https://memory.wiki/b/<id>
document_count: N
updated: <ISO>
analysis_generated_at: <ISO>
analysis_stale: true        # 분석 이후 멤버 doc이 수정됐을 때만
source: "memory.wiki"
---

# <Bundle title>
> <description>
**Intent:** <intent>

## Summary
<canvas summary>

## Themes
- ...

## Cross-document insights
- ...

## Key takeaways
- ...

## Open questions / gaps
- ...

## Notable connections
- **doc A****doc B**<relationship>

## Concepts (this bundle)
- **concept** (from **doc title**)

## Concept relations
- **conceptA****conceptB**<edge label>

1. [Doc 1](https://memory.wiki/<docId>) — annotation
2. [Doc 2](https://memory.wiki/<docId>) — annotation
...
06

Retrieval API

한 endpoint, 하이브리드 retrieval (semantic + keyword + 선택적 rerank). Hub-scoped, public.

http
POST /api/hub/{slug}/recall
Content-Type: application/json

{
  "question": "react hooks vs context",
  "k": 5,
  "level": "doc",         // doc | chunk | bundle
  "hybrid": true,         // chunk 레벨 전용 — BM25 + vector reciprocal rank fusion
  "rerank": true          // Anthropic Haiku cross-encoder; 지연 2배, 정밀도 향상
}
json
{
  "hub": { "slug": "you", "display_name": "..." },
  "results": [
    {
      "id": "abc123",
      "title": "React hooks crash course",
      "url": "https://memory.wiki/abc123",
      "snippet": "...react hooks let you...",
      "distance": 0.13,
      "updated_at": "2026-04-10T..."
    }
  ]
}

k 최대 20. distance는 cosine — 낮을수록 관련성 높음. level=chunk는 paragraph 레벨 매치 + doc id + heading path. level=bundle은 번들 title + description 대상.

07

Concept index

Hub-wide concept index는 손으로 박는 카테고리/태그의 AI 시대 대체. Bundle 분석 파이프라인이 incremental하게 구축 — Analyze 실행마다 LLM이 그 번들의 docs에서 추출한 concept upsert.

공개 surface:

http
GET /hub/{slug}/c/{concept}           # 렌더된 컨셉 페이지 (HTML)
GET /raw/hub/{slug}/c/{concept}        # 같은 내용, raw 마크다운

컨셉 페이지 반환: canonical label, description, source documents, neighbour concepts. Neighbours는 concept_relations의 타입 엣지 (supports / elaborates / contradicts / exemplifies / contains)에서. 번들 캔버스가 쓰는 같은 엣지 vocabulary.

08

프라이버시 게이트

세 가지 상태, doc / bundle / hub에 균일하게 적용.

Public — 퍼블리시 됨; allowed_emails 없음. 익명 AI fetch 성공.

Restricted — 퍼블리시 됨; allowed_emails 설정. fetcher가 owner JWT의 Authorization: Bearer <token> 또는 허용 주소와 매치되는 X-User-Email 전달 필요. 아니면 403/404.

Private — 퍼블리시 안 됨. Owner JWT만 가능.

모든 게이팅 결정은 서버 사이드 raw-fetch 라우트에서 일어남 — URL이 렌더된 viewer가 안 보여주는 콘텐츠를 leak할 경로 없음. allowed_emails 회수는 다음 fetch부터 적용.

10

이 스펙 구현하기

세 가지 통합 경로, 모두 안정적.

  1. URL paste. memory.wiki URL을 어떤 AI 채팅에든 drop. 모델이 raw variant를 자동 fetch. Zero config, Claude / ChatGPT / Cursor / Gemini에서 오늘 동작.
  2. 컨텍스트 파일 reference. AGENTS.md / CLAUDE.md / .cursor/rules에 URL 추가. AI 개발 도구가 매 세션 부팅마다 fetch. 도구별 스니펫: /ko/docs/integrate.
  3. API 통합. 정밀 retrieval을 위해 POST /api/hub/{slug}/recall 직접 호출. SDK 불필요 — plain HTTP. Endpoint는 hub-public, API 키 불필요.

레퍼런스 렌더러는 markdown-it + footnotes + GFM. TipTap과 동일 config라 작성 측과 뷰어 측이 같은 DOM을 출력. 소스: github.com/raymindai/memory-wiki.

스펙 버전 0.1 (draft) — 피드백 환영. 저장소 PR으로.