/modsearch
Plug-in web search, X (Twitter) search, and page fetch for models without native web access. Use whenever the task needs current information, external facts, source links, posts from X, or the content of a specific URL, and the active model/harness has no native search or fetch
$ npx -y skills add liustack/modsearch --skill modsearch --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/modsearch
Context preview
The summary Claude sees to decide when to auto-load this skill.
Plug-in web search, X (Twitter) search, and page fetch for models without native web access. Use whenever the task needs current information, external facts, source links, posts from X, or the content of a specific URL, and the active model/harness has no native search or fetch
SKILL.md
modsearch.SKILL.mdname: modsearch
description: "Plug-in web search, X (Twitter) search, and page fetch for models without native web access. Use whenever the task needs current information, external facts, source links, posts from X, or the content of a specific URL, and the active model/harness has no native search or fetch tool. Runs the modsearch CLI to return structured JSON evidence. Also use when the user asks how to install or configure modsearch, or wants to switch engines or add a key."
compatibility: Requires network access and one of node 22+/npx, bun/bunx, or a preinstalled modsearch binary on PATH.
allowed-tools: Bash
ModSearch — Search & Fetch Bridge Skill
Use this skill when:
- The user asks about anything after your knowledge cutoff (releases, news, prices, versions)
- The answer needs source links or verifiable external facts
- The user asks what people are saying on X or Twitter (推特, 推文, tweets, threads)
- The user gives a URL to read and the harness has no fetch tool
- The user asks how to configure modsearch, add a key, or change engines
Do not use this skill for:
- Analyzing images (that is `modlens`)
- Questions your own knowledge answers reliably and time does not affect
Prerequisites
Run every modsearch command through the launcher bundled with this skill. Replace `<skill-dir>` with the directory this SKILL.md lives in:
bash <skill-dir>/scripts/run.sh -q "test" # macOS / Linux
powershell -ExecutionPolicy Bypass -File <skill-dir>\scripts\run.ps1 -q "test" # Windows
The launcher finds a working way to run modsearch and forwards your arguments to it unchanged. It tries, in order: a compatible `modsearch` already on `PATH`, then `npx`, then `bunx`. If none of those exists it prints a JSON diagnosis to stderr and exits 78, with a `nextSteps` list for the user. Relay those steps instead of retrying. To see the full diagnosis, run `bash <skill-dir>/scripts/run.sh doctor --json` (on a machine that can launch the CLI it also chains modsearch's own engine/config `doctor`).
Nothing else needs setting up first: modsearch works with no config file. Web search and page fetch run out of the box on Firecrawl's keyless free quota (no signup, no key), and a configured engine or API key takes precedence when present.
If you cannot run the launcher script
Some harnesses forbid running scripts. Reason through the same order by hand and run the first line that works (the pinned version is 5.10.7):
1. A `modsearch` on `PATH` whose major version is 5 and is at least 5.10.7: `modsearch <args>`. 2. Otherwise, if `npx` exists: `npx --yes --package @liustack/modsearch@5.10.7 modsearch <args>`. 3. Otherwise, if `bunx` exists: `bunx --bun @liustack/modsearch@5.10.7 <args>`. 4. Otherwise none of these runtimes is here. Tell the user no JavaScript runtime was found and that installing Node 22.13+ (https://nodejs.org) or Bun (https://bun.sh) is the next step. Do not claim modsearch itself failed.
`references/runtime.md` documents the version pin, the compatibility rule, and the diagnostic fields.
Commands
In the examples below, `modsearch` means the command run through the launcher above (`bash <skill-dir>/scripts/run.sh ...`, or the PowerShell form on Windows).
modsearch -q "<query>" # search the web
modsearch -q "<query>" --source x # search X instead
modsearch -q "<query>" --source web,x # both, kept separate in the output
modsearch -u "<url>" # fetch one page
modsearch -u "<url>" -q "<focus>" # fetch with an extraction focus
Optional flags: `-o <file>` also writes the JSON, `--timeout <ms>` raises the time budget, and `-e <engine>` forces exactly one engine with no fallback, so leave it off unless the user wants one specific engine. The full flag table, with defaults and the config commands, is in `references/cli.md`.
An X-flavored query (twitter, tweet, 推特, 推文, x.com, "on X") goes to X on its own, and only to X, because a web index cannot see inside X. Pass `--source web,x` when the user wants both.
A run takes 10-30 seconds on the agent-loop engines and 2-3 seconds on the direct API ones. Do not treat silence as a hang before the timeout.
Roles and engines
Three jobs, each with its own engines:
| Role | Engines (best first) | Notes | | :-- | :-- | :-- | | search the web | `firecrawl`, `keenable`, `antigravity-cli`, `tavily`, `exa` | Firecrawl works keyless with no signup (1,000 free credits/month), and so does Keenable (1,000 requests/hour, shared per IP). agy is free with a browser sign-in. Tavily, Exa, and a free Firecrawl or Keenable key add personal quotas. | | fetch a page | `firecrawl`, `antigravity-cli`, `local` | Firecrawl runs a cloud browser, keyless by default (`firecrawl.keylessFetch false` opts out). `local` needs nothing and is the default floor. | | search X | `grok-cli` | Needs Grok Build with SuperGrok or X Premium. |
modsearch picks per role from what is installed and falls through on failure, so do not probe first: run the command and read `results[].engine` to see who answered.
- Page fetch has the built-in `local` engine as its zero-setup floor unless the user explicitly disabled it with `local.enabled false`, or forced a different engine with `-e`. It returns the page as served, with no summary and no focus narrowing, so pick out the relevant parts yourself. Very little text back means the page is JavaScript-rendered, which that engine does not run: it says so in `uncertainty`, so say the same rather than claiming the page is empty.
- An X question answered by a web engine means Grok Build is not set up. That entry reads `status: "degraded"`, `requestedSource: "x"`, `source: "web"`, with the reason in `warnings`. Relay that caveat instead of presenting it as X coverage. On a `--source web,x` run where X is unreachable, the X slot comes back as a separate entry with `status: "unavailable"` and empty `items`, so the gap is explicit: re
Read more
name: modsearch description: "Plug-in web search, X (Twitter) search, and page fetch for models without native web access. Use whenever the task needs current information, external facts, source links, posts from X, or the content of a specific URL, and the active model/harness has no native search or fetch tool. Runs the modsearch CLI to return structured JSON evidence. Also use when the user asks how to install or configure modsearch, or wants to switch engines or add a key." compatibility: Requires network access and one of node 22+/npx, bun/bunx, or a preinstalled modsearch binary on PATH. allowed-tools: Bash
ModSearch — Search & Fetch Bridge Skill
Use this skill when:
- The user asks about anything after your knowledge cutoff (releases, news, prices, versions)
- The answer needs source links or verifiable external facts
- The user asks what people are saying on X or Twitter (推特, 推文, tweets, threads)
- The user gives a URL to read and the harness has no fetch tool
- The user asks how to configure modsearch, add a key, or change engines
Do not use this skill for:
- Analyzing images (that is `modlens`)
- Questions your own knowledge answers reliably and time does not affect
Prerequisites
Run every modsearch command through the launcher bundled with this skill. Replace `<skill-dir>` with the directory this SKILL.md lives in:
bash <skill-dir>/scripts/run.sh -q "test" # macOS / Linux powershell -ExecutionPolicy Bypass -File <skill-dir>\scripts\run.ps1 -q "test" # Windows
The launcher finds a working way to run modsearch and forwards your arguments to it unchanged. It tries, in order: a compatible `modsearch` already on `PATH`, then `npx`, then `bunx`. If none of those exists it prints a JSON diagnosis to stderr and exits 78, with a `nextSteps` list for the user. Relay those steps instead of retrying. To see the full diagnosis, run `bash <skill-dir>/scripts/run.sh doctor --json` (on a machine that can launch the CLI it also chains modsearch's own engine/config `doctor`).
Nothing else needs setting up first: modsearch works with no config file. Web search and page fetch run out of the box on Firecrawl's keyless free quota (no signup, no key), and a configured engine or API key takes precedence when present.
If you cannot run the launcher script
Some harnesses forbid running scripts. Reason through the same order by hand and run the first line that works (the pinned version is 5.10.7):
1. A `modsearch` on `PATH` whose major version is 5 and is at least 5.10.7: `modsearch <args>`. 2. Otherwise, if `npx` exists: `npx --yes --package @liustack/modsearch@5.10.7 modsearch <args>`. 3. Otherwise, if `bunx` exists: `bunx --bun @liustack/modsearch@5.10.7 <args>`. 4. Otherwise none of these runtimes is here. Tell the user no JavaScript runtime was found and that installing Node 22.13+ (https://nodejs.org) or Bun (https://bun.sh) is the next step. Do not claim modsearch itself failed.
`references/runtime.md` documents the version pin, the compatibility rule, and the diagnostic fields.
Commands
In the examples below, `modsearch` means the command run through the launcher above (`bash <skill-dir>/scripts/run.sh ...`, or the PowerShell form on Windows).
modsearch -q "<query>" # search the web modsearch -q "<query>" --source x # search X instead modsearch -q "<query>" --source web,x # both, kept separate in the output modsearch -u "<url>" # fetch one page modsearch -u "<url>" -q "<focus>" # fetch with an extraction focus
Optional flags: `-o <file>` also writes the JSON, `--timeout <ms>` raises the time budget, and `-e <engine>` forces exactly one engine with no fallback, so leave it off unless the user wants one specific engine. The full flag table, with defaults and the config commands, is in `references/cli.md`.
An X-flavored query (twitter, tweet, 推特, 推文, x.com, "on X") goes to X on its own, and only to X, because a web index cannot see inside X. Pass `--source web,x` when the user wants both.
A run takes 10-30 seconds on the agent-loop engines and 2-3 seconds on the direct API ones. Do not treat silence as a hang before the timeout.
Roles and engines
Three jobs, each with its own engines:
| Role | Engines (best first) | Notes | | :-- | :-- | :-- | | search the web | `firecrawl`, `keenable`, `antigravity-cli`, `tavily`, `exa` | Firecrawl works keyless with no signup (1,000 free credits/month), and so does Keenable (1,000 requests/hour, shared per IP). agy is free with a browser sign-in. Tavily, Exa, and a free Firecrawl or Keenable key add personal quotas. | | fetch a page | `firecrawl`, `antigravity-cli`, `local` | Firecrawl runs a cloud browser, keyless by default (`firecrawl.keylessFetch false` opts out). `local` needs nothing and is the default floor. | | search X | `grok-cli` | Needs Grok Build with SuperGrok or X Premium. |
modsearch picks per role from what is installed and falls through on failure, so do not probe first: run the command and read `results[].engine` to see who answered.
- Page fetch has the built-in `local` engine as its zero-setup floor unless the user explicitly disabled it with `local.enabled false`, or forced a different engine with `-e`. It returns the page as served, with no summary and no focus narrowing, so pick out the relevant parts yourself. Very little text back means the page is JavaScript-rendered, which that engine does not run: it says so in `uncertainty`, so say the same rather than claiming the page is empty.
- An X question answered by a web engine means Grok Build is not set up. That entry reads `status: "degraded"`, `requestedSource: "x"`, `source: "web"`, with the reason in `warnings`. Relay that caveat instead of presenting it as X coverage. On a `--source web,x` run where X is unreachable, the X slot comes back as a separate entry with `status: "unavailable"` and empty `items`, so the gap is explicit: re
🥇 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 证据(搜索、抓取、引用)。
Repo: liustack/modsearch

