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 을 제공:

endpoints
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:

endpoint
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.

request
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배, 정밀도 향상
}
response
{
  "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:

endpoints
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. memori.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/mdcore.

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