Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

ย 

History

991 Commits

Folders and files

Repository files navigation

Lorekeeper

Rust License: MIT DeepWiki

English | ํ•œ๊ตญ์–ด

ํฉ์–ด์ง„ ์ผ์ƒ์˜ ์ž‘์—…์„ ์Šค์Šค๋กœ ์ž๋ผ๋Š” ์ง€์‹ ์œ„ํ‚ค๋กœ. GmailยทSlackยทJiraยท์บ˜๋ฆฐ๋”ยทRSSยท๋ฉ”๋ชจ๋ฅผ ๋งค์ผ ๋ชจ์•„ ์ค‘๋ณต์„ ์—†์• ๊ณ , ๊ฐœ๋…์„ ์ถ”์ถœํ•˜๊ณ , Obsidian ๋งˆํฌ๋‹ค์šด์œผ๋กœ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. LLM์ด ์ •๋ฆฌยท์—ฐ๊ฒฐยท๊ฐฑ์‹ (๋ถ€๊ธฐ) ์„ ๋Œ€์‹ ํ•˜๋‹ˆ ์ง€์‹์€ ๋ฐฉ์น˜๋˜์ง€ ์•Š๊ณ  ๋ณต๋ฆฌ๋กœ ์Œ“์ž…๋‹ˆ๋‹ค.


์™œ Lorekeeper์ธ๊ฐ€?

๋ฉ”๋ชจยท์œ„ํ‚ค๊ฐ€ ์‹คํŒจํ•˜๋Š” ์ง„์งœ ์ด์œ ๋Š” ์ฝ๊ธฐยท์ƒ๊ฐํ•˜๊ธฐ๊ฐ€ ์•„๋‹ˆ๋ผ ๋ถ€๊ธฐ(bookkeeping) โ€” ๊ต์ฐจ์ฐธ์กฐ ๊ฐฑ์‹ , ์ค‘๋ณต ์ •๋ฆฌ, ๋ถ„๋ฅ˜, ๋ชจ์ˆœ ์ ๊ฒ€ โ€” ์˜ ๋ถ€๋‹ด์ž…๋‹ˆ๋‹ค. ์‚ฌ๋žŒ์ด ์ด๊ฑธ ๋ชป ๋ฒ„ํ…จ์„œ ์œ„ํ‚ค๋ฅผ ๋ฐฉ์น˜ํ•˜์ฃ . Lorekeeper๋Š” ๊ทธ ๋ถ€๊ธฐ๋ฅผ LLM์—๊ฒŒ ๋งก๊น๋‹ˆ๋‹ค.

๐Ÿ“– ์ฒ˜์Œ ๋ณด๋Š” ์šฉ์–ด๋“ค โ€” vault: ๋งˆํฌ๋‹ค์šด ํŒŒ์ผ์ด ๋ชจ์ธ ํด๋”(๊ณง ๋‹น์‹ ์˜ ์ง€์‹ ์ €์žฅ์†Œ) ยท ๊ฐœ๋…(concept): ํ•œ ์ฃผ์ œ๋‹น ํ•œ ํŽ˜์ด์ง€ ยท ๋งํฌ: ํŽ˜์ด์ง€๋ฅผ ์ž‡๋Š” [ํ‘œ์‹œ ์ด๋ฆ„](์ƒ๋Œ€/๊ฒฝ๋กœ.md) ๋งˆํฌ๋‹ค์šด ๋งํฌ(ObsidianยทGitHubยทOKF ์–ด๋””์„œ๋“  ํ•ด์„) ยท ๋ถ€๊ธฐ: ๋งํฌยท์ค‘๋ณตยท๋ถ„๋ฅ˜๋ฅผ ์†์œผ๋กœ ๊ฐฑ์‹ ํ•˜๋Š” ๊ทธ ์žก์ผ.

๐Ÿ“ฅ ์„ค์ • ํ•œ ๋ฒˆ โ†’ ๋งค์ผ ์ž๋™ ๋ฉ”์ผยท๋ฉ”์‹ ์ €ยท์ด์Šˆยท์ผ์ •ยทํ”ผ๋“œยท๋ฉ”๋ชจ์—์„œ ์–ด์ œ์˜ ํ™œ๋™ยท์ง€์‹์„ ์ˆ˜์ง‘
๐Ÿงน ๋…ธ์ด์ฆˆ ์ œ๊ฑฐ ์ค‘๋ณต ์ฐจ๋‹จ, ๊ด€๋ จ ์—†๋Š” ํ•ญ๋ชฉ ํ•„ํ„ฐ, ๋‚ด ์ผ์€ work-log๋กœ ์ž๋™ ๋ถ„๋ฆฌ
๐Ÿงฉ ๊ฐœ๋… ์ž์‚ฐํ™” ๊ฐ™์€ ๊ฐœ๋…์€ ํ•œ ํŽ˜์ด์ง€๋กœ ์ˆ˜๋ ด(Vector DB = vector-database), ์นดํ…Œ๊ณ ๋ฆฌยท์—ฐ๊ด€๊ด€๊ณ„ ์ •๋ฆฌ
๐Ÿ”— ์—ฐ๊ฒฐ๋˜๋Š” ์ง€์‹ ๊ทธ๋ž˜ํ”„ ๋งˆํฌ๋‹ค์šด ๋งํฌยท์—ญ๋งํฌยทํด๋Ÿฌ์Šคํ„ฐ๋กœ ๊ฐœ๋…์ด ์„œ๋กœ ์ด์–ด์ง
โœ… ํ•  ์ผ โ†’ ๊ธฐ๋ก ์™„๋ฃŒํ•œ ํ•  ์ผ๊ณผ ๋ฉ”๋ชจ๋ฅผ ๋ณด์กดํ•˜๊ณ , ์„ค์ •๋œ tasks ์†Œ์Šค์˜ ์ˆ˜์ง‘ยท์˜๋ฏธ ์ฒ˜๋ฆฌ๋ฅผ ๊ฑฐ์ณ ๋ฐ์ผ๋ฆฌยท๊ฐœ๋…ยท์„ฑ๊ณผ ๋ฆฌ๋ทฐ์— ํ™œ์šฉ
๐Ÿ“ˆ ๋ณต๋ฆฌ ์ฃผ๊ฐ„ยท์›”๊ฐ„ยท๋ถ„๊ธฐยท์—ฐ๊ฐ„ ํ•ฉ์„ฑ์œผ๋กœ ์‹œ๊ฐ„์ด ๊ฐˆ์ˆ˜๋ก ๊ฐ€์น˜โ†‘
๐Ÿ”‘ CLI ๋กœ๊ทธ์ธ ์žฌ์‚ฌ์šฉ Claude CodeยทCodex์˜ ๊ธฐ์กด ์ธ์ฆ ์‚ฌ์šฉ; Lore์˜ ๋ณ„๋„ LLM API ํด๋ผ์ด์–ธํŠธ ๋ถˆํ•„์š”

๐Ÿ’ก ์˜๊ฐ: Andrej Karpathy์˜ "LLM์ด ๊ด€๋ฆฌํ•˜๋Š” ์œ„ํ‚ค" โ€” ์ถœ์ฒ˜์™€ ์ƒ์„ฑ๋œ ์ง€์‹์„ ๊ตฌ๋ถ„, ์œ„ํ‚ค๋Š” LLM์ด ์ž‘์„ฑยท์œ ์ง€, ์Šคํ‚ค๋งˆ(config)๊ฐ€ ์›Œํฌํ”Œ๋กœ๋ฅผ ์ •์˜. ์‚ฌ๋žŒ์€ ์†Œ์Šค๋ฅผ ๊ณ ๋ฅด๊ณ  ์งˆ๋ฌธํ•˜๊ณ , LLM์€ ๋ถ€๊ธฐ๋ฅผ ํ•œ๋‹ค.


ํ•œ๋ˆˆ์— ๋ณด๊ธฐ

flowchart LR
    subgraph SRC["๐Ÿ“ก ๋ฐ์ดํ„ฐ ์†Œ์Šค"]
        direction TB
        G["Gmail"]
        S["Slack"]
        J["Jira"]
        C["Calendar"]
        R["RSS"]
        M["๋ฉ”๋ชจ inbox"]
    end
    SRC --> L["โš™๏ธ lore (Rust CLI)"]
    L --> P["์ˆ˜์ง‘ ยท ์ •๊ทœํ™” ยท ์ค‘๋ณต์ œ๊ฑฐ<br/>๋ถ„๋ฅ˜ ยท ๋ Œ๋” ยท ๊ทธ๋ž˜ํ”„"]
    P --> V[("๐Ÿ—‚๏ธ Obsidian Vault<br/>daily ยท concepts ยท documents")]
    L -. "LLM ์ž‘์—… ํ" .-> CC["๐Ÿค– Claude Code ยท Codex<br/>๊ณตํ†ต lore-process ์Šคํ‚ฌ"]
    CC -. "ํƒ€์ž…์ด ์žˆ๋Š” ์˜๋ฏธ ๊ฒฐ๊ณผ" .-> L
Loading

lore๊ฐ€ ์ˆ˜์ง‘ยท์‹คํ–‰ ์ˆœ์„œยท๊ฒŒ์‹œ ๊ฒ€์ฆ์„ ๋งก๊ณ , ๊ณตํ†ต lore-process ์Šคํ‚ฌ์„ ์‹คํ–‰ํ•˜๋Š” Claude Code ๋˜๋Š” Codex๊ฐ€ ์š”์•ฝยท๊ฐœ๋…ยท๊ด€๊ณ„๋ฅผ ํŒ๋‹จํ•ฉ๋‹ˆ๋‹ค. Markdown์ด ์ง€์‹ ์›๋ณธ์ด๋ฉฐ SQLite๋Š” ๋‹ค์‹œ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฒ€์ƒ‰ยทํƒ์ƒ‰ ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค.


๋น ๋ฅธ ์‹œ์ž‘

์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ์ค€๋น„๋ฌผ โ€” ์–ด๋ ต์ง€ ์•Š์Šต๋‹ˆ๋‹ค:

  • ๐Ÿ’ป macOS ๋˜๋Š” Linux (Windows๋Š” PowerShell ์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ ์ œ๊ณต)
  • ๐Ÿค– Claude Code ๋˜๋Š” Codex โ€” ๊ธฐ์กด CLI ๋กœ๊ทธ์ธ์œผ๋กœ ์š”์•ฝยท๊ฐœ๋…ยท๊ด€๊ณ„๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค
  • ๐Ÿ”‘ ์“ฐ๋ ค๋Š” ์†Œ์Šค์˜ ์ž๊ฒฉ์ฆ๋ช…๋งŒ โ€” ์˜ˆ: Gmail/Drive/Calendar๋Š” Google ๋กœ๊ทธ์ธ, Slack์€ ํ† ํฐ
  • ๐Ÿ—‚๏ธ (์„ ํƒ) Obsidian โ€” ๊ทธ๋ž˜ํ”„๋ฅผ ์˜ˆ์˜๊ฒŒ ํƒ์ƒ‰์šฉ. ์—†์–ด๋„ ๊ฒฐ๊ณผ๋ฌผ์€ ํ‰๋ฒ”ํ•œ ๋งˆํฌ๋‹ค์šด์ž…๋‹ˆ๋‹ค

๐Ÿ’ก ๊ธฐ๋ณธ ์‹œ์ž‘ ์„ค์ •์€ ์ธ์ฆ์ด ํ•„์š” ์—†๋Š” ๋ฉ”๋ชจ inbox ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. RSSยท์—…๋ฌด ์†Œ์Šคยท๊ฐœ์ธ ํ™œ๋™ ์ถ”์ ์€ ํ•„์š”ํ•  ๋•Œ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์š”์•ฝยท๊ฐœ๋… ์ƒ์„ฑ์—๋Š” ์„ ํƒํ•œ CLI์˜ ๋กœ๊ทธ์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ณต์‚ฌํ•œ config.yaml์˜ execution.profiles.primary.engine์„ claude-code ๋˜๋Š” codex๋กœ ์„ค์ •ํ•˜์„ธ์š”.

# 1) ์„ค์น˜ โ€” ๋ฐ”์ด๋„ˆ๋ฆฌ + ํ…œํ”Œ๋ฆฟ + ๋‘ ํ˜ธ์ŠคํŠธ์˜ ์Šคํ‚ฌ์„ ํ•œ ๋ฒˆ์—
curl -fsSL https://raw.githubusercontent.com/junyeong-ai/lorekeeper/main/scripts/install.sh | bash

# 2) ์ฒ˜์Œ ์„ค์ • โ€” ๊ธฐ์กด config.yaml์ด ์žˆ์œผ๋ฉด ๋ณด์กดํ•˜๊ณ  ํŽธ์ง‘
LORE_CONFIG_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/lorekeeper"
cp -n "$LORE_CONFIG_DIR/config.starter.yaml" "$LORE_CONFIG_DIR/config.yaml"
${EDITOR:-vi} "$LORE_CONFIG_DIR/config.yaml"  # vault.root, timezone, locale, identity ํ™•์ธ

# 3) ๋กœ์ปฌ ๊ฒ€์ฆ๊ณผ ์ง€์‹ ์ž‘์„ฑ ๊ทœ์•ฝ ์ƒ์„ฑ
lore validate
lore schema
mkdir -p "$(lore config vault-root)/inbox"

vault์˜ inbox/์— ๋ฉ”๋ชจ ํŒŒ์ผ ํ•˜๋‚˜๋ฅผ ๋„ฃ์€ ๋’ค ์ˆ˜์ง‘ํ•ฉ๋‹ˆ๋‹ค. inbox_dir: inbox๋Š” ๋ณ€๊ฒฝํ•œ vault.root๋ฅผ ๋”ฐ๋ผ๊ฐ‘๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์„ค์ •์—๋Š” ๊ณต๊ธ‰์ž ์ธ์ฆ ๋งˆ๋ฒ•์‚ฌ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

DOCXยทXLSXยทPDF๋ฅผ ๋„ฃ์œผ๋ ค๋ฉด lore input install DIRECTORY๋กœ ์„ ํƒ์  ๋ณ€ํ™˜ ํ™˜๊ฒฝ์„ ์„ค์น˜ํ•˜๊ณ  ์ถœ๋ ฅ๋œ ์„ค์ •์„ ๋ณ‘ํ•ฉํ•ฉ๋‹ˆ๋‹ค. lore input check๋กœ ์˜์กด์„ฑ์„, lore input inspect FILE.pdf๋กœ ์›๋ณธ์„ ์˜ฎ๊ธฐ์ง€ ์•Š๊ณ  ๋ณ€ํ™˜ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€๋Š” ๋ณ„๋„ OCR ์–ธ์–ด ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ „์ฒ˜๋ฆฌ ์„ค์ •๊ณผ ์ง€์› ๋ฒ”์œ„๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

# 4) ์ž…๋ ฅ ์ ‘๊ทผ์„ ํ™•์ธํ•œ ๋’ค ์‹ค์ œ ์ˆ˜์ง‘
lore ingest --dry-run
lore run daily

lore run daily๋Š” ์ˆ˜์ง‘ ํ›„ ์„ ํƒํ•œ ์‹คํ–‰๊ธฐ๋กœ ์š”์•ฝยท๊ฐœ๋…ยท๊ด€๊ณ„๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ๊ฒŒ์‹œ๋ฅผ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜์ง‘๋งŒ ๋๋‚œ ์ƒํƒœ๋Š” ์ง€์‹ํ™” ์™„๋ฃŒ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ฒ˜๋ฆฌ๊ฐ€ ๋๋‚˜๋ฉด ๋‹ค์Œ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

lore queue check
lore wiki reviews --check
lore wiki search "๋ฉ”๋ชจ์˜ ์ฃผ์ œ" --json

# 5) ์ž๋™ํ™”๊ฐ€ ํ•„์š”ํ•˜๋ฉด ์˜ˆ์•ฝ ์ •์˜ ์ƒ์„ฑ ํ›„ OS์— ๋“ฑ๋ก
lore schedule > lorekeeper.cron
# ๊ธฐ์กด ์˜ˆ์•ฝ์„ ๋ณด์กดํ•˜๋ฉฐ ๋ณ‘ํ•ฉํ•˜๊ณ  ์‹ค์ œ ์‹คํ–‰ ํ™•์ธ. macOS๋Š” ์•„๋ž˜ ์Šค์ผ€์ค„๋ง ์ ˆ ์ฐธ๊ณ 

config.example.yaml์€ ์ „์ฒด ์˜ต์…˜ ์นดํƒˆ๋กœ๊ทธ์ด๋ฉฐ ๋ชจ๋“  ์†Œ์Šค๊ฐ€ ๋น„ํ™œ์„ฑ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ๋ธ”๋ก๋งŒ ์‹ค์ œ config.yaml์— ์ถ”๊ฐ€ํ•˜๊ณ  ๋ฒ”์œ„ยท๊ณ„์ • ๊ฐ’์„ ์ฑ„์šด ๋’ค ํ™œ์„ฑํ™”ํ•˜์„ธ์š”. /lore-setup์€ ์ด ์„ ํƒ๊ณผ ID ํƒ์ƒ‰์„ ๋•์Šต๋‹ˆ๋‹ค. ์ธ์ฆ์ด ํ•„์š”ํ•œ ์†Œ์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด lore init credentials โ†’ ํ•ด๋‹น ์†Œ์Šค์˜ lore ingest --dry-run <source-id> ์ˆœ์„œ๋กœ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์•ฝ ์ •์˜ ์ƒ์„ฑยทOS ๋“ฑ๋กยท์‹ค์ œ ์‹คํ–‰์€ ๊ฐ๊ฐ ๋ณ„๋„ ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค. ์Šค์ผ€์ค„๋ง์„ ๋”ฐ๋ฅด์„ธ์š”.

Obsidian์ด ์—†์–ด๋„ ๋ฉ๋‹ˆ๋‹ค โ€” ๊ฒฐ๊ณผ๋ฌผ์€ ํ‰๋ฒ”ํ•œ ๋งˆํฌ๋‹ค์šด + ํด๋”๋ผ ๊ทธ๋ƒฅ ํ…์ŠคํŠธ๋กœ ์ฝํž™๋‹ˆ๋‹ค. Obsidian์€ ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰์„ ์˜ˆ์˜๊ฒŒ ๋ณด์—ฌ์ค„ ๋ฟ.


์‹ค์ œ๋กœ ์–ด๋–ค ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๋‚˜์š”?

๊ฐ€์ƒ์˜ ์‹œ๋‚˜๋ฆฌ์˜ค๋กœ ๋”ฐ๋ผ๊ฐ€ ๋ด…๋‹ˆ๋‹ค. AI ์—”์ง€๋‹ˆ์–ด ์ˆ˜๋ฏผ์ด RAG ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…์„ ์ •๋ฆฌํ•œ ๋ฉ”๋ชจ๋ฅผ vault์˜ inbox/์— ๋–จ์–ด๋œจ๋ฆฝ๋‹ˆ๋‹ค.

์•„๋ž˜ ํŽ˜์ด์ง€ ์˜ˆ์‹œ๋Š” ํ•ต์‹ฌ ํ•„๋“œ๋งŒ ๋ฐœ์ทŒํ–ˆ์Šต๋‹ˆ๋‹ค โ€” ์‹ค์ œ ํŒŒ์ผ์—๋Š” updated ๊ฐ™์€ ๊ด€๋ฆฌ์šฉ frontmatter๋„ ํ•จ๊ป˜ ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค.

๐Ÿ“ ์ž…๋ ฅ โ€” inbox/rag-๊ฒ€์ƒ‰-ํ’ˆ์งˆ.md

# RAG ํŒŒ์ดํ”„๋ผ์ธ: ๋‚ฎ์€ recall ๊ฒ€์ƒ‰ ๊ณ ์น˜๊ธฐ

๋ฌธ์ œ: ์งˆ์˜์˜ 30%๊ฐ€ ๋ฌด๊ด€ํ•œ ์ฒญํฌ๋ฅผ ๊ฒ€์ƒ‰ํ•ด ์ƒ์„ฑ๊ธฐ๊ฐ€ ํ™˜๊ฐ์„ ์ผ์œผ์ผฐ๋‹ค.
์›์ธ: (1) ์ฒญํฌ๊ฐ€ 2000ํ† ํฐ์œผ๋กœ ๋„ˆ๋ฌด ์ปค์„œ ์ž„๋ฒ ๋”ฉ์ด ์—ฌ๋Ÿฌ ์ฃผ์ œ์˜ ํ‰๊ท ์ด ๋จ.
      (2) ๋Œ€ํ™”ํ˜• ์งˆ๋ฌธ("๊ทธ ๋‹ค๋ฅธ ๊ฑฐ๋Š”?")์„ ๊ทธ๋Œ€๋กœ ์ž„๋ฒ ๋”ฉ.
ํ•ด๊ฒฐ: ์ฒญํฌ๋ฅผ ~400ํ† ํฐ์œผ๋กœ ์ค„์ด๊ณ , ์งˆ๋ฌธ์„ standalone ์ฟผ๋ฆฌ๋กœ rewriteํ•˜๊ณ ,
      ์œ ์‚ฌ๋„๋ฅผ L2โ†’cosine์œผ๋กœ ๋ณ€๊ฒฝ. Recall@5: 0.62 โ†’ 0.91.

โ–ถ๏ธ ์‹คํ–‰

$ lore ingest
โ–ธ notes (manual)
  extracted: 1 items
  โœ“ wrote: wiki/documents/rag-ํŒŒ์ดํ”„๋ผ์ธ-๋‚ฎ์€-recall-๊ฒ€์ƒ‰-๊ณ ์น˜๊ธฐ.md (document)

Done. 1 pages written, 0 personal items tracked.

์ด ์‹œ์ ์— ํŽ˜์ด์ง€๋Š” ๋งŒ๋“ค์–ด์กŒ์ง€๋งŒ ## ์š”์•ฝยท## ๊ด€๋ จ ๊ฐœ๋…์€ ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค โ€” lore ingest๊ฐ€ LLM ์ž‘์—…์„ ํ์— ๋„ฃ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค:

$ lore queue status
  [current] sum-โ€ฆ (summarize)        โ†’ wiki/documents/rag-ํŒŒ์ดํ”„๋ผ์ธ-โ€ฆ
  [current] ext-โ€ฆ (extract-concepts) โ†’ wiki/documents/rag-ํŒŒ์ดํ”„๋ผ์ธ-โ€ฆ
queue: 2 current, 0 done, 0 stale, 0 missing-target, 0 unreadable across 2 task(s)

์ด์ œ **lore run process**๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์„ค์ •๋œ Claude CodeยทCodex ์‹คํ–‰๊ธฐ๊ฐ€ ๊ณตํ†ต ์Šคํ‚ฌ๋กœ ํ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ , Rust๊ฐ€ ์ถœ์ฒ˜์™€ ํŒ๋ณธ์„ ๊ฒ€์‚ฌํ•ด ๊ฒŒ์‹œํ•ฉ๋‹ˆ๋‹ค. ๋๋‚˜๋ฉด lore queue status๋Š” 0 current๊ฐ€ ๋˜๊ณ  ํŽ˜์ด์ง€๊ฐ€ ์ฑ„์›Œ์ง‘๋‹ˆ๋‹ค:

โœ… ๊ฒฐ๊ณผ โ‘  โ€” ๋ฌธ์„œ ํŽ˜์ด์ง€ (์š”์•ฝ + ๊ฐœ๋… ๋งํฌ๊ฐ€ ์ฑ„์›Œ์ง)

---
id: rag-ํŒŒ์ดํ”„๋ผ์ธ-๋‚ฎ์€-recall-๊ฒ€์ƒ‰-๊ณ ์น˜๊ธฐ
type: document
title: "RAG ํŒŒ์ดํ”„๋ผ์ธ: ๋‚ฎ์€ recall ๊ฒ€์ƒ‰ ๊ณ ์น˜๊ธฐ"
created: 2026-06-13
tags: ["document"]
---

## ์š”์•ฝ
์ฒญํฌ๋ฅผ 2000โ†’400 ํ† ํฐ์œผ๋กœ ์ค„์ด๊ณ , ๋Œ€ํ™”ํ˜• ์งˆ๋ฌธ์„ standalone ์ฟผ๋ฆฌ๋กœ ์žฌ์ž‘์„ฑํ•˜๊ณ ,
์œ ์‚ฌ๋„๋ฅผ L2โ†’cosine์œผ๋กœ ๋ฐ”๊ฟ” ์ด ๋ฉ”๋ชจ์˜ Recall@5๊ฐ€ 0.62 โ†’ 0.91๋กœ ๊ฐœ์„ ๋˜์—ˆ๋‹ค. ์„ธ ๋ณ€๊ฒฝ์„ ํ•จ๊ป˜ ์ ์šฉํ•œ
๊ด€์ฐฐ์ด๋ฏ€๋กœ ๊ฐ ๋ณ€๊ฒฝ์˜ ๊ฐœ๋ณ„ ํšจ๊ณผ๋‚˜ ๋‹ค๋ฅธ ํ™˜๊ฒฝ์—์„œ์˜ ์šฐ์—ด์€ ํ™•์ธ๋˜์ง€ ์•Š์•˜๋‹ค.

## ๋‚ด์šฉ
โ€ฆ (์›๋ณธ์„ ์ •๊ทœํ™”ํ•ด ๋ณด์กด) โ€ฆ

## ๊ด€๋ จ ๊ฐœ๋…
- [Retrieval-Augmented Generation](../../wiki/concepts/retrieval-augmented-generation.md)
- [๋ฒกํ„ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค](../../wiki/concepts/vector-database.md)
- [์ฒญํ‚น](../../wiki/concepts/์ฒญํ‚น.md)
- [์งˆ์˜ ์žฌ์ž‘์„ฑ](../../wiki/concepts/์งˆ์˜-์žฌ์ž‘์„ฑ.md)

โœ… ๊ฒฐ๊ณผ โ‘ก โ€” ๊ฐœ๋… ํŽ˜์ด์ง€๊ฐ€ ์ˆ˜๋ ดํ•ฉ๋‹ˆ๋‹ค (ํ•ต์‹ฌ ๊ฐ€์น˜)

๋ฉฐ์น  ๋’ค ์ˆ˜๋ฏผ์ด "ํ”„๋กœ๋•์…˜ ๋ฒกํ„ฐ DB ์„ ํƒ" ๋ฉ”๋ชจ๋ฅผ ๋˜ ๋“œ๋กญํ•ฉ๋‹ˆ๋‹ค. "๋ฒกํ„ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค"๋Š” ๋‘ ๋ฉ”๋ชจ ๋ชจ๋‘์— ๋“ฑ์žฅํ•˜์ง€๋งŒ โ€” ์ƒˆ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๊ณ  ๊ธฐ์กด ๊ฐœ๋…์— ํ•ฉ๋ฅ˜ํ•ฉ๋‹ˆ๋‹ค:

---
id: vector-database
type: concept
title: "๋ฒกํ„ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค"
aliases: ["๋ฒกํ„ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค", "Vector DB"]
category: ai-ml
source_count: 2          # โ† ๋‘ ๋ฌธ์„œ๊ฐ€ ์ด ํ•œ ๊ฐœ๋…์„ ์ธ์šฉ
---

## ํ•ต์‹ฌ
๋ฒกํ„ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๊ณ ์ฐจ์› ์ž„๋ฒ ๋”ฉ์„ ์ €์žฅํ•˜๊ณ  ๊ทผ์‚ฌ ์ตœ๊ทผ์ ‘ ํƒ์ƒ‰(ANN)์„ ์ œ๊ณตํ•œ๋‹ค.
๋‘ ๋ฒˆ์งธ ๋ฉ”๋ชจ์˜ ๊ธฐ์กด PostgreSQL ํ™˜๊ฒฝ์—์„œ๋Š” ๋ณ„๋„ ์‹œ์Šคํ…œ์˜ ์šด์˜ ๋ถ€๋‹ด์„ ์ค„์ด๊ธฐ ์œ„ํ•ด
pgvector๋ฅผ ์„ ํƒํ–ˆ๋‹ค. ์ด ๊ฒฐ์ •์˜ ์กฐ๊ฑด๊ณผ ์ฒซ ๋ฉ”๋ชจ์˜ ๊ฒ€์ƒ‰ ํ’ˆ์งˆ ๊ด€์ฐฐ์€ ๋ณ„๋„๋กœ ์œ ์ง€ํ•œ๋‹ค.

## ์ถœ์ฒ˜
<!-- lorekeeper:concept-sources:v1 -->

์ „์ฒด ์ถœ์ฒ˜๋Š” `lore wiki prepare`๋กœ ์Šค๋ƒ…์ƒท ID๋ฅผ ๋ฐ›์€ ๋‹ค์Œ `lore wiki citations EXACT_CONCEPT_PATH --snapshot ID`๋กœ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.

Vector DB๋ผ๊ณ  ์“ฐ๋“  ๋ฒกํ„ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ผ๊ณ  ์“ฐ๋“  ํ•œ ํŽ˜์ด์ง€๋กœ ๋ชจ์ž…๋‹ˆ๋‹ค(alias๋กœ ๋“ฑ๋ก). ๊ฐ™์€ ์ง€์‹์ด ํฉ์–ด์ง€์ง€ ์•Š๋Š” ๊ฒƒ โ€” ์ด๊ฒŒ "๋ณต๋ฆฌ๋กœ ์Œ“์ธ๋‹ค"์˜ ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค.

์†Œ์Šค๋ณ„ concept_policy๋กœ ๊ฐœ๋… ์ฆ๊ฐ€๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. disabled๋Š” ์›๋ฌธยท์š”์•ฝ๋งŒ ์ˆ˜์ง‘ํ•˜๊ณ , existing-only๋Š” ๊ธฐ์กด ๊ฐœ๋…์—๋งŒ ์—ฐ๊ฒฐํ•˜๋ฉฐ, supported-new๋Š” ๊ทผ๊ฑฐ๊ฐ€ ์žˆ๋Š” ์ƒˆ ๊ฐœ๋…๋„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ƒ๋žตํ•˜๋ฉด disabled์ž…๋‹ˆ๋‹ค. focus๋Š” ๊ด€์‹ฌ ๋ฒ”์œ„๋ฅผ ๋ณ„๋„๋กœ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฐ˜๋ณต ์•Œ๋ฆผ์€ existing-only, ์žฌ์‚ฌ์šฉํ•  ์„ค๊ณ„ ์ง€์‹์ด ์žˆ๋Š” ๋ฌธ์„œ๋Š” supported-new๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ •์ฑ…์€ ์ž‘์—… ํ•ด์‹œ์— ํฌํ•จ๋˜๊ณ  Rust ์ ์šฉ ๋‹จ๊ณ„์—์„œ๋„ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค.

โœ… ๊ฒฐ๊ณผ โ‘ข โ€” ํ•„์š”ํ•œ ๋งŒํผ ํŽผ์ณ ๋ณด๋Š” ํƒ์ƒ‰

lore wiki snapshot                          # ์ €์žฅ๋œ ๊ฒ€์ƒ‰ ํŒ๋ณธยท๋งˆ์ง€๋ง‰ ๊ฒ€์ฆ ์‹œ๊ฐ ์กฐํšŒ
lore wiki prepare                           # ํ˜„์žฌ ์›๋ณธ์„ ๊ฒ€์ฆํ•˜๊ณ  ๊ฒ€์ƒ‰ ํŒ๋ณธ ์ƒ์„ฑ
lore wiki search "Vector DB" --snapshot <id> --limit 10 --json
lore wiki context wiki/concepts/vector-db.md --snapshot <id> --limit 10 # ๊ด€๊ณ„๋ณ„ ๊ทผ๊ฑฐ๋ฅผ ๋‚˜๋ˆ„์–ด ํƒ์ƒ‰
lore wiki browse --type concept --category ai-ml --limit 20 --json
lore wiki search "API ํ† ํฐ" --phrase --snapshot <id> --json
lore wiki search "์ธ์ฆ์ •๋ณด" --spacing --snapshot <id> --json
lore wiki browse --tag security --tag ์ธ์ฆ์ •๋ณด --snapshot <id> --json
lore wiki read wiki/concepts/vector-database.md # ๋ชฉ์ฐจ์™€ revision ํ™•์ธ โ†’ ํ•„์š”ํ•œ section ์„ ํƒ
lore wiki links wiki/concepts/vector-database.md --limit 20
lore wiki citations wiki/concepts/vector-database.md --snapshot <id> --limit 20
lore wiki reviews        # ํ˜„์žฌ ๋ฏธํ•ด๊ฒฐ ํŒ๋‹จ์„ ๋ณ„๋„๋กœ ํ™•์ธ

Markdown์ด ์ง€์‹์˜ ์ •๋ณธ์ด๊ณ  .lorekeeper/search.sqlite๋Š” ์žฌ์ƒ์„ฑ ๊ฐ€๋Šฅํ•œ ํƒ์ƒ‰ ๊ณ„์ธต์ž…๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ์ด๋ฆ„ยท๋ณ„์นญยท์งง์€ ๋ณธ๋ฌธยท์ถœ์ฒ˜ ์‹๋ณ„ ์ •๋ณด๋กœ ํ›„๋ณด๋ฅผ ์ขํžˆ๊ณ , ์„ ํƒํ•œ ํŽ˜์ด์ง€์˜ ์ ˆยท๊ด€๊ณ„ยท๊ทผ๊ฑฐยท๋ณด์กด ์›๋ณธ์„ ์ฐจ๋ก€๋กœ ์ฝ์Šต๋‹ˆ๋‹ค. ๋ณธ๋ฌธ์˜ ์ •ํ™•ํ•œ ๋ฌธ์ž์—ด๊ณผ ์ •๊ทœ์‹์€ wiki search --body์™€ --regex๋กœ ์ฐพ์Šต๋‹ˆ๋‹ค. ๋“ฑ๋ก๋œ ์ด๋ฆ„์˜ ๋„์–ด์“ฐ๊ธฐ ์ฐจ์ด๋Š” name-variant ํ›„๋ณด๋กœ ์ฐพ์œผ๋ฉฐ ์ •ํ™•ํ•œ ์ด๋ฆ„ ์†Œ์œ ๊ถŒ์€ ๋ฐ”๊พธ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. --phrase๋Š” ์—ฐ์† ๊ตฌ์ ˆ์„, --spacing์€ ๊ฐ™์€ ๋ณธ๋ฌธ ๋ธ”๋ก ์•ˆ์˜ ๋„์–ด์“ฐ๊ธฐ ์ฐจ์ด๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. ๋ณ„๋„ ๋ฌธ๋‹จยท๋ชฉ๋ก ํ•ญ๋ชฉยทํ‘œ ์…€์„ ์ด์–ด ๋ถ™์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. HTML ํ‘œ๋Š” ์…€ ์ˆœ์„œ์™€ ๋นˆ ์…€์„ ๋ณด์กดํ•˜๋ฉฐ, ๋ณ‘ํ•ฉ ์…€ยท์ค‘์ฒฉ ํ‘œ๋Š” HTML ๊ตฌ์กฐ๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ด ํ‘œ์˜ ํ…์ŠคํŠธ๋„ ๊ฐ™์€ ๊ฒฝ๊ณ„๋กœ ๊ฒ€์ƒ‰ํ•˜๊ณ , ํƒœ๊ทธยท๋งํฌ ์ฃผ์†Œยท์Šคํฌ๋ฆฝํŠธยท์Šคํƒ€์ผ์€ ๊ฒ€์ƒ‰ ๋ณธ๋ฌธ์—์„œ ์ œ์™ธํ•ฉ๋‹ˆ๋‹ค. ํƒœ๊ทธ๋Š” ์ฃผ์ œ๋ณ„ AND ํ•„ํ„ฐ์ด๋ฉฐ ๋ณด์กด๋œ ์ˆ˜๋™ ์›๋ฌธ์˜ ํƒœ๊ทธ๋„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ๋ณ„์นญ์€ ๊ฐ™์€ ๋Œ€์ƒ์˜ ์ด๋ฆ„์ด๊ณ  ํƒœ๊ทธ๋Š” ๋ถ„๋ฅ˜์ด๋ฏ€๋กœ ์„œ๋กœ ๋Œ€์‹ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฒ€์ƒ‰ ์ˆœ์œ„๋‚˜ ์ถœ์ฒ˜ ์ˆ˜๋Š” ์‚ฌ์‹ค์˜ ์‹ ๋ขฐ๋„ ์ ์ˆ˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. wiki citations๋Š” ๊ทธ๋ž˜ํ”„๊ฐ€ ๋„์ถœํ•œ ์ •ํ™•ํ•œ ๊ฐœ๋… ๊ทผ๊ฑฐ๋ฅผ SQLite์—์„œ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜ ๋งํฌ ๋ชฉ๋ก๊ณผ ๊ตฌ๋ถ„๋˜๋ฉฐ, RSS๋Š” ์„ ํƒํ•œ ๊ธฐ์‚ฌ์™€ ์›๋ณธ ํŒ๋ณธ์„ ๋ณด์กดํ•ฉ๋‹ˆ๋‹ค. total์€ ๊ทผ๊ฑฐ ํ•ญ๋ชฉ ์ˆ˜์ด๊ณ  source_count๋Š” ์ถœ์ฒ˜ ํŽ˜์ด์ง€ ์ˆ˜์ž…๋‹ˆ๋‹ค. ๊ฐ™์€ snapshot๊ณผ next_offset์œผ๋กœ ์ „์ฒด๋ฅผ ์ด์–ด์„œ ์ฝ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์›๋ฌธ์„ ๋‹ค์‹œ ์ฝ์ง€๋Š” ์•Š์œผ๋ฏ€๋กœ, ํŒ๋ณธ์ด ๋ฐ”๋€Œ์—ˆ์œผ๋ฉด ๋‹ค์‹œ ์ค€๋น„ํ•˜๊ณ  ์„ ํƒํ•œ ์›๋ฌธ์„ ๊ฒ€์ฆํ•˜์„ธ์š”. ๊ฐœ๋…์˜ ์ถœ์ฒ˜ ์ ˆ์—๋Š” ๊ณ ์ •๋œ ์กฐํšŒ ์•ˆ๋‚ด๋งŒ ๋‘์–ด ์›๋ฌธ ์ˆ˜๊ฐ€ ๋Š˜์–ด๋„ ๋ณธ๋ฌธ์ด ์ปค์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์•ˆ๋‚ด์˜ EXACT_CONCEPT_PATH๋ฅผ ํ˜„์žฌ ๊ฐœ๋… ์ฃผ์†Œ๋กœ ๋ฐ”๊ฟ” ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด์˜ ์ •ํ™•ํ•œ ์ƒ์„ฑ ๋ชฉ๋ก๋งŒ ์ด ์•ˆ๋‚ด๋กœ ์ „ํ™˜ํ•˜๋ฉฐ, ๋ณ„๋„๋กœ ์ž‘์„ฑํ•œ ์ถœ์ฒ˜ ์„ค๋ช…์€ ๋ณด์กดํ•˜๊ณ  ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค. ์ „ํ™˜์œผ๋กœ ์‹ค์ œ ๋ณธ๋ฌธ ํŒ๋ณธ์ด ๋ฐ”๋€ ๊ธฐ์กด ๊ฒ€ํ† ๋Š” ๋‹ค์‹œ ํ™•์ธํ•  ๋Œ€์ƒ์œผ๋กœ ๋‚จ์Šต๋‹ˆ๋‹ค. ์ดํ›„ ์ถœ์ฒ˜ ์ฆ๊ฐ€๋Š” ์•ˆ๋‚ด ๋ณธ๋ฌธ์„ ๋ฐ”๊พธ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ๊ฒ€์ƒ‰์€ ํ™œ์„ฑ ์ง€์‹๋งŒ ๋ณด์—ฌ ์ค๋‹ˆ๋‹ค. --knowledge-status retired|all๋กœ ๋น„ํ™œ์„ฑ ํ•ญ๋ชฉ์„ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ฃผ์†Œยท๋ณธ๋ฌธยท์ธ์šฉยทํŒ๋‹จ ์ด๋ ฅ์€ ๋ณด์กด๋ฉ๋‹ˆ๋‹ค. ์ถœ์ฒ˜ ํ•˜๋‚˜๋‚˜ ์˜ค๋ž˜๋œ ๋‚ ์งœ๋งŒ์œผ๋กœ ๋น„ํ™œ์„ฑํ™”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์˜ reviews๋Š” ํ•ด๋‹น ์ง€์‹์„ ํ‰๊ฐ€ํ•˜๋Š” ๊ฒ€ํ† ์™€ ๊ทธ ๊ทผ๊ฑฐ ํŒ๋ณธ์˜ ๋ณ€๊ฒฝ ์—ฌ๋ถ€๋ฅผ ๋ณด์—ฌ ์ค๋‹ˆ๋‹ค. ๊ฒ€ํ†  ์ฃผ์ œ๋ฅผ ์ง€์ •ํ•˜๋Š” review.subjects๋Š” ์ธ์šฉ์ด๋‚˜ ๋…๋ฆฝ ์ฆ๊ฑฐ ์ˆ˜๋ฅผ ๋Š˜๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

--snapshot์€ ์ค€๋น„ ์‹œ์ ์˜ ๋‚ด์šฉ์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ ํ›„ ๋‹ค์‹œ ์ค€๋น„ํ•˜๊ณ , ๊ทผ๊ฑฐ๋ฅผ ์ฝ์„ ๋•Œ๋Š” ๋ฐ˜ํ™˜๋œ revision์œผ๋กœ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ํŽ˜์ด์ง€/๋งํฌ ๋ชฉ๋ก์€ next_offset์œผ๋กœ ์ด์–ด์„œ ์ฝ์Šต๋‹ˆ๋‹ค. ์Šค๋ƒ…์ƒท ๋งํฌ ์กฐํšŒ์—๋Š” ๊ฐ™์€ snapshot์„ ์‚ฌ์šฉํ•˜๋ฉฐ ์‹ค์‹œ๊ฐ„ --revision์„ ํ•จ๊ป˜ ์ง€์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

index.md๋Š” ์ž‘์€ ์ง„์ž… ์•ˆ๋‚ด์ด๋ฉฐ, ๋ชฉ๋กยท์ž‘์„ฑ์ผ์ˆœ ํƒ์ƒ‰ยท๋งํฌ์™€ ์—ญ๋งํฌ๋Š” SQLite ๊ฒ€์ƒ‰ ์Šค๋ƒ…์ƒท์œผ๋กœ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. --snapshot์„ ์ƒ๋žตํ•œ ๊ฒ€์ƒ‰ยท๋ชฉ๋ก ์กฐํšŒ๋Š” ํ˜„์žฌ Markdown์„ ์ฝ์Šต๋‹ˆ๋‹ค. ์ž‘์„ฑ์ผ์ˆœ ์กฐํšŒ์˜ created๋Š” ์ˆ˜์ง‘์ผ๊ณผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Obsidian์—์„œ๋Š” ์›๋ž˜ ์ง€์‹ ํŽ˜์ด์ง€์˜ ๋งํฌ์™€ ๊ฒ€์ƒ‰์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ถฉ๋Œ์€ ๊ฐ™์€ ์กฐ๊ฑด์—์„œ ์„œ๋กœ ์–‘๋ฆฝํ•  ์ˆ˜ ์—†๋Š” ์ฃผ์žฅ์ธ์ง€ ๊ทผ๊ฑฐ๋ฅผ ์ฝ๊ณ  ํŒ๋‹จํ•ฉ๋‹ˆ๋‹ค. ๋‚ ์งœ๊ฐ€ ์ตœ์‹ ์ด๊ฑฐ๋‚˜ ์ถœ์ฒ˜๊ฐ€ ๋งŽ๋‹ค๋Š” ์ด์œ ๋กœ ์ž๋™ ํ•ด๊ฒฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. wiki reviews๋กœ ํ˜„์žฌ ์—ด๋ฆฐ ๊ฒ€ํ† ๋ฅผ ์ฐพ๊ณ , ์ฆ๊ฑฐ๊ฐ€ ๋ฐ”๋€ ํ•ด๊ฒฐ ๊ธฐ๋ก์€ ๊ณผ๊ฑฐ ํŒ๋‹จ์„ ๋ณด์กดํ•œ ์ฑ„ ์žฌ๊ฒ€ํ† ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์•ฝ ํŒŒ์ดํ”„๋ผ์ธ์˜ queue check์™€ wiki reviews --check๋Š” ๋ฏธ์™„๋ฃŒ ์ž‘์—…ยท์ฆ๊ฑฐ ๋ณ€๊ฒฝ์„ ๊ฒ€์‚ฌํ•˜์ง€๋งŒ, ์˜๋ฏธ์  ์ง„์‹ค ์ „์ฒด๋ฅผ ์ฆ๋ช…ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

์‹ค์ œ ์žฌ๊ฒ€ํ†  ์ „์—๋Š” lore wiki evidence --archive <๊ฒ€ํ†  ๊ฒฝ๋กœ>๋กœ ์ด์ „ ํŒ๋‹จ์„ ๋ณด์กดํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ ๊ทผ๊ฑฐ๋ฅผ ์ฝ๊ณ  ๋ณด๊ด€ํ•œ ๋‹ค์Œ review.evidence๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๊ต์ฒดํ•˜๊ณ , ๋‚ ์งœยทํŒ๋‹จยท์ด์ „ ๋ณด๊ด€๋ณธ ๊ฒฝ๋กœ๋ฅผ ๋ณธ๋ฌธ์— ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ํŒ๋‹จ์„ ์žฌ๊ฒ€ํ† ํ•˜์ง€ ์•Š์€ ์ฑ„ revision๋งŒ ์ƒˆ ๊ฐ’์œผ๋กœ ๋ฐ”๊พธ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

โœ… ๊ฒฐ๊ณผ โ‘ฃ โ€” ์ง€์‹ ๊ทธ๋ž˜ํ”„๊ฐ€ ํ˜•์„ฑ๋ฉ๋‹ˆ๋‹ค

lore graph cluster๋Š” ๊ตฐ์ง‘์„ ๋งŒ๋“ค๊ณ , suggest-links๋Š” ๊ณต๋™์ธ์šฉ์„ ์ฐจ์ˆ˜๋กœ ์ •๊ทœํ™”ํ•œ Adamic-Adar ์ ์ˆ˜๋กœ ์—ฐ๊ฒฐ ํ›„๋ณด๋ฅผ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค. ์˜๋ฏธ ๊ด€๊ณ„๋Š” ์›๋ฌธ ๊ทผ๊ฑฐ๋ฅผ ๊ฒ€ํ† ํ•ด ํ™•์ •ํ•ฉ๋‹ˆ๋‹ค:

graph TD
    RAG["RAG"]:::ai
    VDB["๋ฒกํ„ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค"]:::ai
    EMB["์ž„๋ฒ ๋”ฉ"]:::ai
    CHK["์ฒญํ‚น"]:::ai
    QR["์งˆ์˜ ์žฌ์ž‘์„ฑ"]:::ai
    COS["์ฝ”์‚ฌ์ธ ์œ ์‚ฌ๋„"]:::ai
    PG["pgvector"]:::infra
    HN["HNSW"]:::infra

    RAG --- VDB
    RAG --- CHK
    RAG --- QR
    VDB --- EMB
    VDB --- PG
    VDB --- HN
    EMB --- COS
    CHK --- EMB

    classDef ai fill:#eef2ff,stroke:#6366f1,color:#1e1b4b
    classDef infra fill:#ecfeff,stroke:#06b6d4,color:#083344
Loading

๐Ÿ“ˆ ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด โ€” ๋ณต๋ฆฌ

flowchart LR
    D["๋งค์ผ<br/>์ผ์ผ ์ˆ˜์ง‘ + ๊ฐœ๋… ์ถ•์ "] --> W["์ฃผ๊ฐ„<br/>ํ…Œ๋งˆ ํ•ฉ์„ฑ ยท ์„ฑ๊ณผ ๋ฆฌ๋ทฐ"]
    W --> Mo["์›”๊ฐ„<br/>๋ฆฌ๋ทฐ"]
    Mo --> Q["๋ถ„๊ธฐ<br/>๋ฆฌ๋ทฐ"]
    Q --> Y["์—ฐ๊ฐ„<br/>๋ฆฌ๋ทฐ"]
    style D fill:#f0fdf4,stroke:#22c55e
    style Y fill:#fef2f2,stroke:#ef4444
Loading

๋งค์ผ์˜ ์ˆ˜์ง‘์ด ๊ฐœ๋… ๊ทธ๋ž˜ํ”„๋ฅผ ํ‚ค์šฐ๊ณ , ํ•ฉ์„ฑ์ด ๊ทธ๊ฒƒ์„ ์ ์  ๋†’์€ ๊ณ ๋„์—์„œ ์š”์•ฝํ•ฉ๋‹ˆ๋‹ค. ์ผ์ผ โ†’ ์ฃผ๊ฐ„ โ†’ ๋ถ„๊ธฐ โ†’ ์—ฐ๊ฐ„์œผ๋กœ ๊ฐˆ์ˆ˜๋ก ์ด๋ฏธ ์Œ“์ธ ๊ฒƒ์„ ๋‹ค์‹œ ์“ฐ์ง€ ์•Š๊ณ  ๊ทธ ์œ„์— ๋ˆ„์ ๋ฉ๋‹ˆ๋‹ค.


์†Œ์Šค

ํƒ€์ž… ์šฉ๋„ ์ธ์ฆ
gmail ๋ฉ”์ผ ๋‹ค์ด์ œ์ŠคํŠธ (๋ผ๋ฒจ/๋ฐœ์‹ ์ž๋กœ ํ•„ํ„ฐ) Google OAuth
slack-channel ์ฑ„๋„ ์ „์ฒด = ํŒ€ ํ™œ๋™ (์Šค๋ ˆ๋“œยท๋ด‡ํ•„ํ„ฐยทwatch_users) Slack ํ† ํฐ
slack-search ํ‚ค์›Œ๋“œ ํŠธ๋ Œ๋“œ ๊ฒ€์ƒ‰ Slack user ํ† ํฐ
jira ๊ทธ๋‚  ์ž‘์—…ํ•œ ์ด์Šˆ ์Šค๋ƒ…์ƒท (ADFโ†’Markdown) Jira API
confluence CQL๋กœ ๊ณ ๋ฅธ ์ŠคํŽ˜์ด์ŠคยทํŽ˜์ด์ง€ (์Šคํ† ๋ฆฌ์ง€ ํฌ๋งทโ†’Markdown) Atlassian OAuth ๋˜๋Š” API ํ† ํฐ
google-calendar ์ผ์ • + ํšŒ์˜๋ก(Drive ๋งํฌ ์ž๋™ ์ถ”์ถœ) Google OAuth
google-drive Drive ํด๋”์˜ ํ๋ ˆ์ด์…˜ ๋ฌธ์„œ Google OAuth
rss ๋ฒค๋” ๋ธ”๋กœ๊ทธยท๋‰ด์Šค โ†’ ๊ฐœ๋… (์ธ์ฆ ๋ถˆํ•„์š”, ๋‹ค์ค‘ ํ”ผ๋“œ) ์—†์Œ
nodex ํ”„๋กœ์ ํŠธ ์ €์žฅ์†Œ๊ฐ€ ์ง์ ‘ ์“ด ๊ฒฐ์ •ยทํ•™์Šต ๊ธฐ๋ก โ†’ ๊ฐœ๋… (nodex.toml๊ณผ nodex >=0.60,<0.61 ํ•„์š”; ์‹คํ–‰ ํŒŒ์ผยท๊ทผ๊ฑฐ ๋ฒ„์ „ ์„ค์ •) ์—†์Œ
manual inbox/์˜ Markdownยทํ…์ŠคํŠธยทHTML, ์„ ํƒ์  DOCXยทXLSXยทPDFยท์ด๋ฏธ์ง€ OCR ์†Œ์Šค ์ธ์ฆ ์—†์Œ; ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ณ€ํ™˜์€ ๋ณ„๋„ ๋Ÿฐํƒ€์ž„
tasks ๋‚ด๊ฐ€ ๋๋‚ธ ์ž‘์—… โ€” lore task๋กœ ๋‹ซ์€ ํ•ญ๋ชฉ์ด ๊ทธ๋‚ ์˜ ํŽ˜์ด์ง€๊ฐ€ ๋จ ์—†์Œ

์†Œ์Šค ํ‚ค = vault์˜ ํ•˜์œ„ ํด๋” ์ด๋ฆ„. ๊ฐ™์€ ํƒ€์ž…์„ ์—ฌ๋Ÿฌ ๊ฐœ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: team-slack, ai-news). ์ „์ฒด ์˜ˆ์‹œ๋Š” config.example.yaml.

์™ธ๋ถ€ ์ง€์‹์„ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ์นดํƒˆ๋กœ๊ทธ์˜ ai-news ๋˜๋Š” tech-news ๋ธ”๋ก์„ ์‹ค์ œ ์„ค์ •์— ๋ณต์‚ฌํ•ด ํ™œ์„ฑํ™”ํ•˜์„ธ์š”. ๊ณต์‹ ๋ฐœํ‘œยท๋ชจ๋ธ ๊ธฐ๋ฒ•ยทAI ๊ตฌํ˜„ยท์ œํ’ˆ ํ‰๊ฐ€์™€ ๊ตญ๋‚ด ๊ฐœ๋ฐœ ์‚ฌ๋ก€๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ๋‘๊ณ , ์ถ”๊ฐ€ ์—ฐ๊ตฌ์†Œยท๋‰ด์Šค๋ ˆํ„ฐยท์ง‘๊ณ„ ํ”ผ๋“œ๋Š” ์„ ํƒํ•˜๋„๋ก ๋‚˜๋ˆด์Šต๋‹ˆ๋‹ค. fetch_full_text๋Š” ์งง์€ ํ”ผ๋“œ์˜ ๋ณธ๋ฌธ์„ ๊ฐ€์ ธ์˜ค์ง€๋งŒ ์ ‘๊ทผ ์‹คํŒจ ์‹œ ํ”ผ๋“œ ํ…์ŠคํŠธ๋งŒ ๋‚จ์Šต๋‹ˆ๋‹ค. focus๋Š” ์š”์•ฝยท๊ฐœ๋… ์ถ”์ถœ์˜ ๋ฒ”์œ„์ด๋ฉฐ ์›๋ณธ ์ˆ˜์ง‘์„ ์ฐจ๋‹จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ”ผ๋“œ์˜ ํ˜„์žฌ ๋ชฉ๋ก๊ณผ ์กฐํšŒ ํ•œ๋„๋Š” ์ „์ฒด ๊ณผ๊ฑฐ ์ด๋ ฅ์ด๋‚˜ ์‚ฌ์‹ค์˜ ์ •ํ™•์„ฑ์„ ๋ณด์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


ํ•ต์‹ฌ ๊ฐœ๋…

  • ๊ฒฐ๊ณผ๋ฌผ์€ ํ‰๋ฒ”ํ•œ ๋งˆํฌ๋‹ค์šด โ€” daily/{์†Œ์Šค}/(์›๋ณธ ํƒ€์ž„๋ผ์ธ), wiki/concepts/(๊ฐœ๋…), wiki/documents/(๋ฌธ์„œ), me/(work-logยท์„ฑ๊ณผ๋ฆฌ๋ทฐ), synthesis/(์ฃผ๊ฐ„ ํ…Œ๋งˆ).
  • ์ž๋ฃŒํ™”๋œ ๋ทฐ(materialized view) โ€” ํŽ˜์ด์ง€๋Š” ๋‘ ์ธต. ๊ตฌ์กฐ ์ธต(frontmatterยท์›๋ณธยทํ—ค๋”ฉ)์€ ๋งค ์ˆ˜์ง‘๋งˆ๋‹ค ์žฌ์ƒ์„ฑ, ์˜๋ฏธ ์ธต(์š”์•ฝยท๊ฐœ๋…ยทํ•ฉ์„ฑ)์€ LLM ์†Œ์œ ์ด๋ฉฐ ์žฌ๋ Œ๋”์—๋„ ๋ณด์กด๋ฉ๋‹ˆ๋‹ค. ์ž…๋ ฅ์ด ์•ˆ ๋ฐ”๋€Œ๋ฉด LLM ์ž‘์—… 0๊ฑด(BLAKE3 ํ•ด์‹œ๋กœ ํŒ์ •).
  • ์ž…๋ ฅ๊ณผ ์žฌ์ฒ˜๋ฆฌ โ€” ์ž…๋ ฅ ํ•ด์‹œ๊ฐ€ ๊ฐ™์œผ๋ฉด ์™„๋ฃŒ๋œ LLM ๊ฒฐ๊ณผ๋ฅผ ์žฌ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์žฌ์ˆ˜์ง‘์€ ์›๊ฒฉ ์ˆ˜์ •ยท์‚ญ์ œ์™€ ์กฐํšŒ ๋ฒ”์œ„์˜ ์˜ํ–ฅ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค. RSS ์ด๋ฒคํŠธ ๋กœ๊ทธ๋Š” ํ”ผ๋“œ์—์„œ ๋ฐ€๋ ค๋‚œ ์ˆ˜์ง‘ ํ•ญ๋ชฉ์„ ๋ณด์กดํ•˜๋ฉฐ, ๊ณผ๊ฑฐ ์ž…๋ ฅ ๊ทธ๋Œ€๋กœ์˜ ์žฌํ•ฉ์„ฑ์€ ๋ณด๊ด€๋œ ํ ์ž…๋ ฅ์ด ์žˆ์„ ๋•Œ๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ํ˜„์žฌ๋งŒ ์‹ค์ฒดํ™” โ€” ๋ฏธ๋ž˜ ๋‚ ์งœ๋Š” ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์ง€ ์•Š์Œ(forecast๋Š” ์ง€์‹์ด ์•„๋‹˜). ๋‚ ์งœ๊ฐ€ ์˜ค๋ฉด ์ง€์‹์ด ๋ฉ๋‹ˆ๋‹ค.
  • vault์˜ ์–ธ์–ด๋Š” ์„ค์ •์ด ์ •ํ•œ๋‹ค โ€” vault.locale(ko | en)์€ ๋ผ๋ฒจ๋งŒ ๋ฐ”๊พธ๋Š” ์Šค์œ„์น˜๊ฐ€ ์•„๋‹ˆ๋ผ Lorekeeper๊ฐ€ ๋ง๋ถ™์ด๋Š” ๋ชจ๋“  ๋ฌธ์žฅ์˜ ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ์š”์•ฝยท์ฃผ๊ฐ„ ํ…Œ๋งˆยท๊ฐœ๋… ์ •์˜ยทํƒ๊ตฌ ํŽ˜์ด์ง€๊ฐ€ ๊ทธ ์–ธ์–ด๋กœ ์“ฐ์ด๊ณ , ๊ฐœ๋…์˜ ์ด๋ฆ„์€ ๊ทธ ๊ฐœ๋…์„ ์“ด ์ถœ์ฒ˜๊ฐ€ ์ ์€ ํ˜•ํƒœ๋ฅผ ๊ทธ๋Œ€๋กœ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค โ€” ๋ฒˆ์—ญํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ์ถœ์ฒ˜๊ฐ€ ๋‹ค๋ฅธ ์–ธ์–ด๋กœ ์ ์€ ์šฉ์–ด๋Š” ๊ทธ ์ฒ ์ž๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์›๋ฌธ๋„ ๋ฒˆ์—ญํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋ž˜ํ”„๊ฐ€ ๋ถ€๊ธฐ๋ฅผ ํ•œ๋‹ค โ€” backlinks-sync(๊ฐœ๋…์˜ ์ธ์šฉยท์นด์šดํŠธยท์š”์•ฝ ์ž…๋ ฅ ์žฌ๋„์ถœ, ๊ทผ๊ฑฐ๊ฐ€ ๋ฐ”๋€ ์š”์•ฝ์€ ํ๋กœ), lint(๊ณ ์•„ยท๊นจ์ง„๋งํฌยท์ค‘๋ณต๊ฐœ๋…), merge(์ค‘๋ณต ๊ฐœ๋… ํ†ตํ•ฉ), cluster/suggest-links(๊ตฐ์ง‘ยท์—ฐ๊ฒฐ ํ›„๋ณด ์ œ์•ˆ).

๋ช…๋ น์–ด

lore validate                 # config ์ ๊ฒ€ (๋„คํŠธ์›Œํฌ ์—†์Œ)
lore ingest [์†Œ์Šค]            # ์ˆ˜์ง‘ (์ „์ฒด ๋˜๋Š” ๋‹จ์ผ ์†Œ์Šค)
lore ingest --dry-run         # vault ๋ณ€๊ฒฝ ์—†์ด ๋ฏธ๋ฆฌ๋ณด๊ธฐ
lore ingest --date 2026-06-01 # ํŠน์ • ๋‚ ์งœ ์žฌ์‹ค์ฒดํ™”(๋ฐฑํ•„/๋ณต๊ตฌ)
lore synthesis weekly         # ์ฃผ๊ฐ„ ํ•ฉ์„ฑ + ๊ฐœ์ธ ๋ฆฌ๋ทฐ (monthly/quarterly/annual)
lore status                   # ํ•˜์œ„์‹œ์Šคํ…œ๋ณ„ ํ•œ ์ค„ ์š”์•ฝ (์†Œ์Šค๋ณ„ ์‹œ๊ฐ์€ lore health)
lore health                   # ์ˆ˜์ง‘์ด ๋ฐ€๋ฆฐ ์†Œ์Šค ๊ฒฝ๊ณ  (ingest.schedule ๊ธฐ์ค€)
lore health --json            # ๊ฐ™์€ ํŒ์ •์„ ๊ณ„์•ฝ์œผ๋กœ โ€” ์Šคํ‚ฌ์ด ์ฝ๋Š” ํ˜•ํƒœ
lore schedule                 # ์˜ˆ์•ฝ ์ •์˜ ์ถœ๋ ฅ โ€” OS ๋“ฑ๋ก์€ ๋ณ„๋„
lore brief --date yesterday   # ๊ทธ๋‚ ์˜ ์ง€์‹ โ€” ์ƒˆ๋กœ ์•ˆ ๊ฒƒ(ํ•œ ์ค„์”ฉ)๊ณผ ๋‹ค์‹œ ๋ณธ ๊ฒƒ(์ด๋ฆ„๋งŒ)
lore fetch <url>              # ๋งํฌ ํ•˜๋‚˜๋ฅผ ์ฝ์–ด inbox์— ์ €์žฅ(์ถœ์ฒ˜ ์ฃผ์†Œ๋ฅผ ๋‹ฌ์•„์„œ)
lore wiki search <์งˆ์˜>       # ์งˆ์˜๊ฐ€ ๋‹ฟ๋Š” ํŽ˜์ด์ง€ โ€” ์ด๋ฆ„์œผ๋กœ ๋งž์•˜๋Š”์ง€ ๋ณธ๋ฌธ์—์„œ ๋งž์•˜๋Š”์ง€๊นŒ์ง€
                              # ๋“ฑ๋ก๋œ alias๋กœ ์“ฐ์ธ ๋ณธ๋ฌธ๊นŒ์ง€ ๊ฒ€์ƒ‰ (`์ง€์‹๊ทธ๋ž˜ํ”„`โ†”`์ง€์‹ ๊ทธ๋ž˜ํ”„`)
lore wiki browse --category ai-ml --type concept --limit 20 --json # ๋ถ„๋ฅ˜๋ณ„ ํƒ์ƒ‰; next_offset์œผ๋กœ ๋‹ค์Œ ํŽ˜์ด์ง€
lore graph --json neighbors wiki/concepts/example.md # ์ถœ์ฒ˜๋ฅผ ํฌํ•จํ•œ ์–‘๋ฐฉํ–ฅ ๋งํฌ ํƒ์ƒ‰
lore graph --json neighbors wiki/concepts/example.md --type concept # ๊ด€๋ จ ๊ฐœ๋…๋งŒ ํƒ์ƒ‰; --type document๋กœ ์›๋ฌธ ์กฐํšŒ
lore wiki snapshot            # ์›๋ณธ ์žฌํƒ์ƒ‰ ์—†์ด ์ €์žฅ๋œ ํŒ๋ณธ ์กฐํšŒ
lore wiki prepare             # ํ˜„์žฌ ์›๋ณธ ์ „์ฒด ๊ฒ€์ฆ; ๋ฐ˜๋ณต ๊ฒ€์ƒ‰์— --snapshot <id> ์‚ฌ์šฉ
lore wiki search "์ •ํ™•ํ•œ ๋ฌธ์ž์—ด" --body --json # ์›๋ฌธ ํ–‰ยท๋ฌธ๋งฅยทํŒ๋ณธ; ์ •๊ทœ์‹์€ --regex
lore wiki search "์ •ํ™•ํ•œ ๋ฌธ์ž์—ด" --body --snapshot <id> --json # ์ค€๋น„ํ•œ ํŒ๋ณธ์—์„œ ๋ฐ˜๋ณต ๊ฒ€์ƒ‰
lore wiki document-identity plan --source ID --manifest /tmp/identity.json # ๊ธฐ์กด ์‚ฌ๋ณธ์˜ ์‹๋ณ„์ž ์ด๊ด€ ๊ฒ€์ฆ
lore wiki read wiki/concepts/example.md # ๋ชฉ์ฐจ โ†’ --section ID; ํ›„์† ์ฝ๊ธฐ์— --revision ์‚ฌ์šฉ
lore wiki original wiki/documents/example.md # ๋ณด์กด๋œ ์ˆ˜๋™ ์›๋ณธยท์ฒจ๋ถ€ ๋ชฉ๋ก; --member๋กœ ์„ ํƒ ์กฐํšŒ
lore wiki original daily/tech-news/2026-10-18.md # RSS ์ˆ˜์ง‘ ์›๋ฌธ ๋ชฉ๋กยทauthorityยทrevision
lore wiki original daily/tech-news/2026-10-18.md --revision REV --event EVENT_ID --text-offset 0 --text-limit 4096
lore wiki links wiki/concepts/example.md --limit 20 # ์—ฐ๊ฒฐ๋œ ์›๋ฌธ ํ–‰ยท์„ค๋ช…ยท๋ฆฌ๋น„์ „ ์กฐํšŒ
lore wiki citations wiki/concepts/example.md --snapshot <id> --limit 20 # ์ •ํ™•ํ•œ ์ „์ฒด ๊ทผ๊ฑฐ๋ฅผ ํŽ˜์ด์ง€ ๋‹จ์œ„๋กœ ์กฐํšŒ
lore wiki provenance wiki/documents/example.md --snapshot <id> # ์ •ํ™•ํ•œ ๋ฌธ์„œ ID๋กœ ์„ ์–ธ ๊ด€๊ณ„ยทํ›„์† ๋ฌธ์„œ ์กฐํšŒ
lore wiki curate --file plan.json --dry-run # ๊ทผ๊ฑฐ ํŒ๋ณธยท์ด๋ฆ„ยท๋ถ„๋ฅ˜ยทํƒœ๊ทธยท๊ฒ€ํ†  ๊ธฐ๋ก ๊ฒ€์ฆ; ์˜ต์…˜์„ ๋นผ๋ฉด ์›์ž์ ์œผ๋กœ ๋ฐ˜์˜
lore wiki concepts            # ๊ฐœ๋… ๋ชฉ๋ก
lore resolve <name>           # ์–ด๋–ค ๊ฐœ๋… ํŽ˜์ด์ง€๊ฐ€ ๊ทธ ์ด๋ฆ„์„ ๊ฐ–๋Š”์ง€ (0 ์†Œ์œ  / 1 ์—†์Œ / 2 ์ค‘๋ณต)
lore graph lint               # ๊ตฌ์กฐ ๊ฑด๊ฐ•๊ฒ€์ง„(๊ณ ์•„ยท๊นจ์ง„๋งํฌยท์ค‘๋ณต๊ฐœ๋…ยทโ€ฆ)
lore graph suggest-links --limit 20 # ๊ด€๊ณ„ ํ›„๋ณด; next_offset๊ณผ --revision์œผ๋กœ ์ด์–ด์„œ ์กฐํšŒ
lore graph cluster            # ํ† ํ”ฝ ์ปค๋ฎค๋‹ˆํ‹ฐ(Louvain)
lore graph backlinks-sync     # ๊ฐœ๋…์˜ ## Sourcesยท์ธ์šฉ์ˆ˜ยท์š”์•ฝ ์ž…๋ ฅ ์žฌ๋„์ถœ(๋ณ€ํ•œ ์š”์•ฝ์€ ํ๋กœ)
lore graph merge <from> <into># ์ค‘๋ณต ๊ฐœ๋… ํ†ตํ•ฉ
lore graph retract-citation <์›๋ฌธ.md> <๊ฐœ๋….md> --revision <file_revision> --dry-run # ๊ฒ€ํ† ํ•œ ์˜ค์ธ์šฉ ์ฒ ํšŒ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
lore graph normalize --fix    # ๋งํฌ ํ‘œ๊ธฐ ์ •๊ทœํ™”
lore doctor                   # ํŽ˜์ด์ง€ ๊ณ„์•ฝ ๊ฐ์‚ฌ(ํ…์ŠคํŠธ ์ฒญ๊ฒฐ๋„ยท๋ฏธ๋‹ต๋ณ€ ์„น์…˜ยท์ž๊ฒฉ์ฆ๋ช…)
lore extract status           # ํ”„๋กœ์ ํŠธ ์ง€์‹ ์ถ”์ถœ์ด ์ €์žฅ์†Œ๋ณด๋‹ค ์–ผ๋งˆ๋‚˜ ๋’ค์ฒ˜์กŒ๋Š”์ง€
lore maintenance              # ์ง€๋‚œ ์šด์˜ ์ด๋ ฅยท๊ฒŒ์‹œ ์™„๋ฃŒ ์ž‘์—… ์บ์‹œ ์ •๋ฆฌ; ๋ฏธ์™„๋ฃŒยท์ฐธ์กฐ ์ค‘ ์ž‘์—… ๋ณด์กด
lore queue status / prune     # LLM ์ž‘์—… ํ ์ƒํƒœ / ์ฃฝ์€ ์ž‘์—… ์ •๋ฆฌ
lore queue apply              # ๊ฒ€์ฆ๋œ ์š”์•ฝยทํ…Œ๋งˆยท์ •์ œยท๊ฐœ๋… ๊ฒฐ๊ณผ๋ฅผ ์ค‘์•™ ์ ์šฉ
lore queue check              # ๋ฏธ์™„๋ฃŒ ์ž‘์—…ยท๋ฏธ๊ฒŒ์‹œ ๊ฒฐ๊ณผยท์ค‘๋‹จ๋œ ๋ณ€๊ฒฝ์„ JSON์œผ๋กœ ๊ฒ€์‚ฌ
lore wiki reviews --check     # ์ฆ๊ฑฐ ๋ณ€๊ฒฝยท์ž˜๋ชป๋œ ๊ฒ€ํ†  ๊ฒ€์‚ฌ(๋ฏธํ•ด๊ฒฐ ๊ฒ€ํ† ๋Š” ํ†ต๊ณผ)
lore queue packet --task-id ID # ๋ณ‘๋ ฌ ์ž‘์—…์šฉ ์ถœ์ฒ˜ยทrevision ๋ฌถ์Œ (๋ณธ๋ฌธ์€ --include-content)
lore queue regenerate --task-id ID --dry-run # ๋ณด๊ด€ ์ž…๋ ฅ ์žฌํ•ฉ์„ฑ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
lore queue count              # current ์ž‘์—… ์ˆ˜๋งŒ ์ •์ˆ˜๋กœ ์ถœ๋ ฅ(์Šคํฌ๋ฆฝํŠธ์šฉ)
lore work plan --task-id ID    # ๋Œ€์šฉ๋Ÿ‰ ๋ณด๊ด€ ์ž…๋ ฅ์˜ ๊ตฌ๊ฐ„ ์ฒ˜๋ฆฌ ๊ณ„ํš (๊ฐ์‚ฌ๋Š” --path)
lore work status WORK_ID      # ์™„๋ฃŒ ๊ตฌ๊ฐ„ยท์žฌ๊ฐœํ•  ์ž‘์—… ํ™•์ธ
lore work read WORK_ID NODE_ID # ํ•ด๋‹น ๊ตฌ๊ฐ„ ๋˜๋Š” ๋‘ ํ•˜์œ„ ๊ฒฐ๊ณผ๋งŒ ์ฝ๊ธฐ
lore work result WORK_ID      # ์™„๋ฃŒ๋œ ํ†ตํ•ฉ ๊ฒฐ๊ณผ๋ฅผ ์ตœ์ข… ๊ฒŒ์‹œ์šฉ์œผ๋กœ ์กฐํšŒ
lore config vault-root        # vault ์ ˆ๋Œ€๊ฒฝ๋กœ๋งŒ ์ถœ๋ ฅ(์Šคํฌ๋ฆฝํŠธ์šฉ)
lore schema                   # wiki/AGENTS.md(ํŽ˜์ด์ง€ ํฌ๋งท ์Šคํ‚ค๋งˆ) ์ƒ์„ฑ

lore fetch๋Š” HTTP Content-Type์— ๋”ฐ๋ผ HTMLยทMarkdownยท์ผ๋ฐ˜ ํ…์ŠคํŠธ๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค. text/plain์œผ๋กœ ์ œ๊ณต๋˜๋Š” .mdยท.markdown ํŒŒ์ผ๋„ Markdown์œผ๋กœ ๋ณด์กดํ•˜๋ฉฐ, ๋งํฌยท์ด๋ฏธ์ง€์˜ ์ƒ๋Œ€ ์ฃผ์†Œ๋Š” ์ตœ์ข… ์‘๋‹ต URL์„ ๊ธฐ์ค€์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ํ˜•์‹ ์„ ์–ธ์ด ์—†๊ฑฐ๋‚˜ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์‘๋‹ต, ์ž˜๋ชป๋œ ๋ฌธ์ž ์ธ์ฝ”๋”ฉ๊ณผ 16 MiB๋ฅผ ๋„˜๋Š” ๋ณธ๋ฌธ์€ ์˜ค๋ฅ˜๋กœ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค. Markdown ์•ˆ์˜ raw HTML ์ฃผ์†Œ๋Š” ๊ทธ๋Œ€๋กœ ๋‚จ์•„ ์ˆ˜๋™ ์›๋ณธ์˜ ์˜์กด์„ฑ ๊ฒ€์‚ฌ ๋Œ€์ƒ์ด ๋ฉ๋‹ˆ๋‹ค.

lore wiki refresh๋Š” SQLite ํƒ์ƒ‰ ์Šค๋ƒ…์ƒท๊ณผ ์ž‘์€ index.md ์ง„์ž… ์•ˆ๋‚ด๋ฅผ ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค. ์ง€์‹ ๋ชฉ๋กยท๋‚ ์งœ์ˆœ ์กฐํšŒยท๊ด€๊ณ„ ํƒ์ƒ‰์€ wiki browse/search/links๋กœ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ƒ์„ฑ ๋งˆ์ปค๊ฐ€ ์—†๋Š” ์ง„์ž… ํŒŒ์ผ์€ ๋ณด์กดํ•˜๊ณ  ์ถฉ๋Œ์„ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค. ํƒ์ƒ‰ ์„ธ์…˜์€ wiki snapshot์œผ๋กœ ์ €์žฅ๋œ ID์™€ ์ƒ์„ฑยท๊ฒ€์ฆ ์‹œ๊ฐ์„ ์กฐํšŒํ•œ ๋’ค wiki browse/search/links --snapshot ID๋ฅผ ๋ฐ˜๋ณตํ•˜๊ณ (links --direction incoming|both), wiki read --revision REV๋กœ ํ˜„์žฌ ์›๋ฌธ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ๋ฌธ์„œ ๋ชฉ๋ก์ด ํ•„์š”ํ•˜๊ฑฐ๋‚˜ ํ˜ธํ™˜๋˜๋Š” ํŒ๋ณธ์ด ์—†์œผ๋ฉด wiki prepare๋กœ ์ „์ฒด ์›๋ณธ์„ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค. ์ €์žฅ๋œ ํŒ๋ณธ์˜ ์‹œ๊ฐ์€ ์™ธ๋ถ€ ํŽธ์ง‘ ์ดํ›„์˜ ์ตœ์‹ ์„ฑ์„ ๋ณด์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. refresh๋„ ์ค€๋น„ํ•œ ID๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ๋ฌธ์„œ์˜ source_record.attributes๋Š” nodex ๊ณต๊ฐœ ์‘๋‹ต์˜ ์›๋ณธ ์†์„ฑ์„ ๋ณด์กดํ•ฉ๋‹ˆ๋‹ค. routine์˜ prompt์ฒ˜๋Ÿผ ๋ณธ๋ฌธ ๋ฐ–์— ์žˆ๋Š” ์ง€์‹๋„ ์š”์•ฝยท์ถ”์ถœ ์ž…๋ ฅ์— ํฌํ•จํ•˜๋ฉฐ, ์†์„ฑ์€ ํ˜„์žฌ ์ž‘์—…์„ ์‹คํ–‰ํ•˜๋ผ๋Š” ์ง€์‹œ๊ฐ€ ์•„๋‹Œ ์ถœ์ฒ˜์˜ ๋‚ด์šฉ์œผ๋กœ ์ฝ์Šต๋‹ˆ๋‹ค.

์ƒˆ RSS ingest๋Š” ๋ถ„๋ฅ˜ ์ „ ์ˆ˜์ง‘ ํ…์ŠคํŠธ๋ฅผ .lorekeeper/evidence/rss/์— ๋ถˆ๋ณ€ ํ•ด์‹œ ์ฃผ์†Œ๋กœ ๋ณด์กดํ•˜๊ณ  daily์˜ source_record.rss_original๋กœ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ณต๊ธ‰์ž์˜ HTTP/XML ์›๋ณธ์ด ์•„๋‹ˆ๋ผ adapter๊ฐ€ ์ทจ๋“ํ•œ ๋ณธ๋ฌธ์ด๋ฉฐ, event_timestamp๋Š” published ๋˜๋Š” updated์—์„œ ์˜จ adapter ์‹œ๊ฐ์ด๋ฉฐ ์ทจ๋“ ์‹œ๊ฐ์ด ์•„๋‹™๋‹ˆ๋‹ค(captured_at: null). wiki original์€ ๋ชฉ๋ก์„ ๋จผ์ € ๋ฐ˜ํ™˜ํ•˜๊ณ , ๋ฐ˜ํ™˜๋œ revision๊ณผ ์ •ํ™•ํ•œ event_id๋กœ ์ œ๋ชฉยท๋นˆ ์ค„ยท๋ณธ๋ฌธ์„ ๋ฌธ์ž ๋‹จ์œ„ ํŽ˜์ด์ง€๋„ค์ด์…˜ํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ ์›๋ฌธ์€ page_bound_collection, ๊ณผ๊ฑฐ ์ด๋ฒคํŠธ ๋กœ๊ทธ์˜ ์ฝ๊ธฐ ์ „์šฉ ๋ฐœ๊ฒฌ์€ legacy_unbound์ž…๋‹ˆ๋‹ค. ํ›„์ž๋Š” ํ•ด๋‹น daily์˜ ๊ณผ๊ฑฐ ์ž…๋ ฅ์ž„์„ ์ฆ๋ช…ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์š”์•ฝ์€ ํ•ด์„์ด๋ฉฐ ์›๋ฌธ์˜ ๋ถ€์žฌ๋ฅผ ์ฆ๋ช…ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ณต๊ธ‰์ž URL์„ ๋‹ค์‹œ ์ฝ์€ ๋‚ด์šฉ๋„ ๋‹น์‹œ ์ˆ˜์ง‘๋ณธ๊ณผ ๊ฐ™๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ƒˆ bound RSS ์ถ”์ถœ์˜ ๊ฐ ์ปจ์…‰์€ LLM์ด ๋ช…์‹œ์ ์œผ๋กœ ์„ ํƒํ•œ event_id์™€ immutable payload revision์„ concept_evidence์— ์ €์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์‚ฌ ์„ ํƒ์ด ์—†์œผ๋ฉด ๊ฒŒ์‹œ๋ฅผ ๊ฑฐ๋ถ€ํ•˜๊ณ , ์ถ”์ถœ ๊ฒฐ๊ณผ๊ฐ€ ๋นˆ ๋ชฉ๋ก์ด๋ฉด ์ •์ƒ ์™„๋ฃŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์„ ํƒ๋งŒ ๊ธฐ์‚ฌ ๋‹จ์œ„ ํ•ฉ์„ฑ ๊ทผ๊ฑฐ๊ฐ€ ๋˜์–ด ๋ฌด๊ด€ํ•œ ์ผ์ผ ์š”์•ฝ ๋ณ€๊ฒฝ์œผ๋กœ ์žฌํ•ฉ์„ฑ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ณผ๊ฑฐ ํŽ˜์ด์ง€์™€ ๊ท€์† ์—†๋Š” ๋งํฌ๋Š” ๊ธฐ์กด ํŽ˜์ด์ง€ guard๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. wiki original ORIGIN --evidence-concept CONCEPT๋กœ ์„ ํƒ ๋ชฉ๋ก์„ ์ฝ๊ณ  --event ID --revision PAYLOAD_REV๋กœ ๋‹น์‹œ ๊ธฐ์‚ฌ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ตœ์‹  manifest์™€ ๋‹ค๋ฅธ ๊ณผ๊ฑฐ ์„ ํƒ๋„ ์ฝ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ˜„์žฌ ์‚ฌ์‹ค์ด๋‚˜ ๋…๋ฆฝ ๊ฒ€์ฆ์„ ๋ณด์žฅํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์ถ”์ถœ์˜ ๋ˆ„๋ฝ์€ ์ฒ ํšŒ๊ฐ€ ์•„๋‹ˆ๊ณ , graph retract-citation์˜ --event/--event-revision์œผ๋กœ ๋ช…์‹œ ์ฒ ํšŒํ•ฉ๋‹ˆ๋‹ค. source_count๋Š” ๊ณ„์† ์›๋ฌธ ํŽ˜์ด์ง€ ์ˆ˜์ž…๋‹ˆ๋‹ค. ์›๋ฌธ ์ €์žฅ ์‹คํŒจ ์‹œ ํŽ˜์ด์ง€๋Š” ๊ทธ ์›๋ฌธ์„ ์ฐธ์กฐํ•˜์ง€ ์•Š์œผ๋ฉฐ dry-run์€ ๋ณด๊ด€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚ ์งœ๋ณ„ ํƒ์ƒ‰์€ lore wiki browse --snapshot ID --sort created --from 2026-01-01 --to 2026-12-31 --json์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. created๋Š” ์ˆ˜์ง‘์ผ์ด ์•„๋‹ˆ๋ผ ์›๋ฌธ ์ž‘์„ฑ์ผ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ ์งœ๊ฐ€ ์—†๊ฑฐ๋‚˜ ์œ ํšจํ•˜์ง€ ์•Š์œผ๋ฉด ์ƒํƒœ๋ฅผ ํ‘œ์‹œํ•˜๊ณ  ๋‚ ์งœ ํ•„ํ„ฐ์—์„œ๋Š” ์ œ์™ธํ•ฉ๋‹ˆ๋‹ค. ๋‚ ์งœ์ˆœ์€ ์ตœ์‹ ๋ถ€ํ„ฐ์ด๋ฉฐ, ํ•„ํ„ฐ๊ฐ€ ์—†์œผ๋ฉด ๋‚ ์งœ ๋ฏธ์ƒ ํ•ญ๋ชฉ์„ ๋งˆ์ง€๋ง‰์— ๋‘ก๋‹ˆ๋‹ค.

์ผ์ƒ์ ์œผ๋กœ ์“ฐ๋Š” ๊ฒƒ๋“ค๋งŒ ์ถ”๋ ธ๋‹ค. ์ „์ฒด ๋ชฉ๋ก์€ lore --help, ๊ฐ ๋ช…๋ น์˜ ํ”Œ๋ž˜๊ทธ๋Š” lore <๋ช…๋ น> --help.


์—์ด์ „ํŠธ ์Šคํ‚ฌ๊ณผ ์‹คํ–‰ ์„ค์ •

์Šคํ‚ฌ ๋ณธ๋ฌธ๊ณผ ์ฐธ๊ณ  ์ž๋ฃŒ์˜ ์›๋ณธ์€ skills/์ž…๋‹ˆ๋‹ค. Claude ์ „์šฉ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” agents/claude.json, Codex ํ˜ธ์ถœ ์ •์ฑ…์€ ํ•„์š”ํ•œ ์Šคํ‚ฌ์˜ agents/openai.yaml์— ๋‘ก๋‹ˆ๋‹ค. ๋ฐฐํฌํ•  ๋•Œ ํ˜ธ์ŠคํŠธ๋ณ„ ์ง„์ž… ํŒŒ์ผ์„ ๋งŒ๋“ค๋ฉฐ, ๊ณตํ†ต ์ ˆ์ฐจ๋ฅผ ๋”ฐ๋กœ ํŽธ์ง‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์Šคํ‚ฌ ํ•˜๋Š” ์ผ
lore-process ํ์˜ ์š”์•ฝยท๊ฐœ๋…ยทํ•ฉ์„ฑยท๊ฒ€ํ†  ๊ฒฐ๊ณผ ์ฒ˜๋ฆฌ์™€ ๊ฒŒ์‹œ ๊ฒ€์ฆ
lore-setup ์†Œ์Šคยท์„ค์ •ยท์ธ์ฆยท์ตœ์ดˆ ์‹คํ–‰ยท์˜ˆ์•ฝ ๋“ฑ๋ก ์•ˆ๋‚ด
lore-wiki query, add, capture, audit, curate, maintain, status
lore-extract ์ €์žฅ์†Œ ์ง€์‹ ์ถ”์ถœ: scan โ†’ run โ†’ audit
lore-ingest ์ˆ˜์ง‘ยทํ•ฉ์„ฑยท์ƒํƒœยท์Šค์ผ€์ค„ CLI ์ž‘์—…
lore-day ํ•  ์ผยท๋ธŒ๋ฆฌํ•‘ยท๋ฆฌ๋งˆ์ธ๋”ยท๋งˆ๊ฐ

Claude Code์—์„œ๋Š” /lore-wiki query ..., Codex์—์„œ๋Š” $lore-wiki๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. lore self deploy --skills user --agent codex๋Š” Codex์—๋งŒ ๋Œ€ํ™”ํ˜• ์Šคํ‚ฌ์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. --agent both๋Š” ๋‘ ํ˜ธ์ŠคํŠธ์— ์„ค์น˜ํ•˜๋ฉฐ, --skills project๋Š” ํ˜„์žฌ ํ”„๋กœ์ ํŠธ ๋ฒ”์œ„์ž…๋‹ˆ๋‹ค. Claude ๊ฒฝ๋กœ๋Š” .claude/skills, Codex ๊ฒฝ๋กœ๋Š” .agents/skills์ž…๋‹ˆ๋‹ค. ๋ฌด์ธ ์‹คํ–‰์€ <data>/skills/<engine>/์˜ ๊ฒ€์ฆ๋œ ๋ฐฐํฌ๋ณธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ˆ„๋ฝยท๋ณ€์กฐ๋œ ํ•„์ˆ˜ ํŒŒ์ผ์€ ์„ธ์…˜ ์‹œ์ž‘ ์ „์— ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค.

์‹คํ–‰๊ธฐ ์ง€์› ๋ฒ”์œ„๋Š” Claude Code >=2.1.303,<3, Codex CLI >=0.163.0,<1์ž…๋‹ˆ๋‹ค. ๋ถ„ํ•  ๊ฒ€์ˆ˜ยท์ถ•์•ฝ ๋‹จ๊ณ„๋Š” ์ฝ์„ JSON์„ ํ‘œ์ค€ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›๊ณ  ๊ตฌ์กฐํ™”๋œ ๊ด€์ฐฐ๋งŒ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. Rust๊ฐ€ ์ž‘์—…ยท๋ฒ”์œ„ยทํ˜„์žฌ ๊ทผ๊ฑฐยท์ถœ๋ ฅ ํ•œ๋„๋ฅผ ๊ฒ€์ฆํ•ด ์ €์žฅํ•˜๋ฉฐ, ๋ชจ๋ธ์ด ๊ฒ€์ˆ˜ ์บ์‹œ๋ฅผ ์ง์ ‘ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Claude๋Š” ๋„๊ตฌ์™€ ์‚ฌ์šฉ์ž ํ™•์žฅ์„ ๋„๊ณ , Codex๋Š” ์ฝ๊ธฐ ์ „์šฉ ์ƒŒ๋“œ๋ฐ•์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋Œ€ํ™”ํ˜• ํƒ์ƒ‰ยท์ตœ์ข… ๊ฒฐ๊ณผ ์ค€๋น„ยท์˜๋ฏธ ๋ณด์ •์€ ํ•„์š”ํ•œ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ณ„๋„ ์—ญํ• ์ž…๋‹ˆ๋‹ค. ์‹คํ–‰ ์˜ˆ์‚ฐ์ด ์ž‘์•„๋„ ํฐ ๋ฌธ์„œ ํ•˜๋‚˜๊ฐ€ ๋งค๋ฒˆ ์ฒซ ์ฐจ๋ก€๋ฅผ ์ฐจ์ง€ํ•˜์ง€ ์•Š๋„๋ก, ์„œ๋กœ ๋‹ค๋ฅธ ๋ฌธ์„œ์˜ ๊ฒ€์ˆ˜ยท์ถ•์•ฝยท์ตœ์ข…ํ™” ๋‹จ๊ณ„๋ฅผ ์ˆœํ™˜ ๋ฐฐ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์ž‘์€ ์š”์ฒญ์€ ๊ทผ๊ฑฐ ์ž…๋ ฅ ํ•œ๋„ ์•ˆ์—์„œ ๋ฌถ๋˜ ๊ฐ™์€ ํŽ˜์ด์ง€์˜ ์ž‘์—…์€ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜๋งŒ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์ฐจ๋ก€๋Š” .lorekeeper/execution-cursor.json์— ์ €์žฅํ•˜๋ฏ€๋กœ ์žฌ์‹คํ–‰์—์„œ๋„ ์ด์–ด์ง€๋ฉฐ, ์†์ƒ๋œ ์ƒํƒœ๋ฅผ ์กฐ์šฉํžˆ ์ดˆ๊ธฐํ™”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ์˜ ๊ธฐ์กด ์ธ์ฆ๊ณผ ์ •์ฑ…์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‘ ์ œํ’ˆ์˜ ๊ถŒํ•œยท์ƒŒ๋“œ๋ฐ•์Šค๋Š” ์„œ๋กœ ๋‹ค๋ฅด๋ฉฐ, Rust์˜ ๊ฒŒ์‹œ ๊ฒ€์ฆ์„ OS ์ ‘๊ทผ ํ†ต์ œ์™€ ๊ฐ™์€ ๋ณด์žฅ์œผ๋กœ ์ทจ๊ธ‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

llm:
  provider: queue
execution:
  default_profile: primary
  work:
    max_input_bytes: 262144
    max_result_bytes: 32768
    max_calls: 64
  profiles:
    primary:
      engine: claude-code
      timeout_seconds: 3600
    reviewer:
      engine: codex
      timeout_seconds: 3600
  operations:
    knowledge: reviewer

์ด ์˜ˆ์—์„œ๋Š” ์ผ์ผ ์ฒ˜๋ฆฌยทํ ์ฒ˜๋ฆฌ๋Š” primary, ์˜๋ฏธ ๊ฐ์‚ฌ๋Š” reviewer๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. --profile ์ง€์ • โ†’ ์ž‘์—…๋ณ„ ์„ค์ • โ†’ ๊ธฐ๋ณธ ํ”„๋กœํ•„ ์ˆœ์„œ๋กœ ์„ ํƒํ•˜๋ฉฐ ๋‹ค๋ฅธ ์‹คํ–‰๊ธฐ๋กœ ์ž๋™ ์ „ํ™˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. timeout_seconds๋Š” ์„ธ์…˜๋ณ„ ์‹คํ–‰ ์˜ˆ์‚ฐ์ž…๋‹ˆ๋‹ค. ๋ฏธ์™„๋ฃŒ ์ž‘์—…์€ ๋ณด์กดํ•˜๊ณ  ์‹คํŒจ๋กœ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค. execution.work๋Š” ์ž‘์—…์ž ์š”์ฒญ JSON๊ณผ ๊ด€์ฐฐ ๊ฒฐ๊ณผ JSON์˜ ๋ฐ”์ดํŠธ ์ˆ˜, ์‹คํ–‰๋‹น ์˜๋ฏธ ์ฒ˜๋ฆฌ ์„ธ์…˜ ํ˜ธ์ถœ ์ˆ˜๋ฅผ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค. ํฐ ์ž…๋ ฅ์€ ํŒ๋ณธ์ด ๊ณ ์ •๋œ ์กฐ๊ฐ์œผ๋กœ ๋‚˜๋ˆ„์–ด ์ƒˆ ์„ธ์…˜์—์„œ ์ฝ๊ณ , ๊ด€์ฐฐ ๊ฒฐ๊ณผ๋„ ์ƒˆ ์„ธ์…˜์—์„œ ๋‹จ๊ณ„์ ์œผ๋กœ ์ข…ํ•ฉํ•ฉ๋‹ˆ๋‹ค. max_calls๋Š” ์ผ์ผยทํ ์ฒ˜๋ฆฌ ์‹คํ–‰๋งˆ๋‹ค, ์ง€์‹ ๊ฐ์‚ฌ์—์„œ๋Š” ๊ฐ ๋ฐฐ์น˜๋งˆ๋‹ค ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์‚ฐ์ด ์†Œ์ง„๋˜๋ฉด ๋ฏธ์™„๋ฃŒ๋กœ ์ค‘๋‹จํ•˜๊ณ  ๊ฒ€์ฆ๋œ ์ž‘์—…์„ ๋‹ค์Œ ์‹คํ–‰์— ๋‚จ๊น๋‹ˆ๋‹ค. ๋ชจ๋ธ์˜ ์ „์ฒด ๋ฌธ๋งฅยทํ† ํฐ ์ˆ˜๋‚˜ ์š”๊ธˆ ํ•œ๋„๋ฅผ ๋œปํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์ž…๋ ฅ์€ ์ตœ์†Œ 4096๋ฐ”์ดํŠธ, ๊ฒฐ๊ณผ๋Š” ์ตœ์†Œ 1024๋ฐ”์ดํŠธ์ด๋ฉด์„œ ์ž…๋ ฅ ํ•œ๋„์˜ 1/4 ์ดํ•˜์—ฌ์•ผ ํ•˜๋ฉฐ ํ˜ธ์ถœ ์ˆ˜๋Š” ์–‘์ˆ˜์ž…๋‹ˆ๋‹ค. ํ”„๋กœํ•„ ๋‚ด๋ถ€์˜ work๋Š” ์ง€์ •ํ•œ ํ•ญ๋ชฉ๋งŒ ๊ณตํ†ต ์˜ˆ์‚ฐ์—์„œ ๋ฎ์–ด์”๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ž‘์€ ๋ฌธ๋งฅ์˜ ๋ชจ๋ธ์—๋Š” work: {max_input_bytes: 131072, max_result_bytes: 16384}๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. lore run ... --json์€ ์‹ค์ œ ์ ์šฉํ•œ ์˜ˆ์‚ฐ์„ ์ถœ๋ ฅํ•˜๊ณ , ์ž์‹ ๋ช…๋ น์—๋„ ๊ฐ™์€ ํ”„๋กœํ•„์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜๋™ ๋ถ„ํ•  ๋ช…๋ น์—์„œ ๊ฐ™์€ ์˜ˆ์‚ฐ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด LORE_EXECUTION_PROFILE์— ํ•ด๋‹น ํ”„๋กœํ•„ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜๋™ ์žฌ๊ฐœยท๋ถ„ํ•  ๊ฒฐ๊ณผ ํ˜•์‹์€ ๋ถ„ํ•  ๊ทผ๊ฑฐ ์ฒ˜๋ฆฌ ์ ˆ์ฐจ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”. ์‹คํ–‰ ํŒŒ์ผ์€ executable, ๋ชจ๋ธ์€ model๋กœ ํ•„์š”ํ•œ ํ”„๋กœํ•„์—๋งŒ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ƒ๋Œ€ ์‹คํ–‰ ํŒŒ์ผ ๊ฒฝ๋กœ์™€ Claude์˜ config_directory๋Š” ์„ค์ • ํŒŒ์ผ ๊ธฐ์ค€์ž…๋‹ˆ๋‹ค. Codex์˜ profile์€ ํ•ด๋‹น CLI์˜ ๋ช…๋ช…๋œ ํ”„๋กœํ•„์ž…๋‹ˆ๋‹ค. ๋ชจ๋ธ ๋ณ€๊ฒฝ๋งŒ์œผ๋กœ ๊ธฐ์กด ์ง€์‹์„ ๋‹ค์‹œ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

llm.provider: queue๋Š” ํƒ€์ž…์ด ์žˆ๋Š” ์˜๋ฏธ ์ž‘์—…์„ ๋ณด๊ด€ํ•˜๋Š” ๋ชจ๋“œ์ด๋ฉฐ ์‹คํ–‰๊ธฐ ์„ ํƒ๊ณผ ๋ณ„๊ฐœ์ž…๋‹ˆ๋‹ค. noop๋Š” LLM ์ž‘์—…์„ ๋งŒ๋“ค์ง€ ์•Š๋Š” ๋ชจ๋“œ์ž…๋‹ˆ๋‹ค. ๊ฒ€์ƒ‰ยทํƒ์ƒ‰๊ณผ ๊ฒฐ์ •์  ์ˆ˜์ง‘์€ ์—์ด์ „ํŠธ ์„ค์น˜ ์—†์ด๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์„ค์น˜ ยท ๋นŒ๋“œ

# ์›๋ผ์ธ ์„ค์น˜ (macOS / Linux) โ€” ๋ฐ”์ด๋„ˆ๋ฆฌยทํ…œํ”Œ๋ฆฟยท์Šคํ‚ฌ, SHA256 ๊ฒ€์ฆ ํฌํ•จ
curl -fsSL https://raw.githubusercontent.com/junyeong-ai/lorekeeper/main/scripts/install.sh | bash

# Windows (PowerShell)
irm https://raw.githubusercontent.com/junyeong-ai/lorekeeper/main/scripts/install.ps1 | iex

# ์†Œ์Šค์—์„œ ๋นŒ๋“œ
cargo build --release && ./target/release/lore --help

์„ค์น˜ ํ”Œ๋ž˜๊ทธ: --version, --install-dir, --data-dir, --skill {user,project,none}, --agent {claude-code,codex,both}, --from-source, --force, --yes, --dry-run (--help๋กœ ์ „์ฒด ํ™•์ธ).

์„ค์น˜๊ธฐ๋Š” ์„ค์ • ๋””๋ ‰ํ„ฐ๋ฆฌ์— config.starter.yaml๊ณผ config.example.yaml์„ ๋ฐฐํฌํ•˜๋ฉฐ ์‚ฌ์šฉ์ž์˜ config.yaml์€ ๋ณด์กดํ•ฉ๋‹ˆ๋‹ค. ๊ฐ™์€ ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ data-dir์€ ์„ค์น˜ ๊ฒฝ๋กœ๋ฅผ, deployed-skills๋Š” ๋ฐฐํฌํ•œ ์Šคํ‚ฌ์„ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ์—…๋ฐ์ดํŠธยท์ œ๊ฑฐ์— ์“ฐ๋Š” ์ž๋™ ๊ด€๋ฆฌ ์ •๋ณด์ด๋ฉฐ ์ธ์ฆ์ •๋ณด๋Š” ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ•  ์ผ ๊ด€๋ฆฌ

lore agenda                       # ์˜ค๋Š˜ ํ•  ์ผ โ€” ์ปค๋ฐ‹๋œ ๊ฒƒ, ๊นจ์–ด๋‚œ ๊ฒƒ, ๊ธฐํ•œ์ด ์˜จ ๊ฒƒ
lore task add "์ŠคํŽ™ ๋ฆฌ๋ทฐ" --state today
lore task add "์ธ๋ฑ์Šค ์งˆ๋ฌธ ํšŒ์‹ " --link https://acme.slack.com/archives/C123/p1755600000 --label ์Šค๋ ˆ๋“œ
lore task done 7k2p --note "refresh token์€ ํšŒ์ „ ํ›„ ์žฌ์‹œ๋„ํ•˜๋ฉด grant๊ฐ€ ๋ฌดํšจํ™”๋œ๋‹ค"
lore task sync                    # Obsidian์—์„œ ์ง์ ‘ ๊ณ ์นœ ๊ฒƒ์„ ๊ธฐ๋ก์— ๋ฐ˜์˜

๋ณด๋“œ๋Š” <personal>/tasks.md โ€” ์˜ค๋Š˜ / ์ œ์•ˆ / ๋‹ค์Œ / ๋Œ€๊ธฐ / ์–ธ์  ๊ฐ€ ์„น์…˜์˜ ํ‰๋ฒ”ํ•œ ๋งˆํฌ๋‹ค์šด ์ฒดํฌ๋ฐ•์Šค์ž…๋‹ˆ๋‹ค. ํฐ์˜ Obsidian์—์„œ ์ฒดํฌํ•˜๊ฑฐ๋‚˜ ์ค„์„ ๋‹ค๋ฅธ ์„น์…˜์œผ๋กœ ๋Œ์–ด ์˜ฎ๊ธฐ๋ฉด ๋‹ค์Œ lore task sync๋‚˜ ๋ณด๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ช…๋ น์—์„œ ์ƒํƒœ ๋ณ€๊ฒฝ์„ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ์„น์…˜ ์ œ๋ชฉ์ด ๊ณง ์ƒํƒœ์ด๋ฉฐ, ์ œ์•ˆ์€ ์•„์ง ์ˆ˜๋ฝํ•˜์ง€ ์•Š์€ ํ•ญ๋ชฉ์ž…๋‹ˆ๋‹ค.

lore task done์€ ์™„๋ฃŒ์™€ --note๋ฅผ ์ „ํ™˜ ๋กœ๊ทธ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์„ค์ •๋œ tasks ์†Œ์Šค๋ฅผ ์™„๋ฃŒ์ผ์ด ํฌํ•จ๋œ ์ˆ˜์ง‘ ๋ฒ”์œ„๋กœ ingestํ•˜๋ฉด ๊ทธ๋‚ ์˜ ๋ฐ์ผ๋ฆฌ ํŽ˜์ด์ง€๊ฐ€ ์ƒ์„ฑ๋˜๊ณ , /lore-process๊ฐ€ ๋Œ€๊ธฐ ์ค‘์ธ ์š”์•ฝยท๊ฐœ๋… ์ถ”์ถœ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ „์ฒด ์†Œ์Šค ์ˆ˜์ง‘์—๋Š” work-log๋„ ํฌํ•จ๋˜๋ฉฐ, ์˜ˆ์•ฝ๋œ ์ผ์ผ ํŒŒ์ดํ”„๋ผ์ธ์€ ์ˆ˜์ง‘๊ณผ ์˜๋ฏธ ์ฒ˜๋ฆฌ๋ฅผ ํ•จ๊ป˜ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ฝ์€ ๊ฒƒ๋ฟ ์•„๋‹ˆ๋ผ ํ•œ ์ผ๋„ ์ง€์‹์˜ ๊ทผ๊ฑฐ๋กœ ๋‚จ์Šต๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธ ยท ์ƒํƒœ ยท ์ œ๊ฑฐ

lore self status      # ๋ฐฐํฌ๋œ ์‚ฌ๋ณธ์ด ์ง€๊ธˆ ๋ฐ”์ด๋„ˆ๋ฆฌ์™€ ๊ฐ™์€์ง€ (๋‹ค๋ฅด๋ฉด non-zero)
lore self update      # ์ƒˆ ๋ฆด๋ฆฌ์Šค๋กœ ๊ต์ฒดํ•˜๊ณ , ๋Œ€ํ™”ํ˜•ยท์‹คํ–‰์šฉ ์Šคํ‚ฌ๊ณผ ํ…œํ”Œ๋ฆฟยทAGENTS.md ์žฌ๋ฐฐํฌ
lore self deploy      # ์žฌ๋ฐฐํฌ๋งŒ (self status๊ฐ€ ๋ณด๊ณ ํ•œ ์ฐจ์ด๋ฅผ ๊ณ ์นจ)
lore self uninstall   # ์„ค์น˜ํ•œ ๊ฒƒ๋งŒ ์ œ๊ฑฐ โ€” vault๋Š” ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š์Œ

๋Œ€ํ™”ํ˜•ยท์‹คํ–‰์šฉ ์Šคํ‚ฌ๊ณผ ํ…œํ”Œ๋ฆฟยท์‹œ์ž‘ ์„ค์ •ยท์ „์ฒด ์˜ต์…˜ ์˜ˆ์ œ๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ์— ๋‚ด์žฅ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฐํฌ๋œ ์‚ฌ๋ณธ์€ ๋ณ€๊ฒฝ๋˜๊ฑฐ๋‚˜ ๋’ค์ฒ˜์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ lore self status๋กœ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. lore self deploy๊ฐ€ ์‚ฌ๋ณธ์„ ์”๋‹ˆ๋‹ค. lore self update๋Š” lore queue check์™€ ๊ฐ™์€ ๊ธฐ์ค€์œผ๋กœ ๋Œ€๊ธฐ ์ž‘์—…ยทํ•ด์„ ๋ถˆ๊ฐ€ ์ž…๋ ฅยท๋ฏธ๋ฐ˜์˜ ๊ฒฐ๊ณผยท์ค‘๋‹จ๋œ ์ €์žฅ ๊ธฐ๋ก์ด ์žˆ์œผ๋ฉด ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค. ํ™•์ธ ๊ฐ€๋Šฅํ•œ ๋ฏธ์™„๋ฃŒ ์ž‘์—…์€ --force๋กœ ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์„ค์ •์ด๋‚˜ ์ €์žฅ์†Œ๋ฅผ ์ฝ์„ ์ˆ˜ ์—†๋Š” ์˜ค๋ฅ˜๋Š” ์ƒ๋žตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‹คํ–‰ ์ค‘์ธ ๋ฒ„์ „๋ณด๋‹ค ์˜ค๋ž˜๋œ ๋ฆด๋ฆฌ์Šค๋„ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค(--version์œผ๋กœ ๋ช…์‹œํ•˜๋ฉด ๋˜๋Œ๋ฆด ์ˆ˜ ์žˆ์Œ).


์ž๊ฒฉ์ฆ๋ช…

ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๋˜๋Š” <vault>/.lorekeeper/credentials.json(0600). ํ™˜๊ฒฝ๋ณ€์ˆ˜๊ฐ€ ํŒŒ์ผ๋ณด๋‹ค ์šฐ์„ . macOSยทLinux์—์„œ๋Š” ๊ทธ๋ฃนยท๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ถŒํ•œ์ด ์—ด๋ฆฐ ์ธ์ฆ ํŒŒ์ผ๊ณผ ์ž ๊ธˆ ํŒŒ์ผ์„ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜๋™ ์ƒ์„ฑยท๋ณต์›ํ•œ ํŒŒ์ผ์€ ์‚ฌ์šฉ ์ „์— chmod 600์œผ๋กœ ์ œํ•œํ•˜์„ธ์š”. ์ €์žฅยท๊ฐฑ์‹ ์€ ํ•ญ์ƒ 0600์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ์ธ์ฆ ์„ค์ • ๋งˆ๋ฒ•์‚ฌ๋Š” ์ฝ๊ธฐยทํŒŒ์‹ฑ์— ์‹คํŒจํ•œ ๊ธฐ์กด ์ €์žฅ์†Œ๋ฅผ ๋นˆ ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ vault๊ฐ€ ๊ฐ™์€ ๊ณ„์ •์„ ์“ฐ๋ฉด credentials.file์— ํ•˜๋‚˜์˜ ๊ณต์œ  ์ €์žฅ์†Œ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒ๋Œ€ ๊ฒฝ๋กœ๋Š” ์„ค์ • ํŒŒ์ผ ๊ธฐ์ค€์ด๋ฉฐ, OAuth ๊ฐฑ์‹ ๊ณผ ํ›„์† ํ† ํฐ ์ €์žฅ์€ ๊ฐ™์€ ์ž ๊ธˆ ์•ˆ์—์„œ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ํšŒ์ „ํ•˜๋Š” refresh token์„ ๋ณ„๋„ ํŒŒ์ผ๋กœ ๋ณต์‚ฌํ•˜์ง€ ๋งˆ์„ธ์š”. ๋‹ค๋ฅธ ์•ฑ์€ ๋ณ„๋„ OAuth ์•ฑ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

lore init credentials   # ๋Œ€ํ™”ํ˜• ๋งˆ๋ฒ•์‚ฌ โ€” Google ํ† ํฐ์€ ๋ธŒ๋ผ์šฐ์ € OAuth๋กœ ์ž๋™ ๋ฐœ๊ธ‰
  • Google: LORE_GOOGLE_CLIENT_ID/SECRET/REFRESH_TOKEN โ€” Gmail/Drive/Calendar ์ฝ๊ธฐ ์ „์šฉ ์Šค์ฝ”ํ”„. "Desktop app" OAuth ํด๋ผ์ด์–ธํŠธ ํ•„์š”.
  • Slack: LORE_SLACK_TOKEN(bot xoxb-) ๋˜๋Š” LORE_SLACK_USER_TOKEN(xoxp-). slack-search๋Š” user ํ† ํฐ ํ•„์ˆ˜.
  • Atlassian (Jira/Confluence): LORE_ATLASSIAN_SITE_URL + LORE_ATLASSIAN_PAT (Data Center), or + LORE_ATLASSIAN_EMAIL + LORE_ATLASSIAN_API_TOKEN (Cloud ํด๋ž˜์‹ ํ† ํฐ โ€” ์‚ฌ์ดํŠธ๋กœ ์ „์†ก). ์Šค์ฝ”ํ”„ ํ† ํฐ์ด๋ฉด LORE_ATLASSIAN_CLOUD_ID๋ฅผ ํ•จ๊ป˜ ์ฃผ์„ธ์š” โ€” ๊ทธ ๊ฐ’์ด ๊ฒŒ์ดํŠธ์›จ์ด ๊ฒฝ๋กœ๋ฅผ ์„ ํƒํ•˜๋ฉฐ, ์—†์œผ๋ฉด ํด๋ž˜์‹์œผ๋กœ ์ทจ๊ธ‰๋˜์–ด ์‚ฌ์ดํŠธ๋กœ ๊ฐ‘๋‹ˆ๋‹ค. OAuth์€ ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ์ด ํšŒ์ „ํ•˜๋ฏ€๋กœ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค โ€” lore init credentials๋กœ ๋ฐœ๊ธ‰ํ•˜์„ธ์š”.

๊ธฐ๋ณธ ์ธ์ฆ ํŒŒ์ผ์€ Git์—์„œ ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค. ๋ณ„๋„๋กœ ์ง€์ •ํ•œ ๊ณต์œ  ์ €์žฅ์†Œ๋„ ์ปค๋ฐ‹ยท๋™๊ธฐํ™” ๋Œ€์ƒ์— ํฌํ•จํ•˜์ง€ ๋งˆ์„ธ์š”.


lore wiki document-identity plan์— --history-ref <์ „์ฒด-์ปค๋ฐ‹-ID>๋ฅผ ๋ฐ˜๋ณต ์ง€์ •ํ•˜๋ฉด ๊ณผ๊ฑฐ ์›๋ฌธ ์‚ฌ๋ณธ๋„ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค. ๊ณ„ํš์€ Git blobยท์ž‘์„ฑ๋œ IDยท์ •ํ™•ํžˆ ํˆฌ์˜๋œ ๋ณธ๋ฌธ์„ ๊ณ ์ •ํ•˜๊ณ , check์™€ apply๊ฐ€ ๋‹ค์‹œ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค. apply --allow-blocked๋Š” ๊ฒ€์ฆ๋œ ๋ถ€๋ถ„๋งŒ ์ด๊ด€ํ•˜๊ณ  ํ•ด๊ฒฐ๋˜์ง€ ์•Š์€ ํŽ˜์ด์ง€๋Š” ๊ทธ๋Œ€๋กœ ๋‘ก๋‹ˆ๋‹ค.

ํ˜„์žฌ ์ธ์šฉ ๊ทผ๊ฑฐ๋กœ ๊ฐœ๋… ํ•˜๋‚˜๋ฅผ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๋ ค๋ฉด lore graph resynthesize wiki/concepts/example.md --dry-run์œผ๋กœ ํ™•์ธํ•œ ๋’ค --dry-run ์—†์ด ์š”์ฒญํ•˜๊ณ  ํ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๊ณผ๊ฑฐ ์ž‘์—…์ด ๋งŒ๋ฃŒ๋˜์–ด๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, queue regenerate --task-id๋Š” ์›๋ž˜ ์ž…๋ ฅ์ด ๋ณด๊ด€๋œ ๊ฒฝ์šฐ์—๋งŒ ์žฌ์ƒํ•ฉ๋‹ˆ๋‹ค.

์Šค์ผ€์ค„๋ง

lore schedule > lorekeeper.cron   # Linux: ๊ฒ€ํ†  ํ›„ crontab -e์— ๋ณ‘ํ•ฉ
lore schedule --format launchd --bin "$(command -v lore)"   # macOS

lore schedule์€ ์˜ˆ์•ฝ ์ •์˜๋ฅผ ์ถœ๋ ฅํ•˜๋ฉฐ OS์— ๋“ฑ๋กํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Linux์—์„œ๋Š” ๊ธฐ์กด ์˜ˆ์•ฝ์„ ๋ณด์กดํ•˜๋ฉฐ ๋ณ‘ํ•ฉํ•˜์„ธ์š”. macOS์—์„œ๋Š” ๊ฐ plist๋ฅผ ํ‘œ์‹œ๋œ LaunchAgents ๊ฒฝ๋กœ์— ์ €์žฅํ•˜๊ณ  ๋กœ๊ทธ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋งŒ๋“  ๋’ค launchctl bootstrap gui/$(id -u) <plist ์ ˆ๋Œ€ ๊ฒฝ๋กœ>๋กœ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค. ์„ค์ • ๋ณ€๊ฒฝ ํ›„์—๋Š” ๊ธฐ์กด ์ž‘์—…์„ bootoutํ•˜๊ณ  ์ƒˆ ์ •์˜๋ฅผ ๋“ฑ๋กํ•˜๋ฉฐ, ๋น„ํ™œ์„ฑํ™”ํ•œ ์ž‘์—…๋„ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค. self uninstall์€ OS ์˜ˆ์•ฝ์„ ํ•ด์ œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

macOS์˜ ๋ฌธ์„œยท๋ฐ์Šคํฌํƒ‘ยท๋‹ค์šด๋กœ๋“œ ๊ฐ™์€ ๋ณดํ˜ธ ํด๋”์— ๋ณผํŠธ๊ฐ€ ์žˆ์œผ๋ฉด ์˜ˆ์•ฝ ์ž‘์—…์˜ lore์—๋„ ํ•ด๋‹น ํด๋” ์ ‘๊ทผ ์Šน์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํ„ฐ๋ฏธ๋„ ์•ฑ์˜ ์Šน์ธ์ด launchd ์‹คํ–‰๊นŒ์ง€ ๋ณด์žฅํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์ž‘์—…์„ ์‹ค์ œ๋กœ ์‹œ์ž‘ํ•ด ํ‘œ์‹œ๋˜๋Š” macOS ๊ถŒํ•œ ์š”์ฒญ์„ ์Šน์ธํ•˜๊ณ , ๋กœ๊ทธ์™€ ์ข…๋ฃŒ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜์„ธ์š”. ์„œ๋ช… ์‹๋ณ„์ž๊ฐ€ ๋‹ฌ๋ผ์ง€๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ์—…๋ฐ์ดํŠธ ํ›„์—๋Š” ์žฌ์Šน์ธ์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ ๊ถŒํ•œ 0600์€ ์ด OS ์Šน์ธ์„ ๋Œ€์‹ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๊ถŒํ•œ ๋™์ž‘์€ Apple ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

์˜ˆ์•ฝ ์ž‘์—…์€ Rust ๋ช…๋ น์„ ์ง์ ‘ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์•ฝ ์‹คํ–‰
ingest.schedule lore run daily --wait
graph.audit.schedule lore run knowledge --wait
์ฃผ๊ฐ„ยท์›”๊ฐ„ยท๋ถ„๊ธฐยท์—ฐ๊ฐ„ lore synthesis <๊ธฐ๊ฐ„> --previous --defer --wait-for-vault
์œ ์ง€๋ณด์ˆ˜ lore maintenance --prune-queue --wait-for-vault
๋ฆฌ๋งˆ์ธ๋” lore task remind notify

์ผ์ผ ์ž‘์—…์€ ์ „์ฒด ์†Œ์Šค๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ , ํยท์—ญ๋งํฌยท๊ฒ€์ƒ‰ ์ธ๋ฑ์Šค๋ฅผ ์ •๋ฆฌํ•œ ๋’ค ๊ธฐ๋ณธ ๊ธฐ๊ฐ„ โ†’ ๋ถ„๊ธฐ โ†’ ์—ฐ๊ฐ„ ์ˆœ์„œ๋กœ ์žฌ๊ฐœํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ์†Œ์Šค ์‹คํŒจ ํ›„์—๋„ ๊ฐ€๋Šฅํ•œ ์ •๋ฆฌ๋Š” ์ง„ํ–‰ํ•˜๋ฉฐ ์˜์กด ๋‹จ๊ณ„ ์‹คํŒจ๋Š” ๊ทธ ์ดํ›„ ๊ธฐ๊ฐ„ ์ฒ˜๋ฆฌ๋ฅผ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค. ์›๋ณธ ์ˆ˜์ง‘๊ณผ ์˜๋ฏธ ์ฒ˜๋ฆฌ์˜ ์„ฑ๊ณต์„ ๊ตฌ๋ถ„ํ•ด ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค. --json์€ ๋‹จ๊ณ„๋ณ„ ๊ฒฐ๊ณผ๋ฅผ stdout์—, ํ•˜์œ„ ๋ช…๋ น ๋กœ๊ทธ๋Š” stderr์— ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์—์ด์ „ํŠธ๋Š” ์„ ํƒํ•œ ๊ทผ๊ฑฐยท๊ฒ€ํ† ๋ฅผ ์ฝ๊ณ  ์˜๋ฏธ๋ฅผ ๋ณด์ •ํ•˜๋ฉฐ, ํ˜„์žฌ ํŒ๋ณธ์„ ๊ฒ€์ฆํ•ด ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค. ์ตœ์ข… ํยท์—ญ๋งํฌยท๊ฒ€์ƒ‰ ๊ฐฑ์‹ ๊ณผ ๊ตฌ์กฐ ๊ฒ€์‚ฌ๋Š” Rust ์‹คํ–‰๊ธฐ๊ฐ€ ๋งก์•„ ์—์ด์ „ํŠธ์˜ ์ „์—ญ ๋ชฉ๋ก ์กฐํšŒ์™€ ์ค‘๋ณต ๊ฒ€์‚ฌ๋ฅผ ์ค„์ž…๋‹ˆ๋‹ค. ์Šคํ‚ฌ์„ ์ˆ˜๋™์œผ๋กœ ๋‹จ๋… ์‹คํ–‰ํ•  ๋•Œ๋Š” ์Šคํ‚ฌ์˜ ์ตœ์ข… ๊ฒ€์‚ฌ ์ ˆ์ฐจ๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. ์‹คํ–‰ ์ค‘์—๋Š” ์„ ํƒํ•œ ์„ค์ • ๊ฒฝ๋กœ์™€ ํŒŒ์ผ ํŒ๋ณธ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์„ค์ •์„ ํŽธ์ง‘ํ•˜๋ฉด ๋‚จ์€ ์ž‘์—…์„ ๋‹ค๋ฅธ ๋ณผํŠธ๋กœ ๋„˜๊ธฐ์ง€ ์•Š๊ณ  ๋ฏธ์™„๋ฃŒ๋กœ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค. ์˜๋„ํ•œ ์„ค์ •์œผ๋กœ ์ƒˆ ์ž‘์—…์„ ์‹œ์ž‘ํ•˜์„ธ์š”.

์˜๋ฏธ ์ฒ˜๋ฆฌ ๋™์•ˆ Rust ์‹คํ–‰๊ธฐ๊ฐ€ ๋ณผํŠธ์˜ Unix workflow lease๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๊ฒฝํ•ฉ์€ ์‹คํŒจํ•˜๊ณ  --wait๋Š” ์ทจ์†Œ ๊ฐ€๋Šฅํ•œ ๋Œ€๊ธฐ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์ข…๋ฃŒ ์‹ ํ˜ธยท์‹œ๊ฐ„ ์ œํ•œ ์‹œ ์ž์‹ ํ”„๋กœ์„ธ์Šค ๊ทธ๋ฃน์„ ์ข…๋ฃŒํ•˜๊ณ  ์ž‘์—…์„ ๋ณด์กดํ•ฉ๋‹ˆ๋‹ค. ์งง์€ ๋ฌธ์„œยทํ ์“ฐ๊ธฐ ์ž ๊ธˆ๊ณผ ์™ธ๋ถ€ ํŽธ์ง‘๊ธฐ์— ๋Œ€ํ•œ ๋ฆฌ๋น„์ „ ๊ฒ€์ฆ์€ ๋ณ„๋„๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜๋™ ์„ธ์…˜์€ ์ž…๋ ฅ์„ ์ฝ๊ธฐ ์ „์— lore workflow -- claude ๋˜๋Š” lore workflow -- codex๋กœ ์‹œ์ž‘ํ•˜์„ธ์š”. descriptor๋ฅผ ๋‹ซ๊ฑฐ๋‚˜ ๋ถ„๋ฆฌ ์‹คํ–‰ํ•œ ์ž‘์—…์€ ์ˆ˜๋™ exec lease์˜ ๋ณด์žฅ ๋ฒ”์œ„ ๋ฐ–์ด๋ฉฐ, workflow์™€ ๋ฌด์ธ ์‹คํ–‰์€ Windows๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์Šค์ผ€์ค„๋Ÿฌ๋Š” ์„ค์ •ยท๋Ÿฐํƒ€์ž„ ์ž๋ฃŒ์˜ ์ ˆ๋Œ€ ๊ฒฝ๋กœ, ๊ณ ์ •๋œ PATH์™€ ํ•„์š”ํ•œ ๊ธฐ์กด ์ธ์ฆ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋‹ด์Šต๋‹ˆ๋‹ค. ์„ ํƒํ•œ ํ˜ธ์ŠคํŠธ์˜ CLAUDE_CONFIG_DIR ๋˜๋Š” CODEX_HOME์ด ๋ช…์‹œ๋ผ ์žˆ์œผ๋ฉด ์œ ํšจํ•œ ๋””๋ ‰ํ„ฐ๋ฆฌ์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ํ‘œ์ค€ proxy ๋ณ€์ˆ˜๋Š” ๋Œ€์†Œ๋ฌธ์žยท๋นˆ ๊ฐ’์„ ์œ ์ง€ํ•˜๊ณ , ๋น„๋ฐ€ ๊ฐ’์ด๋‚˜ API ํ‚ค๋Š” ์˜ˆ์•ฝ ์ •์˜์— ๋ณต์‚ฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ™˜๊ฒฝ์„ ๋ฐ”๊พธ๋ฉด ์ •์˜๋ฅผ ๋‹ค์‹œ ๋“ฑ๋กํ•˜์„ธ์š”.

์˜ˆ์•ฝ ์‹œ๊ฐ์€ ํ˜ธ์ŠคํŠธ ํ˜„์ง€ ์‹œ๊ฐ„, ๋ฌธ์„œ ๋‚ ์งœ๋Š” ๋ณผํŠธ ์‹œ๊ฐ„๋Œ€์ž…๋‹ˆ๋‹ค. launchd๋Š” ์ž ์ž๊ธฐ ์ค‘ ๋†“์นœ ์‹คํ–‰์„ ๊นจ์–ด๋‚œ ๋’ค ํ•œ ๋ฒˆ ์ˆ˜ํ–‰ํ•˜์ง€๋งŒ ๋ชจ๋“  ๋‚ ์งœ๋ฅผ backfillํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. cron์€ ๋†“์นœ ์‹คํ–‰์„ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. lore synthesis pending --status --json์œผ๋กœ ์ˆ˜์ง‘ ๋ฒ”์œ„ยท์˜๋ฏธ ์ฒ˜๋ฆฌ์˜ ๋ฏธ์™„๋ฃŒ ์‚ฌ์œ ๋ฅผ ํ™•์ธํ•˜์„ธ์š”. ์‹œํ—˜ ํ™˜๊ฒฝ์€ --namespace org.example.lore-test --log-dir /absolute/test/logs๋กœ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃผ๊ฐ„ ์˜๋ฏธ ๊ฐ์‚ฌ๋Š” ์ˆ˜์ง‘ยท๊ธฐ๊ฐ„ ํ•ฉ์„ฑ๊ณผ ๋…๋ฆฝ์ ์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

graph:
  audit:
    schedule: "0 7 * * 0"
    batch_size: 5
    max_input_bytes: 262144

์ฒ˜์Œ ๋ณด๋Š” ๋Œ€์ƒ๊ณผ ๋ณ€๊ฒฝ๋œ ๋Œ€์ƒ์„ ๋ฒˆ๊ฐˆ์•„ ๊ฒ€ํ† ํ•˜๊ณ , ๋™์ผ ์ž…๋ ฅ์€ ๋ฐ˜๋ณต ๊ฒ€ํ† ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€์ƒ์€ ์„ค์ •๋œ ์œ„ํ‚ค์˜ ๊ฐœ๋…๊ณผ ์ถœ์ฒ˜ ๋ฌธ์„œ(type: document)์ด๋ฉฐ, ๋ฌธ์„œ๋งŒ ์žˆ๋Š” ์ฃผ์ œ๋„ ๊ฐœ๋…์„ ๋งŒ๋“ค์ง€ ์•Š๊ณ  ๊ฒ€ํ† ํ•ฉ๋‹ˆ๋‹ค. kind๋Š” ๋Œ€์ƒ ์ข…๋ฅ˜๋ฅผ, counts_by_kind๋Š” ์ข…๋ฅ˜๋ณ„ ์ „์ฒดยทํ˜„์žฌ ๊ฒ€ํ† ยท๋Œ€๊ธฐ ๊ฑด์ˆ˜๋ฅผ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ํ•ฉ๊ณ„๋Š” ๋‘ ์ข…๋ฅ˜๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์„œ์˜ ๋งํฌ๋Š” ๋ฌธ๋งฅ์ด๋ฉฐ ์ž๋™์œผ๋กœ ๋’ท๋ฐ›์นจ ๊ทผ๊ฑฐ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. .lorekeeper/knowledge-audit.json์€ ์ตœ์‹  ๊ฒ€ํ†  ํŒ๋ณธ๊ณผ ๋Œ€๊ธฐ ์ˆœ์„œ๋ฅผ ๋ณด๊ด€ํ•˜๊ณ  ํŒ๋‹จยท์ƒ์ถฉ ๊ทผ๊ฑฐ๋Š” Markdown ๊ฒ€ํ†  ๋ฌธ์„œ์— ๋‚จ๊น๋‹ˆ๋‹ค. ๋‹จ์ผ ์ถœ์ฒ˜๋‚˜ ์ธ์šฉ ์ˆ˜๋งŒ์œผ๋กœ ๋ณ‘ํ•ฉยท์‚ญ์ œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ดˆ๊ธฐ ๋ˆ„์ ๋ถ„์€ lore run knowledge --profile codex --batches 20 --json์ฒ˜๋Ÿผ ๋“ฑ๋ก๋œ ํ”„๋กœํ•„๊ณผ ์‹คํ–‰ํ•  ์ตœ๋Œ€ ๋ฐฐ์น˜ ์ˆ˜๋ฅผ ์ง€์ •ํ•ด ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœํ•„ ์ด๋ฆ„์€ ์ž์‹ ์˜ ์„ค์ •์— ๋งž์ถฅ๋‹ˆ๋‹ค. ๊ฐ ๋ฐฐ์น˜ ๋’ค์—๋Š” ์‹คํ–‰ ์ž ๊ธˆ์„ ํ•ด์ œํ•˜๋ฉฐ, ์‹คํŒจยท์ทจ์†Œ ์‹œ ์ค‘๋‹จํ•˜๊ณ  ๊ฒ€์ฆ๋œ ๊ฒ€ํ†  ๊ธฐ๋ก๋ถ€ํ„ฐ ์žฌ๊ฐœํ•ฉ๋‹ˆ๋‹ค. stop_reason: batch-limit๋Š” ์ง€์ •ํ•œ ์‹คํ–‰๋Ÿ‰์— ๋„๋‹ฌํ–ˆ๋‹ค๋Š” ๋œป์ด๊ณ , settled๋Š” ํ˜„์žฌ ๊ฐ์‚ฌ ๋Œ€์ƒ ๊ณ„ํš์— ๋Œ€๊ธฐ ํ•ญ๋ชฉ์ด ์—†๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค. ์ด ์ง‘๊ณ„๊ฐ€ ์™ธ๋ถ€ ์›๋ณธยท์ฒจ๋ถ€๊นŒ์ง€ ๋ชจ๋‘ ์ฝ์—ˆ๋‹ค๊ฑฐ๋‚˜ ์ „์ฒด ์ง€์‹์˜ ์˜๋ฏธ์  ์ผ๊ด€์„ฑ์„ ๊ฒ€์ฆํ–ˆ๋‹ค๋Š” ๋œป์€ ์•„๋‹™๋‹ˆ๋‹ค. audit-plan์€ ์„ ํƒํ•œ ๋Œ€์ƒยท๊ทผ๊ฑฐยท์ง์ ‘ ๊ด€๋ จ ๋ฌธ๋งฅยท๊ฒ€ํ†  ๋ฌธ์„œ์™€ ๊ทธ ๊ทผ๊ฑฐยท์„ ํƒํ•œ RSS ์›๋ณธ์˜ ์ค‘๋ณต์„ ์ œ์™ธํ•œ ์ „์ฒด ๋ฐ”์ดํŠธ ์ˆ˜๋ฅผ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค. graph.audit.max_input_bytes๋Š” ์ด ์ „์ฒด ์ž…๋ ฅ์˜ ํ•œ๋„๋กœ, ์ด๋ฅผ ๋„˜์œผ๋ฉด input.status: oversized๋ฅผ ๊ทธ๋Œ€๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ž๋™ ์„ ํƒ๋„ ํฐ ๋Œ€์ƒ์„ ๊ฑด๋„ˆ๋›ฐ์ง€ ์•Š์œผ๋ฉฐ --path๋Š” ์ง€์ •ํ•œ ๋ฒ”์œ„๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. Rust ์‹คํ–‰๊ธฐ๋Š” execution.work ํ•œ๋„์— ๋งž์ถฐ ๋น ์ง์—†์ด ๋‚˜๋ˆ„์–ด ์ฝ๊ณ  ์ข…ํ•ฉํ•˜๋„๋ก ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ „์ฒด ์ž…๋ ฅ ํ•œ๋„๋ฅผ ๋„˜๋Š” ์™„๋ฃŒ ๊ธฐ๋ก์—๋Š” ํ˜„์žฌ ์ž…๋ ฅ์— ๋Œ€ํ•œ ๋ถ„ํ•  ์ž‘์—…ยท์ข…ํ•ฉ ๊ฒฐ๊ณผ์˜ ์™„๋ฃŒ ์ฆ๋ช…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทผ๊ฑฐ๋ฅผ ์ž๋ฅด๊ฑฐ๋‚˜ ์ผ๋ถ€ ์ฝ๊ธฐ๋งŒ์œผ๋กœ ์™„๋ฃŒํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์ค‘๋‹จ๋œ ์ž‘์—…์€ ๋ณด์กดํ•ฉ๋‹ˆ๋‹ค. --profile๋งŒ์œผ๋กœ ์–ด๋А ๋ฐ”์ดํŠธ ํ•œ๋„๋„ ๋ฐ”๋€Œ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์„ ํƒํ•œ ๋Œ€์ƒ์˜ ๊ฒ€ํ† ๊ฐ€ ๋ˆ„๋ฝยท๋ฌดํšจยท์žฌํ‰๊ฐ€ ํ•„์š” ์ƒํƒœ์ด๋ฉด ์™„๋ฃŒ๋ฅผ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋Œ€์ƒ์˜ ์žฌํ‰๊ฐ€ ๋Œ€๊ธฐ๋Š” run knowledge์˜ review_health ๊ฑด์ˆ˜์— ๋‚จ๊ฒจ ๋ณด๊ณ ํ•˜๋ฉฐ ๋‹ค์Œ ๋ฐฐ์น˜๋ฅผ ๋ง‰์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฌดํšจ ๊ธฐ๋ก์ด๋‚˜ ๊ฒ€์‚ฌ ์˜ค๋ฅ˜๋Š” ์‹คํ–‰์„ ์‹คํŒจ์‹œํ‚ต๋‹ˆ๋‹ค. ์ „์ฒด ์ €์žฅ์†Œ ๊ฒ€์‚ฌ๋Š” wiki reviews --check๋กœ ๋ณ„๋„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋ฏธํ•ด๊ฒฐ ํŒ๋‹จ์„ ๋‚จ๊ธฐ๋Š” follow-up์—๋Š” ํ•ด๋‹น ๋Œ€์ƒ์„ ์„ ์–ธํ•œ ํ˜„์žฌ open ๊ฒ€ํ† ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋ฆฌ๋งˆ์ธ๋”๋Š” OS ์•Œ๋ฆผ ๋ช…๋ น์ด ์„ฑ๊ณตํ•œ ๋’ค์—๋งŒ ์†Œ์ง„ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” OS์˜ ์ ‘์ˆ˜์ด๋ฉฐ ์‚ฌ๋žŒ์ด ๋ณด์•˜๋‹ค๋Š” ํ™•์ธ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์ ‘์ˆ˜ ์งํ›„ ์ €์žฅ ์ „์— ์ค‘๋‹จ๋˜๋ฉด ์žฌ์ „๋‹ฌ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹คํŒจํ•œ ์•Œ๋ฆผ์€ ๋‹ค์Œ ์‹คํ–‰์— ๋‚จ์Šต๋‹ˆ๋‹ค.

๋ณผํŠธ๋ฅผ git์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ (์„ ํƒ)

์žฌํ•ฉ์„ฑ์€ ๋ณธ๋ฌธ์„ ๋Œ€์ฒดํ•˜๊ณ  ๋ณ‘ํ•ฉ์€ ํŽ˜์ด์ง€๋ฅผ ์‚ญ์ œํ•˜๋ฏ€๋กœ, ์ค‘์š”ํ•œ ๋ณ€๊ฒฝ ์ „์—๋Š” ๋ณ„๋„ ๋ฐฑ์—…์ด๋‚˜ ๊ฒ€ํ† ํ•œ Git ์ปค๋ฐ‹์„ ๋‚จ๊ธฐ์‹ญ์‹œ์˜ค. ํŒŒ์ดํ”„๋ผ์ธ์€ ์‚ฌ์šฉ์ž์˜ ๋™์‹œ ํŽธ์ง‘์„ ๊ตฌ๋ณ„ํ•  ์ˆ˜ ์—†์–ด ์ž๋™์œผ๋กœ stageํ•˜๊ฑฐ๋‚˜ commitํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ณต๊ตฌ journal์€ ์ค‘๋‹จ๋œ ๋ณ€๊ฒฝ์„ ์ด์–ด๊ฐ€๊ธฐ ์œ„ํ•œ ๊ธฐ๋ก์ด๋ฉฐ ๊ณผ๊ฑฐ ๋ฒ„์ „ ๋ฐฑ์—…์„ ๋Œ€์‹ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

cd "$(lore config vault-root)"
git init
git config core.precomposeunicode true        # macOS: ํ•œ๊ธ€ ํŒŒ์ผ๋ช…์„ NFC๋กœ ์ €์žฅ
# ๊ธฐ์กด .gitignore์— ์•„๋ž˜ ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์ค‘๋ณตยท์‚ฌ์šฉ์ž ์„ค์ •์„ ํ™•์ธ
printf '.lorekeeper/\n.obsidian/\n' >> .gitignore
git status --short
git diff
# ๊ณต๊ฐœํ•ด๋„ ๋˜๋Š” ํŒŒ์ผ๋งŒ ์„ ํƒํ•ด์„œ git addํ•œ ๋’ค commit

.lorekeeper/์—๋Š” ์šด์˜ ๊ธฐ๋ก๊ณผ ๋ณด๊ด€๋œ ์ž…๋ ฅ์ด ์žˆ์œผ๋ฏ€๋กœ ์ด๋ ฅ์—์„œ ์ œ์™ธํ•˜์‹ญ์‹œ์˜ค. ์ž๊ฒฉ์ฆ๋ช… ํŒŒ์ผ๋„ ๋ณ„๋„๋กœ ์ œ์™ธ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. ์ž‘์€ ์ง„์ž… ์•ˆ๋‚ด์ธ wiki/index.md๋Š” ์žฌ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ฒฝ๋กœ๋Š” vault.dirs.wiki ์„ค์ •์— ๋งž์ถฐ ์ œ์™ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์›๊ฒฉ ์ €์žฅ์†Œ๋ฅผ ์“ด๋‹ค๋ฉด ์›๋ฌธ ๋ฐ์ดํ„ฐ์˜ ๊ณต์œ  ๋ฒ”์œ„๋ฅผ ๋จผ์ € ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.


์†Œ์Šค ํ™•์žฅ๊ณผ ์ˆ˜์ง‘ ๋ฒ”์œ„

์†Œ์Šค๋ณ„ ์–ด๋Œ‘ํ„ฐ๊ฐ€ ์ˆ˜์ง‘ยท์ธ์ฆยท๊ด€์ธก ๋ฒ”์œ„๋ฅผ ๋‹ด๋‹นํ•˜๊ณ , ๊ณตํ†ต ํŒŒ์ดํ”„๋ผ์ธ์ด ์ •๊ทœํ™”ยท๊ฐœ๋… ์ถ”์ถœยทํ•ฉ์„ฑยท๊ด€๊ณ„ยท๊ฒ€ํ† ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ ์†Œ์Šค๋Š” ํƒ€์ž…ยท์„ค์ • ๊ฒ€์ฆยท๋ฌธ์„œ IDยท๋ถ€๋ถ„ ์‹คํŒจ ๊ณ„์•ฝ์„ ๋ช…์‹œ์ ์œผ๋กœ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค. ์„ค์ •์— ์ด๋ฆ„๋งŒ ์ถ”๊ฐ€ํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฐฉ์‹์€ ์•„๋‹™๋‹ˆ๋‹ค.

Drive๋Š” folder_id์™€ ์„ ํƒ์  name_prefix๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ค์ œ ์ˆ˜์ •์ผ๋กœ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ ID๋Š” ์ œ๋ชฉยทํด๋”์™€ ๋ถ„๋ฆฌ๋˜์–ด ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. Google Docs๋Š” Markdown, Slides๋Š” ํ…์ŠคํŠธ๋กœ ๊ฐ€์ ธ์˜ค๋ฉฐ ์‹œ๊ฐ ์ž๋ฃŒ์™€ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ํŒŒ์ผ ํ˜•์‹์€ ์™„์ „ํ•œ ์ˆ˜์ง‘์œผ๋กœ ๊ฐ„์ฃผํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์กฐํšŒ ์ œํ•œ์ด๋‚˜ ์ฝ๊ธฐ ์ค‘ ํŒ๋ณธ ๋ณ€๊ฒฝ์€ ๋ถ€๋ถ„ ๊ด€์ธก์œผ๋กœ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜์ •์ผ ์กฐํšŒ๋Š” ๊ณผ๊ฑฐ ์ „์ฒด ์ƒํƒœ ๋ณต์›์ด๋‚˜ ์›๊ฒฉ ์‚ญ์ œ ํƒ์ง€๊ฐ€ ์•„๋‹ˆ๋ฉฐ, ์ด๋ฒˆ ๊ฒฐ๊ณผ์— ์—†๋Š” ๊ธฐ์กด ๋ฌธ์„œ๋Š” ๋ณด์กดํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜์‹  ๋ฐ์ดํ„ฐ ํ•ด์‹œ๋Š” ๊ณผ๊ฑฐ ์›๋ณธ์„ ๋ณต์›ํ•˜๋Š” ์ €์žฅ์†Œ๋ฅผ ๋Œ€์‹ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ YouTube ์ „์šฉ ์ˆ˜์ง‘๊ธฐ๋Š” ์—†์Šต๋‹ˆ๋‹ค. ํ–ฅํ›„ ์ถ”๊ฐ€ํ•  ๋•Œ ์˜์ƒยท์ž๋ง‰ ํŠธ๋ž™ยท์–ธ์–ดยท๊ตฌ๊ฐ„์˜ ์‹๋ณ„๊ณผ ์ทจ๋“ ๊ถŒํ•œ์„ ์ •์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์›น URL ์ž…๋ ฅ๋„ ์ž„์˜ ์›น์‚ฌ์ดํŠธ์˜ ์ง€์† ๋™๊ธฐํ™”๋‚˜ ๋™์  ํŽ˜์ด์ง€ ์ „์ฒด ๋ณด์กด์„ ๋ณด์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋น„์ŠคํŠธ๋ฆฌ๋ฐ ์ผ์ผ ์†Œ์Šค๋Š” ๋ถ€๋ถ„ ์ˆ˜์ง‘ ๊ฒฐ๊ณผ๋กœ ๊ธฐ์กด์˜ ์™„์ „ํ•œ ํ•˜๋ฃจ๋ฅผ ๋ฎ์–ด์“ฐ์ง€ ์•Š๊ณ  ์‹คํŒจ๋กœ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค. ๋…๋ฆฝ ๋ฌธ์„œ์™€ ๋ˆ„์  ์ŠคํŠธ๋ฆฌ๋ฐ ์†Œ์Šค๋Š” ์„ฑ๊ณตํ•œ ํ•ญ๋ชฉ์„ ๊ฐ๊ฐ ๋ณด์กดํ•ฉ๋‹ˆ๋‹ค.

๋” ์•Œ์•„๋ณด๊ธฐ

  • ์„ค์ • ์ „์ฒด ๋ ˆํผ๋Ÿฐ์Šค โ€” config.example.yaml (๋ชจ๋“  ์†Œ์Šคยท์˜ต์…˜ ์ฃผ์„ ํฌํ•จ)
  • ํŽ˜์ด์ง€ ํฌ๋งท ์Šคํ‚ค๋งˆ โ€” lore schema๋กœ vault์— wiki/AGENTS.md ์ƒ์„ฑ
  • ์•„ํ‚คํ…์ฒ˜ ๊นŠ์ด ๋ณด๊ธฐ โ€” DeepWiki

๊ธฐ์ˆ  ์Šคํƒ

Rust 2024 edition ยท ๋นŒ๋“œ 1.99.1 ยท ์ตœ์†Œ ์ง€์› 1.97. tokio/reqwest(๋น„๋™๊ธฐ ์†Œ์Šค), jiff(ํƒ€์ž„์กด ์ •ํ™• ๋‚ ์งœ), serde-saphyr(YAML), minijinja(ํ…œํ”Œ๋ฆฟ), feed-rs(ํ”ผ๋“œ), petgraph(๋งํฌ ๊ทธ๋ž˜ํ”„), blake3(์ด๋ฒคํŠธยท์บ์‹œ ํ•ด์‹œ). ๋ผ์ด์„ ์Šค: MIT.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages