It forgets between sessions
Context ends when the conversation does. The next session starts from nothing, so the same ground gets covered again and the same decisions get re-litigated.
RTFM returns facts with their sources — never prose it wrote itself. No model runs when you query it, so a query costs zero tokens and “I don’t know” is a property of the system rather than a decision it took.
Runs on your own machine, over your own files. No account, nothing to sign up for.
An agent is only as good as what it remembers, and today it remembers almost nothing it can prove.
Context ends when the conversation does. The next session starts from nothing, so the same ground gets covered again and the same decisions get re-litigated.
Asked something the material does not cover, a generator still produces a confident paragraph. The failure is silent: nothing marks the sentence that was made up.
Without provenance every answer has to be checked by hand against the documents — which is the work the agent was supposed to save.
Three steps. A model is involved in exactly one of them.
Step 1
Point RTFM at files, pages or pasted text. An extraction model reads them once and proposes facts. This is the only place a model runs, and it runs offline, on ingest.
Step 2
Each fact keeps the document it came from, the revision of that document, what it applies to, and how sure the extractor was. What is missing is recorded too, as an explicit gap.
Step 3
A query is retrieval — stemming, a synonym dictionary, ranking. It returns a compact pack of facts with provenance. RTFM spends no tokens answering, because nothing on that path is a model.
A fact names its document and that document’s revision. Edit the source and the old revision stays, so a citation made last month is still checkable against what the file said then.
If nothing clears the relevance threshold the pack comes back empty and says so. That is not restraint on a model’s part — there is no generator on the query path to write anything else.
“True for 1.5” and “true for 2.0” are two facts, not a contradiction. A fact carries what it applies to, so an agent can tell which one it is holding.
When two sources disagree, both are kept and flagged. RTFM does not pick a winner quietly; it hands the disagreement to whoever can actually resolve it.
Access is filtered in SQL before retrieval and at every step of the graph walk. An anonymous caller cannot read private knowledge, and cannot learn that it exists.
The canon is Markdown with YAML front matter, one file per entity, in your repository. The index is derived and disposable — delete it and rebuild.
RTFM speaks the Model Context Protocol over stdio. Any MCP-capable client can read it; writing is a separate flag, off by default.
{
"mcpServers": {
"rtfm": {
"command": "rtfm",
"args": ["mcp", "--as-owner"],
"env": { "RTFM_ROOT": "/path/to/your/canon" }
}
}
}
--as-owner lets that client read your private knowledge as well as the public part; drop it for a client you would rather keep to public only. Writing is a separate flag either way.
A working prototype, developed in the open. The domain core, the file canon, the index, the ingest pipeline and the MCP server all run today; the benchmark is published with its method and its failures.
The source, the ADRs that argue every decision, the task briefs and the reports are all in the repository. There is no hosted service and nothing phones home.
The dataset, the scoring script and every run live in the repository, including the runs that came out badly.