SkillAgentSearch skills...

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/Synorive

If the server publishes to npm under a different name, use that package instead — check the repo README.

About this skill
🔌

MCP Server

Model Context Protocol server

Quality Score

83/100

Supported Platforms

Claude Code
Claude Desktop
<div align="center">

Synorive

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 License Platform Engine Desktop Offline MCP

⬇️ 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>

Synorive research workbench — multi-engine web search with per-source trust ranking

<div align="center"><sub>

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

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

View on GitHub
GitHub Stars3
CategoryAI
Updated17d ago
Forks0

Languages

Python

Security Score

92/100

Audited on Aug 19, 2026

1 low