Skip to content

Universal knowledge base with Memex philosophy and AI-agent integration. Google Docs adapter for seamless migration.

Notifications You must be signed in to change notification settings

junghan0611/memex-kb

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

13 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿง  Memex-KB: Universal Knowledge Base Converter

"๋‹น์‹ ์˜ ์ง€์‹์„ ๋‹น์‹ ์˜ ๋ฐฉ์‹์œผ๋กœ" - Denote ๊ธฐ๋ฐ˜ ๋ฒ”์šฉ ์ง€์‹๋ฒ ์ด์Šค ๋ณ€ํ™˜ ์‹œ์Šคํ…œ

๐Ÿ“– ์ฒ ํ•™ (Philosophy)

Memex-KB๋Š” ์ง€์‹ ๊ด€๋ฆฌ์˜ ์‹œ์ž‘์ ์ด์ž, RAG ํŒŒ์ดํ”„๋ผ์ธ์˜ ์ž…๊ตฌ์ž…๋‹ˆ๋‹ค.

์ž…๋ฌธ์ž์—๊ฒŒ "์ผ์ •ํ•œ ๊ทœ์น™"์„ ์ œ๊ณตํ•˜์—ฌ, ์‚ฐ์žฌ๋œ ์ง€์‹์„ ์ฒด๊ณ„์ ์œผ๋กœ ์ •๋ฆฌํ•˜๊ณ , AI ํ˜‘์—… ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์™œ memex-kb์ธ๊ฐ€?

๊ธฐ์ˆ  ๋ฐฐ๊ฒฝ:

โœ… ๊ฒ€์ฆ๋œ ๊ธฐ์ˆ  ์Šคํƒ (2025 Q3):
- n8n: 40+ ๋…ธ๋“œ ์›Œํฌํ”Œ๋กœ์šฐ (AI Agent Automation)
- Supabase pgvector: ๋ฒกํ„ฐ DB (2,945๊ฐœ Org ํŒŒ์ผ ์ž„๋ฒ ๋”ฉ ์™„๋ฃŒ)
- Ollama: ๋กœ์ปฌ ์ž„๋ฒ ๋”ฉ (multilingual-e5-large, GPU ํด๋Ÿฌ์Šคํ„ฐ)
- Airbyte: ETL ํŒŒ์ดํ”„๋ผ์ธ (Channel.io โ†’ PostgreSQL ๋“ฑ)
- Rerank API Server: ์ž์ฒด ๊ตฌ์ถ•

โ†’ ๊ธฐ์ˆ  ์Šคํƒ ์ž์ฒด๋Š” "๊ป๋ฐ๊ธฐ". ์ด๋ฏธ ๋‹ค ํ•ด๋ดค์Šต๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ๋ฌธ์ œ:

๊ทธ๋Ÿฐ๋ฐ Legacy ๋ฌธ์„œ(Google Docs, Dooray, Confluence...)๋ฅผ
์–ด๋–ป๊ฒŒ RAG-ready ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•˜๋Š”๊ฐ€?

๋ณ€ํ™˜๋งŒ ํ•˜๋Š” ๋„๊ตฌ๋Š” ๋งŽ์Šต๋‹ˆ๋‹ค.
Pandoc, Notion Exporter, Confluence API...

ํ•˜์ง€๋งŒ:
- ์ผ๊ด€์„ฑ ์—†๋Š” ํŒŒ์ผ๋ช… โ†’ ๊ฒ€์ƒ‰ ์–ด๋ ค์›€
- ๋ถ„๋ฅ˜ ๊ธฐ์ค€ ๋ชจํ˜ธ โ†’ ์ฐพ๊ธฐ ์–ด๋ ค์›€
- ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์†์‹ค โ†’ ์ปจํ…์ŠคํŠธ ๋ถ€์กฑ
- Git ๋ฏธ์—ฐ๋™ โ†’ ๋ฒ„์ „ ๊ด€๋ฆฌ ๋ถˆ๊ฐ€

โ†’ ์ž„๋ฒ ๋”ฉํ•ด๋„ ํ’ˆ์งˆ์ด ๋‚ฎ์Šต๋‹ˆ๋‹ค.

memex-kb์˜ ๋…์ฐฝ์  ์ ‘๊ทผ:

1. Denote ํŒŒ์ผ๋ช… ๊ทœ์น™:
   timestamp--ํ•œ๊ธ€-์ œ๋ชฉ__ํƒœ๊ทธ๋“ค.md
   โ†’ ํŒŒ์‹ฑ ๊ฐ€๋Šฅ, ์‹œ๊ฐ„ ์ •๋ ฌ, ์˜๋ฏธ ๋ช…ํ™•

2. ๊ทœ์น™ ๊ธฐ๋ฐ˜ ์ž๋™ ๋ถ„๋ฅ˜:
   YAML ์„ค์ •์œผ๋กœ ์ผ๊ด€์„ฑ ํ™•๋ณด
   โ†’ LLM ๋น„์šฉ 0์›, ์žฌํ˜„ ๊ฐ€๋Šฅ

3. Git ๋ฒ„์ „ ๊ด€๋ฆฌ:
   ๋ชจ๋“  ๋ณ€ํ™˜ ๊ณผ์ • ์ถ”์ 
   โ†’ ํˆฌ๋ช…์„ฑ, ๋กค๋ฐฑ ๊ฐ€๋Šฅ

4. Backend ์ค‘๋ฆฝ:
   Adapter ํŒจํ„ด์œผ๋กœ ํ™•์žฅ
   โ†’ ๋„๊ตฌ ๋ฐ”๋€Œ์–ด๋„ ๋ฐ์ดํ„ฐ๋Š” ์œ ์ง€

5. ์ž„๋ฒ ๋”ฉ ํŒŒ์ดํ”„๋ผ์ธ ํ†ตํ•ฉ (v2.0):
   ๋ณ€ํ™˜ โ†’ Denote โ†’ Embedding โ†’ Vector DB โ†’ RAG
   โ†’ ๊ฒ€์ฆ๋œ ํŒŒ์ดํ”„๋ผ์ธ ์žฌ์‚ฌ์šฉ

๊ฒฐ๊ณผ:

๋‹จ์ˆœ ๋ณ€ํ™˜ ๋„๊ตฌ (๊ฐํฅ ์—†์Œ)
    โ†“
RAG ํŒŒ์ดํ”„๋ผ์ธ์˜ ์ž…๊ตฌ (๊ฐ€์น˜ ์žˆ์Œ)
    โ†“
Legacy ๋ฌธ์„œ๊ฐ€ AI Second Brain์ด ๋ฉ๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ์›์น™

  1. Denote ํŒŒ์ผ๋ช… ๊ทœ์น™: timestamp--ํ•œ๊ธ€-์ œ๋ชฉ__ํƒœ๊ทธ1_ํƒœ๊ทธ2.md

    • ์‹œ๊ฐ„ ๊ธฐ๋ฐ˜ ์ •๋ ฌ (๊ฒ€์ƒ‰ ๋ถˆํ•„์š”)
    • ์ธ๊ฐ„ ์นœํ™”์  ์ œ๋ชฉ (ํ•œ๊ธ€ ์ง€์›)
    • ๋ช…ํ™•ํ•œ ํƒœ๊ทธ (์ž๋™ ์ถ”์ถœ)
  2. ๊ทœ์น™ ๊ธฐ๋ฐ˜ ์ž๋™ ๋ถ„๋ฅ˜: LLM ์—†์ด ํ† ํฐ ์ ˆ์•ฝ

    • YAML ์„ค์ • ํŒŒ์ผ๋กœ ๊ฐ„๋‹จ ๊ด€๋ฆฌ
    • ํ‚ค์›Œ๋“œ + ํŒจํ„ด ๋งค์นญ
    • ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์นดํ…Œ๊ณ ๋ฆฌ
  3. Git ๋ฒ„์ „ ๊ด€๋ฆฌ: ๋ชจ๋“  ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ถ”์ 

    • ๋กœ์ปฌ ์šฐ์„  (๋ณด์•ˆ)
    • ํ˜‘์—… ๊ฐ€๋Šฅ (GitHub/GitLab)
    • ์˜๊ตฌ ๋ณด์กด
  4. Backend ์ค‘๋ฆฝ: ์—ฌ๋Ÿฌ ์†Œ์Šค ์ง€์›

    • Google Docs (โœ… ๊ตฌํ˜„๋จ)
    • Threads SNS (โœ… ๊ตฌํ˜„๋จ) - NEW!
    • Dooray Wiki (๐Ÿ”ง ๊ฐœ๋ฐœ ์ค‘)
    • Confluence (๐Ÿ“‹ ๊ณ„ํš ์ค‘)

๐ŸŽฏ ๋ˆ„๊ตฌ๋ฅผ ์œ„ํ•œ ๋„๊ตฌ์ธ๊ฐ€?

์ด๋Ÿฐ ๋ถ„๋“ค์—๊ฒŒ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค

  • โœ… ์ง€์‹ ๊ด€๋ฆฌ ์ž…๋ฌธ์ž: "์–ด๋””์„œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์•ผ ํ• ์ง€ ๋ชจ๋ฅด๊ฒ ์–ด์š”"
  • โœ… ํšŒ์‚ฌ Wiki ๊ด€๋ฆฌ์ž: "์‚ฐ์žฌ๋œ ๋ฌธ์„œ๋ฅผ ์ •๋ฆฌํ•˜๊ณ  ์‹ถ์–ด์š”"
  • โœ… ๋ณด์•ˆ ์ค‘์‹œ ์‚ฌ์šฉ์ž: "ํšŒ์‚ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ์ปฌ์— ๋ณด๊ด€ํ•˜๊ณ  ์‹ถ์–ด์š”"
  • โœ… Org-mode ์‚ฌ์šฉ์ž: "ํšŒ์‚ฌ ๋ฌธ์„œ๋ฅผ Emacs๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์‹ถ์–ด์š”"
  • โœ… ์ž๋™ํ™” ์„ ํ˜ธ์ž: "์ˆ˜์ž‘์—…์€ ์ค„์ด๊ณ  ๊ทœ์น™์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์‹ถ์–ด์š”"

์ด๋Ÿฐ ๋‹ˆ์ฆˆ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค

๋ฌธ์ œ Memex-KB ํ•ด๊ฒฐ์ฑ…
๋ฌธ์„œ๊ฐ€ ์—ฌ๊ธฐ์ €๊ธฐ ํฉ์–ด์ ธ ์žˆ์–ด์š” ํ•œ ๊ณณ์— Markdown์œผ๋กœ ํ†ตํ•ฉ
ํŒŒ์ผ๋ช…์ด ์ผ๊ด€์„ฑ ์—†์–ด์š” Denote ๊ทœ์น™์œผ๋กœ ์ž๋™ ์ƒ์„ฑ
๋ถ„๋ฅ˜ ๊ธฐ์ค€์ด ๋ชจํ˜ธํ•ด์š” YAML๋กœ ๋ช…ํ™•ํ•œ ๊ทœ์น™ ์ •์˜
๋ฒ„์ „ ๊ด€๋ฆฌ๊ฐ€ ์•ˆ ๋ผ์š” Git์œผ๋กœ ๋ชจ๋“  ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ถ”์ 
ํšŒ์‚ฌ ๋„๊ตฌ๊ฐ€ ๊ณ„์† ๋ฐ”๋€Œ์–ด์š” Backend๋งŒ ๊ต์ฒด, ๋ฐ์ดํ„ฐ๋Š” ๊ทธ๋Œ€๋กœ

๐Ÿ—๏ธ ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜

[Backend Sources]
    โ”œโ”€โ”€ Google Docs    (โœ… ๊ตฌํ˜„๋จ)
    โ”œโ”€โ”€ Threads SNS    (โœ… ๊ตฌํ˜„๋จ) โ† NEW!
    โ”œโ”€โ”€ Dooray Wiki    (๐Ÿ”ง ๊ฐœ๋ฐœ ์ค‘)
    โ””โ”€โ”€ Confluence     (๐Ÿ“‹ ๊ณ„ํš ์ค‘)
         โ†“
[Backend Adapter] โ† ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์„ค๊ณ„
         โ†“
[Markdown/Org Conversion]
         โ†“
[๊ณตํ†ต ํŒŒ์ดํ”„๋ผ์ธ]
    โ”œโ”€โ”€ DenoteNamer      (ํŒŒ์ผ๋ช… ์ƒ์„ฑ)
    โ”œโ”€โ”€ Categorizer      (์ž๋™ ๋ถ„๋ฅ˜)
    โ””โ”€โ”€ Tag Extractor    (ํƒœ๊ทธ ์ถ”์ถœ)
         โ†“
[Local Git Repository]
    โ”œโ”€โ”€ docs/
    โ”‚   โ”œโ”€โ”€ architecture/
    โ”‚   โ”œโ”€โ”€ development/
    โ”‚   โ”œโ”€โ”€ operations/
    โ”‚   โ”œโ”€โ”€ products/
    โ”‚   โ””โ”€โ”€ _uncategorized/
    โ””โ”€โ”€ .git/
         โ†“
[๊ฐœ์ธ ์ง€์‹๋ฒ ์ด์Šค]
    โ”œโ”€โ”€ Org-mode
    โ”œโ”€โ”€ Obsidian
    โ””โ”€โ”€ ๊ธฐํƒ€ Markdown ๋„๊ตฌ

๐Ÿ“ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

memex-kb/
โ”œโ”€โ”€ scripts/                     # ๋ณ€ํ™˜ ๋ฐ ๋™๊ธฐํ™” ์Šคํฌ๋ฆฝํŠธ
โ”‚   โ”œโ”€โ”€ adapters/                # Backend Adapters (ํ™•์žฅ ๊ฐ€๋Šฅ)
โ”‚   โ”‚   โ”œโ”€โ”€ base.py              # BaseAdapter (์ถ”์ƒ ํด๋ž˜์Šค)
โ”‚   โ”‚   โ””โ”€โ”€ threads.py           # Threads API Adapter โœ…
โ”‚   โ”œโ”€โ”€ gdocs_to_markdown.py     # Google Docs ๋ณ€ํ™˜ โœ…
โ”‚   โ”œโ”€โ”€ threads_exporter.py      # Threads ํฌ์ŠคํŠธ ๋‚ด๋ณด๋‚ด๊ธฐ โœ…
โ”‚   โ”œโ”€โ”€ get_threads_token.py     # Threads OAuth ํ—ฌํผ โœ…
โ”‚   โ”œโ”€โ”€ test_threads_api.py      # Threads API ํ…Œ์ŠคํŠธ โœ…
โ”‚   โ”œโ”€โ”€ denote_namer.py          # Denote ํŒŒ์ผ๋ช… ์ƒ์„ฑ (๊ณตํ†ต)
โ”‚   โ””โ”€โ”€ categorizer.py           # ๋ฌธ์„œ ์ž๋™ ๋ถ„๋ฅ˜ (๊ณตํ†ต)
โ”œโ”€โ”€ docs/                        # ๋ณ€ํ™˜๋œ ๋ฌธ์„œ
โ”‚   โ”œโ”€โ”€ threads-aphorisms.org    # Threads ์•„ํฌ๋ฆฌ์ฆ˜ ํ†ตํ•ฉ ํŒŒ์ผ โœ…
โ”‚   โ”œโ”€โ”€ attachments/threads/     # Threads ์ด๋ฏธ์ง€ ์ฒจ๋ถ€ํŒŒ์ผ
โ”‚   โ””โ”€โ”€ 2025*.org                # ํ”„๋กœ์ ํŠธ ๋ฌธ์„œ๋“ค
โ”œโ”€โ”€ config/
โ”‚   โ”œโ”€โ”€ .env                     # ํ™˜๊ฒฝ๋ณ€์ˆ˜ (gitignore)
โ”‚   โ”œโ”€โ”€ .env.threads.example     # Threads ์„ค์ • ์˜ˆ์‹œ
โ”‚   โ””โ”€โ”€ credentials.json         # API ์ธ์ฆ (gitignore)
โ”œโ”€โ”€ logs/                        # ์‹คํ–‰ ๋กœ๊ทธ
โ””โ”€โ”€ README.md                    # ์ด ํŒŒ์ผ

๐Ÿš€ Quick Start

1. ํ™˜๊ฒฝ ์„ค์ •

# Python ํŒจํ‚ค์ง€ ์„ค์น˜
pip install -r requirements.txt

# Pandoc ์„ค์น˜ (๋ฌธ์„œ ๋ณ€ํ™˜์šฉ)
# Ubuntu/Debian
sudo apt-get install pandoc

# macOS
brew install pandoc

# NixOS
nix-shell -p pandoc

2A. Google Docs ์—ฐ๋™

# 1. Google Cloud Console์—์„œ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ
# 2. Google Drive API ํ™œ์„ฑํ™”
# 3. Service Account ์ƒ์„ฑ ๋ฐ ํ‚ค ๋‹ค์šด๋กœ๋“œ
# 4. credentials.json์„ config/ ๋””๋ ‰ํ† ๋ฆฌ์— ์ €์žฅ

# ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
cp config/.env.example config/.env
# config/.env ํŒŒ์ผ ํŽธ์ง‘

# ๋‹จ์ผ ๋ฌธ์„œ ๋ณ€ํ™˜
python scripts/gdocs_to_markdown.py "DOCUMENT_ID"

2B. Threads SNS ์—ฐ๋™ (NEW! ๐ŸŽ‰)

์•„ํฌ๋ฆฌ์ฆ˜์„ ๋””์ง€ํ„ธ๊ฐ€๋“ ์œผ๋กœ: Threads ํฌ์ŠคํŠธ๋ฅผ ๋‹จ์ผ Org ํŒŒ์ผ๋กœ ํ†ตํ•ฉ

ํ™˜๊ฒฝ ์„ค์ •

# ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
cp config/.env.threads.example config/.env.threads
# config/.env.threads ํŒŒ์ผ ํŽธ์ง‘ (APP_ID, APP_SECRET, REDIRECT_URI)

์‚ฌ์šฉ๋ฒ•

# Step 1: Access Token ํš๋“ (๋Œ€ํ™”ํ˜•)
python scripts/get_threads_token.py
# โ†’ Facebook ๋กœ๊ทธ์ธ์œผ๋กœ OAuth ํ”Œ๋กœ์šฐ ์ง„ํ–‰
# โ†’ config/.env.threads์— ACCESS_TOKEN ์ž๋™ ์ถ”๊ฐ€

# Step 2: API ์—ฐ๊ฒฐ ํ…Œ์ŠคํŠธ
python scripts/test_threads_api.py

# Step 3: ์ „์ฒด ํฌ์ŠคํŠธ ๋‚ด๋ณด๋‚ด๊ธฐ
python scripts/threads_exporter.py --download-images

# ๊ฒฐ๊ณผ: docs/threads-aphorisms.org ์ƒ์„ฑ
# - 193๊ฐœ ํฌ์ŠคํŠธ (์‹œ๊ฐ„์ˆœ ์ •๋ ฌ)
# - 34๊ฐœ ์ฃผ์ œ๋กœ ์ž๋™ ๋ถ„๋ฅ˜
# - ๋Œ“๊ธ€ ํฌํ•จ
# - ์ด๋ฏธ์ง€ ๋‹ค์šด๋กœ๋“œ (docs/attachments/threads/)
# - Permalink ์—ฐ๊ฒฐ
# - "์–ด์ ๋ฆฌ์ฆ˜(Assholism)": ์ถ”์ฒœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋„˜์–ด์„  ์ง„์ •ํ•œ ์—ฐ๊ฒฐ

Org ๊ตฌ์กฐ

* ์„œ๋ก  :META:
  (ํ”„๋กœํ•„ ์ •๋ณด ๋ฐ ํ†ต๊ณ„)

* ์ฃผ์ œ: (๋ฏธ๋ถ„๋ฅ˜)
  :PROPERTIES:
  :POST_COUNT: 160
  :END:

** [ํฌ์ŠคํŠธ ์ œ๋ชฉ (์ฒซ ์ค„ 50์ž)]
   :PROPERTIES:
   :POST_ID: 18101712844662284
   :TIMESTAMP: 2025-11-06T22:34:08+0000
   :PERMALINK: https://www.threads.com/@junghanacs/post/...
   :MEDIA_TYPE: IMAGE
   :END:

   [ํฌ์ŠคํŠธ ๋ณธ๋ฌธ]

*** ์ด๋ฏธ์ง€
    - [[file:docs/attachments/threads/18101712844662284.jpg]]

*** ๋Œ“๊ธ€
**** @username ([2025-11-06 Thu 22:34])
     [๋Œ“๊ธ€ ๋‚ด์šฉ]

์˜ต์…˜:

# ํ…Œ์ŠคํŠธ๋กœ 5๊ฐœ๋งŒ ๋‚ด๋ณด๋‚ด๊ธฐ
python scripts/threads_exporter.py --max-posts 5

# ์ด๋ฏธ์ง€ ๋‹ค์šด๋กœ๋“œ ํฌํ•จ
python scripts/threads_exporter.py --download-images

# ์˜ค๋ž˜๋œ ์ˆœ์œผ๋กœ ์ •๋ ฌ
python scripts/threads_exporter.py --reverse

์ƒ์„ธ ๋ฌธ์„œ: docs/20251107T123200--threads-aphorism-exporter-ํ”„๋กœ์ ํŠธ__threads_aphorism_assholism.org

2C. Confluence ์—ฐ๋™ (NEW! ๐ŸŽ‰)

Legacy ๋ฌธ์„œ๋ฅผ RAG-ready ํ˜•ํƒœ๋กœ: Confluence Export๋ฅผ ์™„๋ฒฝํ•œ Markdown์œผ๋กœ ๋ณ€ํ™˜

๐Ÿ’ก ์™œ ์ด๊ฒƒ์ด memex-kb์˜ ํ•ต์‹ฌ์ธ๊ฐ€?

๋ณ€ํ™˜ ๋„๊ตฌ๋Š” ๋งŽ์Šต๋‹ˆ๋‹ค. Pandoc, Notion Exporter, Confluence API... ํ•˜์ง€๋งŒ ๋ฌธ์ž ์ธ์ฝ”๋”ฉ ํ•˜๋‚˜๋ฅผ ์ œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•˜๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ๋ฌด๋„ˆ์ง‘๋‹ˆ๋‹ค.

  • ํ•œ๊ธ€์ด ๊นจ์ง€๋ฉด? โ†’ ๊ฒ€์ƒ‰ ๋ถˆ๊ฐ€๋Šฅ
  • NFD/NFC ํ˜ผ์žฌ? โ†’ ํŒŒ์ผ ์†์ƒ, ํŽธ์ง‘ ๋ถˆ๊ฐ€๋Šฅ
  • Quoted-printable ์˜ค๋ฅ˜? โ†’ ๋ฐ์ดํ„ฐ ์œ ์‹ค

memex-kb๋Š” "๋ณ€ํ™˜"์ด ์•„๋‹Œ "์™„๋ฒฝํ•œ ๋ณ€ํ™˜"์„ ์ถ”๊ตฌํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋‹จ์ˆœ ๋„๊ตฌ์™€ RAG ํŒŒ์ดํ”„๋ผ์ธ ์ž…๊ตฌ์˜ ์ฐจ์ด์ž…๋‹ˆ๋‹ค.

๐ŸŽฏ ์ฒ ํ•™:

  • ์ฒซ ๋ฒˆ์งธ ๋ณ€ํ™˜์—์„œ ์™„๋ฒฝํ•˜๊ฒŒ ์ฒ˜๋ฆฌ
  • ์ธ์ฝ”๋”ฉ ๋ฌธ์ œ๋กœ ์ธํ•œ ๋ฐ์ดํ„ฐ ์†์‹ค Zero
  • RAG ์ž„๋ฒ ๋”ฉ ํ’ˆ์งˆ์„ ์ฒซ ๋‹จ๊ณ„์—์„œ ํ™•๋ณด

๋ฌธ์ œ ์ƒํ™ฉ

Confluence์—์„œ Exportํ•œ .doc ํŒŒ์ผ์„ pandoc์œผ๋กœ ๋ณ€ํ™˜ ์‹œ:

  • ํ•œ๊ธ€์ด ์œ ๋‹ˆ์ฝ”๋“œ escape ํ˜•์‹(=EC=97=B0...)๊ณผ ์„ž์—ฌ์„œ ํ‘œ์‹œ
  • Fenced div (:::) ๋ฐ ๋ถˆํ•„์š”ํ•œ HTML ์†์„ฑ ๋‚จ์Œ
  • ์ฝ”๋“œ ๋ธ”๋ก์ด ๋ณต์žกํ•œ ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜๋จ

ํ•ด๊ฒฐ์ฑ…

์™„๋ฒฝํ•œ MIME ํŒŒ์‹ฑ + Pandoc + ํ›„์ฒ˜๋ฆฌ ํŒŒ์ดํ”„๋ผ์ธ:

  1. Python email ๋ชจ๋“ˆ๋กœ MIME ๋ฉ”์‹œ์ง€ ํŒŒ์‹ฑ
  2. HTML ํŒŒํŠธ๋ฅผ UTF-8๋กœ ์ถ”์ถœ
  3. Pandoc์œผ๋กœ ๊นจ๋—ํ•œ Markdown ๋ณ€ํ™˜
  4. Fenced div ์ œ๊ฑฐ ๋ฐ ์ฝ”๋“œ ๋ธ”๋ก ์ •๋ฆฌ
  5. Unicode NFD โ†’ NFC ์ •๊ทœํ™” (ํ•œ๊ธ€ ์™„๋ฒฝ ๋ณด์กด)

์‚ฌ์šฉ๋ฒ•

# ๋‹จ์ผ ํŒŒ์ผ ๋ณ€ํ™˜
python3 scripts/confluence_to_markdown.py document.doc

# ์ถœ๋ ฅ ํŒŒ์ผ๋ช… ์ง€์ •
python3 scripts/confluence_to_markdown.py document.doc output.md

# ์ผ๊ด„ ๋ณ€ํ™˜ (๋””๋ ‰ํ† ๋ฆฌ)
python3 scripts/confluence_to_markdown.py --batch input_dir/ output_dir/

# ์ž์„ธํ•œ ๋กœ๊ทธ
python3 scripts/confluence_to_markdown.py -v document.doc

๋ณ€ํ™˜ ๊ฒฐ๊ณผ

Before (Raw Confluence Export):

# IoT Core Device =EC=97=B0=EB=8F=99=EA=B7=9C=EA=B2=A9=EC=84=9C v1.13
::::::::::::::::::: Section1
::: table-wrap

After (Clean Markdown):

# IoT Core Device ์—ฐ๋™๊ทœ๊ฒฉ์„œ v1.13

| **๋ฒ„์ „** | **์ž‘์„ฑ์ผ** | **๋ณ€๊ฒฝ ๋‚ด์šฉ** |
|----------|------------|---------------|
| v1.0     | 2025. 1. 21. | - ์ดˆ์•ˆ ์ž‘์„ฑ |

๊ธฐ์ˆ  ์„ธ๋ถ€์‚ฌํ•ญ

  • MIME ํŒŒ์‹ฑ: email.message_from_binary_file() ์‚ฌ์šฉ
  • Quoted-Printable ๋””์ฝ”๋”ฉ: Soft line break ์ž๋™ ์ฒ˜๋ฆฌ
  • UTF-8 ์ •๊ทœํ™”: unicodedata.normalize('NFC') ์ ์šฉ
  • Pandoc ์˜ต์…˜: --wrap=none (๋ผ์ธ ๋ž˜ํ•‘ ๋ฐฉ์ง€)
  • ์„ฑ๋Šฅ: 1.1MB ๋ฌธ์„œ โ†’ 178KB (2์ดˆ ์ด๋‚ด)

๐Ÿ”ฅ ์™œ ์ด๊ฒƒ์ด ํ˜๋ช…์ ์ธ๊ฐ€?

"Confluence๋Š” ์ฅ์•ฝ์ด๋‹ค" - AI ์—์ด์ „ํŠธ ํ˜‘์—…์˜ ๊ด€์ ์—์„œ

Confluence๋Š” ์ธ๊ฐ„ ํ˜‘์—…์—” ํ›Œ๋ฅญํ•˜์ง€๋งŒ, AI ์—์ด์ „ํŠธ ํ˜‘์—…์—” ์ตœ์•…์ž…๋‹ˆ๋‹ค:

  • ๋น„ํ‘œ์ค€ Export ํ˜•์‹ (MIME HTML)
  • ์ธ์ฝ”๋”ฉ ๋ฌธ์ œ (Quoted-printable)
  • ๋ถˆํ•„์š”ํ•œ ๋งˆํฌ์—… (Fenced div, ๋ณต์žกํ•œ ์†์„ฑ)
  • ํ•œ๊ธ€ ์†์ƒ (NFD/NFC ํ˜ผ์žฌ)

๊ฒฐ๊ณผ: RAG ํŒŒ์ดํ”„๋ผ์ธ์— ๋„ฃ์œผ๋ฉด ํ’ˆ์งˆ ์ €ํ•˜

  • ๊ฒ€์ƒ‰ ์•ˆ ๋จ (๊นจ์ง„ ํ•œ๊ธ€)
  • ์ž„๋ฒ ๋”ฉ ํ’ˆ์งˆ ๋‚ฎ์Œ (๋…ธ์ด์ฆˆ ๋งŽ์Œ)
  • ์ปจํ…์ŠคํŠธ ์†์‹ค (๊ตฌ์กฐ ๋ถ•๊ดด)

memex-kb๋Š” ํ˜‘์—…์˜ ํ‹€์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค:

Confluence (์ธ๊ฐ„ ํ˜‘์—…)
    โ†“
memex-kb (์™„๋ฒฝํ•œ ๋ณ€ํ™˜)
    โ†“
Denote Markdown (AI ํ˜‘์—… ๊ฐ€๋Šฅ)
    โ†“
RAG Pipeline (Second Brain)

์ด๊ฒƒ์€ ๋‹จ์ˆœํ•œ ๋ณ€ํ™˜ ๋„๊ตฌ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. Legacy ์‹œ์Šคํ…œ์„ AI ์‹œ๋Œ€๋กœ ์ „ํ™˜ํ•˜๋Š” ์ฒซ ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค.

์ฐธ๊ณ : Emacs ์‹ค์‹œ๊ฐ„ ํ•œ๊ธ€ ์ž…๋ ฅ ๋ฌธ์ œ ํ•ด๊ฒฐ์€ docs/20251112T194526--utf8-์ •๊ทœํ™”-์™„๋ฒฝ-๊ฐ€์ด๋“œ-confluence-emacs__unicode_nfc_nfd_confluence_emacs.org ์ฐธ์กฐ


๐ŸŽจ Denote ํŒŒ์ผ๋ช… ๊ทœ์น™

ํ˜•์‹

timestamp--ํ•œ๊ธ€-์ œ๋ชฉ__ํƒœ๊ทธ1_ํƒœ๊ทธ2.md

์˜ˆ์‹œ

# ์ž…๋ ฅ
title: "API ์„ค๊ณ„ ๊ฐ€์ด๋“œ"
tags: ["๋ฐฑ์—”๋“œ", "api", "๊ฐ€์ด๋“œ"]

# ์ถœ๋ ฅ
20250913t150000--api-์„ค๊ณ„-๊ฐ€์ด๋“œ__backend_api_guide.md

์žฅ์ 

  1. ์‹œ๊ฐ„ ๊ธฐ๋ฐ˜ ์ •๋ ฌ: ํŒŒ์ผ ํƒ์ƒ‰๊ธฐ์—์„œ ์ž๋™ ์ •๋ ฌ
  2. ์ธ๊ฐ„ ์นœํ™”์ : ํ•œ๊ธ€ ์ œ๋ชฉ ์œ ์ง€ (๊ฒ€์ƒ‰ ์‰ฌ์›€)
  3. ๋ช…ํ™•ํ•œ ํƒœ๊ทธ: ์–ธ๋”์Šค์ฝ”์–ด๋กœ ๊ตฌ๋ถ„
  4. ํŒŒ์‹ฑ ๊ฐ€๋Šฅ: ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ์ •๋ณด ์ถ”์ถœ

๐Ÿ“Š ๋ถ„๋ฅ˜ ๊ทœ์น™ (categories.yaml)

์„ค์ • ์˜ˆ์‹œ

categories:
  architecture:
    name: "์‹œ์Šคํ…œ ์„ค๊ณ„"
    keywords: ["์„ค๊ณ„", "์•„ํ‚คํ…์ฒ˜", "๊ตฌ์กฐ"]
    patterns: ["^์‹œ์Šคํ…œ.*์„ค๊ณ„"]
    file_hints: ["architecture", "design"]

  development:
    name: "๊ฐœ๋ฐœ ๊ฐ€์ด๋“œ"
    keywords: ["๊ฐœ๋ฐœ", "API", "์ฝ”๋“œ"]
    patterns: [".*๊ฐ€์ด๋“œ$"]
    file_hints: ["dev", "api"]

classification:
  min_score: 30  # ์ตœ์†Œ ๋งค์นญ ์ ์ˆ˜
  weights:
    title_keyword: 10
    title_pattern: 15
    content_keyword: 5
    file_hint: 20

๋ถ„๋ฅ˜ ๋กœ์ง

  1. ํ‚ค์›Œ๋“œ ๋งค์นญ: ์ œ๋ชฉ/๋ณธ๋ฌธ์—์„œ ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰
  2. ํŒจํ„ด ๋งค์นญ: ์ •๊ทœ์‹์œผ๋กœ ์ œ๋ชฉ ํŒจํ„ด ํ™•์ธ
  3. ํŒŒ์ผ ํžŒํŠธ: ํŒŒ์ผ๋ช…์—์„œ ํžŒํŠธ ์ถ”์ถœ
  4. ์ ์ˆ˜ ๊ณ„์‚ฐ: ๊ฐ€์ค‘์น˜ ํ•ฉ์‚ฐ
  5. ์ตœ๊ณ  ์ ์ˆ˜ ์„ ํƒ: ๊ฐ€์žฅ ๋†’์€ ์ ์ˆ˜์˜ ์นดํ…Œ๊ณ ๋ฆฌ๋กœ ๋ถ„๋ฅ˜

๐Ÿ”ง Backend Adapter ํ™•์žฅ ๊ฐ€์ด๋“œ

1. Base Adapter ์ธํ„ฐํŽ˜์ด์Šค

from abc import ABC, abstractmethod

class BaseAdapter(ABC):
    """Backend Adapter ์ถ”์ƒ ํด๋ž˜์Šค"""

    @abstractmethod
    def authenticate(self):
        """์ธ์ฆ"""
        pass

    @abstractmethod
    def list_documents(self):
        """๋ฌธ์„œ ๋ชฉ๋ก ์กฐํšŒ"""
        pass

    @abstractmethod
    def fetch_document(self, doc_id: str):
        """๋ฌธ์„œ ๋‚ด์šฉ ๊ฐ€์ ธ์˜ค๊ธฐ"""
        pass

    @abstractmethod
    def convert_to_markdown(self, content):
        """Markdown ๋ณ€ํ™˜"""
        pass

2. ์ƒˆ Adapter ๊ตฌํ˜„ ์˜ˆ์‹œ

# scripts/adapters/dooray.py

from .base import BaseAdapter

class DoorayAdapter(BaseAdapter):
    """Dooray Wiki Adapter"""

    def __init__(self, token: str):
        self.token = token

    def authenticate(self):
        # Dooray API ์ธ์ฆ
        pass

    def list_documents(self):
        # Wiki ๋ชฉ๋ก ์กฐํšŒ
        pass

    def fetch_document(self, doc_id: str):
        # Wiki ๋‚ด์šฉ ๊ฐ€์ ธ์˜ค๊ธฐ
        pass

    def convert_to_markdown(self, content):
        # Markdown ๋ณ€ํ™˜
        pass

3. ์‚ฌ์šฉ

# ๊ณตํ†ต ํŒŒ์ดํ”„๋ผ์ธ ์‚ฌ์šฉ
from adapters.dooray import DoorayAdapter
from denote_namer import DenoteNamer
from categorizer import DocumentCategorizer

# Adapter ์ดˆ๊ธฐํ™”
adapter = DoorayAdapter(token="YOUR_TOKEN")

# ๋ฌธ์„œ ๊ฐ€์ ธ์˜ค๊ธฐ
content = adapter.fetch_document("DOC_ID")
markdown = adapter.convert_to_markdown(content)

# Denote ํŒŒ์ผ๋ช… ์ƒ์„ฑ (๊ณตํ†ต)
namer = DenoteNamer()
filename = namer.generate_filename(
    title="๋ฌธ์„œ ์ œ๋ชฉ",
    tags=["tag1", "tag2"]
)

# ์ž๋™ ๋ถ„๋ฅ˜ (๊ณตํ†ต)
categorizer = DocumentCategorizer()
category, score, all_scores = categorizer.categorize(
    title="๋ฌธ์„œ ์ œ๋ชฉ",
    content=markdown
)

๐ŸŒŸ ํ™œ์šฉ ์‚ฌ๋ก€

1. ํšŒ์‚ฌ ๊ธฐ์ˆ ๋ฌธ์„œ ๋ฐฑ์—…

# Google Docs โ†’ Markdown โ†’ Git
python scripts/batch_processor.py --backend gdocs
git add docs/
git commit -m "Backup: ๊ธฐ์ˆ ๋ฌธ์„œ $(date +%Y%m%d)"
git push

2. ๊ฐœ์ธ ์ง€์‹๋ฒ ์ด์Šค ๊ตฌ์ถ•

# Dooray Wiki โ†’ Markdown โ†’ Org-mode
python scripts/batch_processor.py --backend dooray
# ~/org/ ๋””๋ ‰ํ† ๋ฆฌ์— ๋ณต์‚ฌ
cp -r docs/ ~/org/work/

3. ํŒ€ ์ง€์‹ ๊ณต์œ 

# Markdown โ†’ GitHub Pages
git push origin main
# GitHub Actions๋กœ ์ž๋™ ๋ฐฐํฌ

๐Ÿ”’ ๋ณด์•ˆ ๊ณ ๋ ค์‚ฌํ•ญ

๊ตฌํ˜„๋œ ๋ณด์•ˆ ์กฐ์น˜

  1. ๋กœ์ปฌ ์šฐ์„ : ๋ชจ๋“  ๋ฐ์ดํ„ฐ ๋กœ์ปฌ ์ €์žฅ
  2. Git ๋ฒ„์ „๊ด€๋ฆฌ: ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ถ”์  ๊ฐ€๋Šฅ
  3. .gitignore: credentials ํŒŒ์ผ ์ œ์™ธ
  4. Secretlint: ๋ฏผ๊ฐ ์ •๋ณด ์ž๋™ ํƒ์ง€

๊ถŒ์žฅ์‚ฌํ•ญ

  • API ํ‚ค๋Š” ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์‚ฌ์šฉ
  • credentials ํŒŒ์ผ์€ ์ ˆ๋Œ€ ์ปค๋ฐ‹ ๊ธˆ์ง€
  • Private ์ €์žฅ์†Œ ์‚ฌ์šฉ ๊ถŒ์žฅ
  • ์ •๊ธฐ์  ๋ณด์•ˆ ์Šค์บ” (secretlint)

๐Ÿ“ˆ ๋กœ๋“œ๋งต

v1.0 (2025-09-13, ์™„๋ฃŒ)

  • โœ… Google Docs Adapter (Pandoc ๊ธฐ๋ฐ˜, 95% ์ •ํ™•๋„)
  • โœ… Denote ํŒŒ์ผ๋ช… ์ƒ์„ฑ (ํ•œ๊ธ€ ์ œ๋ชฉ + ์˜์–ด ํƒœ๊ทธ)
  • โœ… ๊ทœ์น™ ๊ธฐ๋ฐ˜ ์ž๋™ ๋ถ„๋ฅ˜ (LLM ๋น„์šฉ 0์›)
  • โœ… Git ๋ฒ„์ „ ๊ด€๋ฆฌ
  • โœ… Secretlint ๋ณด์•ˆ ์Šค์บ”

v1.1 (2025-10-15, ๊ฐœ๋ฐœ ์ค‘)

  • ๐Ÿ”ง Dooray Wiki/Drive Adapter
  • ๐Ÿ”ง Adapter ํŒจํ„ด ๋ฆฌํŒฉํ† ๋ง (Base โ†’ Concrete)
  • ๐Ÿ”ง CLI ๊ฐœ์„ 
  • ๐Ÿ“‹ ๋ฌธ์„œํ™” ๊ฐ•ํ™” (๊ธฐ์ˆ  ๋ฐฐ๊ฒฝ, ์ ‘๊ทผ ๋ฐฉ๋ฒ•๋ก )

v1.2 (๊ณ„ํš ์ค‘)

  • ๐Ÿ“‹ Confluence Adapter
  • ๐Ÿ“‹ Notion Adapter (Airbyte ๊ฒฝํ—˜ ํ™œ์šฉ)
  • ๐Ÿ“‹ ์›น UI

v2.0 (RAG Pipeline Integration)

๋ฐฐ๊ฒฝ: n8n, Supabase pgvector, Ollama Embedding, Rerank API ์„œ๋ฒ„ ๋“ฑ ๊ธฐ์ˆ  ์Šคํƒ ๊ฒ€์ฆ ์™„๋ฃŒ (2,945๊ฐœ Org ํŒŒ์ผ ์ž„๋ฒ ๋”ฉ ์„ฑ๊ณต)

๋ชฉํ‘œ: Legacy โ†’ Denote โ†’ RAG-ready ๋ณ€ํ™˜ ์‹œ์Šคํ…œ

memex-kb v1.x (Conversion)
    โ†“ Denote Markdown
memex-kb v2.0 (Embedding Pipeline) โ† NEW!
    โ†“ Vector DB
n8n RAG Orchestration (๊ฒ€์ฆ๋จ)
    โ†“ AI Second Brain

์ฃผ์š” ๊ธฐ๋Šฅ:

  • ๐Ÿ’ก Denote Markdown โ†’ Vector Embedding
    • Ollama (mxbai-embed-large, ๋กœ์ปฌ)
    • ํด๋”๋ณ„ ์ฐจ๋ณ„ํ™” ์ฒญํ‚น (meta 1500, bib 1200, journal 800, notes 1000)
  • ๐Ÿ’ก Supabase pgvector ํ†ตํ•ฉ (๊ฒ€์ฆ๋œ ํŒŒ์ดํ”„๋ผ์ธ ์žฌ์‚ฌ์šฉ)
  • ๐Ÿ’ก n8n RAG Workflow (Hybrid Search: ํ‚ค์›Œ๋“œ + ๋ฒกํ„ฐ + ๊ทธ๋ž˜ํ”„)
  • ๐Ÿ’ก ์ง€์‹ ๊ณ„์ธต ๊ตฌ์กฐ ๋ฐ˜์˜ (meta โ†’ bib โ†’ journal โ†’ notes)

์ฐจ๋ณ„ํ™”:

  • ๋‹จ์ˆœ ๋ณ€ํ™˜ ๋„๊ตฌ์™€ ๋‹ค๋ฆ„
  • Legacy โ†’ RAG ํŒŒ์ดํ”„๋ผ์ธ์˜ ์ž…๊ตฌ
  • ๊ฒ€์ฆ๋œ ๊ธฐ์ˆ  ์Šคํƒ ํ†ตํ•ฉ (์‹ค์ „ ๊ฒฝํ—˜ ๊ธฐ๋ฐ˜)
  • ๋…์ฐฝ์  ์ ‘๊ทผ: Denote + ๊ณ„์ธต์  ์ง€์‹ ๊ตฌ์กฐ + RAG

๐Ÿค ๊ธฐ์—ฌํ•˜๊ธฐ

๊ธฐ์—ฌ ๋ฐฉ๋ฒ•

  1. ์ด ์ €์žฅ์†Œ๋ฅผ Fork
  2. Feature ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ (git checkout -b feature/AmazingFeature)
  3. ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ปค๋ฐ‹ (git commit -m 'Add some AmazingFeature')
  4. ๋ธŒ๋žœ์น˜์— Push (git push origin feature/AmazingFeature)
  5. Pull Request ์ƒ์„ฑ

Backend Adapter ๊ธฐ์—ฌ

์ƒˆ๋กœ์šด Backend๋ฅผ ์ง€์›ํ•˜๊ณ  ์‹ถ์œผ์‹ ๊ฐ€์š”?

  1. scripts/adapters/base.py ์ฐธ๊ณ 
  2. ์ƒˆ Adapter ํด๋ž˜์Šค ๊ตฌํ˜„
  3. ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
  4. PR ์ œ์ถœ

ํ™˜์˜ํ•˜๋Š” ๊ธฐ์—ฌ:

  • Confluence Adapter
  • Notion Adapter
  • Obsidian Sync
  • ๊ธฐํƒ€ Wiki/๋ฌธ์„œ ๋„๊ตฌ

๐Ÿ“„ ๋ผ์ด์„ ์Šค

MIT License

๊ฐœ์ธ/์ƒ์—…์  ์šฉ๋„ ๋ชจ๋‘ ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ™ ๊ฐ์‚ฌ์˜ ๋ง

์˜๊ฐ์„ ๋ฐ›์€ ํ”„๋กœ์ ํŠธ

  • Denote by Protesilaos Stavrou
  • Org-mode by Carsten Dominik
  • Obsidian - ๊ฐœ์ธ ์ง€์‹๋ฒ ์ด์Šค ํŠธ๋ Œ๋“œ

์ฒ ํ•™์  ๊ธฐ๋ฐ˜

"The memex is a device in which an individual stores all his books, records, and communications, and which is mechanized so that it may be consulted with exceeding speed and flexibility."

โ€” Vannevar Bush, "As We May Think" (1945)

Memex-KB๋Š” Vannevar Bush์˜ Memex ๊ฐœ๋…์„ ํ˜„๋Œ€์ ์œผ๋กœ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ“ž ์—ฐ๋ฝ์ฒ˜


๐Ÿ“š ์ถ”๊ฐ€ ๋ฌธ์„œ


๋ฒ„์ „: 1.1.1 ์ตœ์ข… ์—…๋ฐ์ดํŠธ: 2025-11-07 ์ƒํƒœ: ๐ŸŸข ํ™œ๋ฐœํžˆ ๊ฐœ๋ฐœ ์ค‘


"๋‹น์‹ ์˜ ์ง€์‹์„ ๋‹น์‹ ์˜ ๋ฐฉ์‹์œผ๋กœ ๊ด€๋ฆฌํ•˜์„ธ์š”."

About

Universal knowledge base with Memex philosophy and AI-agent integration. Google Docs adapter for seamless migration.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •