{"id":"3ffe167e-b490-494d-8187-9ac99a17cf0a","entityType":"agent","slug":"clawhub-tinyfish-tinyfish","name":"Tinyfish","canonicalUrl":"https://www.xpersona.co/agent/clawhub-tinyfish-tinyfish","canonicalPath":"/agent/clawhub-tinyfish-tinyfish","generatedAt":"2026-10-09T16:21:05.238Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-09T04:00:21.035Z","emptyReason":null},"description":"Use TinyFish for web search, fetching URLs, reading pages, current information, source-backed answers, research, docs, pricing/product pages, extraction, scr... Skill: Tinyfish Owner: tinyfish Summary: Use TinyFish for web search, fetching URLs, reading pages, current information, source-backed answers, research, docs, pricing/product pages, extraction, scr... Tags: latest:1.0.6 Version history: v1.0.6 | 2026-06-08T18:59:27.471Z | user **Sign up tracking** - Add tracking for all tracking from openclaw v1.0.5 | 2026-06-03T21:56:58.330Z | auto - Overhauled SKILL.md with a new","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 5.4K downloads reported by the source. Last updated 10/9/2026.","installCommand":"clawhub skill install s1727v569szjcf64czrx6m36cd87zmaf:tinyfish","sourceUrl":"https://clawhub.ai/tinyfish/tinyfish","homepage":"https://clawhub.ai/tinyfish/skills/tinyfish","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/tinyfish/tinyfish","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/tinyfish/skills/tinyfish","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":75,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Use TinyFish for web search, fetching URLs, reading pages, current information, source-backed answers, research, docs, pricing/product pages, extraction, scr..."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-09T04:00:21.035Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T04:00:21.035Z","emptyReason":null},"stars":null,"forks":null,"downloads":5447,"packageName":null,"latestVersion":"1.0.6","tractionLabel":"5.4K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T04:00:21.035Z","emptyReason":null},"lastUpdatedAt":"2026-10-09T04:00:21.035Z","lastCrawledAt":"2026-10-09T04:00:21.035Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-10T04:00:21.035Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.6","createdAt":"2026-06-08T18:59:27.471Z","changelog":"**Sign up tracking** - Add tracking for all tracking from openclaw","fileCount":3,"zipByteSize":4829},{"version":"1.0.5","createdAt":"2026-06-03T21:56:58.330Z","changelog":"- Overhauled SKILL.md with a new focus on direct API usage and explicit environment variable requirements. - Added mandatory environment variable pre-flight check and user guidance for missing API keys. - Clarified best practices, including parallel API call recommendations and specifying JSON extraction formats. - Added examples for bot-protected sites (stealth mode) and country-specific proxy routing. - Introduced homepage and structured skill metadata fields.","fileCount":4,"zipByteSize":4198},{"version":"1.0.4","createdAt":"2026-06-03T21:43:43.196Z","changelog":"- Removed the skill-card.md file. - No changes to CLI usage or documentation in SKILL.md. - No functional or user-facing changes; update focuses on internal file cleanup.","fileCount":3,"zipByteSize":4411},{"version":"1.0.3","createdAt":"2026-04-23T00:47:01.510Z","changelog":"- Switched from shell-based API instructions to CLI-based usage with `tinyfish` commands. - Comprehensive new documentation on four TinyFish tools: search, fetch, agent, and browser. - Added clear guidance on tool selection, escalation workflow, and parallelization best practices. - Provides detailed usage examples, flags, and output structure for all CLI commands. - Removed the deprecated `scripts/extract.sh` script file.","fileCount":3,"zipByteSize":4451},{"version":"1.0.2","createdAt":"2026-02-10T22:32:14.705Z","changelog":"- Switched API environment variable from MINO_API_KEY to TINYFISH_API_KEY. - Updated all examples from Python to curl/bash for easier integration. - Added strict pre-flight key verification instructions before any API call, with clear user messaging if the key is missing. - Specified new homepage and environment key requirements in metadata. - Removed extract.py script and added extract.sh to reflect the transition to shell usage.","fileCount":3,"zipByteSize":2947},{"version":"1.0.1","createdAt":"2026-01-28T00:29:14.253Z","changelog":"Summary: Added best practices for specifying JSON output and running parallel extractions. - Introduced a \"Best Practices\" section emphasizing explicit JSON format and parallel API calls for independent sites. - Updated example extraction prompts to specify desired JSON output structure. - Added guidance and code examples demonstrating parallel extraction versus single combined prompts. - No code or feature changes; documentation improvements","fileCount":3,"zipByteSize":2884},{"version":"1.0.0","createdAt":"2026-01-27T19:15:42.386Z","changelog":"- Updated skill.","fileCount":3,"zipByteSize":2344}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s1727v569szjcf64czrx6m36cd87zmaf:tinyfish","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-tinyfish-tinyfish/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-tinyfish-tinyfish/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-tinyfish-tinyfish/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-tinyfish-tinyfish/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-tinyfish-tinyfish/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-tinyfish-tinyfish/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-09T16:21:05.237Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-tinyfish-tinyfish/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-tinyfish-tinyfish/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-tinyfish-tinyfish/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-tinyfish-tinyfish/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-09T04:00:21.035Z","emptyReason":null},"readme":"Skill: Tinyfish\n\nOwner: tinyfish\n\nSummary: Use TinyFish for web search, fetching URLs, reading pages, current information, source-backed answers, research, docs, pricing/product pages, extraction, scr...\n\nTags: latest:1.0.6\n\nVersion history:\n\nv1.0.6 | 2026-06-08T18:59:27.471Z | user\n\n**Sign up tracking**\n\n- Add tracking for all tracking from openclaw\n\nv1.0.5 | 2026-06-03T21:56:58.330Z | auto\n\n- Overhauled SKILL.md with a new focus on direct API usage and explicit environment variable requirements.\n- Added mandatory environment variable pre-flight check and user guidance for missing API keys.\n- Clarified best practices, including parallel API call recommendations and specifying JSON extraction formats.\n- Added examples for bot-protected sites (stealth mode) and country-specific proxy routing.\n- Introduced homepage and structured skill metadata fields.\n\nv1.0.4 | 2026-06-03T21:43:43.196Z | user\n\n- Removed the skill-card.md file.\n- No changes to CLI usage or documentation in SKILL.md.\n- No functional or user-facing changes; update focuses on internal file cleanup.\n\nv1.0.3 | 2026-04-23T00:47:01.510Z | user\n\n- Switched from shell-based API instructions to CLI-based usage with `tinyfish` commands.\n- Comprehensive new documentation on four TinyFish tools: search, fetch, agent, and browser.\n- Added clear guidance on tool selection, escalation workflow, and parallelization best practices.\n- Provides detailed usage examples, flags, and output structure for all CLI commands.\n- Removed the deprecated `scripts/extract.sh` script file.\n\nv1.0.2 | 2026-02-10T22:32:14.705Z | user\n\n- Switched API environment variable from MINO_API_KEY to TINYFISH_API_KEY.\n- Updated all examples from Python to curl/bash for easier integration.\n- Added strict pre-flight key verification instructions before any API call, with clear user messaging if the key is missing.\n- Specified new homepage and environment key requirements in metadata.\n- Removed extract.py script and added extract.sh to reflect the transition to shell usage.\n\nv1.0.1 | 2026-01-28T00:29:14.253Z | user\n\nSummary: Added best practices for specifying JSON output and running parallel extractions.\n\n- Introduced a \"Best Practices\" section emphasizing explicit JSON format and parallel API calls for independent sites.\n- Updated example extraction prompts to specify desired JSON output structure.\n- Added guidance and code examples demonstrating parallel extraction versus single combined prompts.\n- No code or feature changes; documentation improvements\n\nv1.0.0 | 2026-01-27T19:15:42.386Z | user\n\n- Updated skill.\n\nArchive index:\n\nArchive v1.0.6: 3 files, 4829 bytes\n\nFiles: skill-card.md (2172b), SKILL.md (8036b), _meta.json (127b)\n\nFile v1.0.6:SKILL.md\n\n---\nname: use-tinyfish\ndescription: 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.\n---\n\n# TinyFish CLI\n\nYou have access to the TinyFish CLI (`tinyfish`) — a suite of web tools you can call from the terminal.\n\nIf not installed: `npm install -g @tiny-fish/cli`\nIf not authenticated: `tinyfish auth login --source openclaw` or set `TINYFISH_API_KEY` env var.\n\n---\n\n## When This Skill Should Trigger\n\nUse TinyFish whenever a request depends on live web information or page content. Do not wait for the user to say \"TinyFish\" or \"scrape\".\n\nStrong triggers include:\n\n- Search or discovery: search, find, look up, research, compare, latest, current, news, docs, pricing, product details, best options.\n- URL/page reading: fetch, read, summarize, extract from this page, inspect this URL, get the content, pull links or metadata.\n- Source-backed answers: answer using web sources, verify a fact, check whether something changed, gather information from the web.\n- Website work: interact with a site, click through pages, fill forms, log in, collect structured data, handle bot-protected pages.\n\nDefault to the lightest tool that can answer:\n\n- No URL and the user needs web information: `search`, then `fetch` the best result(s) if more detail is needed.\n- URL provided and only content is needed: `fetch`.\n- Page interaction or dynamic extraction is needed: `agent`.\n- Raw CDP/Playwright-style control is needed: `browser`.\n\n---\n\n## Picking the Right Tool\n\nTinyFish has four tools. Start with the lightest one that can do the job and escalate only when needed.\n\n```\nsearch  →  fetch  →  agent  →  browser\nlightest                        heaviest\n```\n\n| Tool | When to use | Speed | Cost |\n|------|-------------|-------|------|\n| **search** | You need to find URLs, current facts, docs, pricing, product details, or a quick source-backed answer | Fastest | Lowest |\n| **fetch** | You have URLs and need clean page content, summaries, article text, docs, product pages, links, or metadata | Fast | Low |\n| **agent** | You need to interact with a page — click, fill forms, navigate, extract structured data from dynamic sites | Slower | Higher |\n| **browser** | Agent isn't enough — you need raw programmatic browser control via CDP | Slowest | Highest |\n\n### Common Patterns\n\n**Research: search → fetch**\nSearch for a topic, then fetch the best results to read their full content.\n\n```bash\n# 1. Find URLs\ntinyfish search query \"best React state management libraries 2026\"\n\n# 2. Read the top results\ntinyfish fetch content get --format markdown \"https://result1.com\" \"https://result2.com\"\n```\n\n**Deep extraction: search → agent**\nSearch to find the right site, then use agent to interact with it and extract structured data.\n\n```bash\n# 1. Find the site\ntinyfish search query \"Nike running shoes official store\"\n\n# 2. Automate extraction on it\ntinyfish agent run --url \"https://nike.com/running\" \\\n  \"Extract all running shoes as JSON: [{\\\"name\\\": str, \\\"price\\\": str, \\\"colors\\\": [str]}]\"\n```\n\n**Escalation: fetch → agent**\nTry fetch first. If the page is dynamic/JS-heavy and fetch returns empty or incomplete content, escalate to agent.\n\n**Full control: agent → browser**\nIf agent can't handle a complex multi-step workflow, spin up a raw browser session and automate it yourself via CDP.\n\n---\n\n## Commands\n\n### `tinyfish search query`\n\nWeb search. Returns ranked results with titles, URLs, and snippets.\n\n```bash\ntinyfish search query \"<query>\" [--location <hint>] [--language <hint>] [--pretty]\n```\n\n- Returns 10 results by default\n- Use `--location` and `--language` for geo-targeted results\n- Default output is JSON; `--pretty` for human-readable\n\n```bash\ntinyfish search query \"best pho in Ho Chi Minh City\" --location \"Vietnam\" --language \"en\"\n```\n\n---\n\n### `tinyfish fetch content get`\n\nFetch clean, extracted content from one or more URLs. Strips ads, nav, boilerplate — returns just the content.\n\n```bash\ntinyfish fetch content get <urls...> [--format markdown|html|json] [--links] [--image-links] [--pretty]\n```\n\n- Accepts **multiple URLs** in a single call — they are fetched in parallel server-side\n- `--format markdown` (default) — clean readable text\n- `--format json` — structured document tree\n- `--links` — include all extracted links from the page\n- `--image-links` — include extracted image URLs\n- Response includes: `url`, `final_url`, `title`, `language`, `author`, `published_date`, `text`, `latency_ms`\n\n```bash\n# Fetch one page as markdown\ntinyfish fetch content get --format markdown \"https://example.com/article\"\n\n# Fetch multiple pages with links\ntinyfish fetch content get --links \"https://site-a.com\" \"https://site-b.com\" \"https://site-c.com\"\n```\n\n---\n\n### `tinyfish agent run`\n\nRun a browser automation using a natural language goal. The agent opens a real browser, navigates, clicks, fills forms, and extracts data.\n\n```bash\ntinyfish agent run --url <url> \"<goal>\" [--sync] [--async] [--pretty]\n```\n\n| Flag | Purpose |\n|------|---------|\n| `--url <url>` | Target URL (bare hostnames get `https://` auto-prepended) |\n| `--sync` | Wait for full result without streaming steps |\n| `--async` | Submit and return immediately |\n| `--pretty` | Human-readable output |\n\n**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.\n\n**Always specify the JSON structure you want in the goal:**\n\n```bash\ntinyfish agent run --url \"https://example.com/products\" \\\n  \"Extract all products as JSON array: [{\\\"name\\\": str, \\\"price\\\": str, \\\"url\\\": str}]\"\n\ntinyfish agent run --url \"https://example.com/search\" \\\n  \"Search for 'wireless headphones', filter under $50, extract top 5 as JSON: [{\\\"name\\\": str, \\\"price\\\": str, \\\"rating\\\": str}]\"\n```\n\n**Parallel extraction — when hitting multiple independent sites, make separate calls. Do NOT combine into one goal.**\n\nGood — parallel calls (run simultaneously):\n```bash\ntinyfish agent run --url \"https://pizzahut.com\" \\\n  \"Extract pizza prices as JSON: [{\\\"name\\\": str, \\\"price\\\": str}]\"\n\ntinyfish agent run --url \"https://dominos.com\" \\\n  \"Extract pizza prices as JSON: [{\\\"name\\\": str, \\\"price\\\": str}]\"\n```\n\nBad — single combined call:\n```bash\n# Don't do this — less reliable and slower\ntinyfish agent run --url \"https://pizzahut.com\" \\\n  \"Extract prices from Pizza Hut and also go to Dominos...\"\n```\n\n**Managing runs:**\n\n```bash\ntinyfish agent run list [--status PENDING|RUNNING|COMPLETED|FAILED|CANCELLED] [--limit N]\ntinyfish agent run get <run_id>\ntinyfish agent run cancel <run_id>\n```\n\n**Batch operations** — submit many runs from a CSV file (`url,goal` columns):\n\n```bash\ntinyfish agent batch run --input runs.csv\ntinyfish agent batch list\ntinyfish agent batch get <batch_id>\ntinyfish agent batch cancel <batch_id>\n```\n\n---\n\n### `tinyfish browser session create`\n\nSpin up a remote browser instance. Returns a CDP WebSocket URL for programmatic control.\n\n```bash\ntinyfish browser session create [--url <url>] [--pretty]\n```\n\n- `--url` optionally navigates to a page after creation\n- Returns `session_id`, `cdp_url` (WebSocket), and `base_url`\n- Use the `cdp_url` with Playwright, Puppeteer, or any CDP client\n\n```bash\ntinyfish browser session create --url \"https://example.com\"\n# Returns: { session_id, cdp_url: \"wss://...\", base_url: \"https://...\" }\n```\n\n---\n\n## General Notes\n\n- **Match the user's language**: Respond in whatever language the user writes in.\n- All commands support `--pretty` for human-readable output. Default is JSON.\n- Use `--debug` on the root command or set `TINYFISH_DEBUG=1` to log HTTP requests to stderr.\n\nFile v1.0.6:_meta.json\n\n{\n  \"ownerId\": \"kn710rnzzdna0e7469rv7j4txx800d69\",\n  \"slug\": \"tinyfish\",\n  \"version\": \"1.0.6\",\n  \"publishedAt\": 1780945167471\n}\n\nFile v1.0.6:skill-card.md\n\n## Description:\n\nTinyFish helps agents search the web, fetch page content, produce source-backed research, extract data, and automate browser interactions through the TinyFish CLI.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[tinyfish](https://clawhub.ai/user/tinyfish)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and agents use this skill to retrieve current web information, inspect URLs, summarize pages, extract structured data, and automate browser-based workflows when static page fetching is insufficient.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Remote browsing and form interaction can expose sensitive account content, private URLs, or credentials to a third-party service.\n\nMitigation: Avoid entering passwords, API keys, payment data, private URLs, or sensitive account content unless that exposure has been separately reviewed and accepted.\n\nRisk: The documented global CLI installation can broaden local execution and update risk.\n\nMitigation: Prefer a pinned or isolated CLI installation and review the package before installing or upgrading.\n\nRisk: Browser automation can submit forms, click controls, or perform actions on live websites.\n\nMitigation: Use narrowly scoped goals, review intended actions before execution where possible, and avoid destructive or account-changing workflows without explicit approval.\n\n## Reference(s):\n\n- [Tinyfish ClawHub skill page](https://clawhub.ai/tinyfish/skills/tinyfish)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown, JSON, and shell commands]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May include URLs, citations, extracted page content, structured JSON, and TinyFish CLI commands.]\n\n## Skill Version(s):\n\n1.0.6 (source: server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.0.5: 4 files, 4198 bytes\n\nFiles: scripts/extract.sh (1652b), skill-card.md (2370b), SKILL.md (4798b), _meta.json (127b)\n\nFile v1.0.5:SKILL.md\n\n---\nname: tinyfish\ndescription: Use TinyFish web agent to extract/scrape websites, extract data, and automate browser actions using natural language. Use when you need to extract/scrape data from websites, handle bot-protected sites, or automate web tasks.\nhomepage: https://agent.tinyfish.ai\nrequires:\n  env:\n    - TINYFISH_API_KEY\n---\n\n# TinyFish Web Agent\n\nRequires: `TINYFISH_API_KEY` environment variable\n\n## Pre-flight Check (REQUIRED)\n\nBefore making any API call, **always** run this first to verify the key is available:\n\n```bash\n[ -n \"$TINYFISH_API_KEY\" ] && echo \"TINYFISH_API_KEY is set\" || echo \"TINYFISH_API_KEY is NOT set\"\n```\n\nIf the key is **not set**, you **MUST stop and ask the user** to add their API key. Do **NOT** fall back to other tools or approaches — the task requires TinyFish.\n\nTell the user:\n\n> You need a TinyFish API key. Get one at: <https://agent.tinyfish.ai/api-keys>\n>\n> Then set it so the agent can use it:\n>\n> **Option 1 — Environment variable (works everywhere):**\n> ```bash\n> export TINYFISH_API_KEY=\"your-key-here\"\n> ```\n>\n> **Option 2 — Claude Code settings (Claude Code only):**\n> Add to `~/.claude/settings.local.json`:\n> ```json\n> {\n>   \"env\": {\n>     \"TINYFISH_API_KEY\": \"your-key-here\"\n>   }\n> }\n> ```\n\nDo NOT proceed until the key is confirmed available.\n\n## Best Practices\n\n1. **Specify JSON format**: Always describe the exact structure you want returned\n2. **Parallel calls**: When extracting from multiple independent sites, make separate parallel calls instead of combining into one prompt\n\n## Basic Extract/Scrape\n\nExtract data from a page. Specify the JSON structure you want:\n\n```bash\ncurl -N -s -X POST \"https://agent.tinyfish.ai/v1/automation/run-sse\" \\\n  -H \"X-API-Key: $TINYFISH_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"url\": \"https://example.com\",\n    \"goal\": \"Extract product info as JSON: {\\\"name\\\": str, \\\"price\\\": str, \\\"in_stock\\\": bool}\"\n  }'\n```\n\n## Multiple Items\n\nExtract lists of data with explicit structure:\n\n```bash\ncurl -N -s -X POST \"https://agent.tinyfish.ai/v1/automation/run-sse\" \\\n  -H \"X-API-Key: $TINYFISH_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"url\": \"https://example.com/products\",\n    \"goal\": \"Extract all products as JSON array: [{\\\"name\\\": str, \\\"price\\\": str, \\\"url\\\": str}]\"\n  }'\n```\n\n## Stealth Mode\n\nFor bot-protected sites, add `\"browser_profile\": \"stealth\"` to the request body:\n\n```bash\ncurl -N -s -X POST \"https://agent.tinyfish.ai/v1/automation/run-sse\" \\\n  -H \"X-API-Key: $TINYFISH_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"url\": \"https://protected-site.com\",\n    \"goal\": \"Extract product data as JSON: {\\\"name\\\": str, \\\"price\\\": str, \\\"description\\\": str}\",\n    \"browser_profile\": \"stealth\"\n  }'\n```\n\n## Proxy\n\nRoute through a specific country by adding `\"proxy_config\"` to the body:\n\n```bash\ncurl -N -s -X POST \"https://agent.tinyfish.ai/v1/automation/run-sse\" \\\n  -H \"X-API-Key: $TINYFISH_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"url\": \"https://geo-restricted-site.com\",\n    \"goal\": \"Extract pricing data as JSON: {\\\"item\\\": str, \\\"price\\\": str, \\\"currency\\\": str}\",\n    \"browser_profile\": \"stealth\",\n    \"proxy_config\": {\"enabled\": true, \"country_code\": \"US\"}\n  }'\n```\n\n## Output\n\nThe SSE stream returns `data: {...}` lines. The final result is the event where `type == \"COMPLETE\"` and `status == \"COMPLETED\"` — the extracted data is in the `resultJson` field. Claude reads the raw SSE output directly; no script-side parsing is needed.\n\n## Parallel Extraction\n\nWhen extracting from multiple independent sources, make separate parallel curl calls instead of combining into one prompt:\n\n**Good** - Parallel calls:\n```bash\n# Compare pizza prices - run these simultaneously\ncurl -N -s -X POST \"https://agent.tinyfish.ai/v1/automation/run-sse\" \\\n  -H \"X-API-Key: $TINYFISH_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"url\": \"https://pizzahut.com\",\n    \"goal\": \"Extract pizza prices as JSON: [{\\\"name\\\": str, \\\"price\\\": str}]\"\n  }'\n\ncurl -N -s -X POST \"https://agent.tinyfish.ai/v1/automation/run-sse\" \\\n  -H \"X-API-Key: $TINYFISH_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"url\": \"https://dominos.com\",\n    \"goal\": \"Extract pizza prices as JSON: [{\\\"name\\\": str, \\\"price\\\": str}]\"\n  }'\n```\n\n**Bad** - Single combined call:\n```bash\n# Don't do this - less reliable and slower\ncurl -N -s -X POST \"https://agent.tinyfish.ai/v1/automation/run-sse\" \\\n  -H \"X-API-Key: $TINYFISH_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"url\": \"https://pizzahut.com\",\n    \"goal\": \"Extract prices from Pizza Hut and also go to Dominos...\"\n  }'\n```\n\nEach independent extraction task should be its own API call. This is faster (parallel execution) and more reliable.\n\nFile v1.0.5:_meta.json\n\n{\n  \"ownerId\": \"kn710rnzzdna0e7469rv7j4txx800d69\",\n  \"slug\": \"tinyfish\",\n  \"version\": \"1.0.5\",\n  \"publishedAt\": 1780523818330\n}\n\nFile v1.0.5:skill-card.md\n\n## Description: <br>\nUse TinyFish web agent to extract/scrape websites, extract data, and automate browser actions using natural language. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[tinyfish](https://clawhub.ai/user/tinyfish) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and agents use Tinyfish to call the TinyFish web automation service for web data extraction, scraping, and browser task automation. It is especially relevant when tasks require JSON-shaped extraction, bot-protected site handling, or country-specific proxy routing. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Target URLs, task instructions, selected stealth or proxy settings, and resulting data are sent to TinyFish under the user's API key. <br>\nMitigation: Use the skill only for sites and data you are authorized to process with TinyFish, and avoid private, authenticated, regulated, confidential, or internal-only sites unless that use is approved. <br>\nRisk: The skill supports stealth and proxy options that can affect how target websites are accessed. <br>\nMitigation: Review requests before execution and use stealth or proxy routing only where it is authorized and consistent with applicable site rules and policies. <br>\n\n\n## Reference(s): <br>\n- [TinyFish homepage](https://agent.tinyfish.ai) <br>\n- [TinyFish API keys](https://agent.tinyfish.ai/api-keys) <br>\n- [Tinyfish ClawHub skill page](https://clawhub.ai/tinyfish/tinyfish) <br>\n- [TinyFish publisher profile](https://clawhub.ai/user/tinyfish) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance] <br>\n**Output Format:** [Markdown guidance with bash examples and JSON response expectations] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Requires TINYFISH_API_KEY; TinyFish API responses are streamed as SSE data events with extracted data in resultJson.] <br>\n\n## Skill Version(s): <br>\n1.0.5 (source: server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.0.4: 3 files, 4411 bytes\n\nFiles: skill-card.md (2338b), SKILL.md (6798b), _meta.json (127b)\n\nFile v1.0.4:SKILL.md\n\n---\nname: use-tinyfish\ndescription: Use TinyFish web agent to extract/scrape websites, extract data, and automate browser actions using natural language. Use when you need to extract/scrape data from websites, handle bot-protected sites, or automate web tasks.\n---\n\n# TinyFish CLI\n\nYou have access to the TinyFish CLI (`tinyfish`) — a suite of web tools you can call from the terminal.\n\nIf not installed: `npm install -g @tiny-fish/cli`\nIf not authenticated: `tinyfish auth login` or set `TINYFISH_API_KEY` env var. Keys at https://agent.tinyfish.ai/api-keys\n\n---\n\n## Picking the Right Tool\n\nTinyFish has four tools. Start with the lightest one that can do the job and escalate only when needed.\n\n```\nsearch  →  fetch  →  agent  →  browser\nlightest                        heaviest\n```\n\n| Tool | When to use | Speed | Cost |\n|------|-------------|-------|------|\n| **search** | You need to find URLs or get a quick answer about a topic | Fastest | Lowest |\n| **fetch** | You have URLs and need their clean content (articles, docs, product pages) | Fast | Low |\n| **agent** | You need to interact with a page — click, fill forms, navigate, extract structured data from dynamic sites | Slower | Higher |\n| **browser** | Agent isn't enough — you need raw programmatic browser control via CDP | Slowest | Highest |\n\n### Common Patterns\n\n**Research: search → fetch**\nSearch for a topic, then fetch the best results to read their full content.\n\n```bash\n# 1. Find URLs\ntinyfish search query \"best React state management libraries 2026\"\n\n# 2. Read the top results\ntinyfish fetch content get --format markdown \"https://result1.com\" \"https://result2.com\"\n```\n\n**Deep extraction: search → agent**\nSearch to find the right site, then use agent to interact with it and extract structured data.\n\n```bash\n# 1. Find the site\ntinyfish search query \"Nike running shoes official store\"\n\n# 2. Automate extraction on it\ntinyfish agent run --url \"https://nike.com/running\" \\\n  \"Extract all running shoes as JSON: [{\\\"name\\\": str, \\\"price\\\": str, \\\"colors\\\": [str]}]\"\n```\n\n**Escalation: fetch → agent**\nTry fetch first. If the page is dynamic/JS-heavy and fetch returns empty or incomplete content, escalate to agent.\n\n**Full control: agent → browser**\nIf agent can't handle a complex multi-step workflow, spin up a raw browser session and automate it yourself via CDP.\n\n---\n\n## Commands\n\n### `tinyfish search query`\n\nWeb search. Returns ranked results with titles, URLs, and snippets.\n\n```bash\ntinyfish search query \"<query>\" [--location <hint>] [--language <hint>] [--pretty]\n```\n\n- Returns 10 results by default\n- Use `--location` and `--language` for geo-targeted results\n- Default output is JSON; `--pretty` for human-readable\n\n```bash\ntinyfish search query \"best pho in Ho Chi Minh City\" --location \"Vietnam\" --language \"en\"\n```\n\n---\n\n### `tinyfish fetch content get`\n\nFetch clean, extracted content from one or more URLs. Strips ads, nav, boilerplate — returns just the content.\n\n```bash\ntinyfish fetch content get <urls...> [--format markdown|html|json] [--links] [--image-links] [--pretty]\n```\n\n- Accepts **multiple URLs** in a single call — they are fetched in parallel server-side\n- `--format markdown` (default) — clean readable text\n- `--format json` — structured document tree\n- `--links` — include all extracted links from the page\n- `--image-links` — include extracted image URLs\n- Response includes: `url`, `final_url`, `title`, `language`, `author`, `published_date`, `text`, `latency_ms`\n\n```bash\n# Fetch one page as markdown\ntinyfish fetch content get --format markdown \"https://example.com/article\"\n\n# Fetch multiple pages with links\ntinyfish fetch content get --links \"https://site-a.com\" \"https://site-b.com\" \"https://site-c.com\"\n```\n\n---\n\n### `tinyfish agent run`\n\nRun a browser automation using a natural language goal. The agent opens a real browser, navigates, clicks, fills forms, and extracts data.\n\n```bash\ntinyfish agent run --url <url> \"<goal>\" [--sync] [--async] [--pretty]\n```\n\n| Flag | Purpose |\n|------|---------|\n| `--url <url>` | Target URL (bare hostnames get `https://` auto-prepended) |\n| `--sync` | Wait for full result without streaming steps |\n| `--async` | Submit and return immediately |\n| `--pretty` | Human-readable output |\n\n**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.\n\n**Always specify the JSON structure you want in the goal:**\n\n```bash\ntinyfish agent run --url \"https://example.com/products\" \\\n  \"Extract all products as JSON array: [{\\\"name\\\": str, \\\"price\\\": str, \\\"url\\\": str}]\"\n\ntinyfish agent run --url \"https://example.com/search\" \\\n  \"Search for 'wireless headphones', filter under $50, extract top 5 as JSON: [{\\\"name\\\": str, \\\"price\\\": str, \\\"rating\\\": str}]\"\n```\n\n**Parallel extraction — when hitting multiple independent sites, make separate calls. Do NOT combine into one goal.**\n\nGood — parallel calls (run simultaneously):\n```bash\ntinyfish agent run --url \"https://pizzahut.com\" \\\n  \"Extract pizza prices as JSON: [{\\\"name\\\": str, \\\"price\\\": str}]\"\n\ntinyfish agent run --url \"https://dominos.com\" \\\n  \"Extract pizza prices as JSON: [{\\\"name\\\": str, \\\"price\\\": str}]\"\n```\n\nBad — single combined call:\n```bash\n# Don't do this — less reliable and slower\ntinyfish agent run --url \"https://pizzahut.com\" \\\n  \"Extract prices from Pizza Hut and also go to Dominos...\"\n```\n\n**Managing runs:**\n\n```bash\ntinyfish agent run list [--status PENDING|RUNNING|COMPLETED|FAILED|CANCELLED] [--limit N]\ntinyfish agent run get <run_id>\ntinyfish agent run cancel <run_id>\n```\n\n**Batch operations** — submit many runs from a CSV file (`url,goal` columns):\n\n```bash\ntinyfish agent batch run --input runs.csv\ntinyfish agent batch list\ntinyfish agent batch get <batch_id>\ntinyfish agent batch cancel <batch_id>\n```\n\n---\n\n### `tinyfish browser session create`\n\nSpin up a remote browser instance. Returns a CDP WebSocket URL for programmatic control.\n\n```bash\ntinyfish browser session create [--url <url>] [--pretty]\n```\n\n- `--url` optionally navigates to a page after creation\n- Returns `session_id`, `cdp_url` (WebSocket), and `base_url`\n- Use the `cdp_url` with Playwright, Puppeteer, or any CDP client\n\n```bash\ntinyfish browser session create --url \"https://example.com\"\n# Returns: { session_id, cdp_url: \"wss://...\", base_url: \"https://...\" }\n```\n\n---\n\n## General Notes\n\n- **Match the user's language**: Respond in whatever language the user writes in.\n- All commands support `--pretty` for human-readable output. Default is JSON.\n- Use `--debug` on the root command or set `TINYFISH_DEBUG=1` to log HTTP requests to stderr.\n\nFile v1.0.4:_meta.json\n\n{\n  \"ownerId\": \"kn710rnzzdna0e7469rv7j4txx800d69\",\n  \"slug\": \"tinyfish\",\n  \"version\": \"1.0.4\",\n  \"publishedAt\": 1780523023196\n}\n\nFile v1.0.4:skill-card.md\n\n## Description: <br>\nTinyFish helps agents search, fetch, extract website data, and automate browser actions with the TinyFish CLI. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[tinyfish](https://clawhub.ai/user/tinyfish) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and agents use TinyFish to research websites, extract structured data, and automate browser workflows from natural-language goals. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: TinyFish usage may send URLs, page contents, prompts, and extracted data to the TinyFish service. <br>\nMitigation: Use the skill only with data and sites approved for TinyFish processing, and avoid submitting sensitive content unless that use is authorized. <br>\nRisk: Browser automation can affect accounts, costs, or site state when used on live websites. <br>\nMitigation: Run automation only on sites where the user has permission, review the requested goal before execution, and prefer lighter search or fetch commands when interaction is not needed. <br>\nRisk: The skill requires TinyFish credentials through login or the TINYFISH_API_KEY environment variable. <br>\nMitigation: Store credentials in the user's secret-management flow, avoid printing them in logs, and confirm the TinyFish package and service are trusted before installation. <br>\n\n\n## Reference(s): <br>\n- [ClawHub Tinyfish Skill](https://clawhub.ai/tinyfish/tinyfish) <br>\n- [TinyFish API Keys](https://agent.tinyfish.ai/api-keys) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance] <br>\n**Output Format:** [Markdown guidance with inline shell commands and JSON examples] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May direct agents to call TinyFish CLI commands that return JSON, markdown, SSE lines, or browser session connection details.] <br>\n\n## Skill Version(s): <br>\n1.0.4 (source: server release metadata) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.0.3: 3 files, 4451 bytes\n\nFiles: skill-card.md (2409b), SKILL.md (6798b), _meta.json (127b)\n\nFile v1.0.3:SKILL.md\n\n---\nname: use-tinyfish\ndescription: Use TinyFish web agent to extract/scrape websites, extract data, and automate browser actions using natural language. Use when you need to extract/scrape data from websites, handle bot-protected sites, or automate web tasks.\n---\n\n# TinyFish CLI\n\nYou have access to the TinyFish CLI (`tinyfish`) — a suite of web tools you can call from the terminal.\n\nIf not installed: `npm install -g @tiny-fish/cli`\nIf not authenticated: `tinyfish auth login` or set `TINYFISH_API_KEY` env var. Keys at https://agent.tinyfish.ai/api-keys\n\n---\n\n## Picking the Right Tool\n\nTinyFish has four tools. Start with the lightest one that can do the job and escalate only when needed.\n\n```\nsearch  →  fetch  →  agent  →  browser\nlightest                        heaviest\n```\n\n| Tool | When to use | Speed | Cost |\n|------|-------------|-------|------|\n| **search** | You need to find URLs or get a quick answer about a topic | Fastest | Lowest |\n| **fetch** | You have URLs and need their clean content (articles, docs, product pages) | Fast | Low |\n| **agent** | You need to interact with a page — click, fill forms, navigate, extract structured data from dynamic sites | Slower | Higher |\n| **browser** | Agent isn't enough — you need raw programmatic browser control via CDP | Slowest | Highest |\n\n### Common Patterns\n\n**Research: search → fetch**\nSearch for a topic, then fetch the best results to read their full content.\n\n```bash\n# 1. Find URLs\ntinyfish search query \"best React state management libraries 2026\"\n\n# 2. Read the top results\ntinyfish fetch content get --format markdown \"https://result1.com\" \"https://result2.com\"\n```\n\n**Deep extraction: search → agent**\nSearch to find the right site, then use agent to interact with it and extract structured data.\n\n```bash\n# 1. Find the site\ntinyfish search query \"Nike running shoes official store\"\n\n# 2. Automate extraction on it\ntinyfish agent run --url \"https://nike.com/running\" \\\n  \"Extract all running shoes as JSON: [{\\\"name\\\": str, \\\"price\\\": str, \\\"colors\\\": [str]}]\"\n```\n\n**Escalation: fetch → agent**\nTry fetch first. If the page is dynamic/JS-heavy and fetch returns empty or incomplete content, escalate to agent.\n\n**Full control: agent → browser**\nIf agent can't handle a complex multi-step workflow, spin up a raw browser session and automate it yourself via CDP.\n\n---\n\n## Commands\n\n### `tinyfish search query`\n\nWeb search. Returns ranked results with titles, URLs, and snippets.\n\n```bash\ntinyfish search query \"<query>\" [--location <hint>] [--language <hint>] [--pretty]\n```\n\n- Returns 10 results by default\n- Use `--location` and `--language` for geo-targeted results\n- Default output is JSON; `--pretty` for human-readable\n\n```bash\ntinyfish search query \"best pho in Ho Chi Minh City\" --location \"Vietnam\" --language \"en\"\n```\n\n---\n\n### `tinyfish fetch content get`\n\nFetch clean, extracted content from one or more URLs. Strips ads, nav, boilerplate — returns just the content.\n\n```bash\ntinyfish fetch content get <urls...> [--format markdown|html|json] [--links] [--image-links] [--pretty]\n```\n\n- Accepts **multiple URLs** in a single call — they are fetched in parallel server-side\n- `--format markdown` (default) — clean readable text\n- `--format json` — structured document tree\n- `--links` — include all extracted links from the page\n- `--image-links` — include extracted image URLs\n- Response includes: `url`, `final_url`, `title`, `language`, `author`, `published_date`, `text`, `latency_ms`\n\n```bash\n# Fetch one page as markdown\ntinyfish fetch content get --format markdown \"https://example.com/article\"\n\n# Fetch multiple pages with links\ntinyfish fetch content get --links \"https://site-a.com\" \"https://site-b.com\" \"https://site-c.com\"\n```\n\n---\n\n### `tinyfish agent run`\n\nRun a browser automation using a natural language goal. The agent opens a real browser, navigates, clicks, fills forms, and extracts data.\n\n```bash\ntinyfish agent run --url <url> \"<goal>\" [--sync] [--async] [--pretty]\n```\n\n| Flag | Purpose |\n|------|---------|\n| `--url <url>` | Target URL (bare hostnames get `https://` auto-prepended) |\n| `--sync` | Wait for full result without streaming steps |\n| `--async` | Submit and return immediately |\n| `--pretty` | Human-readable output |\n\n**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.\n\n**Always specify the JSON structure you want in the goal:**\n\n```bash\ntinyfish agent run --url \"https://example.com/products\" \\\n  \"Extract all products as JSON array: [{\\\"name\\\": str, \\\"price\\\": str, \\\"url\\\": str}]\"\n\ntinyfish agent run --url \"https://example.com/search\" \\\n  \"Search for 'wireless headphones', filter under $50, extract top 5 as JSON: [{\\\"name\\\": str, \\\"price\\\": str, \\\"rating\\\": str}]\"\n```\n\n**Parallel extraction — when hitting multiple independent sites, make separate calls. Do NOT combine into one goal.**\n\nGood — parallel calls (run simultaneously):\n```bash\ntinyfish agent run --url \"https://pizzahut.com\" \\\n  \"Extract pizza prices as JSON: [{\\\"name\\\": str, \\\"price\\\": str}]\"\n\ntinyfish agent run --url \"https://dominos.com\" \\\n  \"Extract pizza prices as JSON: [{\\\"name\\\": str, \\\"price\\\": str}]\"\n```\n\nBad — single combined call:\n```bash\n# Don't do this — less reliable and slower\ntinyfish agent run --url \"https://pizzahut.com\" \\\n  \"Extract prices from Pizza Hut and also go to Dominos...\"\n```\n\n**Managing runs:**\n\n```bash\ntinyfish agent run list [--status PENDING|RUNNING|COMPLETED|FAILED|CANCELLED] [--limit N]\ntinyfish agent run get <run_id>\ntinyfish agent run cancel <run_id>\n```\n\n**Batch operations** — submit many runs from a CSV file (`url,goal` columns):\n\n```bash\ntinyfish agent batch run --input runs.csv\ntinyfish agent batch list\ntinyfish agent batch get <batch_id>\ntinyfish agent batch cancel <batch_id>\n```\n\n---\n\n### `tinyfish browser session create`\n\nSpin up a remote browser instance. Returns a CDP WebSocket URL for programmatic control.\n\n```bash\ntinyfish browser session create [--url <url>] [--pretty]\n```\n\n- `--url` optionally navigates to a page after creation\n- Returns `session_id`, `cdp_url` (WebSocket), and `base_url`\n- Use the `cdp_url` with Playwright, Puppeteer, or any CDP client\n\n```bash\ntinyfish browser session create --url \"https://example.com\"\n# Returns: { session_id, cdp_url: \"wss://...\", base_url: \"https://...\" }\n```\n\n---\n\n## General Notes\n\n- **Match the user's language**: Respond in whatever language the user writes in.\n- All commands support `--pretty` for human-readable output. Default is JSON.\n- Use `--debug` on the root command or set `TINYFISH_DEBUG=1` to log HTTP requests to stderr.\n\nFile v1.0.3:_meta.json\n\n{\n  \"ownerId\": \"kn710rnzzdna0e7469rv7j4txx800d69\",\n  \"slug\": \"tinyfish\",\n  \"version\": \"1.0.3\",\n  \"publishedAt\": 1776905221510\n}\n\nFile v1.0.3:skill-card.md\n\n## Description: <br>\nUse TinyFish web agent to extract/scrape websites, extract data, and automate browser actions using natural language. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[simantak-dabhade](https://clawhub.ai/user/simantak-dabhade) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and agents use this skill to choose and run TinyFish CLI commands for web search, page fetching, structured extraction, and browser automation tasks. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Selected web tasks and page content may be sent to TinyFish, which can expose sensitive or regulated information. <br>\nMitigation: Avoid using the skill on internal sites, secrets, regulated data, financial accounts, or administrative accounts unless the user explicitly intends that sharing and has permission. <br>\nRisk: Browser automation can interact with live websites and may submit forms or change account state. <br>\nMitigation: Keep goals read-only by default, review target sites and requested actions before execution, and use interactive automation only when lighter search or fetch commands are insufficient. <br>\nRisk: The skill requires TinyFish authentication through an API key or login session. <br>\nMitigation: Store credentials in environment variables or an approved secret manager, avoid writing keys into prompts or files, and rotate any exposed key. <br>\n\n\n## Reference(s): <br>\n- [TinyFish API Keys](https://agent.tinyfish.ai/api-keys) <br>\n- [ClawHub Skill Page](https://clawhub.ai/simantak-dabhade/tinyfish-web-agent) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Text, Markdown, Shell commands, Configuration, Guidance] <br>\n**Output Format:** [Markdown guidance with inline shell commands and JSON examples] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [TinyFish CLI commands may return JSON, Markdown, SSE lines, or CDP session details depending on the selected command.] <br>\n\n## Skill Version(s): <br>\n1.0.3 (source: ClawHub release metadata) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.0.2: 3 files, 2947 bytes\n\nFiles: scripts/extract.sh (1652b), SKILL.md (4798b), _meta.json (127b)\n\nFile v1.0.2:SKILL.md\n\n---\nname: tinyfish\ndescription: Use TinyFish web agent to extract/scrape websites, extract data, and automate browser actions using natural language. Use when you need to extract/scrape data from websites, handle bot-protected sites, or automate web tasks.\nhomepage: https://agent.tinyfish.ai\nrequires:\n  env:\n    - TINYFISH_API_KEY\n---\n\n# TinyFish Web Agent\n\nRequires: `TINYFISH_API_KEY` environment variable\n\n## Pre-flight Check (REQUIRED)\n\nBefore making any API call, **always** run this first to verify the key is available:\n\n```bash\n[ -n \"$TINYFISH_API_KEY\" ] && echo \"TINYFISH_API_KEY is set\" || echo \"TINYFISH_API_KEY is NOT set\"\n```\n\nIf the key is **not set**, you **MUST stop and ask the user** to add their API key. Do **NOT** fall back to other tools or approaches — the task requires TinyFish.\n\nTell the user:\n\n> You need a TinyFish API key. Get one at: <https://agent.tinyfish.ai/api-keys>\n>\n> Then set it so the agent can use it:\n>\n> **Option 1 — Environment variable (works everywhere):**\n> ```bash\n> export TINYFISH_API_KEY=\"your-key-here\"\n> ```\n>\n> **Option 2 — Claude Code settings (Claude Code only):**\n> Add to `~/.claude/settings.local.json`:\n> ```json\n> {\n>   \"env\": {\n>     \"TINYFISH_API_KEY\": \"your-key-here\"\n>   }\n> }\n> ```\n\nDo NOT proceed until the key is confirmed available.\n\n## Best Practices\n\n1. **Specify JSON format**: Always describe the exact structure you want returned\n2. **Parallel calls**: When extracting from multiple independent sites, make separate parallel calls instead of combining into one prompt\n\n## Basic Extract/Scrape\n\nExtract data from a page. Specify the JSON structure you want:\n\n```bash\ncurl -N -s -X POST \"https://agent.tinyfish.ai/v1/automation/run-sse\" \\\n  -H \"X-API-Key: $TINYFISH_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"url\": \"https://example.com\",\n    \"goal\": \"Extract product info as JSON: {\\\"name\\\": str, \\\"price\\\": str, \\\"in_stock\\\": bool}\"\n  }'\n```\n\n## Multiple Items\n\nExtract lists of data with explicit structure:\n\n```bash\ncurl -N -s -X POST \"https://agent.tinyfish.ai/v1/automation/run-sse\" \\\n  -H \"X-API-Key: $TINYFISH_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"url\": \"https://example.com/products\",\n    \"goal\": \"Extract all products as JSON array: [{\\\"name\\\": str, \\\"price\\\": str, \\\"url\\\": str}]\"\n  }'\n```\n\n## Stealth Mode\n\nFor bot-protected sites, add `\"browser_profile\": \"stealth\"` to the request body:\n\n```bash\ncurl -N -s -X POST \"https://agent.tinyfish.ai/v1/automation/run-sse\" \\\n  -H \"X-API-Key: $TINYFISH_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"url\": \"https://protected-site.com\",\n    \"goal\": \"Extract product data as JSON: {\\\"name\\\": str, \\\"price\\\": str, \\\"description\\\": str}\",\n    \"browser_profile\": \"stealth\"\n  }'\n```\n\n## Proxy\n\nRoute through a specific country by adding `\"proxy_config\"` to the body:\n\n```bash\ncurl -N -s -X POST \"https://agent.tinyfish.ai/v1/automation/run-sse\" \\\n  -H \"X-API-Key: $TINYFISH_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"url\": \"https://geo-restricted-site.com\",\n    \"goal\": \"Extract pricing data as JSON: {\\\"item\\\": str, \\\"price\\\": str, \\\"currency\\\": str}\",\n    \"browser_profile\": \"stealth\",\n    \"proxy_config\": {\"enabled\": true, \"country_code\": \"US\"}\n  }'\n```\n\n## Output\n\nThe SSE stream returns `data: {...}` lines. The final result is the event where `type == \"COMPLETE\"` and `status == \"COMPLETED\"` — the extracted data is in the `resultJson` field. Claude reads the raw SSE output directly; no script-side parsing is needed.\n\n## Parallel Extraction\n\nWhen extracting from multiple independent sources, make separate parallel curl calls instead of combining into one prompt:\n\n**Good** - Parallel calls:\n```bash\n# Compare pizza prices - run these simultaneously\ncurl -N -s -X POST \"https://agent.tinyfish.ai/v1/automation/run-sse\" \\\n  -H \"X-API-Key: $TINYFISH_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"url\": \"https://pizzahut.com\",\n    \"goal\": \"Extract pizza prices as JSON: [{\\\"name\\\": str, \\\"price\\\": str}]\"\n  }'\n\ncurl -N -s -X POST \"https://agent.tinyfish.ai/v1/automation/run-sse\" \\\n  -H \"X-API-Key: $TINYFISH_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"url\": \"https://dominos.com\",\n    \"goal\": \"Extract pizza prices as JSON: [{\\\"name\\\": str, \\\"price\\\": str}]\"\n  }'\n```\n\n**Bad** - Single combined call:\n```bash\n# Don't do this - less reliable and slower\ncurl -N -s -X POST \"https://agent.tinyfish.ai/v1/automation/run-sse\" \\\n  -H \"X-API-Key: $TINYFISH_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"url\": \"https://pizzahut.com\",\n    \"goal\": \"Extract prices from Pizza Hut and also go to Dominos...\"\n  }'\n```\n\nEach independent extraction task should be its own API call. This is faster (parallel execution) and more reliable.\n\nFile v1.0.2:_meta.json\n\n{\n  \"ownerId\": \"kn710rnzzdna0e7469rv7j4txx800d69\",\n  \"slug\": \"tinyfish\",\n  \"version\": \"1.0.2\",\n  \"publishedAt\": 1770762734705\n}\n\nArchive v1.0.1: 3 files, 2884 bytes\n\nFiles: scripts/extract.py (2640b), SKILL.md (3044b), _meta.json (127b)\n\nFile v1.0.1:SKILL.md\n\n---\nname: tinyfish\ndescription: Use TinyFish/Mino web agent to extract/scrape websites, extract data, and automate browser actions using natural language. Use when you need to extract/scrape data from websites, handle bot-protected sites, or automate web tasks.\n---\n\n# TinyFish Web Agent\n\nRequires: `MINO_API_KEY` environment variable\n\n## Best Practices\n\n1. **Specify JSON format**: Always describe the exact structure you want returned\n2. **Parallel calls**: When extracting from multiple independent sites, make separate parallel calls instead of combining into one prompt\n\n## Basic Extract/Scrape\n\nExtract data from a page. Specify the JSON structure you want:\n\n```python\nimport requests\nimport json\nimport os\n\nresponse = requests.post(\n    \"https://mino.ai/v1/automation/run-sse\",\n    headers={\n        \"X-API-Key\": os.environ[\"MINO_API_KEY\"],\n        \"Content-Type\": \"application/json\",\n    },\n    json={\n        \"url\": \"https://example.com\",\n        \"goal\": \"Extract product info as JSON: {\\\"name\\\": str, \\\"price\\\": str, \\\"in_stock\\\": bool}\",\n    },\n    stream=True,\n)\n\nfor line in response.iter_lines():\n    if line:\n        line_str = line.decode(\"utf-8\")\n        if line_str.startswith(\"data: \"):\n            event = json.loads(line_str[6:])\n            if event.get(\"type\") == \"COMPLETE\" and event.get(\"status\") == \"COMPLETED\":\n                print(json.dumps(event[\"resultJson\"], indent=2))\n```\n\n## Multiple Items\n\nExtract lists of data with explicit structure:\n\n```python\njson={\n    \"url\": \"https://example.com/products\",\n    \"goal\": \"Extract all products as JSON array: [{\\\"name\\\": str, \\\"price\\\": str, \\\"url\\\": str}]\",\n}\n```\n\n## Stealth Mode\n\nFor bot-protected sites:\n\n```python\njson={\n    \"url\": \"https://protected-site.com\",\n    \"goal\": \"Extract product data as JSON: {\\\"name\\\": str, \\\"price\\\": str, \\\"description\\\": str}\",\n    \"browser_profile\": \"stealth\",\n}\n```\n\n## Proxy\n\nRoute through specific country:\n\n```python\njson={\n    \"url\": \"https://geo-restricted-site.com\",\n    \"goal\": \"Extract pricing data as JSON: {\\\"item\\\": str, \\\"price\\\": str, \\\"currency\\\": str}\",\n    \"browser_profile\": \"stealth\",\n    \"proxy_config\": {\n        \"enabled\": True,\n        \"country_code\": \"US\",\n    },\n}\n```\n\n## Output\n\nResults are in `event[\"resultJson\"]` when `event[\"type\"] == \"COMPLETE\"`\n\n## Parallel Extraction\n\nWhen extracting from multiple independent sources, make separate parallel API calls instead of combining into one prompt:\n\n**Good** - Parallel calls:\n```python\n# Compare pizza prices - run these simultaneously\ncall_1 = extract(\"https://pizzahut.com\", \"Extract pizza prices as JSON: [{\\\"name\\\": str, \\\"price\\\": str}]\")\ncall_2 = extract(\"https://dominos.com\", \"Extract pizza prices as JSON: [{\\\"name\\\": str, \\\"price\\\": str}]\")\n```\n\n**Bad** - Single combined call:\n```python\n# Don't do this - less reliable and slower\nextract(\"https://pizzahut.com\", \"Extract prices from Pizza Hut and also go to Dominos...\")\n```\n\nEach independent extraction task should be its own API call. This is faster (parallel execution) and more reliable.\n\nFile v1.0.1:_meta.json\n\n{\n  \"ownerId\": \"kn710rnzzdna0e7469rv7j4txx800d69\",\n  \"slug\": \"tinyfish\",\n  \"version\": \"1.0.1\",\n  \"publishedAt\": 1769560154253\n}\n\nArchive v1.0.0: 3 files, 2344 bytes\n\nFiles: scripts/extract.py (2447b), SKILL.md (1795b), _meta.json (127b)\n\nFile v1.0.0:SKILL.md\n\n---\nname: tinyfish\ndescription: Use TinyFish/Mino web agent to extract/scrape websites, extract data, and automate browser actions using natural language. Use when you need to extract/scrape data from websites, handle bot-protected sites, or automate web tasks.\n---\n\n# TinyFish Web Agent\n\nRequires: `MINO_API_KEY` environment variable\n\n## Basic Extract/Scrape\n\nExtract data from a page:\n\n```python\nimport requests\nimport json\n\nresponse = requests.post(\n    \"https://mino.ai/v1/automation/run-sse\",\n    headers={\n        \"X-API-Key\": os.environ[\"MINO_API_KEY\"],\n        \"Content-Type\": \"application/json\",\n    },\n    json={\n        \"url\": \"https://example.com\",\n        \"goal\": \"Extract the product name, price, and stock status\",\n    },\n    stream=True,\n)\n\nfor line in response.iter_lines():\n    if line:\n        line_str = line.decode(\"utf-8\")\n        if line_str.startswith(\"data: \"):\n            event = json.loads(line_str[6:])\n            if event.get(\"type\") == \"COMPLETE\" and event.get(\"status\") == \"COMPLETED\":\n                print(json.dumps(event[\"resultJson\"], indent=2))\n```\n\n## Multiple Items\n\nExtract lists of data:\n\n```python\njson={\n    \"url\": \"https://example.com/products\",\n    \"goal\": \"Extract all products. For each return: name, price, and link\",\n}\n```\n\n## Stealth Mode\n\nFor bot-protected sites:\n\n```python\njson={\n    \"url\": \"https://protected-site.com\",\n    \"goal\": \"Extract product data\",\n    \"browser_profile\": \"stealth\",\n}\n```\n\n## Proxy\n\nRoute through specific country:\n\n```python\njson={\n    \"url\": \"https://geo-restricted-site.com\",\n    \"goal\": \"Extract data\",\n    \"browser_profile\": \"stealth\",\n    \"proxy_config\": {\n        \"enabled\": True,\n        \"country_code\": \"US\",\n    },\n}\n```\n\n## Output\n\nResults are in `event[\"resultJson\"]` when `event[\"type\"] == \"COMPLETE\"`\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn710rnzzdna0e7469rv7j4txx800d69\",\n  \"slug\": \"tinyfish\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1769541342386\n}","readmeExcerpt":"Skill: Tinyfish Owner: tinyfish Summary: Use TinyFish for web search, fetching URLs, reading pages, current information, source-backed answers, research, docs, pricing/product pages, extraction, scr... Tags: latest:1.0.6 Version history: v1.0.6 | 2026-06-08T18:59:27.471Z | user **Sign up tracking** - Add tracking for all tracking from openclaw v1.0.5 | 2026-06-03T21:56:58.330Z | auto - Overhauled SKILL.md with a new ","codeSnippets":[],"executableExamples":[{"language":"text","snippet":"search  →  fetch  →  agent  →  browser\nlightest                        heaviest"},{"language":"bash","snippet":"# 1. Find URLs\ntinyfish search query \"best React state management libraries 2026\"\n\n# 2. Read the top results\ntinyfish fetch content get --format markdown \"https://result1.com\" \"https://result2.com\""},{"language":"bash","snippet":"# 1. Find the site\ntinyfish search query \"Nike running shoes official store\"\n\n# 2. Automate extraction on it\ntinyfish agent run --url \"https://nike.com/running\" \\\n  \"Extract all running shoes as JSON: [{\\\"name\\\": str, \\\"price\\\": str, \\\"colors\\\": [str]}]\""},{"language":"bash","snippet":"tinyfish search query \"<query>\" [--location <hint>] [--language <hint>] [--pretty]"},{"language":"bash","snippet":"tinyfish search query \"best pho in Ho Chi Minh City\" --location \"Vietnam\" --language \"en\""},{"language":"bash","snippet":"tinyfish fetch content get <urls...> [--format markdown|html|json] [--links] [--image-links] [--pretty]"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: use-tinyfish\ndescription: 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.\n---\n\n# TinyFish CLI\n\nYou have access to the TinyFish CLI (`tinyfish`) — a suite of web tools you can call from the terminal.\n\nIf not installed: `npm install -g @tiny-fish/cli`\nIf not authenticated: `tinyfish auth login --source openclaw` or set `TINYFISH_API_KEY` env var.\n\n---\n\n## When This Skill Should Trigger\n\nUse TinyFish whenever a request depends on live web information or page content. Do not wait for the user to say \"TinyFish\" or \"scrape\".\n\nStrong triggers include:\n\n- Search or discovery: search, find, look up, research, compare, latest, current, news, docs, pricing, product details, best options.\n- URL/page reading: fetch, read, summarize, extract from this page, inspect this URL, get the content, pull links or metadata.\n- Source-backed answers: answer using web sources, verify a fact, check whether something changed, gather information from the web.\n- Website work: interact with a site, click through pages, fill forms, log in, collect structured data, handle bot-protected pages.\n\nDefault to the lightest tool that can answer:\n\n- No URL and the user needs web information: `search`, then `fetch` the best result(s) if more detail is needed.\n- URL provided and only content is needed: `fetch`.\n- Page interaction or dynamic extraction is needed: `agent`.\n- Raw CDP/Playwright-style control is needed: `browser`.\n\n---\n\n## Picking the Right Tool\n\nTinyFish has four tools. Start with the lightest one that can do the job and escalate only when needed.\n\n```\nsearch  →  fetch  →  agent  →  browser\nlightest                        heaviest\n```\n\n| Tool | When to use | Speed | Cost |\n|------|-------------|-------|------|\n| **search** | You need to find URLs, current facts, docs, pricing, product details, or a quick source-backed answer | Fastest | Lowest |\n| **fetch** | You have URLs and need clean page content, summaries, article text, docs, product pages, links, or metadata | Fast | Low |\n| **agent** | You need to interact with a page — click, fill forms, navigate, extract structured data from dynamic sites | Slower | Higher |\n| **browser** | Agent isn't enough — you need raw programmatic browser control via CDP | Slowest | Highest |\n\n### Common Patterns\n\n**Research: search → fetch**\nSearch for a topic, then fetch the best results to read their full content.\n\n```bash\n# 1. Find URLs\ntinyfish search query \"best React state management libraries 2026\"\n\n# 2. Read the top results\ntinyfish fetch content get --format markdown \"https://result1.com\" \"https://result2.com\"\n```\n\n**Deep extraction: search → agent**\nSearch to find the right site, then use agent to interact with it and extract"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn710rnzzdna0e7469rv7j4txx800d69\",\n  \"slug\": \"tinyfish\",\n  \"version\": \"1.0.6\",\n  \"publishedAt\": 1780945167471\n}"},{"path":"skill-card.md","content":"## Description:\n\nTinyFish helps agents search the web, fetch page content, produce source-backed research, extract data, and automate browser interactions through the TinyFish CLI.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[tinyfish](https://clawhub.ai/user/tinyfish)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and agents use this skill to retrieve current web information, inspect URLs, summarize pages, extract structured data, and automate browser-based workflows when static page fetching is insufficient.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Remote browsing and form interaction can expose sensitive account content, private URLs, or credentials to a third-party service.\n\nMitigation: Avoid entering passwords, API keys, payment data, private URLs, or sensitive account content unless that exposure has been separately reviewed and accepted.\n\nRisk: The documented global CLI installation can broaden local execution and update risk.\n\nMitigation: Prefer a pinned or isolated CLI installation and review the package before installing or upgrading.\n\nRisk: Browser automation can submit forms, click controls, or perform actions on live websites.\n\nMitigation: Use narrowly scoped goals, review intended actions before execution where possible, and avoid destructive or account-changing workflows without explicit approval.\n\n## Reference(s):\n\n- [Tinyfish ClawHub skill page](https://clawhub.ai/tinyfish/skills/tinyfish)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown, JSON, and shell commands]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May include URLs, citations, extracted page content, structured JSON, and TinyFish CLI commands.]\n\n## Skill Version(s):\n\n1.0.6 (source: server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Use TinyFish for web search, fetching URLs, reading pages, current information, source-backed answers, research, docs, pricing/product pages, extraction, scr... Skill: Tinyfish Owner: tinyfish Summary: Use TinyFish for web search, fetching URLs, reading pages, current information, source-backed answers, research, docs, pricing/product pages, extraction, scr... Tags: latest:1.0.6 Version history: v1.0.6 | 2026-06-08T18:59:27.471Z | user **Sign up tracking** - Add tracking for all tracking from openclaw v1.0.5 | 2026-06-03T21:56:58.330Z | auto - Overhauled SKILL.md with a new","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1333,"uniquenessScore":48,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-09T04:00:21.035Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-09T04:00:21.035Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-09T16:21:05.238Z","emptyReason":null},"items":[{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-10T18:48:31.762Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}