LOCAL RETRIEVAL · MARKDOWN-NATIVE

Answers with receipts.

Ask your own notes — an Obsidian vault, or any folder of Markdown. Hybrid search finds the passages; the model answers only from them. When nothing supports an answer, it returns no_evidence instead of making something up.

v0.1.0 · 89.6 MB · Windows 10/11 x64

RUST · TAURI 2 · SQLITE + LANCEDB + TANTIVY

The index stays on your machine. The answer step calls the model you configure.

ASK YOUR NOTES ON THIS MACHINE

What did we decide about the Q3 warehouse lease?

Keep the Q3 warehouse and reopen the renewal conversation in Q4.1 The planning note ties the decision to the new 3PL contract.2

lease-notes.md#lease · RRF 0.031

Renewal window opens Oct 1. Target Q4 for the new terms.

2026-09-planning.md#planning · RRF 0.028

Keep the warehouse through Q3; revisit after the 3PL contract lands in Q4.

6 passages · 2 sources · 81 ms512-D

New material comes in from two tools: AV2Text turns video and audio into transcripts; Lexi turns reading into structured notes. Both write Markdown into the vault's indexed inbox, so it is searchable without copy-paste.

01RETRIEVAL

Hybrid, not vibes.

Dense vectors catch paraphrases; BM25 catches exact names, IDs and acronyms. Reciprocal rank fusion merges the two, and a second hop pulls in the context the first pass missed.

01 / QUERY

Ask

A question in your own words. Filters can pin a tag, stage or expiry.

ask "…" --tag #lease
02 / RECALL

Two indexes

Vector top 40 from LanceDB and BM25 top 40 from Tantivy run in parallel.

40 + 40 candidates
03 / FUSE

RRF + two-hop

Reciprocal rank fusion (k=60) keeps the strongest six; two-hop adds up to two more.

final_k = 6
04 / ANSWER

Cite

Every answer points back to passages you can open. No passage, no answer.

citation → source

02ABSTENTION

No evidence is a feature.

A confident answer with no source is worse than no answer. The engine returns no_evidence as a formal state — not an empty list, not a guess.

On a 48-question eval set, 20 questions have no answer in the vault. The system refused all 20. Known-source recall is 16/18; every answer it does give carries a citation.

48 QUESTIONS · 18 ANSWERABLE · 10 WEAK · 20 UNANSWERABLE

16/18KNOWN-SOURCE RECALL
20/20UNANSWERABLE REFUSED
0.815MRR@6 · 48 QUESTIONS
48EVAL QUESTIONS

03LOCAL

Your notes are the database.

Ingest is incremental by mtime and content hash. The index is a SQLite file plus LanceDB vectors and a Tantivy index — all on disk, none of it uploaded.

Point it at a folder of Markdown — an Obsidian vault works as-is. Markdown is chunked against the 512-token embedding window; stage, tags and expiry become filters, while importance only nudges ranking.

Markdown and text dropped into the vault inbox are picked up automatically. PDF, DOCX, PPTX, XLSX, CSV, HTML and EPUB are converted in-app — no Python, no upload.

  • Optional local API on :8000 (off by default); every route but login needs an in-memory session token.
  • MCP server with 13 tools in four tiers; a default install exposes 6 (read + ingest).
  • MCP can run read-only and share the index with the desktop; writers take an exclusive lock.
Markdown folderOBSIDIAN VAULT WORKS AS-IS
SOURCE
SQLiteDOCUMENTS · CHUNKS · RUNS
TRUTH
LanceDB + TantivyVECTORS 512-D · BM25
RECALL
Desktop · CLI · API · MCPFOUR FRONT DOORS
USE
D:\personal-rag-data\ · rag.sqlite + lance/ + tantivy/

04AGENTS

Built to be asked by a machine.

MCP is not a bolt-on: tools, resources and prompts read the same index as the desktop app, with spend caps and an audit trail.

13 tools, four tiers

6 BY DEFAULT

Read, ingest, content writes and maintenance are separate switches. A default install exposes six.

tools/list

Resources & prompts

MCP

Notes are addressable as personal-rag://doc/…; weekly-digest, find-my-view and summarize-note are ready to invoke.

resources/read · prompts/get

Spend caps

100K A DAY · 500K A WEEK

The budget is checked before the model call, and every tool call is appended to an audit log. The desktop shows the same ledger in Agent activity.

mcp-usage.jsonl · mcp-audit.jsonl

Ask by filename

RANK 1

Report a note by name or number — matching runs against paths and titles, not just vectors.

3-4 STT接入Jarvis → rank 1

05INTERFACES

Four ways to ask.

A desktop app for reading, a CLI for scripting, a local API for your own tools, and an MCP server so an agent can retrieve with the same index.

Desktop

TAURI 2

Pick a vault and a data directory, ingest, index, then ask with clickable citations.

ingest → index → ask

CLI

16 COMMANDS

Script the whole pipeline, from doctor to eval. Useful for cron and batch jobs.

personal-rag ask "…"

Local API

:8000

OpenAI-compatible chat completions plus ingest and stats. Off by default; every route but login needs a session token.

POST /v1/chat/completions

MCP

TIERED

Tiered tools, resources and prompts, spend caps and an audit trail — see Agents.

search_kb · ask_kb · read_doc

DOWNLOAD · 0.1.0

Run it on your own notes.

Rust + Tauri 2, local indexes, cited answers. Windows 10/11 x64, 89.6 MB. This build is unsigned — SmartScreen may ask for More info → Run anyway.

RUST 2024 · SQLITE · LANCEDB 0.39 · TANTIVY 0.26
WINDOWS INSTALLER 89.6 MB · v0.1.0 · UNSIGNED
Personal-RAG_0.1.0_x64-setup.exe SHA-256 EA6ABCD054025FCDD8CA11D2BA4996B5EC9AC006C88A9EF3FFDDD9276BDEC387