PluginBench
Skill
Review
Audit score 70

use-tinyfish

tinyfish-io/tinyfish-cookbook

Web search, fetch, and browser automation via TinyFish CLI for live data, research, and site interaction.

What is use-tinyfish?

TinyFish is a CLI suite for web operations: search the live web, fetch and extract clean content from URLs, automate browser interactions, and control a remote browser programmatically. Use it whenever you need current information, page content, structured data extraction, or website automation.

  • Search the live web and get ranked results with titles, URLs, and snippets
  • Fetch clean extracted content from one or multiple URLs in parallel, with optional links and metadata
  • Automate browser interactions (click, fill forms, navigate) and extract structured data via natural language goals
  • Spin up remote browser sessions for raw CDP/Playwright-style programmatic control
  • Handle dynamic JavaScript-heavy pages and bot-protected sites

How to install use-tinyfish

npx skills add https://github.com/tinyfish-io/tinyfish-cookbook --skill use-tinyfish
Prerequisites
  • Node.js and npm installed
  • TinyFish CLI: `npm install -g @tiny-fish/cli`
  • Authentication: `tinyfish auth login --source openclaw` or set `TINYFISH_API_KEY` environment variable
Claude Code
Cursor
Windsurf
Cline

How to use use-tinyfish

  1. 1.Identify what you need: search for URLs, fetch page content, automate interactions, or control a browser
  2. 2.Choose the lightest tool: start with `search` for discovery, `fetch` for content, `agent` for interaction, `browser` for raw control
  3. 3.Run the appropriate command with your query or URL
  4. 4.For agent runs, specify the JSON structure you want extracted in the goal
  5. 5.Parse the output (JSON by default, or `--pretty` for human-readable format)

Use cases

Good for
  • Research a topic by searching for relevant pages, then fetching and reading their full content
  • Extract product listings, prices, or structured data from e-commerce or comparison sites
  • Automate form submission, login flows, or multi-step workflows on websites
  • Gather current pricing, documentation, or product details from official pages
  • Scrape and structure data from dynamic sites that require browser interaction
Who it's for
  • Developers building agents that need live web access
  • Researchers gathering information from multiple sources
  • Data extraction and web scraping workflows
  • Anyone automating website interactions or collecting structured web data

use-tinyfish FAQ

When should I use search vs. fetch vs. agent vs. browser?

Use `search` to find URLs and current facts (fastest, cheapest). Use `fetch` when you have URLs and need clean content. Use `agent` for page interaction like clicking or form-filling. Use `browser` only when agent isn't sufficient and you need raw CDP control.

Can I fetch multiple URLs at once?

Yes. `tinyfish fetch content get` accepts multiple URLs and fetches them in parallel server-side in a single call.

How do I extract structured data from a website?

Use `tinyfish agent run --url <url> "<goal>"` and specify the JSON structure you want in the goal. For example: `"Extract all products as JSON: [{\"name\": str, \"price\": str}]"`

What if a page is dynamic or JavaScript-heavy?

Try `fetch` first. If it returns incomplete content, escalate to `agent` for browser automation. If agent can't handle it, use `browser` for raw CDP control.

Can I run multiple extractions in parallel?

Yes. Make separate `agent run` calls for different sites — they execute simultaneously. Do not combine multiple sites into one goal.

Full instructions (SKILL.md)

Source of truth, from tinyfish-io/tinyfish-cookbook.


name: use-tinyfish description: Use TinyFish for web search, fetching URLs, reading pages, current information, source-backed answers, research, docs, pricing/product pages, extraction, scraping, and browser automation. Use whenever the user asks to search, find, look up, research, compare, get information from the web, summarize a URL, fetch page content, or automate a website.

TinyFish CLI

You have access to the TinyFish CLI (tinyfish) — a suite of web tools you can call from the terminal.

If not installed: npm install -g @tiny-fish/cli If not authenticated: tinyfish auth login --source openclaw or set TINYFISH_API_KEY env var.


When This Skill Should Trigger

Use TinyFish whenever a request depends on live web information or page content. Do not wait for the user to say "TinyFish" or "scrape".

Strong triggers include:

  • Search or discovery: search, find, look up, research, compare, latest, current, news, docs, pricing, product details, best options.
  • URL/page reading: fetch, read, summarize, extract from this page, inspect this URL, get the content, pull links or metadata.
  • Source-backed answers: answer using web sources, verify a fact, check whether something changed, gather information from the web.
  • Website work: interact with a site, click through pages, fill forms, log in, collect structured data, handle bot-protected pages.

Default to the lightest tool that can answer:

  • No URL and the user needs web information: search, then fetch the best result(s) if more detail is needed.
  • URL provided and only content is needed: fetch.
  • Page interaction or dynamic extraction is needed: agent.
  • Raw CDP/Playwright-style control is needed: browser.

Picking the Right Tool

TinyFish has four tools. Start with the lightest one that can do the job and escalate only when needed.

search  →  fetch  →  agent  →  browser
lightest                        heaviest
ToolWhen to useSpeedCost
searchYou need to find URLs, current facts, docs, pricing, product details, or a quick source-backed answerFastestLowest
fetchYou have URLs and need clean page content, summaries, article text, docs, product pages, links, or metadataFastLow
agentYou need to interact with a page — click, fill forms, navigate, extract structured data from dynamic sitesSlowerHigher
browserAgent isn't enough — you need raw programmatic browser control via CDPSlowestHighest

Common Patterns

Research: search → fetch Search for a topic, then fetch the best results to read their full content.

# 1. Find URLs
tinyfish search query "best React state management libraries 2026"

# 2. Read the top results
tinyfish fetch content get --format markdown "https://result1.com" "https://result2.com"

Deep extraction: search → agent Search to find the right site, then use agent to interact with it and extract structured data.

# 1. Find the site
tinyfish search query "Nike running shoes official store"

# 2. Automate extraction on it
tinyfish agent run --url "https://nike.com/running" \
  "Extract all running shoes as JSON: [{\"name\": str, \"price\": str, \"colors\": [str]}]"

Escalation: fetch → agent Try fetch first. If the page is dynamic/JS-heavy and fetch returns empty or incomplete content, escalate to agent.

Full control: agent → browser If agent can't handle a complex multi-step workflow, spin up a raw browser session and automate it yourself via CDP.


Commands

tinyfish search query

Web search. Returns ranked results with titles, URLs, and snippets.

tinyfish search query "<query>" [--location <hint>] [--language <hint>] [--pretty]
  • Returns 10 results by default
  • Use --location and --language for geo-targeted results
  • Default output is JSON; --pretty for human-readable
tinyfish search query "best pho in Ho Chi Minh City" --location "Vietnam" --language "en"

tinyfish fetch content get

Fetch clean, extracted content from one or more URLs. Strips ads, nav, boilerplate — returns just the content.

tinyfish fetch content get <urls...> [--format markdown|html|json] [--links] [--image-links] [--pretty]
  • Accepts multiple URLs in a single call — they are fetched in parallel server-side
  • --format markdown (default) — clean readable text
  • --format json — structured document tree
  • --links — include all extracted links from the page
  • --image-links — include extracted image URLs
  • Response includes: url, final_url, title, language, author, published_date, text, latency_ms
# Fetch one page as markdown
tinyfish fetch content get --format markdown "https://example.com/article"

# Fetch multiple pages with links
tinyfish fetch content get --links "https://site-a.com" "https://site-b.com" "https://site-c.com"

tinyfish agent run

Run a browser automation using a natural language goal. The agent opens a real browser, navigates, clicks, fills forms, and extracts data.

tinyfish agent run --url <url> "<goal>" [--sync] [--async] [--pretty]
FlagPurpose
--url <url>Target URL (bare hostnames get https:// auto-prepended)
--syncWait for full result without streaming steps
--asyncSubmit and return immediately
--prettyHuman-readable output

Output: Default streams data: {...} SSE lines. The final result is the event where type == "COMPLETE" and status == "COMPLETED" — the extracted data is in the resultJson field. Read the raw output directly; no script-side parsing is needed.

Always specify the JSON structure you want in the goal:

tinyfish agent run --url "https://example.com/products" \
  "Extract all products as JSON array: [{\"name\": str, \"price\": str, \"url\": str}]"

tinyfish agent run --url "https://example.com/search" \
  "Search for 'wireless headphones', filter under $50, extract top 5 as JSON: [{\"name\": str, \"price\": str, \"rating\": str}]"

Parallel extraction — when hitting multiple independent sites, make separate calls. Do NOT combine into one goal.

Good — parallel calls (run simultaneously):

tinyfish agent run --url "https://pizzahut.com" \
  "Extract pizza prices as JSON: [{\"name\": str, \"price\": str}]"

tinyfish agent run --url "https://dominos.com" \
  "Extract pizza prices as JSON: [{\"name\": str, \"price\": str}]"

Bad — single combined call:

# Don't do this — less reliable and slower
tinyfish agent run --url "https://pizzahut.com" \
  "Extract prices from Pizza Hut and also go to Dominos..."

Managing runs:

tinyfish agent run list [--status PENDING|RUNNING|COMPLETED|FAILED|CANCELLED] [--limit N]
tinyfish agent run get <run_id>
tinyfish agent run cancel <run_id>

Batch operations — submit many runs from a CSV file (url,goal columns):

tinyfish agent batch run --input runs.csv
tinyfish agent batch list
tinyfish agent batch get <batch_id>
tinyfish agent batch cancel <batch_id>

tinyfish browser session create

Spin up a remote browser instance. Returns a CDP WebSocket URL for programmatic control.

tinyfish browser session create [--url <url>] [--pretty]
  • --url optionally navigates to a page after creation
  • Returns session_id, cdp_url (WebSocket), and base_url
  • Use the cdp_url with Playwright, Puppeteer, or any CDP client
tinyfish browser session create --url "https://example.com"
# Returns: { session_id, cdp_url: "wss://...", base_url: "https://..." }

General Notes

  • Match the user's language: Respond in whatever language the user writes in.
  • All commands support --pretty for human-readable output. Default is JSON.
  • Use --debug on the root command or set TINYFISH_DEBUG=1 to log HTTP requests to stderr.