dsh-tinyfish
Free web search and fetch for the DeepSeek Harness.
Give your agent the live web — at $0 per call.
[](https://www.npmjs.com/package/dsh-tinyfish) [](https://www.npmjs.com/package/dsh-tinyfish) [](https://github.com/viztor/dsh-tinyfish/actions/workflows/ci.yml) [](https://github.com/viztor/dsh-tinyfish/blob/main/LICENSE)
---
Your agent can already reason. This gives it something to reason _about_: live search results and clean page content, wired straight into the harness's own `web_search` and `web_fetch` tools. Powered by [TinyFish](https://agent.tinyfish.ai/sign-up?ref=v1.dXNlcl8zSnh2TDJGaldOV2FQYWhnaDRqbTIzc0dqZTE.KxSdeNUG14oJKVFVFWLkOwn3-Pia7QI5BuaxiJ_iEVY) — both endpoints are free, so the web path on your host stops costing money per call.
| Before | After |
| --- | --- |
| Search bills per call | **$0**, forever |
| Fetched pages arrive as HTML, converted clumsily | **Clean Markdown**, straight from a browser-grade extractor |
| Switching providers means reinstalling | **Two words** in a config file, no reinstall |
| Every provider takes the query or nothing | **Standing defaults** — domain, language, recency, date bounds, cache TTL, selectors |
## 📊 How it compares
| Need | Use | Cost |
| --- | --- | --- |
| Search and fetch inside the native tools, free | **dsh-tinyfish**, either channel | **$0** — a TinyFish key on direct, your platform key on Monid; identical payloads |
| The shipped defaults | `deepseek-official` + `http` | Search bills per call; fetched HTML pays a turndown conversion |
| Provider-specific SERP detail (geo, volume, rank) or bulk queries | A Monid SERP mirror via `monid_run` | Roughly $0.002–$0.18 per call, provider-dependent — only when the task needs that detail |
| Pages `fetch` cannot read (JS-heavy, login, interaction) | `tinyfish agent` / `browser` from the CLI | Metered ($0.016/step, $0.002/min) — escalate only from an empty fetch |
## 🚀 Quick start
### Method 1: Direct from Web UI (Recommended)
DeepSeek Harness allows installing plugins directly through the Web interface without touching a terminal:
1. Open DSH Web and choose **Plugins** in the sidebar (插件).
2. Click **Add plugin** (添加插件).
3. Enter the package name `dsh-tinyfish` (or `@viztor/dsh-tinyfish`) — it is a free-text field, not a registry search.
4. Click **Install** — DSH fetches the package from npm and loads the bundle patch it declares. A live profile (the shipped Web one mounts HMR) applies the change at once; otherwise DSH says it takes effect at the next start.
5. On that **Plugins** page, open the **Tinyfish** card: select your channel (`direct` or `monid`), enter the key — or both keys — and hit **Save**!
6. That is the whole install — the bundle points the web path at TinyFish on both kinds. See [Select it](#select-it) to choose otherwise.
7. Ask your agent something current; live sources come back. The result does not name the provider — a failure does, and names `tinyfish`.
---
### Method 2: Terminal / Profile `package.json`
For headless environments, servers, or version-controlled dotfiles:
```sh
cd ~/.dsh/profiles/web
npm install dsh-tinyfish # or: npm install @viztor/dsh-tinyfish — same thing
```
Pick **one** name and install it once. Both tarballs ship the same built code and read the same settings (providers register as `tinyfish`, configuration lives under the row id `dsh-tinyfish`, credentials under the same two refs) — so switching names later loses nothing, but mounting both loads the bundle twice. The scoped tarball's manifest and patch `name` differ, so the loader can resolve it under the scope. `dsh-tinyfish` is the name DSH convention and these docs use.