로어(Lore)는 팀이 과거에 내린 결정, 요구사항, 설계 등을 저장소 내의 타입 지정 Markdown 파일로 관리하여 Claude Code나 Cursor 같은 코딩 에이전트에 제공하는 도구입니다. 이를 통해 AI가 팀이 이미 기각한 작업을 반복하거나 결정을 위반하는 것을 막고, 결정된 가이드라인을 정확히 따르게 만듭니다. RAG와 달리 네트워크나 LLM 호출 없이 결정론적이고 재현 가능한 방식으로 동작하며, CI 단계에서 잘못된 지식이 섞이는 것을 방지하는 것이 핵심입니다.
번역된 본문
로어(Lore) 빠른 시작 · 비교 · 작동 방식 · 문서 · CLI · 변경 이력
여러분의 코딩 에이전트에게 팀이 이미 내린 결정을 전달하세요. 그러면 에이전트가 여러분이 이미 기각(배제)한 작업을 다시 반복하는 일을 멈출 것입니다.
로어(Lore)는 팀의 기록된 지식(요구사항, 결정, 디자인, 로드맵 및 프롬프트)을 저장소 내에 타입이 지정된 Markdown 파일로 유지합니다. 그리고 MCP를 통해 Claude Code, Cursor, Claude Desktop에 읽기 전용으로 제공하므로, 에이전트가 팀의 결정을 위반하는 대신 해당 결정을 근거로 삼아 인용하게 됩니다. RAG, 임베딩, 관련성을 결정하기 위한 모델 호출이 전혀 없습니다. 데이터 검색은 결정론적이며 재현 가능합니다. 이 도구는 오픈소스 엔진인 RAC(Requirements as Code, 코드로서의 요구사항)를 기반으로 구축되었으며, 패키지, CLI, MCP 서버는 모두 rac라는 이름으로 제공됩니다.
비교 (How it compares)
로어는 검색 인덱스나 메모리 도구가 아니라 에이전트가 기반으로 삼는 결정론적인 '단일 정보 원천(System of Record)'입니다. 퍼지 검색(Fuzzy retrieval, RAG 또는 에이전트 메모리)은 느슨한 질문과 근접한 내용을 찾는 데 능하지만, 로어는 정확하고 최신의 결정을 반환하고 이미 폐기된 결정은 거부하는 데 뛰어납니다. 이 두 가지는 잘 결합됩니다. 퍼지 방식으로 검색한 후 로어에서 검증하는 식입니다.
로어: 정확하고 최신의 결정에 능함 / 결정론적이며 재현 가능 / 정보 원천이자 읽기 전용 / CI(지속적 통합)에서 rac validate / rac gate로 강제 적용
퍼지 검색 (RAG / 에이전트 메모리): 질문과 근접한 내용을 찾는 데 능함 / 유사도 순위에 따라 달라지며 실행마다 변동됨 / 빠른 인덱스나 작업용 사본 역할 / CI 강제 적용은 본연의 역할이 아님
빠른 시작 (Quickstart)
엔진 설치:pip install rac-core
식별자 및 첫 아티팩트 스캐폴드:rac quickstart
에이전트 연결 (저장소 루트에서 Claude Code 실행):claude mcp add lore -- rac mcp
CI에서 강제 적용하여 잘못된 지식이 유입되지 않도록 방지:rac validate rac/ && rac gate rac/
설치 명령어 및 기능 (Install Command Gets you)
pip install rac-core: rac CLI 및 로어 MCP 서버를 설치합니다.
pip install 'rac-core[ingest]': DOCX / HTML 가져오기 기능을 추가합니다.
pip install 'rac-core[ingest-all]': PDF / PPTX / XLSX 가져오기 기능을 추가합니다.
pip install 'rac-core[explorer]': 터미널 탐색기(rac explorer)를 추가합니다.
Python 3.11 이상이 필요합니다. uv tool install rac-core 명령어를 사용해도 됩니다.
작동 방식 (How it works)
저장소 내의 타입 지정 Markdown: 모든 아티팩트는 약간의 프론트매터(Frontmatter)가 포함된 순수 Markdown입니다. 엔진은 이를 결정론적으로 분류하고 유형별 스키마에 대해 검증합니다.
서비스 시 읽기 전용: MCP 서버는 오직 읽기만 수행합니다. 신뢰 경계는 사람이 수행하는 PR(Pull Request) 리뷰이며, 에이전트는 데이터 저장소를 변경할 수 없습니다.
쓰기 시점에 강제 적용:rac validate 및 rac gate는 형식이 잘못된 아티팩트, 손상되거나 모호한 링크, 폐기된 결정에 대한 참조를 CI 단계에서(지식이 병합되기 전에) 거부합니다.
설계 단계부터 네트워크 차단(Air-gapped): 엔진은 LLM 호출이나 네트워크 호출을 전혀 하지 않습니다. 유일한 외부 통신은 기본적으로 꺼져 있는 사용량 핑(Ping)이며, 규제가 있는 환경에서는 rac telemetry off --enterprise(보안 태세, ADR-086)를 통해 이를 영구히 끌 수 있음을 증명할 수 있습니다.
에이전트 연결 (Connect your agent)
Claude Code (저장소 루트에서):claude mcp add lore -- rac mcp
기존 결정 가져오기 (Import an existing decision)
이미 Confluence, Notion 또는 느슨한 형태의 Markdown에 결정 사항이 있나요? rac-import 에이전트 스킬은 기존 문서 하나를 유효한 아티팩트 하나로 변환하며, 데이터가 기록되기 전에 사람이 검토하는 단계를 거칩니다.
rac skill install rac-install
그런 다음 에이전트에게 일상적인 언어로 다음과 같이 요청하세요. "이 결정 문서를 로어로 가져와." 이 기능은 문서에 적힌 내용만을 바탕으로 초안을 작성하고, 제안된 유형, 제목 및 관계를 보여주어 확인을 받습니다. 이후 rac new로 스캐폴드하고 rac validate로 마무리합니다. 다중 포맷이나 대량 변환의 경우 rac-ingest 스킬을 사용하세요.
Lore Quickstart · How it compares · How it works · Docs · CLI · Changelog Give your coding agent the decisions your team already made — so it stops re-doing things you ruled out. Lore keeps your team's recorded knowledge — requirements, decisions, designs, roadmaps, and prompts — as typed Markdown in your repo and serves it read-only to Claude Code, Cursor, and Claude Desktop over MCP, so the agent cites your decisions instead of violating them. No RAG, no embeddings, no model call to decide what's relevant — retrieval is deterministic and reproducible. It is built on RAC — Requirements as Code , the open-source engine underneath; the package, CLI, and MCP server ship under the rac name. How it compares Lore isn't a search index or a memory tool — it's the deterministic system of record an agent grounds against. Fuzzy retrieval (RAG, agent memory) is good at finding what's near a loose question; Lore is good at returning the exact, current decision and declining the ones you've superseded. They compose well — recall fuzzily, then verify in Lore. Lore Fuzzy retrieval (RAG / agent memory) Good at the exact, current decision finding what's near a question Retrieval deterministic, reproducible similarity-ranked, varies by run Role source of truth, read-only a fast index or working copy In CI enforced ( rac validate / rac gate ) not its job Quickstart Install the engine: pip install rac-core Scaffold identity and your first artifact: rac quickstart Connect your agent (Claude Code, from your repo root): claude mcp add lore -- rac mcp Enforce in CI so bad knowledge never lands: rac validate rac/ && rac gate rac/ Install Command Gets you pip install rac-core the rac CLI + the lore MCP server pip install 'rac-core[ingest]' + DOCX / HTML import pip install 'rac-core[ingest-all]' + PDF / PPTX / XLSX import pip install 'rac-core[explorer]' + the terminal Explorer ( rac explorer ) Requires Python 3.11+. uv tool install rac-core also works. How it works Typed Markdown, in your repo. Every artifact is plain Markdown with a tiny frontmatter envelope; the engine classifies it deterministically and validates it against a per-type schema. Read-only at serve time. The MCP server only ever reads; the trust boundary is human PR review, and the agent cannot mutate the store. Enforced at write time. rac validate and rac gate reject malformed artifacts, broken or ambiguous links, and references to superseded decisions — in CI, before the knowledge lands. Air-gapped by design. The engine makes no LLM calls and no network calls; the only egress is a consent-gated, content-free usage ping that is off by default, and regulated installs can prove it stays off with rac telemetry off --enterprise ( security posture , ADR-086). Connect your agent Claude Code (from your repo root): claude mcp add lore -- rac mcp Claude Desktop / Cursor ( mcpServers in the client config): { "mcpServers" : { "lore" : { "command" : " rac " , "args" : [ " mcp " , " --root " , " /absolute/path/to/your/repo " ] } } } Author and enforce artifacts rac quickstart # set up identity + scaffold your first artifact rac new decision adr.md # scaffold a typed artifact (mints the id) rac validate rac/ # check every artifact in a directory rac inspect requirement.md # see its type and completeness rac review rac/ # full repository review, worst problems first rac gate rac/ # the merge gate: validate + relationships + review Import an existing decision Already have decisions in Confluence, Notion, or loose Markdown? The rac-import agent skill turns one existing document into one valid artifact, with a human-review step before anything is written: rac skill install rac-import Then ask your agent, in plain language: "import this decision doc into Lore." It drafts from only what your document says, shows you the proposed type, title, and relationships to confirm, scaffolds with rac new , and closes on rac validate . For multi-format or bulk conversion, use the rac-ingest skill. Export the corpus rac export rac/ --html --out lore.html # the Portal: the whole graph, one file rac export rac/ --okf # a conformant Open Knowledge Format bundle rac export rac/ --documents # JSONL for memory/RAG backends rac export rac/ --graph # the typed decision graph for graph backends The --documents and --graph modes feed external memory, RAG, and graph tools so an agent can recall fuzzily there and then verify in Lore — see the CLI reference . The connectors themselves live in the separate lore-connectors companion. Python API The engine is a library too; its public surface is rac.__all__ . from rac import parse_file , classify , find_artifacts art = parse_file ( "rac/decisions/adr-001-markdown-first.md" ) print ( classify ( art ). type ) # -> "decision" result = find_artifacts ( "rac/" , "caching" ) # returns a SearchResult for hit in result . matches : print ( hit . id , hit . title ) How it relates to OKF Google's Open Knowledge Format (OKF) standardises the carrier — a Git tree of Markdown with YAML front matter — and is deliberately permissive. RAC writes that same carrier and adds what OKF leaves to the consumer: write-time enforcement in CI. rac validate and rac relationships --validate reject malformed artifacts, broken links, and references to superseded decisions, deterministically, before the knowledge lands. rac export --okf turns any RAC repo into a conformant OKF bundle — so the two compose rather than compete. Who it's for Teams running coding agents heavily (Claude Code, Cursor) tired of the agent ignoring decisions the team already made. Teams who already write ADRs and want those decisions to actually shape what the agent does. Anyone who wants the why behind their software versioned alongside the code. Documentation Full documentation: https://itsthelore.github.io/rac-core/ Quickstart — install and author your first artifact MCP server — tools, client configuration, examples CLI reference — every command, flag, and exit code Origin Lore is the product surface of RAC — Requirements as Code , the open-source engine underneath; the package, CLI, and MCP server ship under the rac name, and lore is the server identity and brand. Wayfinder , the deterministic prompt-complexity router, began as a route experiment inside RAC and was split into its own tool — routing is a runtime concern, not a knowledge one. Repository layout rac-core/ src/rac/ the engine: CLI, core, services, output, the in-process MCP server (rac mcp), and bundled skills, templates, and git hooks rac/ the dogfood corpus — requirements, decisions, designs, roadmaps, and prompts that govern the project itself tests/ per-service batteries plus core / cli / artifacts coverage (ADR-027) docs/ the documentation site (MkDocs) examples/ the grounding demo, woven into the corpus and the test fixtures rac-localview/ the Portal / graph viewer, vendored into the engine Test pip install -e .[dev] python -m pytest ruff check , ruff format --check , and mypy src/ run in CI alongside the per-service batteries (ADR-027). Project status Lore is early and evolving quickly. The MCP server ships today. Contributions, ideas, and experiments welcome — see CONTRIBUTING.md . License Apache License 2.0 .