modsearch
liustack · liustack/modsearch
Plugin that adds web search, X search and page fetch for models without web access, using free keyless Firecrawl by default with fallback engines.
🥇 The strongest free web search plugin for DeepSeek Harness, and the search bridge for every model without native web access. Free, no signup, no API key. Ask the web or X, get structured JSON evidence. | 🥇 全网最强的 DeepSeek Harness 免费联网搜索插件,免费免注册免 API key。为不能联网的模型补上搜索,问网页或 X,拿回结构化 JSON 证据(搜索、抓取、引用)。
Preview
What you can do with it
- Give a DeepSeek-based agent live web search without an API key
- Fetch a page and return structured JSON evidence with citations
- Search X for recent posts about a topic
Safety check
Usable, but read the notes first.
- ●Installer downloads a remote script and pipes it to the shell.
README.md
Automated scan of the repo files. Always review code you run.
From the README
ModSearch
In the chat app your model can search the web. On the API it cannot. ModSearch puts the web back: web search, X search, page fetch. Free, no signup, no API key.
🥇 The strongest free web search plugin for DeepSeek Harness (dsh) 🥇
Engines: Firecrawl (keyless, default) · Antigravity CLI · Tavily · Exa · Grok (X) · local, with automatic failover
简体中文 · Troubleshooting · Configuration · Output contract · Security · ModLens (vision)
Models like DeepSeek and GLM have no web access, or a weak one. ModSearch is a plug-in that greatly strengthens web search, X search, and single-page fetch. It works the moment it lands: the default engine is Firecrawl's keyless tier, 1,000 free credits every month, with no account, no API key, and no card.
Talk to us
Hit a problem? Open an issue. Everything else is welcome on X: @liustack. What you built with it, which harness you are on, what should come next. New releases land there first. A community space is on the way.
Features
- 🥇 The strongest free web search plugin for DeepSeek Harness (dsh): one command installs it,
npx -y @deepseek-ai/dsh plugin --profile web add @liustack/modsearch@5.10.6. Details in harness setup. - Free out of the box, no signup. Search and page fetch run on Firecrawl Keyless by default: 1,000 free credits/month, no account, no API key, no card. Every fallback channel is free too: Antigravity CLI needs only a browser sign-in, and Tavily, Exa, and a free Firecrawl key each add their own monthly quota with no card required.
- Automatic failover. When a channel fails or exhausts its quota, the next one takes over.
- Per-engine key rotation. Give Tavily, Exa, or Firecrawl multiple comma-separated keys. Authentication, rate-limit, and quota failures rotate to the next key before the engine chain falls back.
- Searches X (Twitter). With Grok Build installed, ModSearch queries the corpus that web indexes cannot reach.
- Install once, use everywhere. Works in Claude Code, Codex, Pi, and OpenCode.
See it work
All four screenshots are unedited runs, the first two from the Codex desktop app and the last two from dsh web, driving DeepSeek models with no web access of their own.
Give it a blog link and ask what the post says. Twenty-five seconds later: a structured summary of the whole post, with no browser involved.
Give it no target at all, just "anything interesting in AI today?". Thirty-six seconds later: six sourced stories, with a closing note on which details came from aggregation and deserve a second look. The note comes from the uncertainty field.
Ask dsh web for today's top AI stories. dsh's native search tool row runs straight on the modsearch engine chain, and eighteen seconds later three stories come back, each with a source link.
Ask which Node.js line is still in maintenance. read_page reads the release page and the release schedule in turn, and sixty seconds later the verdict arrives with a version status table and sources at the end.
Supported engines
Firecrawl works with zero setup. Every other engine is one command away. Keys live in ~/.modsearch/config.json (0600, masked when shown):
| Engine | Does | Free tier | Turn it on |
|---|---|---|---|
| Firecrawl (default) | web search + page fetch | keyless: 1,000 free credits/month, no signup. A free key adds your own 1,000/month | nothing, it works as installed |
| Antigravity CLI | web search + page fetch | free, browser sign-in | install agy and sign in |
| Tavily | web search | 1,000 credits/month, no card | modsearch config set tavily.apiKey <key> |
| Exa | web search | $10/month recurring credit (~1,400 searches), no card | modsearch config set exa.apiKey <key> |
| Grok Build | X (Twitter) search | rides SuperGrok or X Premium | install grok and sign in |
| local | page fetch | built in, nothing to install | nothing |
Keys can also come from the environment (TAVILY_API_KEY, EXA_API_KEY, FIRECRAWL_API_KEY). One engine can take multiple keys as a comma-separated value such as key-one,key-two, in either the config file or its environment variable. Multiple engines configured means automatic failover, best first. Every engine participates by default. Exclude one with modsearch config set tavily.enabled false. Using a Tavily-, Exa-, or Firecrawl-compatible third-party or self-hosted endpoint? Point the engine at it: modsearch config set tavily.baseURL <url>. Official endpoints stay built into the code and are never written as default config. Every knob, engine by engine, is in the configuration guide.
Installation
Step 1, hand it to your AI. Search and page fetch work as soon as the skill lands, on Firecrawl's free keyless quota, so installation is one message:
Install and configure the modsearch skill following INSTALL.md at https://github.com/liustack/modsearch, then run the health check and tell me the result.
Prefer a direct command? Install the same skill through skills.sh:
npx skills add liustack/modsearch
Step 2 (optional), add more free engines. Antigravity CLI writes better synthesized answers. A free Tavily, Exa, or Firecrawl key adds a personal quota on top of the keyless one. None requires a card. agy's browser sign-in is the only step that needs your hands:
curl -fsSL https://antigravity.google/cli/install.sh | bash
agy # sign in, then exit
Picked a key instead? Send one line to your AI: "set my tavily key to tvly-...".
dsh users have a path that never touches the com