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- 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
How to use use-tinyfish
- 1.Identify what you need: search for URLs, fetch page content, automate interactions, or control a browser
- 2.Choose the lightest tool: start with `search` for discovery, `fetch` for content, `agent` for interaction, `browser` for raw control
- 3.Run the appropriate command with your query or URL
- 4.For agent runs, specify the JSON structure you want extracted in the goal
- 5.Parse the output (JSON by default, or `--pretty` for human-readable format)
Use cases
- 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
- 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
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.
Yes. `tinyfish fetch content get` accepts multiple URLs and fetches them in parallel server-side in a single call.
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}]"`
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.
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, thenfetchthe 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
| Tool | When to use | Speed | Cost |
|---|---|---|---|
| search | You need to find URLs, current facts, docs, pricing, product details, or a quick source-backed answer | Fastest | Lowest |
| fetch | You have URLs and need clean page content, summaries, article text, docs, product pages, links, or metadata | Fast | Low |
| agent | You need to interact with a page — click, fill forms, navigate, extract structured data from dynamic sites | Slower | Higher |
| browser | Agent isn't enough — you need raw programmatic browser control via CDP | Slowest | Highest |
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
--locationand--languagefor geo-targeted results - Default output is JSON;
--prettyfor 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]
| Flag | Purpose |
|---|---|
--url <url> | Target URL (bare hostnames get https:// auto-prepended) |
--sync | Wait for full result without streaming steps |
--async | Submit and return immediately |
--pretty | Human-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]
--urloptionally navigates to a page after creation- Returns
session_id,cdp_url(WebSocket), andbase_url - Use the
cdp_urlwith 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
--prettyfor human-readable output. Default is JSON. - Use
--debugon the root command or setTINYFISH_DEBUG=1to log HTTP requests to stderr.
Related skills
More from tinyfish-io/tinyfish-cookbook and the wider catalog.

build-graph
Build or update the code review knowledge graph. Run this first to initialize, or let hooks keep it updated automatically.

Debug Issue
Systematically debug issues using graph-powered code navigation

Explore Codebase
Navigate and understand codebase structure using the knowledge graph

Refactor Safely
Plan and execute safe refactoring using dependency analysis

Review Changes
Perform a structured code review using change detection and impact

review-delta
Review only changes since last commit using impact analysis. Token-efficient delta review with automatic blast-radius detection.