{
  "schemaVersion": "1.0",
  "item": {
    "slug": "openclaw-serper",
    "name": "openclaw-serper",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/nesdeq/openclaw-serper",
    "canonicalUrl": "https://clawhub.ai/nesdeq/openclaw-serper",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/openclaw-serper",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=openclaw-serper",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "spec/specification.mdx",
      "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/openclaw-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/openclaw-serper",
    "agentPageUrl": "https://openagent3.xyz/skills/openclaw-serper/agent",
    "manifestUrl": "https://openagent3.xyz/skills/openclaw-serper/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/openclaw-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": "Constraint",
        "body": "This skill already fetches and extracts full page content. Do NOT use WebFetch, web_fetch, WebSearch, browser tools, or any other URL-fetching/browsing tool on the URLs returned by this skill. The content is already included in the output. Never follow up with a separate fetch — everything you need is in the results."
      },
      {
        "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": "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"
      },
      {
        "title": "Mode Selection Guide",
        "body": "Query 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",
        "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 script streams a JSON array. The first element is metadata, the rest are results with full extracted content:\n\n[{\"query\": \"...\", \"mode\": \"default\", \"locale\": {\"gl\": \"world\", \"hl\": \"en\"}, \"results\": [{\"title\": \"...\", \"url\": \"...\", \"source\": \"web\"}]}\n,{\"title\": \"Page Title\", \"url\": \"https://example.com\", \"source\": \"web\", \"content\": \"Full extracted page text...\"}\n,{\"title\": \"News Article\", \"url\": \"https://news.com\", \"source\": \"news\", \"date\": \"2 hours ago\", \"content\": \"Full article text...\"}\n]\n\nFieldDescriptiontitlePage titleurlSource URLsource\"web\", \"news\", or \"knowledge_graph\"contentFull extracted page text (falls back to search snippet if extraction fails)datePresent 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). Default: world--hlLanguage code (e.g. en, de, fr). Default: en"
      },
      {
        "title": "Edge Cases",
        "body": "If trafilatura cannot extract content from a page, the result falls back to the search snippet.\nSome sites block scraping entirely — the snippet is all you get.\nIf zero results are returned, the script exits with {\"error\": \"No results found\", \"query\": \"...\"}.\nThe Serper API key is loaded from .env in the skill directory. If missing, the script exits with setup instructions."
      }
    ],
    "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\nConstraint\n\nThis skill already fetches and extracts full page content. Do NOT use WebFetch, web_fetch, WebSearch, browser tools, or any other URL-fetching/browsing tool on the URLs returned by this skill. The content is already included in the output. Never follow up with a separate fetch — everything you need is in the results.\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\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\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\nOutput Format\n\nThe script streams a JSON array. The first element is metadata, the rest are results with full extracted content:\n\n[{\"query\": \"...\", \"mode\": \"default\", \"locale\": {\"gl\": \"world\", \"hl\": \"en\"}, \"results\": [{\"title\": \"...\", \"url\": \"...\", \"source\": \"web\"}]}\n,{\"title\": \"Page Title\", \"url\": \"https://example.com\", \"source\": \"web\", \"content\": \"Full extracted page text...\"}\n,{\"title\": \"News Article\", \"url\": \"https://news.com\", \"source\": \"news\", \"date\": \"2 hours ago\", \"content\": \"Full article text...\"}\n]\n\nField\tDescription\ntitle\tPage title\nurl\tSource URL\nsource\t\"web\", \"news\", or \"knowledge_graph\"\ncontent\tFull extracted page text (falls back to search snippet if extraction fails)\ndate\tPresent 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). Default: world\n--hl\tLanguage code (e.g. en, de, fr). Default: en\nEdge Cases\nIf trafilatura cannot extract content from a page, the result falls back to the search snippet.\nSome sites block scraping entirely — the snippet is all you get.\nIf zero results are returned, the script exits with {\"error\": \"No results found\", \"query\": \"...\"}.\nThe Serper API key is loaded from .env in the skill directory. If missing, the script exits with setup instructions."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/nesdeq/openclaw-serper",
    "publisherUrl": "https://clawhub.ai/nesdeq/openclaw-serper",
    "owner": "nesdeq",
    "version": "3.1.1",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/openclaw-serper",
    "downloadUrl": "https://openagent3.xyz/downloads/openclaw-serper",
    "agentUrl": "https://openagent3.xyz/skills/openclaw-serper/agent",
    "manifestUrl": "https://openagent3.xyz/skills/openclaw-serper/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/openclaw-serper/agent.md"
  }
}