@fishdivinity/dsh-local-search
Windows file search + document full-text search: names via Everything (es.exe), text inside PDF/DOCX/XLSX/PPTX/EPUB via Anytxt; both installed separately.
Install
dsh plugin --profile web add @fishdivinity/dsh-local-search
Sandbox test results
| Stage | Result |
|---|---|
| 1 install | ✓ |
| 2 list | ✓ |
| 3 mount | ✓ |
| 4 boot | — |
Four stages run in an isolated sandbox: install (network on) → list → mount → boot (last three with no network).
README
<div align="center">
<img src="https://raw.githubusercontent.com/fishdivinity/dsh-local-search/main/icon.svg" width="96" alt="Local Search icon">
Local Search for DeepSeek Harness
File names and document text from the whole machine, behind five read-only tools — so the model searches your disk instead of guessing a path.





[English](README.md) · [简体中文](README-zh.md) · [Install](#install) · [Configuration](#configuration) · [Tools](#tools) · [Security](#security-and-limits)
</div>
Why this exists
A session sees one folder. grep and glob are fast inside it and blind outside it, so when the work needs a file that lives anywhere else, the model either guesses a path or stops and asks you for one — and the lookup goes back to you, in another window, with the conversation waiting.
Searching is not the expensive part. Picking the right hit, opening the document, reading the part that matters, putting two of them side by side, and being able to say where the answer came from — that is. It is also exactly what a model is good at, once it can reach an index.
This plugin gives it both: es.exe for file and folder names wherever Everything has indexed them, Anytxt for the text inside PDF, DOCX, XLSX, PPTX, EPUB, RTF, TXT and MD files. The whole surface is read-only — nothing writes, deletes, re-indexes, OCRs or starts an engine. A lookup is answered from the index those engines already built: milliseconds, not a rescan of the drive.
When to use it
- The search is a step, not the goal. You asked for something else — a summary, a comparison, a fix — and the answer needs a document you cannot point at. Handing that lookup back to yourself costs a window switch and a paste.
- You know the answer, not the keyword. "The price clause we agreed with that supplier", "the note about this error". The model can try five phrasings in two languages, read the hits, and come back with the quote and the path.
- The answer spans files. "Compare the payment terms in these two contracts", "what did the last three meeting notes decide about the schedule". A search field returns a hit list; the reading and comparing is the part you wanted delegated.
- The work is batch. "List the counterparty in each of these 30 contracts" — no search field does this. Search once, read every hit, write the table.
- The file is not text.
grepcannot open a PDF, a.docx, or a spreadsheet. Either the text comes through Anytxt, or you paste it in by hand. - The answer has to cite a source. A path plus a snippet can be checked; a plausible paragraph cannot.
Contents
- [Why this exists](#why-this-exists)
- [When to use it](#when-to-use-it)
- [Tools](#tools)
- [Requirements](#requirements)
- [Install](#install)
- [Configuration](#configuration)
- [Scopes](#scopes)
- [Engine selection](#engine-selection)
- [Errors and diagnostics](#errors-and-diagnostics)
- [Security and limits](#security-and-limits)
- [Known limitations](#known-limitations)
- [How this compares](#how-this-compares)
- [For AI agents](#for-ai-agents)
- [Development](#development)
- [License](#license)
Tools
Tool · Engine · Use for
local_search_files · Everything via es.exe · File/folder names, paths, cross-drive discovery
local_search_content · Anytxt JSON-RPC · Text inside PDF, DOCX, XLSX, PPTX, EPUB, RTF, TXT, MD
local_search_fragments · Anytxt · Snippets around a match in one indexed file
local_search_read · Anytxt · Extracted plain text of one indexed file, capped
local_search_status · both · Check whether each engine is reachable
Requirements
- Windows.
- DeepSeek Harness
>=0.2.1-0 <0.3.0-0— 0.2.1 and 0.2.2 (pre-releases included) run it; 0.3 pre-releases are refused. - Everything running, plus
es.exe(a separate download from voidtools; the plugin auto-detects PATH/common install folders, or setfiles.everything.esPath). - Anytxt Searcher for content search: the GUI (
ATGUI.exe) must be running because the JSON-RPC service lives inside it. The indexing service alone is not enough.
This plugin does not bundle Everything, es.exe, or Anytxt. Install and license them separately.
Install
The command writes into one profile, and it has to be the profile the session boots from — the Desktop app owns desktop, dsh web owns web:
dsh plugin --profile desktop add @fishdivinity/dsh-local-search # Desktop app dsh plugin --profile web add @fishdivinity/dsh-local-search # dsh web
web is a shipped template that initializes on first use; desktop must have been opened once, and only the dsh bundled with the Desktop app can manage it. To install the source instead of the npm tarball, swap the spec for github:fishdivinity/dsh-local-search.
Restart the profile or open a new session. The five local_search_* tools appear in the model toolset.
Configuration
Sidebar Plugins → the Local Search card in the Official plugins group → the plugin's own page. That is the same card shape the GitHub plugin contributes. Saves apply to the next tool call; leaving the page drops unsaved edits. Reset, under the description, first shows what it will
…(truncated)
Rendered from the README published on npm. Formatted only, not edited.
Versions
Published on npm::9,最后更新 2026-11-06