Install
Prebuilt binaries for macOS (Apple Silicon and Intel) and Linux (x86_64 and aarch64).
❯ curl -fsSL https://raw.githubusercontent.com/lambiengcode/reify/main/install.sh | sh
Or build from source, which needs a Rust toolchain:
❯ cargo install --path crates/reify-cli
Quickstart
Two minutes to the first answer. init reports what will and will not be
indexed before it does anything, so you can see the shape of the job first.
❯ reify init ❯ reify index ❯ reify context "add a discount tier for strategic customers" --budget 1500
Indexing is incremental after the first run; --force rebuilds. Everything
lives in a single .reify/ directory, which you can delete at any time.
Wire it into your agent
One command appends a short instruction block to AGENTS.md or CLAUDE.md.
❯ reify init --write-agent-instructions
For tools that read a different file — .cursorrules,
CONVENTIONS.md, .windsurfrules, .clinerules/ —
paste the same lines yourself:
Before changing code here, run `reify context "<what you are about to do>" --toon`. Run `reify why <file>:<line>` before modifying unfamiliar logic.
This plain-text level is what the benchmark measured — no protocol, no server, no per-turn schema tax. Use the MCP server only if your agent prefers structured tools.
Commands
Every command takes --json for machine-readable output, and -C <path> to point at another repository.
| Command | What it answers |
|---|---|
reify init | Create .reify/, and report what will and will not be indexed |
reify index | Compile the system model. Incremental unless --force |
reify status | Freshness and coverage of the current store |
reify context | The minimum useful context for a task. The flagship command |
reify why | Why this exists: rules, concepts, documents, history and blast radius |
reify impact | What breaks if this changes |
reify conflicts | Documentation that disagrees with the implementation |
reify rules | Mined business rules |
reify report | A system-level scorecard |
reify explain | Everything known about a concept, in every language it appears in |
reify flow | The sequence of code that carries out a business process |
reify concepts | Inspect and extend the concept glossary |
reify preflight | A compact risk header for a file about to be edited, for an editor hook |
reify llm | Model-assistance status and prompt inspection |
reify serve | Serve the Model Context Protocol on stdio |
reify completions | Print a shell completion script |
reify context
The command everything else exists to support. Give it a task in plain language and a token budget; it returns the smallest set of facts that answers it, ordered, each with a citation.
❯ reify context "block orders above the approval cap" --budget 1200 --toon
--budget <n>— the ceiling, in tokens. Reify fills it and stops.--toon— the agent-facing format: columns declared once, one row per record, far cheaper than JSON.--for-edit— return whole definitions padded for editing, rather than minimal read spans.--json— the same facts against a versioned schema.
MCP server
Three tools, and that is the whole surface. An MCP server's schemas are paid for on every turn, so a large one is a tax on every message an agent sends.
| Tool | Use |
|---|---|
reify_context | The minimum context for a task, under a budget |
reify_why | Provenance for one file and line |
reify_impact | The blast radius of a symbol |
❯ reify serve
Epistemic status
Every claim is tagged with how it is known. A renderer that prints an inference as bare prose is a bug here, and there is a test that says so.
| Tag | Means |
|---|---|
confirmed | Parsed directly from source. A fact. |
observed | Seen in behaviour or history, repeatedly. |
inferred | A lead to verify against its citation — never a fact. |
conflicted | Two sources disagree, and both are shown. |
unknown | Nothing is known. Said plainly rather than guessed. |
What it reads
Source in 11 languages via tree-sitter, SQL schemas and migrations, business documents, and the git history — which is often the only place a decision was ever written down. Nothing is sent anywhere to be understood.
Multilingual
No language is canonical, English included. Concept ids are opaque and every label carries a language tag, so a Vietnamese, Thai, Korean or German requirement reaches English code through the concept layer rather than an embedding model — which is why the answer arrives with a line number instead of a similarity score.
- Thai, Lao, Khmer, Japanese and Chinese have no word spaces, so a word index stores one enormous token. There is a trigram substring index for non-ASCII content; ASCII-only repositories never pay for it.
- Korean glues particles to stems.
승인becomes승인을, and whole-word matching finds neither. - Obligation and exemption language is detected in 11 languages, so a rule written in any of them is mined as a rule.
Privacy
Your source code and your business documents never leave the machine. Reify opens no network connection — not "by default", at all.
Networking crates in Cargo.lock | asserted zero, in CI |
|---|---|
| Sockets in the source | asserted zero, in CI |
| Subprocesses | git, reviewed document converters, and — for reify upgrade only — curl and tar; each named in a test |
| Telemetry | none, and no flag that turns any on |
Set REIFY_OFFLINE=1 to refuse even the upgrade path.
Upgrade & uninstall
❯ reify upgrade --check # is there a newer release? ❯ reify upgrade # fetch and replace this binary ❯ reify uninstall --yes # remove the binary, and nothing else ❯ reify uninit --yes # remove this repository's .reify/ store
Both removal commands print their plan and change nothing without --yes.
uninstall never touches a repository store, and uninit never
touches the binary.