home / skills / aaaaqwq / agi-super-skills / serper

This skill performs a targeted web search via Serper, fetches full-page content, and delivers structured results with rapid, single-query efficiency.

This is most likely a fork of the serper skill from openclaw
npx playbooks add skill aaaaqwq/agi-super-skills --skill serper

Review the files below or copy the command above to add this skill to your agents.

Files (4)
SKILL.md
6.4 KB
---
name: serper
description: Google search via Serper API with full page content extraction. Fast API lookup + concurrent page scraping (3s timeout). One well-crafted query returns rich results — avoid multiple calls. Two modes, explicit locale control. API key via .env.
metadata: {"version": "3.0.1", "tags": ["search", "web-search", "serper", "google", "content-extraction"]}
---

# Serper

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.

### How It Works

1. **Serper API call** — fast Google search, returns result URLs instantly
2. **Concurrent page scraping** — all result pages are fetched and extracted in parallel using trafilatura with a **3-second timeout per page**
3. **Streamed output** — results print one at a time as each page finishes

Each 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.

---

## Query Discipline

**Craft ONE good search query. That is almost always enough.**

Each 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.

**At 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.

**Do NOT:**
- Run the same query with different wording to "get more results"
- Run sequential searches to "dig deeper" — the full page content is already deep
- Run one search to find something, then another to follow up — read the content you already have

---

## When to Use This Skill

**Use serper when:**
- Any question that needs current, factual information from the web
- Research topics that need full article content, not just snippets
- News and current events
- Product info, prices, comparisons, reviews
- Technical docs, how-to guides
- Anything where reading the actual page matters

**Do NOT use this skill for:**
- Questions you can answer from your training data
- Pure math, code execution, creative writing
- Greetings, chitchat

**IMPORTANT: 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.**

---

## Two Search Modes

There are exactly two modes. Pick the right one based on the query:

### `default` — General search (all-time)
- All-time Google web search, **5 results**, each enriched with full page content
- Use for: general questions, research, how-to, evergreen topics, product info, technical docs, comparisons, tutorials, anything NOT time-sensitive

### `current` — News and recent info
- Past-week Google web search (3 results) + Google News (3 results), each enriched with full page content
- Use for: news, current events, recent developments, breaking news, announcements, anything time-sensitive

#### Mode Selection Guide

| Query signals | Mode |
|---------------|------|
| "how does X work", "what is X", "explain X" | `default` |
| Product research, comparisons, tutorials | `default` |
| Technical documentation, guides | `default` |
| Historical topics, evergreen content | `default` |
| "news", "latest", "today", "this week", "recent" | `current` |
| "what happened", "breaking", "announced", "released" | `current` |
| Current events, politics, sports scores, stock prices | `current` |

---

## Locale (REQUIRED for non-English queries)

**Default is global** — no country filter, English results. This ONLY works for English queries.

**You MUST ALWAYS set `--gl` and `--hl` when ANY of these are true:**
- The user's message is in a non-English language
- The search query you construct is in a non-English language
- The user mentions a specific country, city, or region
- The user asks for local results (prices, news, stores, etc.) in a non-English context

**If the user writes in German, you MUST pass `--gl de --hl de`. No exceptions.**

| Scenario | Flags |
|----------|-------|
| English query, no country target | *(omit --gl and --hl)* |
| German query OR user writes in German OR targeting DE/AT/CH | `--gl de --hl de` |
| French query OR user writes in French OR targeting France | `--gl fr --hl fr` |
| Any other non-English language/country | `--gl XX --hl XX` (ISO codes) |

**Rule of thumb:** If the query string contains non-English words, set `--gl` and `--hl` to match that language.

---

## How to Invoke

```bash
python3 scripts/search.py -q "QUERY" [--mode MODE] [--gl COUNTRY] [--hl LANG]
```

### Examples

```bash
# English, general research
python3 scripts/search.py -q "how does HTTPS work"

# English, time-sensitive
python3 scripts/search.py -q "OpenAI latest announcements" --mode current

# German query — set locale + current mode for news/prices
python3 scripts/search.py -q "aktuelle Preise iPhone" --mode current --gl de --hl de

# German news
python3 scripts/search.py -q "Nachrichten aus Berlin" --mode current --gl de --hl de

# French product research
python3 scripts/search.py -q "meilleur smartphone 2026" --gl fr --hl fr

```

---

## Output Format

The output is a **streamed JSON array** — elements print one at a time as each page is scraped:

```json
[{"query": "...", "mode": "default", "locale": {"gl": "world", "hl": "en"}, "results": [{"title": "...", "url": "...", "source": "web"}, ...]}
,{"title": "...", "url": "...", "source": "web", "content": "Full extracted page text..."}
,{"title": "...", "url": "...", "source": "news", "date": "2 hours ago", "content": "Full article text..."}
]
```

The first element is search metadata. Each following element contains a result with full extracted content.

Result fields:
- `title` — page title
- `url` — source URL
- `source` — `"web"`, `"news"`, or `"knowledge_graph"`
- `content` — full extracted page text (falls back to search snippet if extraction fails)
- `date` — present when available (news results always, web results sometimes)

---

## CLI Reference

| Flag | Description |
|------|-------------|
| `-q, --query` | Search query (required) |
| `-m, --mode` | `default` (all-time, 5 results) or `current` (past week + news, 3 each) |
| `--gl` | Country code (e.g. `de`, `us`, `fr`, `at`, `ch`) |
| `--hl` | Language code (e.g. `en`, `de`, `fr`) |

Overview

This skill performs Google searches via the Serper API and returns full page content extracted from each result. It combines a fast API lookup with concurrent scraping (3s timeout per page) to provide cleaned, readable article text rather than mere snippets. Use one well-crafted query to get broad, deep coverage; avoid multiple redundant searches. The API key is supplied via a .env file.

How this skill works

A single Serper API call returns result URLs and metadata quickly. Each result page is fetched in parallel and processed with trafilatura to extract full article text, with a 3-second timeout per page. Results stream out as a JSON array: the first element is search metadata, then one element per scraped result containing title, url, source, date (when available), and full content.

When to use it

  • Research needing current, factual web sources and full article text
  • News, breaking developments, and time-sensitive queries (use current mode)
  • Product comparisons, pricing, reviews, and technical documentation
  • How-to guides, tutorials, and any topic where reading the full page matters
  • Avoid for tasks solvable from training data, pure computation, or casual chit-chat

Best practices

  • Craft a single high-quality search query — one call returns multiple full-page results
  • Limit searches to at most two calls only when the task truly spans distinct topics
  • Select mode deliberately: default for evergreen topics, current for past-week/news coverage
  • When queries or user language are non-English or target a country, always set --gl and --hl to the appropriate ISO codes
  • Do not re-fetch returned URLs with other tools — full page content is already included in the output

Example use cases

  • Get five comprehensive articles about how a technology works using default mode
  • Fetch recent announcements and news articles with current mode for a past-week snapshot
  • Compare product specs and read full review articles in a single search
  • Pull full technical documentation pages for step-by-step guidance
  • Localize searches by passing --gl and --hl for country-specific results

FAQ

How many results does one call return?

default returns 5 web results with full content; current returns up to 6 items (3 web + 3 news) with full content.

When must I set locale flags (--gl and --hl)?

Set them whenever the query or user language is non-English, or the user requests local/country-specific results; otherwise omit them for global English results.