Skip to content

RAC v0.10.3 - the "meet Lore" release

Choose a tag to compare

@tcballard tcballard released this 12 Jun 12:41
· 585 commits to main since this release

The "meet Lore" release — your coding agent now reads the decisions your team already made, and cites them instead of violating them. Deterministic. Read-only. No RAG, no guessing.

pip install --upgrade requirements-as-code
claude mcp add rac-guide -- rac mcp

Your agent reintroduces an approach you rejected months ago. It rebuilds something you deliberately removed. The decision was written down — in an ADR nobody, human or agent, ever reopened. Lore fixes that: RAC now ships an MCP server that serves your requirements, decisions, designs, and roadmaps to Claude Code, Claude Desktop, and Cursor — mid-task, at the moment they matter.

Your agent, grounded

rac mcp starts a server from any RAC repository — no flags, no daemon, no account. Your agent client spawns it and gets four read-only tools:

  • search_artifacts — find the decisions that cover what it's about to build
  • get_artifact — read one artifact by any ID it encounters
  • get_related — what connects to it, in both directions
  • get_summary — what recorded knowledge exists at all

Nothing tells the agent to look. The tool descriptions name the moment ("call this before designing or implementing…"), and the agent reaches for your decisions on its own — then cites them by ID.

Why you care: you write the decision once, in Markdown, in your repo. Every agent session from then on respects it — and when one of its proposals conflicts with a recorded decision, you hear about the conflict instead of shipping it.

One config block per client, verified walkthroughs, and troubleshooting live in docs/mcp.md.

Honest answers, by construction

Everything the server tells your agent is reproducible:

  • Read-only by construction. The server cannot create, modify, or delete files — enforced in code and pinned by tests, not promised by convention.
  • Never stale. Every tool call re-reads the repository, so the agent can't act on a decision it just changed.
  • Never floods the context. Responses are capped (10,000 characters), truncated at whole-item boundaries, and always say what was omitted and how to narrow.
  • Fails as data. A missing or ambiguous ID comes back as a structured answer the agent can recover from — never a protocol error.

Search that finds the decision, not the noise

Search — rac find and search_artifacts alike — got two upgrades:

  • Token-boundary matching. Queries match whole words and prefixes, not raw substrings: lore no longer matches every artifact with "Explorer" in its path, while relation still finds relationships.
  • Body text counts now. A decision whose body settles your question is found even when its title doesn't carry the keyword — and the match arrives with a snippet (the matching line and its section), so the agent can judge relevance without opening every candidate.

Heads up — this is a behavior change: search results differ from earlier versions wherever substring matching produced mid-word hits, and an empty or punctuation-only query now returns no matches instead of everything. Ranking stays deterministic and explainable: ID, then title, then path, then heading, then body.

Try it without writing a thing

A complete worked corpus ships in examples/guide/: a true-to-life soft-delete decision, its connected requirement, design, and roadmap, plus a small code task whose obvious implementation violates the decision. demo.md scripts the whole contrast — the same prompt with and without Lore — so you can watch an agent violate the decision, then cite and respect it.

Also in this release (since v0.8.11)

  • Zero-flag startup that fails helpfully: pointing rac mcp at an empty directory starts the server, says so on stderr, and get_summary reports the empty state — the first run is the one most likely to be misconfigured.
  • Team setup via CLAUDE.md routing: record your agent guidance as a validated RAC prompt artifact and @import it — the instructions for using your knowledge become governed knowledge themselves (docs/mcp.md §6).
  • A new README that leads with what this is for — and with Lore, the product name for the grounding experience, built on RAC underneath (recorded as ADR-036, like every other decision here).
  • rac find shows snippets under body-matched results, the same ones the agent sees.

Upgrading

pip install --upgrade requirements-as-code
uv tool upgrade requirements-as-code

The MCP server is a standard part of the package — no extra to install (the upgrade pulls one new dependency, the official mcp SDK). Every existing command, file, JSON contract, and exit code keeps working exactly as before, with one announced exception: search matching semantics changed as described above. Search JSON gains optional section/snippet fields on body-matched entries only; all other entries are byte-identical to before.