The system of record for product intent
Agents can build anything. Veri helps you decide what should be built — and whether it worked. Evidence, requirements, decisions, and work orders live as plain Markdown in your repo, and each coding task gets the context it needs — without rebuilding the project from chat history every session.
npm install -g @verikb/cli
Also for Windows 10+ and Linux (AppImage · .deb) — the Windows installer is unsigned for now, so SmartScreen warns on first install; the ~120 MB AppImage auto-updates and bundles its own WebKit; the .deb is smaller but doesn't auto-update. The CLI and MCP server are on npm and run anywhere Node 20+ does — npm install -g @verikb/cli on any platform.
PDF export pipeline
in-progressRender branded invoice PDFs from the invoice data model. Output must be deterministic and print-identical across machines, per [[REQ-001]].
Branded PDF invoices
approvedUsers export invoices as branded PDFs: the customer's logo, the agreed layout, and print-identical output on every machine. This is the product's core deliverable — an invoice a client can be billed with.
Typst for PDF rendering
activeCompile invoice templates with Typst, embedded in the Rust core.
Supersedes [[DEC-003]]. Typst gives sub-second compiles and byte-stable output; implemented by [[WO-002]].
Plain files are the architecture
Typst for PDF rendering
activeCompile invoice templates with Typst, embedded in the Rust core.
---
id: DEC-005
type: decision
status: active
approved: 2026-08-05
links:
- id: DEC-003
rel: supersedes
- id: WO-002
rel: implemented-by
---
## Choice
Compile invoice templates with Typst,
embedded in the Rust core.
## Rejected alternatives
- **Handlebars + headless browser** — the
[[DEC-003]] approach; slow and
nondeterministic print output.
A Veri project is a veri/ directory of readable Markdown. The files are the source of truth — the app is a view over them.
Four things operate on the same knowledge, and none of them owns it:
- The Veri appreads and edits the files
- Your editoropens them like any Markdown
- Gitversions, diffs, and syncs them
- Your agentretrieves them over MCP
Delete Veri and your project knowledge is still a folder of Markdown that renders on GitHub.
Why not just CLAUDE.md and an ADR folder?
Every new agent session starts with incomplete institutional memory — the session ends, and everything it learned evaporates.
If you keep an agent-instructions file — CLAUDE.md, AGENTS.md — and architecture decision records, you already believe the idea. What a folder of files can't do is scale with the project: one file carries everything, into every session, and nothing checks that any of it still holds. Veri keeps the plain files and adds the four things the folder can't.
A growing CLAUDE.md
- one file carries everything, into every session
- every task pays the whole file's token cost
- no links between documents — nothing flags drift
- an agent edit becomes an instruction, silently
- outcomes scatter across chat logs and commit messages
- prune it by hand, or watch it rot
With Veri
- each task gets a scoped package — only the documents linked to it
- typed links between documents, and
veri checkflags what breaks - agent writings arrive as drafts you promote
- finished work files a receipt on the work order
- knowledge accumulates; the per-task cost doesn't
Keep your CLAUDE.md — Veri is what it points at. This repository's own is two lines, and the second says to fetch the context package.
The agent gets a package, not a repo dump
The context package for a task is the documents linked to it — the project workflow, its requirements, every active decision within two hops, source excerpts. Typically a few thousand tokens, with a per-document estimate, assembled fresh from current file versions every time. It's the panel on the right in the demo above.
Superseded decisions ride along by name only, flagged as already rejected — so the agent doesn't relitigate them.
You see the exact package before the agent does, and start the session from it with one click.
Decisions that stay decided
A decision records what was chosen, why, and which alternatives were rejected — like DEC-005 above. Active decisions travel into every future context package they constrain. Agents stop re-opening what you settled in March — and when a decision is superseded, the package says so.
Agents propose. You decide what becomes canon.
Agent-written requirements start as drafts, agent-filed decisions as proposals — labeled non-binding until you promote them. Nothing an agent writes silently becomes project truth.
And when a session finishes, work comes back as receipts: when, which commit, which files, what was done — appended to the work order itself.
Decisions, approvals, status changes, and receipts are ordinary file changes. The evolution of the project's reasoning is as inspectable as the evolution of its code: git diff shows every word.
Works with your coding agent
Veri exposes the knowledge base over MCP, the open protocol coding agents already speak. One click writes the project's .mcp.json; your agent gets ten tools to read context and file work back. No prompt pasting, no lock-in to one model.
Veri detects the agents on your machine and starts a session from the work order's kickoff prompt — or copy the prompt into any client that speaks MCP.
- Claude Codeconnection guide →
- Cursorconnection guide →
- Codex CLIconnection guide →
- Gemini CLIconnection guide →
Something else? Any MCP client works.
{
"mcpServers": {
"veri": {
"command": "node",
"args": [
"…/@verikb/mcp/dist/server.js",
"/Users/you/code/your-project"
]
}
}
}
Give your agent a memory that outlives the session
Free, open source, local-first. Your knowledge base is yours — Veri just keeps it working. And the repo practices what it preaches: Veri is built by executing Veri work orders.