{"slug": "lore-give-your-coding-agent-the-decisions-your-team-made", "title": "Lore – give your coding agent the decisions your team made", "summary": "Lore, built on the open-source RAC engine, provides a deterministic, read-only system of record for coding agents by storing team decisions as typed Markdown in the repo. It serves exact, current decisions to Claude Code, Cursor, and Claude Desktop via MCP, rejecting superseded ones, and enforces knowledge integrity through CI validation. Unlike RAG or agent memory, Lore offers reproducible retrieval and air-gapped operation without LLM calls.", "body_md": "[Quickstart](#quickstart) ·\n[How it compares](#how-it-compares) ·\n[How it works](#how-it-works) ·\n[Docs](https://itsthelore.github.io/rac-core/) ·\n[CLI](https://itsthelore.github.io/rac-core/cli/) ·\n[Changelog](https://github.com/itsthelore/rac-core/blob/main/CHANGELOG.md)\n\nGive your coding agent the decisions your team already made — so it stops re-doing things you ruled out.\n\nLore 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`\n\nname.\n\nLore isn't a search index or a memory tool — it's the **deterministic system of\nrecord** an agent grounds against. Fuzzy retrieval (RAG, agent memory) is good at\nfinding *what's near* a loose question; Lore is good at returning the *exact,\ncurrent* decision and declining the ones you've superseded. They compose well —\nrecall fuzzily, then verify in Lore.\n\n| Lore | Fuzzy retrieval (RAG / agent memory) | |\n|---|---|---|\n| Good at | the exact, current decision | finding what's near a question |\n| Retrieval | deterministic, reproducible | similarity-ranked, varies by run |\n| Role | source of truth, read-only | a fast index or working copy |\n| In CI | enforced (`rac validate` / `rac gate` ) |\nnot its job |\n\n-\n**Install** the engine:\n\n```\npip install rac-core\n```\n\n-\n**Scaffold** identity and your first artifact:\n\n```\nrac quickstart\n```\n\n-\n**Connect your agent**(Claude Code, from your repo root):\n\n```\nclaude mcp add lore -- rac mcp\n```\n\n-\n**Enforce** in CI so bad knowledge never lands:\n\n```\nrac validate rac/ && rac gate rac/\n```\n\n| Command | Gets you |\n|---|---|\n`pip install rac-core` |\nthe `rac` CLI + the `lore` MCP server |\n`pip install 'rac-core[ingest]'` |\n+ DOCX / HTML import |\n`pip install 'rac-core[ingest-all]'` |\n+ PDF / PPTX / XLSX import |\n`pip install 'rac-core[explorer]'` |\n+ the terminal Explorer (`rac explorer` ) |\n\nRequires Python 3.11+. `uv tool install rac-core`\n\nalso works.\n\n**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`\n\nand`rac gate`\n\nreject 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`\n\n([security posture](/itsthelore/rac-core/blob/main/docs/security.md), ADR-086).\n\nClaude Code (from your repo root):\n\n```\nclaude mcp add lore -- rac mcp\n```\n\nClaude Desktop / Cursor (`mcpServers`\n\nin the client config):\n\n```\n{\n  \"mcpServers\": {\n    \"lore\": { \"command\": \"rac\", \"args\": [\"mcp\", \"--root\", \"/absolute/path/to/your/repo\"] }\n  }\n}\nrac quickstart             # set up identity + scaffold your first artifact\nrac new decision adr.md    # scaffold a typed artifact (mints the id)\nrac validate rac/          # check every artifact in a directory\nrac inspect requirement.md # see its type and completeness\nrac review rac/            # full repository review, worst problems first\nrac gate rac/              # the merge gate: validate + relationships + review\n```\n\nAlready have decisions in Confluence, Notion, or loose Markdown? The `rac-import`\n\nagent skill turns **one** existing document into **one** valid artifact, with a\nhuman-review step before anything is written:\n\n```\nrac skill install rac-import\n```\n\nThen ask your agent, in plain language: *\"import this decision doc into Lore.\"* It\ndrafts from **only** what your document says, shows you the proposed type, title,\nand relationships to confirm, scaffolds with `rac new`\n\n, and closes on\n`rac validate`\n\n. For multi-format or bulk conversion, use the `rac-ingest`\n\nskill.\n\n```\nrac export rac/ --html --out lore.html   # the Portal: the whole graph, one file\nrac export rac/ --okf                    # a conformant Open Knowledge Format bundle\nrac export rac/ --documents              # JSONL for memory/RAG backends\nrac export rac/ --graph                  # the typed decision graph for graph backends\n```\n\nThe `--documents`\n\nand `--graph`\n\nmodes feed external memory, RAG, and graph tools\nso an agent can recall fuzzily there and then **verify in Lore** — see the\n[CLI reference](https://itsthelore.github.io/rac-core/cli/#export). The connectors\nthemselves live in the separate `lore-connectors`\n\ncompanion.\n\nThe engine is a library too; its public surface is `rac.__all__`\n\n.\n\n``` python\nfrom rac import parse_file, classify, find_artifacts\n\nart = parse_file(\"rac/decisions/adr-001-markdown-first.md\")\nprint(classify(art).type)                  # -> \"decision\"\n\nresult = find_artifacts(\"rac/\", \"caching\")  # returns a SearchResult\nfor hit in result.matches:\n    print(hit.id, hit.title)\n```\n\nGoogle's Open Knowledge Format (OKF) standardises the *carrier* — a Git tree of\nMarkdown with YAML front matter — and is deliberately permissive. RAC writes that\nsame carrier and adds what OKF leaves to the consumer: **write-time enforcement**\nin CI. `rac validate`\n\nand `rac relationships --validate`\n\nreject malformed\nartifacts, broken links, and references to superseded decisions, deterministically,\nbefore the knowledge lands. `rac export --okf`\n\nturns any RAC repo into a conformant\nOKF bundle — so the two compose rather than compete.\n\n**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.\n\n**Full documentation: https://itsthelore.github.io/rac-core/**\n\n[Quickstart](https://itsthelore.github.io/rac-core/quickstart/)— install and author your first artifact[MCP server](https://itsthelore.github.io/rac-core/mcp/)— tools, client configuration, examples[CLI reference](https://itsthelore.github.io/rac-core/cli/)— every command, flag, and exit code\n\nLore is the product surface of **RAC — Requirements as Code**, the open-source\nengine underneath; the package, CLI, and MCP server ship under the `rac`\n\nname, and\n`lore`\n\nis the server identity and brand.\n[Wayfinder](https://github.com/itsthelore/wayfinder-router), the deterministic\nprompt-complexity router, began as a `route`\n\nexperiment inside RAC and was split\ninto its own tool — routing is a runtime concern, not a knowledge one.\n\n```\nrac-core/\n  src/rac/        the engine: CLI, core, services, output, the in-process MCP\n                  server (rac mcp), and bundled skills, templates, and git hooks\n  rac/            the dogfood corpus — requirements, decisions, designs, roadmaps,\n                  and prompts that govern the project itself\n  tests/          per-service batteries plus core / cli / artifacts coverage (ADR-027)\n  docs/           the documentation site (MkDocs)\n  examples/       the grounding demo, woven into the corpus and the test fixtures\n  rac-localview/  the Portal / graph viewer, vendored into the engine\npip install -e .[dev]\npython -m pytest\n```\n\n`ruff check`\n\n, `ruff format --check`\n\n, and `mypy src/`\n\nrun in CI alongside the\nper-service batteries (ADR-027).\n\nLore is early and evolving quickly. The MCP server ships today. Contributions,\nideas, and experiments welcome — see [CONTRIBUTING.md](https://github.com/itsthelore/rac-core/blob/main/CONTRIBUTING.md).", "url": "https://wpnews.pro/news/lore-give-your-coding-agent-the-decisions-your-team-made", "canonical_source": "https://github.com/itsthelore/rac-core", "published_at": "2026-06-29 04:40:35+00:00", "updated_at": "2026-06-29 04:58:03.232161+00:00", "lang": "en", "topics": ["developer-tools", "ai-agents", "ai-tools", "large-language-models"], "entities": ["Lore", "RAC", "Claude Code", "Cursor", "Claude Desktop", "MCP"], "alternates": {"html": "https://wpnews.pro/news/lore-give-your-coding-agent-the-decisions-your-team-made", "markdown": "https://wpnews.pro/news/lore-give-your-coding-agent-the-decisions-your-team-made.md", "text": "https://wpnews.pro/news/lore-give-your-coding-agent-the-decisions-your-team-made.txt", "jsonld": "https://wpnews.pro/news/lore-give-your-coding-agent-the-decisions-your-team-made.jsonld"}}