memori.wiki / spec
AI 시대 wiki 의 공개 스펙.
memori.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 해집니다. memori.wiki 는 큐레이션 단계를 AI-readable URL 로 대체합니다 — 한 사람의 지식 그래프를 구조화한 표현을 반환. 이 스펙을 따르는 어떤 도구든 같은 payload 를 fetch 해서 동기화 유지 가능.
스펙은 의도적으로 미니멀합니다. 콘텐츠는 마크다운, 주소는 URL, 토큰-경제 노브는 쿼리 파라미터. 특수 스키마 없음, SDK lock-in 없음. 이건 의도된 것 — 스펙이 adoption 을 얻는 유일한 방법은 *구현 비용이 싼 것*.
01
URL 계약
세 가지 스코프, 각각 주소 지정 가능, 각각 AI-readable.
memori.wiki/{user}/{slug} — 단일 문서. 토큰 비용 최소; 한 노트, 한 결정.
memori.wiki/{user}/b/{bundle} — 큐레이션된 문서 묶음 + 사전 계산된 그래프 분석 (themes, insights, concept relations). 프로젝트 레벨 도구 설정의 권장 스코프.
memori.wiki/{user} — 전체 hub. 넓은 컨텍스트, hub-wide concept index 포함. 사용 자제.
리브랜드 전환 기간 동안 memory.wiki/{id}, memory.wiki/b/{id}, memory.wiki/hub/{slug} 가 같은 payload 로 resolve. mori.wiki/... 는 memori.wiki/... 로 301.
02
Raw 마크다운 변형
모든 공개 URL 은 /raw/... 에서 clean-markdown sibling 을 제공:
GET /raw/{docId}
GET /raw/b/{bundleId}
GET /raw/hub/{slug}
GET /raw/hub/{slug}/c/{concept}응답은 text/markdown, UTF-8, YAML frontmatter 블록이 AI 에게 어떤 스코프를 받았는지 알려줌. 브라우저에서 보면 plain 마크다운.
미들웨어가 {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:
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 의 작업을 무료로 이어받음:
---
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.
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배, 정밀도 향상
}{
"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:
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 부터 적용.
09
왜 [[wikilink]] 없는가
전통 wiki (Wikipedia, Roam, Obsidian) 는 사람이 [[other page]] 를 타이핑해서 그래프를 구축. memori.wiki 는 그 syntax 를 ship 하지 않음. 의도된 omission.
[[wikilink]] 는 AI 의 부재를 보완하기 위한 2003년 메커니즘. 사용자가 [[React Hooks]] 를 타이핑하는 건 시스템에게 “이 페이지들은 관련이 있다” 라고 알리는 것. 2026년에는 AI 가 묻지 않아도 그 작업을 함: concept_index 가 의미 있게 다루는 모든 doc 에서 "React Hooks" 를 컨셉으로 추출, concept_relations 가 그 컨셉을 이웃과 타입 엣지로 연결.
사용자 facing 대체는 모든 공개 doc 아래 렌더링되는 Related in this hub 패널 — 현재 doc 와 컨셉을 공유하는 다른 docs, AI 의 분석이 surfaced. 전통 backlinks 가 줬을 같은 정보, 사람이 링크를 박을 필요 없음.
링킹은 AI 가 한다. 사용자는 글을 쓴다.
10
이 스펙 구현하기
세 가지 통합 경로, 모두 안정적.
- URL paste. memori.wiki URL 을 어떤 AI 채팅에든 drop. 모델이 raw variant 를 자동 fetch. Zero config, Claude / ChatGPT / Cursor / Gemini 에서 오늘 동작.
- 컨텍스트 파일 reference.
AGENTS.md/CLAUDE.md/.cursor/rules에 URL 추가. AI 개발 도구가 매 세션 부팅마다 fetch. 도구별 스니펫: /ko/docs/integrate. - API 통합. 정밀 retrieval 을 위해
POST /api/hub/{slug}/recall직접 호출. SDK 불필요 — plain HTTP. Endpoint 는 hub-public, API 키 불필요.
레퍼런스 렌더러는 markdown-it + footnotes + GFM. TipTap과 동일 config라 작성 측과 뷰어 측이 같은 DOM을 출력. 소스: github.com/raymindai/mdcore.
스펙 버전 0.1 (draft) — 피드백 환영. 저장소 PR 으로.