ARCS public goods

Answers with receipts, or a plain "not covered."

Ask RFP-O-Matic anything about an RFP and its amendments. You get a short answer and the exact clause behind it, or a plain "not covered." Pure Python, nothing to install. It runs on your machine as an MCP server for Claude Code or Claude Desktop.

●Sourcedevery answer ◆Honestsays when it can't ▲Real model1 wrong in 24

Full walkthrough, 2:52. In the video the engine goes by RFP-O-Matic.

How it works

  1. Parse with rules, not a model. Clauses are numbered; an amendment that revises 7.1 is recorded as superseding it.
  2. Find clauses by keyword search with stemming and a small glossary.
  3. Ask a model to pick clauses and write one sentence, then check it in code before anyone sees it.

Try it

The code is public: github.com/flashesofbrilliance/rfp-engine.

git clone https://github.com/flashesofbrilliance/rfp-engine.git
cd rfp-engine
python3 mcp/eval_via_mcp.py --provider mock --compare-direct
claude mcp add rfp-intelligence -e MODEL_PROVIDER=mock -- python3 "$PWD/mcp/server.py"

Then ask: "Using rfp-intelligence, what is the bid deposit?" The RFP here is fictional. This demo runs on a mock model, so no API key is needed.

status   answered
answer   the bid deposit is increased from $20,000 to $35,000
cites    RFP 7.1 + Amendment No. 1 A1.2
notes    7.1 is superseded in part by A1.2; the amended value governs
gate     fast path: verbatim governing text, no model call

Six rules, enforced in code

Shows its source

Every answer points to the clause it came from.

Numbers match

Amounts, dates and percentages match the text exactly.

Latest wins

If an amendment changed it, you get the new value.

"Not covered" counts

If the RFP doesn't say, it tells you so.

Facts, not decisions

It won't write your bid or tell you whether to bid.

No guessing

Without a model, you get the clauses, not a summary.

Example: with MOCK_FAULT=invent the model claims "$80,000 or 12%". Neither figure is in the cited clause, so the summary is withheld:

gate     verbatim FAILED: ['12%', '$80,000']

What was measured, 2026-10-29 and 10-30

5 of 5deterministic cases pass through the MCP server, identical to the engine called directly
8 of 8injected faults caught

The first three ran on the mock model, the same one "Try it" uses. The next two ran on a real model, once, on 24 questions.

11 / 12 / 1real-model run of 24 questions (d67294d): correct, withheld, wrong. The target, set in advance, was 0 wrong; it was missed
14 of 24correct when checked by hand (046e1c0): 3 withheld answers were right, because the figure check was too strict

The bench, 2:15: how the 24 questions were scored, and where the model stops and the code checks.

One of the 3 withheld answers that were right, and why the check held it back. 0:51.

Not proven yet

How it was built

The engine and its videos were built with Claude Code agents. Every correction became a check that now runs on each change, so the next change is checked for that mistake too.

Making the videos, 2:23: each correction became a check that runs on every cut.

For agents

llms.txt indexes this tool for language models. AGENTS.md tells a coding agent how to run it, check it, and which rules must not change. The repo adds notes for each harness: Claude Code, Hermes (untested) and OpenAI Agents (untested). Paste this into Claude Code from the engine's folder:

Read AGENTS.md in this folder, run the mock check it names, then register mcp/server.py as an MCP server and ask it what the bid deposit is.

Source on GitHub · Zach Harris · ARCS public goods · site llms.txt · site AGENTS.md