Preface¶
When using DeepSeek Harness (dsh) with agents, a common gap is: the official app allows models to access the internet for information, but switching to an API or local harness weakens or even removes this capability. Models like DeepSeek and GLM do not inherently come with reliable web search, and although dsh includes a web_search tool, it defaults to DeepSeek’s keyed search API, which is not friendly for “zero-config, no API key” needs.
The community has developed various solutions for this issue. Today, we introduce liustack/modsearch (ModSearch) from the SkillHub plugin library’s “web tools” category: an open-source project maintained by liustack, with approximately 259 stars and 12 forks on GitHub, under the MIT license. It functions both as a native bundle plugin for dsh and as an Agent Skill for hosts like Claude Code, Codex, Pi, and OpenCode. Its core selling points are free, registration-free, and API key-free startup, restoring web search, X (Twitter) search, and single-page scraping capabilities, and returning structured JSON evidence for easy model referencing and secondary processing.
Please note: DeepSeek Harness’s philosophy is “everything is a plugin,” and SkillHub (https://www.skillhub.cn/plugins) is a community-curated plugin directory with no official affiliation to DeepSeek or High-Flyer. The installation commands below are based on cross-verified information from the plugin repository and directory page.
What is This¶
ModSearch is a web search bridging plugin for coding agents. For dsh users, it’s more than just adding another skill—the npm package @liustack/modsearch includes dsh.bundle.patch, and upon installation, it will:
- Switch dsh Web’s
searchProvidertomodsearch, routing the built-inweb_searchthrough the ModSearch engine chain while preserving the native citation card UI; - Additionally register two tools:
x_search(X corpus search) andread_page(single-page fine reading).
For models without native web capabilities, ModSearch acts as an add-on layer providing “search + scraping + citation” functionality. After installation, it works out-of-the-box with Firecrawl’s keyless channel (approximately 1,000 free credits per month, no account or API key required), eliminating the need for initial setup with keys.
Core Features and Highlights¶
Based on the GitHub README and docs/dsh.md, ModSearch’s verified capabilities are as follows.
1. Free Out-of-the-Box, Zero-Configuration Search¶
The default engine is Firecrawl keyless: search and single-page scraping are immediately usable without registration or card binding. If higher limits are needed later, you can configure Tavily, Exa, or free Firecrawl keys, all of which offer free tiers.
2. Multi-Engine Chain with Automatic Failover¶
In addition to Firecrawl, it supports Antigravity CLI, Tavily, Exa, Grok Build (X search), and local (single-page scraping). If one channel fails or reaches its limit, it automatically switches to the next; the same engine can also be configured with multiple comma-separated keys for rotation.
3. Structured JSON Output, Not Full-Page Context Injection¶
The CLI outputs uniform envelope JSON to stdout (including mode, query, results, meta, etc.), with each result containing engine, summary, items (title, URL, abstract), uncertainty (factual uncertainty alerts), and warnings (routing/degradation notes). Compared to some built-in searches that push full-page raw text into the model’s context, structured evidence typically saves tokens and better facilitates agent citation.
4. Three Web Action Types, Covering dsh Gaps¶
| Capability | dsh Entry | Description |
|---|---|---|
| Web Search | Built-in web_search |
Routes through the ModSearch engine chain, preserving native citation cards |
| X Search | New x_search |
After installing and logging into Grok Build, it can search X corpus; without Grok, it may degrade to a web alternative, noted in the output |
| Single-Page Fine Reading | New read_page |
Reads a single URL, with optional question focus; by default, blocks private network segments; public web pages can use Firecrawl’s cloud browser |
5. Single Installation, Multi-Host Reuse¶
Besides being a native dsh bundle, ModSearch can also be used as a skill in hosts like Claude Code, Codex, Pi, and OpenCode. For hosts like Codex that already have DeepSeek’s official web_search, the author recommends disabling the built-in search before handing over to ModSearch to avoid the model prioritizing the built-in tool and marginalizing the skill, while also reducing context usage.
Installation and Activation¶
For dsh Users (Recommended Path)¶
Install on the actually launched profile. The browser UI typically uses the web profile. The commands provided on the directory page and repository documentation are consistent, and the current version is 5.9.1 (version number is hardcoded to avoid issues where pnpm 11’s minimumReleaseAge causes @latest to resolve to an older package):
npx -y @deepseek-ai/dsh plugin --profile web add @liustack/modsearch@5.9.1
After installation, restart dsh and verify the plugin is resolved:
npx -y @deepseek-ai/dsh plugin --profile web list --depth 0
npx -y @deepseek-ai/dsh --profile web --dump-config
In the --dump-config output, you should see both searchProvider: modsearch and the plugin line named @liustack/modsearch.
Offline Health Check¶
You don’t need to consume search credits first; you can run a health check:
npx -y @liustack/modsearch@5.9.1 doctor
GUI Configuration (No Command Line Needed)¶
On the dsh Web interface, you can find the Search Engine (ModSearch) card under Settings → Plugins → Plugin Configuration: select the preferred engine, enter an API key or custom endpoint, check the engines to participate in failover, and save to write the same ~/.modsearch/config.json as the CLI (file permissions 0600).
Optional: Enhance Free Engines¶
For better summary quality, you can install Antigravity CLI and log in via browser:
curl -fsSL https://antigravity.google/cli/install.sh | bash
agy # Exit after completing browser login
You can also configure Tavily / Exa / Firecrawl free keys via the CLI or the settings card, for example:
modsearch config set tavily.apiKey <key>
modsearch config set exa.apiKey <key>
modsearch config set firecrawl.apiKey <key>
Installation as Agent Skill¶
If the host is not dsh, you can symlink the skills/modsearch directory from the repository to the skills directory conventionally used by each host (Claude Code → ~/.claude/skills/, Codex → ~/.codex/skills/, Pi / OpenCode → ~/.agents/skills/). The official INSTALL.md suggests telling the agent directly:
Install and configure the modsearch skill following the INSTALL.md at https://github.com/liustack/modsearch, then run a health check and report the results to me.
Typical Usage Examples¶
After installation, there’s no need to remember special commands—just use normal dialogue; the plugin will automatically trigger based on context for questions requiring verification, open-domain news, or pasted URLs.
Verify Three Tools are Functional¶
After launching the profile, you can perform a smoke test using the three tips recommended in docs/dsh.md:
Search the web for the current Node.js LTS release and cite the sources.— Should use dsh’s nativeweb_searchcard;Search X for recent posts from @deepseek_ai.— Should invokex_search(requires Grok Build to be ready);Read https://example.com and summarize the page.— Should invokeread_page.
Everyday Conversational Use¶
It also applies to Chinese contexts, for example:
- “What important news is there in the AI field today?” — Open-domain web search, returning a list of items with sources;
- “Help me summarize this article: https://example.com/blog/post” — Single-page scraping and structured summarization;
- “Which Node.js version lines are currently maintained?” —
read_pagecan read the official version page and release plan, then provide a conclusion table.
The uncertainty field in the returned JSON indicates which details come from aggregated retrieval and may require secondary verification, serving as “confidence footnotes” in agent workflows.
Use Cases and Considerations¶
Who should use it:
- Developers using DeepSeek / GLM etc. in dsh who want web access without binding a search API key;
- Agent scenarios needing X corpus or single URL fine reading that aren’t covered by the host’s native tools;
- Engineering teams wanting search evidence returned in structured JSON format for easy citation and pipeline processing.
Before using, please note:
- Permission Boundary: The plugin runs with the current dsh process permissions, accesses the internet, and reads/writes
~/.modsearch/config.jsonas configured. It’s recommended to browse the source code and MIT license before installation to confirm acceptance of its security model (the repository provides documentation on SSRF protection, DNS rebinding protection, etc., seedocs/security.md). - Upstream Engine Terms: Firecrawl, Tavily, Exa, Grok Build, etc., each have their own terms of service and quotas; compliance responsibility lies with the user.
- dsh is Iterating Rapidly: The current bundle has been verified on
@deepseek-ai/dsh 0.1.0-rc.7; after major version upgrades, it’s recommended to re-run--dump-configanddoctor. - Default Cloud Scraping: Public URLs may default to scraping via Firecrawl keyless cloud browser, with results including routing warnings; if you prefer automatic scraping to be as localized as possible, set
modsearch config set firecrawl.keylessFetch false. - Repository Collaboration Policy: The author states that PRs are not accepted; issues and suggestions should be raised via GitHub Issues.
Conclusion¶
If you’re looking for a “free-key startup, capable of web search, X search, and single-page fine reading” pathway for DeepSeek Harness or other coding agents that cannot access the internet, ModSearch is worth trying first: once doctor passes and the three smoke test prompts work, you can基本 determine if the engine chain is ready.
- Directory Page: https://www.skillhub.cn/plugins/liustack/modsearch
- GitHub: https://github.com/liustack/modsearch
- Current Documentation Version: 5.9.1 | License: MIT