{
  "schemaVersion": "1.0",
  "item": {
    "slug": "serper",
    "name": "serper",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/nesdeq/serper",
    "canonicalUrl": "https://clawhub.ai/nesdeq/serper",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/serper",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=serper",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "scripts/search.py",
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/serper"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/serper",
    "agentPageUrl": "https://openagent3.xyz/skills/serper/agent",
    "manifestUrl": "https://openagent3.xyz/skills/serper/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/serper/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Serper",
        "body": "Google search via Serper API. Fetches results AND reads the actual web pages to extract clean full-text content via trafilatura. Not just snippets — full article text."
      },
      {
        "title": "How It Works",
        "body": "Serper API call — fast Google search, returns result URLs instantly\nConcurrent page scraping — all result pages are fetched and extracted in parallel using trafilatura with a 3-second timeout per page\nStreamed output — results print one at a time as each page finishes\n\nEach invocation gives you 5 results (default mode) or up to 6 results (current mode), each with full page content. This is already a lot of information."
      },
      {
        "title": "Query Discipline",
        "body": "Craft ONE good search query. That is almost always enough.\n\nEach call returns multiple results with full page text — you get broad coverage from a single query. Do not run multiple searches to \"explore\" a topic. One well-chosen query with the right mode covers it.\n\nAt most two calls if the user's request genuinely spans two distinct topics (e.g. \"compare X vs Y\" where X and Y need separate searches, or one default + one current call for different aspects). Never more than two.\n\nDo NOT:\n\nRun the same query with different wording to \"get more results\"\nRun sequential searches to \"dig deeper\" — the full page content is already deep\nRun one search to find something, then another to follow up — read the content you already have"
      },
      {
        "title": "When to Use This Skill",
        "body": "Use serper when:\n\nAny question that needs current, factual information from the web\nResearch topics that need full article content, not just snippets\nNews and current events\nProduct info, prices, comparisons, reviews\nTechnical docs, how-to guides\nAnything where reading the actual page matters\n\nDo NOT use this skill for:\n\nQuestions you can answer from your training data\nPure math, code execution, creative writing\nGreetings, chitchat\n\nIMPORTANT: This skill already fetches and extracts full page content. Do NOT use web_fetch, WebFetch, or any other URL-fetching tool on the URLs returned by this skill. The content is already included in the output."
      },
      {
        "title": "Two Search Modes",
        "body": "There are exactly two modes. Pick the right one based on the query:"
      },
      {
        "title": "default — General search (all-time)",
        "body": "All-time Google web search, 5 results, each enriched with full page content\nUse for: general questions, research, how-to, evergreen topics, product info, technical docs, comparisons, tutorials, anything NOT time-sensitive"
      },
      {
        "title": "current — News and recent info",
        "body": "Past-week Google web search (3 results) + Google News (3 results), each enriched with full page content\nUse for: news, current events, recent developments, breaking news, announcements, anything time-sensitive\n\nMode Selection Guide\n\nQuery signalsMode\"how does X work\", \"what is X\", \"explain X\"defaultProduct research, comparisons, tutorialsdefaultTechnical documentation, guidesdefaultHistorical topics, evergreen contentdefault\"news\", \"latest\", \"today\", \"this week\", \"recent\"current\"what happened\", \"breaking\", \"announced\", \"released\"currentCurrent events, politics, sports scores, stock pricescurrent"
      },
      {
        "title": "Locale (REQUIRED for non-English queries)",
        "body": "Default is global — no country filter, English results. This ONLY works for English queries.\n\nYou MUST ALWAYS set --gl and --hl when ANY of these are true:\n\nThe user's message is in a non-English language\nThe search query you construct is in a non-English language\nThe user mentions a specific country, city, or region\nThe user asks for local results (prices, news, stores, etc.) in a non-English context\n\nIf the user writes in German, you MUST pass --gl de --hl de. No exceptions.\n\nScenarioFlagsEnglish query, no country target(omit --gl and --hl)German query OR user writes in German OR targeting DE/AT/CH--gl de --hl deFrench query OR user writes in French OR targeting France--gl fr --hl frAny other non-English language/country--gl XX --hl XX (ISO codes)\n\nRule of thumb: If the query string contains non-English words, set --gl and --hl to match that language."
      },
      {
        "title": "How to Invoke",
        "body": "python3 scripts/search.py -q \"QUERY\" [--mode MODE] [--gl COUNTRY] [--hl LANG]"
      },
      {
        "title": "Examples",
        "body": "# English, general research\npython3 scripts/search.py -q \"how does HTTPS work\"\n\n# English, time-sensitive\npython3 scripts/search.py -q \"OpenAI latest announcements\" --mode current\n\n# German query — set locale + current mode for news/prices\npython3 scripts/search.py -q \"aktuelle Preise iPhone\" --mode current --gl de --hl de\n\n# German news\npython3 scripts/search.py -q \"Nachrichten aus Berlin\" --mode current --gl de --hl de\n\n# French product research\npython3 scripts/search.py -q \"meilleur smartphone 2026\" --gl fr --hl fr"
      },
      {
        "title": "Output Format",
        "body": "The output is a streamed JSON array — elements print one at a time as each page is scraped:\n\n[{\"query\": \"...\", \"mode\": \"default\", \"locale\": {\"gl\": \"world\", \"hl\": \"en\"}, \"results\": [{\"title\": \"...\", \"url\": \"...\", \"source\": \"web\"}, ...]}\n,{\"title\": \"...\", \"url\": \"...\", \"source\": \"web\", \"content\": \"Full extracted page text...\"}\n,{\"title\": \"...\", \"url\": \"...\", \"source\": \"news\", \"date\": \"2 hours ago\", \"content\": \"Full article text...\"}\n]\n\nThe first element is search metadata. Each following element contains a result with full extracted content.\n\nResult fields:\n\ntitle — page title\nurl — source URL\nsource — \"web\", \"news\", or \"knowledge_graph\"\ncontent — full extracted page text (falls back to search snippet if extraction fails)\ndate — present when available (news results always, web results sometimes)"
      },
      {
        "title": "CLI Reference",
        "body": "FlagDescription-q, --querySearch query (required)-m, --modedefault (all-time, 5 results) or current (past week + news, 3 each)--glCountry code (e.g. de, us, fr, at, ch)--hlLanguage code (e.g. en, de, fr)"
      }
    ],
    "body": "Serper\n\nGoogle search via Serper API. Fetches results AND reads the actual web pages to extract clean full-text content via trafilatura. Not just snippets — full article text.\n\nHow It Works\nSerper API call — fast Google search, returns result URLs instantly\nConcurrent page scraping — all result pages are fetched and extracted in parallel using trafilatura with a 3-second timeout per page\nStreamed output — results print one at a time as each page finishes\n\nEach invocation gives you 5 results (default mode) or up to 6 results (current mode), each with full page content. This is already a lot of information.\n\nQuery Discipline\n\nCraft ONE good search query. That is almost always enough.\n\nEach call returns multiple results with full page text — you get broad coverage from a single query. Do not run multiple searches to \"explore\" a topic. One well-chosen query with the right mode covers it.\n\nAt most two calls if the user's request genuinely spans two distinct topics (e.g. \"compare X vs Y\" where X and Y need separate searches, or one default + one current call for different aspects). Never more than two.\n\nDo NOT:\n\nRun the same query with different wording to \"get more results\"\nRun sequential searches to \"dig deeper\" — the full page content is already deep\nRun one search to find something, then another to follow up — read the content you already have\nWhen to Use This Skill\n\nUse serper when:\n\nAny question that needs current, factual information from the web\nResearch topics that need full article content, not just snippets\nNews and current events\nProduct info, prices, comparisons, reviews\nTechnical docs, how-to guides\nAnything where reading the actual page matters\n\nDo NOT use this skill for:\n\nQuestions you can answer from your training data\nPure math, code execution, creative writing\nGreetings, chitchat\n\nIMPORTANT: This skill already fetches and extracts full page content. Do NOT use web_fetch, WebFetch, or any other URL-fetching tool on the URLs returned by this skill. The content is already included in the output.\n\nTwo Search Modes\n\nThere are exactly two modes. Pick the right one based on the query:\n\ndefault — General search (all-time)\nAll-time Google web search, 5 results, each enriched with full page content\nUse for: general questions, research, how-to, evergreen topics, product info, technical docs, comparisons, tutorials, anything NOT time-sensitive\ncurrent — News and recent info\nPast-week Google web search (3 results) + Google News (3 results), each enriched with full page content\nUse for: news, current events, recent developments, breaking news, announcements, anything time-sensitive\nMode Selection Guide\nQuery signals\tMode\n\"how does X work\", \"what is X\", \"explain X\"\tdefault\nProduct research, comparisons, tutorials\tdefault\nTechnical documentation, guides\tdefault\nHistorical topics, evergreen content\tdefault\n\"news\", \"latest\", \"today\", \"this week\", \"recent\"\tcurrent\n\"what happened\", \"breaking\", \"announced\", \"released\"\tcurrent\nCurrent events, politics, sports scores, stock prices\tcurrent\nLocale (REQUIRED for non-English queries)\n\nDefault is global — no country filter, English results. This ONLY works for English queries.\n\nYou MUST ALWAYS set --gl and --hl when ANY of these are true:\n\nThe user's message is in a non-English language\nThe search query you construct is in a non-English language\nThe user mentions a specific country, city, or region\nThe user asks for local results (prices, news, stores, etc.) in a non-English context\n\nIf the user writes in German, you MUST pass --gl de --hl de. No exceptions.\n\nScenario\tFlags\nEnglish query, no country target\t(omit --gl and --hl)\nGerman query OR user writes in German OR targeting DE/AT/CH\t--gl de --hl de\nFrench query OR user writes in French OR targeting France\t--gl fr --hl fr\nAny other non-English language/country\t--gl XX --hl XX (ISO codes)\n\nRule of thumb: If the query string contains non-English words, set --gl and --hl to match that language.\n\nHow to Invoke\npython3 scripts/search.py -q \"QUERY\" [--mode MODE] [--gl COUNTRY] [--hl LANG]\n\nExamples\n# English, general research\npython3 scripts/search.py -q \"how does HTTPS work\"\n\n# English, time-sensitive\npython3 scripts/search.py -q \"OpenAI latest announcements\" --mode current\n\n# German query — set locale + current mode for news/prices\npython3 scripts/search.py -q \"aktuelle Preise iPhone\" --mode current --gl de --hl de\n\n# German news\npython3 scripts/search.py -q \"Nachrichten aus Berlin\" --mode current --gl de --hl de\n\n# French product research\npython3 scripts/search.py -q \"meilleur smartphone 2026\" --gl fr --hl fr\n\n\nOutput Format\n\nThe output is a streamed JSON array — elements print one at a time as each page is scraped:\n\n[{\"query\": \"...\", \"mode\": \"default\", \"locale\": {\"gl\": \"world\", \"hl\": \"en\"}, \"results\": [{\"title\": \"...\", \"url\": \"...\", \"source\": \"web\"}, ...]}\n,{\"title\": \"...\", \"url\": \"...\", \"source\": \"web\", \"content\": \"Full extracted page text...\"}\n,{\"title\": \"...\", \"url\": \"...\", \"source\": \"news\", \"date\": \"2 hours ago\", \"content\": \"Full article text...\"}\n]\n\n\nThe first element is search metadata. Each following element contains a result with full extracted content.\n\nResult fields:\n\ntitle — page title\nurl — source URL\nsource — \"web\", \"news\", or \"knowledge_graph\"\ncontent — full extracted page text (falls back to search snippet if extraction fails)\ndate — present when available (news results always, web results sometimes)\nCLI Reference\nFlag\tDescription\n-q, --query\tSearch query (required)\n-m, --mode\tdefault (all-time, 5 results) or current (past week + news, 3 each)\n--gl\tCountry code (e.g. de, us, fr, at, ch)\n--hl\tLanguage code (e.g. en, de, fr)"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/nesdeq/serper",
    "publisherUrl": "https://clawhub.ai/nesdeq/serper",
    "owner": "nesdeq",
    "version": "3.0.2",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/serper",
    "downloadUrl": "https://openagent3.xyz/downloads/serper",
    "agentUrl": "https://openagent3.xyz/skills/serper/agent",
    "manifestUrl": "https://openagent3.xyz/skills/serper/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/serper/agent.md"
  }
}