Ask
A question in your own words. Filters can pin a tag, stage or expiry.
ask "…" --tag #lease
LOCAL RETRIEVAL · MARKDOWN-NATIVE
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
The index stays on your machine. The answer step calls the model you configure.
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
Renewal window opens Oct 1. Target Q4 for the new terms.
Keep the warehouse through Q3; revisit after the 3PL contract lands in Q4.
No passage in the vault supports an answer. I will not guess.
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
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.
A question in your own words. Filters can pin a tag, stage or expiry.
ask "…" --tag #lease
Vector top 40 from LanceDB and BM25 top 40 from Tantivy run in parallel.
40 + 40 candidates
Reciprocal rank fusion (k=60) keeps the strongest six; two-hop adds up to two more.
final_k = 6
Every answer points back to passages you can open. No passage, no answer.
citation → source
02ABSTENTION
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
03LOCAL
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.
04AGENTS
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.
Read, ingest, content writes and maintenance are separate switches. A default install exposes six.
tools/list
Notes are addressable as personal-rag://doc/…; weekly-digest, find-my-view and summarize-note are ready to invoke.
resources/read · prompts/get
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
Report a note by name or number — matching runs against paths and titles, not just vectors.
3-4 STT接入Jarvis → rank 1
05INTERFACES
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.
Pick a vault and a data directory, ingest, index, then ask with clickable citations.
ingest → index → ask
Script the whole pipeline, from doctor to eval. Useful for cron and batch jobs.
personal-rag ask "…"
OpenAI-compatible chat completions plus ingest and stats. Off by default; every route but login needs a session token.
POST /v1/chat/completions
Tiered tools, resources and prompts, spend caps and an audit trail — see Agents.
search_kb · ask_kb · read_doc
DOWNLOAD · 0.1.0
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.
SHA-256 EA6ABCD054025FCDD8CA11D2BA4996B5EC9AC006C88A9EF3FFDDD9276BDEC387