Synorive
Offline semantic search for everything on your disk - documents, code, PDFs, scanned images (OCR), video by the second. 100% local AI: hybrid RAG with keyword + vector + rerank, no API key, no cloud.
Install / Use
claude mcp add Aevorine -- npx -y github:Aevorine/SynoriveIf the server publishes to npm under a different name, use that package instead — check the repo README.
MCP Server
Model Context Protocol server
Quality Score
Category
AI & Machine LearningSupported Platforms
Skill content
View source on GitHubSynorive
Local-first semantic search for every file you own — plus a fact-checked web researcher.
Search your documents, source code, PDFs, images and videos by meaning, not by filename. Then search the open web across many engines, hunt for counter-evidence, and get a briefing where every single line is a verbatim quote with its source.
Runs fully offline. Your files never leave your machine. Ships 24 MCP tools for Claude Code.
English · 简体中文 · Français · Español · Русский · العربية
⬇️ Download
| | |
|---|---|
| Windows installer | Synorive-Setup-0.1.5.exe — Python runtime bundled, in-app auto-update |
| Windows portable | Synorive-0.1.5-portable.exe — no install; auto-update not available for this form |
| Android | app-release.apk — thin client, talks to the engine on your PC over LAN |
No Python installation required. The interpreter and every engine dependency ship inside the installer, so a fresh machine with no Python, no pip access and no internet still starts up.
</div>
The research workbench: multi-engine search, per-source trust ranking, and an excluded-results drawer that always tells you why something was filtered out. Dark theme: screenshot
</sub></div>
What it does
| | | |---|---| | 🔍 | Semantic search over your own files — documents, source code, PDFs (indexed section by section), images (OCR), video (down to the second), saved web pages | | 🖼 | Cross-modal search — find an image by describing it, or find which video a frame came from and at what second | | 🌐 | Multi-engine web search — Bing / Baidu / 360 / Mojeek / Wikipedia / Reddit, plus Google and DuckDuckGo through a self-hosted SearXNG | | 🛡 | Actively hunts for counter-evidence — searches for debunkings, traces a claim back to its earliest source, flags retracted papers | | 📋 | Extract-only briefings — every line is a verbatim quote with its source. Conflicting claims are shown side by side, undecided | | 🔌 | 24 MCP tools for Claude Code — let your agent search your own library and verify claims for you | | 🔒 | Privacy fence — web search and cloud inference are two separate switches, because one leaks what you ask and the other leaks what you have | | ❓ | Ask a question, get quoted answers — the answer is assembled only from sentences that already exist in your files, each with its source. Nothing is generated, nothing is reworded | | 📝 | One-click draft — pick the results you want, get a Markdown / plain-text / PDF draft with numbered citations and clickable anchors | | ⚡ | Searchable in seconds — a new file is keyword-searchable the moment it is chunked; semantic indexing backfills in the background instead of making you wait | | 🎚 | Ranking you control — eight sliders (semantic, keyword, recency, source trust, popularity, title hits, result diversity, short-fragment penalty), five presets, and you can save your own | | 📖 | Reading comfort — a paper theme, three density scales, and a main input area big enough for a long question |
Keywords: local semantic search · offline AI search engine · multimodal RAG · personal knowledge base · document search · vector search · hybrid search · fact checking · misinformation detection · MCP server · Claude Code · SQLite FTS5 · sqlite-vec · HNSW · OCR · video search · Chinese NLP · Electron desktop app · privacy-first · self-hosted · offline RAG · desktop search · question answering with citations · extract-only · no hallucination · reranking · embeddings · local LLM alternative · no API key · air-gapped search
Why another search tool?
Most "search your files" tools stop at keyword matching, and most "AI research" tools hand you a fluent summary you cannot verify. Synorive refuses both:
- Retrieval is measured, not claimed. Every performance number below was benchmarked on real data — including the two that did not reach their targets. They are listed with the reason instead of being quietly dropped.
- Nothing is silently discarded. Results filtered out as low quality go into an "excluded" drawer with the reason, one click to bring them back.
- It never tells you something is false. It finds who disputes a claim and shows you both sides. Judging truth is not a capability it has, and pretending otherwise would be the most dangerous thing it could do.
What works today
Phases 1–3, 5 and 8 are complete. The application is genuinely usable right now.
Searching your own files
- Drop in a folder mixing documents, code, images and video → indexed concurrently in the background, the UI never freezes
- Semantic search over documents in Chinese and English — describe the content, no need to remember the filename
- Query syntax straight in the search box:
type:pdf date:last7days -draft "exact phrase" - Search text inside images (OCR, measured at 100% character coverage)
- Find similar images from one image, or find which video a frame came from and at what second
- Search a spoken line and jump straight to 3 m 24 s of the video
- Papers indexed by section (Abstract / Method / Results); hits are labelled
page 2 · Background - Ask a PDF "what questions can you answer?" and click a question to expand the source passage
Searching the web and checking it
- Many engines concurrently (cn.bing / Baidu / 360 / Mojeek / Wikipedia); with a self-hosted SearXNG, Google and DuckDuckGo work too
- Deep research reads the first round before deciding what to ask next, then searches again
- A Chinese query automatically gets an English variant, routed to the engines with better English coverage — primary sources are usually in English
- Actively reverse-searches for "debunked / disputed / retracted / controversy" and puts the counter-evidence in front of you
- Traces a claim back to its earliest source; a dozen sites publishing the same story within two days gets flagged as a syndication burst
- A cited paper that has been retracted is flagged in red (via OpenAlex)
- Five academic sources merged by DOI, with citation counts and PDF links
Using it from Claude Code
After claude mcp add synorive, Claude Code can search your library, verify a claim, and compare
what you have against what the web says — in the same answer.
How-to guides
- Desktop, including every keyboard shortcut —
docs/操作指南-电脑版.md - Android phone / tablet, step by step —
docs/操作指南-安卓版.md
The full technical design and the 76-item feature menu live in
docs/00-技术方案.md. Every performance target, how it counts as measured,
and which ones are still untested, are declared in code at
engine/synorive/metrics.py; the benchmark scripts are in
engine/tests/ (bench_g_series / bench_research / bench_ingest_stages).
Benchmarks (measured, not estimated)
| | Measured | Target | |---|---|---| | Cold start to searchable | 1.30 s | ≤2.0 s ✅ | | First results @ 102k chunks | P50 45 ms / P95 186 ms | ≤80 / ≤200 ✅ | | Full retrieval @ 102k chunks | P95 373 ms | ≤500 ✅ | | Scroll frame rate | 59.9 fps | ≥55 ✅ | | Disk for 100k chunks | 374 MB | ≤3 GB ✅ | | Resume after interruption | 54/54 skipped, 1067× faster | ✅ | | Image ingest (OCR deferred) | 19.35 images/s | — | | Image OCR (background pass) | 1.2–1.5 images/s | ← bound by the Python GIL | | Video fast path | 88.6× realtime | — | | Video with transcription | 5.97× realtime | ≥6 ⚠️ | | Text embedding (single worker) | 19.8 chunks/s (was 12.6; batch 16→8 gave 1.57×) | ⚠️ see below | | Deep research briefing P95 | 8.29 s (was 23.79 s; a global deadline cut it 65%) | ≤8.0 ⚠️ short by 0.29 s | | Warm cache hit | P50 17.6 ms | ≤200 ✅ | | Drop-in to searchable | P95 0.8 s | ≤3.0 ✅ | | Quick web search P95 | 2.4 s | ≤3.0 ✅ |
⚠️ Ingest throughput is bound by this machine (i5-1155G7, no discrete GPU). Stage-by-stage timing shows embedding alone is 97.7% of the cost; the other five stages together are 2.3%. Going faster from here means a quantised model or a GPU, not more tuning.
⚠️ The deep-research P95 dropped from 23.79 s to 8.29 s, but the cost was that 20 of 20 runs skipped the second follow-up round. The number and its price have to be read together.
See the how field of A6/A7 in engine/synorive/metrics.py — the
target column there says "⚠️ to be re-set" instead of a number, and that is deliberate: a target
everyone knows is unreachable is worse than admitting it has not been set.
Getting started
One-time setup
# 1. Node dependencies (Node ≥20)
npm install
# 2. Generate the font subset (6 MB, not in the repo, must be generated once)
python scripts/build_fonts.py
# 3. Generate icons (already committed; only needed if you change the source image)
python scripts/build_icons.py
# 4. Python engine environment (Python ≥3.11)
py -3.13 -m venv engine/.venv
engine/.venv/Scripts/python.exe -m pip install -e engine
Develop
npm run dev # Electron + Vite with HMR; the engine starts itself
Build
npm run build # all workspaces
npm run build:desktop # desktop only
npm run pack:win # Windows installer + portable
Release and auto-update
Desktop and Android both check for updates against this repository's GitHub Releases.
npm run version:check # are all four version numbers in sync?
npm run version:set 0.1.5 # change all four at once — never edit them by hand
npm run android:keystore # first time only: generate the Android release keystore (kept outside the repo)
npm run release # build both artifacts, do NOT upload
npm run release:publish # build and create a GitHub Release (requires gh to be logged in)
There are four ways to break the update chain that produce no error at all.
scripts/release.mjs blocks each one:
| What is missing | What the user sees |
|---|---|
| latest.yml not uploaded | Desktop says "you are up to date", not an error — the update never arrives |
| Tag does not match package.json | Updater 404s |
| APK not uploaded | Phone finds the new version but cannot download it |
| Android versionCode not incremented | Phone says "you are up to date" |
Security boundary of the update channel — stated plainly rather than glossed over:
| | Desktop | Android |
|---|---|---|
| Transport | HTTPS | HTTPS, and the code hard-rejects any non-GitHub host |
| Integrity | sha512 from latest.yml; mismatch refuses to install | Byte c
Truncated for display — read the full file on GitHub.
Related Skills
claude-mem
93.3kPersistent Context Across Sessions for Every Agent – Captures everything your agent does during sessions, compresses it with AI, and injects relevant context back into future sessions. Works with Claude Code, OpenClaw, Codex, Gemini, Hermes, Copilot, OpenCode + More
Understand-Anything
81.6kGraphs that teach > graphs that impress. Turn any code into an interactive knowledge graph you can explore, search, and ask questions about. Works with Claude Code, Codex, Cursor, Copilot, Gemini CLI, and more.
Agent-Reach
78.2kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
ruflo
70.6k🌊 The original agent meta-harness. Deploy intelligent multi-player swarms, coordinate autonomous workflows, and build conversational AI systems. Features adaptive memory, self-learning intelligence, RAG integration, and native Claude Code / Codex / Hermes and many more Integrated
