crw-search — web search via crw's own search backend

SkillSearch

Lets your agent search the web and get back titles, URLs, and descriptions for any question or topic.

Use crw-search — web search via crw's own search backend in Claude, ChatGPT or Ahel Desktop

Free. Sign in, add crw-search — web search via crw's own search backend and connect your AI. About a minute.

Also: Claude Code · Cursor · Codex

Then ask your AI: use the crw-search skill

Details

Instructions available. Your AI can read the instructions. Execution depends on the setup they require.

Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.

crw-search — web search via crw's own search backendStart free
About this skill

Search the web with fastCRW and get titles, URLs, and descriptions. Use when you have a question or topic but not a URL, "search for", "find pages about", "look up", "what is", "who is", "latest news on", "find docs for". Own search backend: self-hosted, no API key, no per-query cost, high recall v

What this skill tells your AI

The instructions your AI receives, as published by us/crw in skills/crw-search/SKILL.md and read by ahel’s review.

When to use

  • You have a question or topic, not a URL. Get candidate URLs first, then scrape the one that looks right.
  • Step 1 in the crw ladder: most searches should end at step 2 (crw-scrape) — pick the best result URL and scrape it for full content.
  • Token-heavy context? Pipe through a subprocess filter instead of dumping raw JSON. See crw-dynamic-search.
  • The search backend is self-hosted and free — no API key, no per-query billing, no usage cap. Queries never leave your infrastructure in embedded/local mode.

Quick start

CLI (binary on PATH):

crw search "rust async http client"                              # text output
crw search "site:docs.rs tokio" --json --fields title,url,snippet --limit 5
crw search "CVE-2024-1234" --category news --time-range week
crw search "climate policy 2025" --json -o .crw/results.json
crw search "rust crates" --language en --limit 20

MCP (inside an agent harness):

crw_search(query="rust async http client", limit=5, lang="en")
crw_search(query="latest CVE nginx", tbs="qdr:w", categories="news")
crw_search(query="openai pricing", scrapeOptions={"formats": ["markdown"]})

REST (drop-in for Firecrawl SDKs — just swap the base URL):

curl -X POST "$CRW_API_URL/v1/search" -H "Authorization: Bearer $CRW_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"query":"rust async http","limit":5,"lang":"en"}'

Options

NeedCLI flagMCP / REST field
Result count-l/--limit N (default 10)limit (default 5)
JSON output--json or --format json— (always JSON)
Field projection--fields title,url,snippet—
Output to file-o FILE—
Filter by category--category news|images|videos|general|…categories
Language--language enlang
Time filter--time-range day|week|month|yeartbs: qdr:h|qdr:d|qdr:w|qdr:m|qdr:y
Safe search--safesearch 0|1|2—
Custom search backend--searxng-url URL / $CRW_SEARXNG_URL—
Group by source—sources: ["web","news","images"]
Scrape results inline— (use crw scrape separately)scrapeOptions: {formats:["markdown"]}

--fields available values: title, url, description, snippet, position, score, category. snippet is an alias for description.

A note on result scores

The search backend is a meta-search aggregator — it merges results from multiple engines (Google, Bing, DuckDuckGo, etc.) and the score field reflects internal engine weighting, not a universal relevance measure. Do not rely on score for ranking or filtering. Use position (1-based rank) or result order instead — position 1 is the most relevant result surfaced.

Tips

  • No results / 403? The search backend needs JSON output enabled in its config. Run crw setup --local to spin up a pre-configured sidecar automatically. Public instances usually block JSON with 403/429.
  • --fields saves context. --json --fields title,url,snippet --limit 5 is one call; piping to jq is two. Prefer the flag.
  • Inline scraping via MCP. Pass scrapeOptions: {formats: ["markdown"]} to get page content alongside search results in one round-trip. There is no --scrape CLI flag — use the MCP/REST path for this.
  • Time-sensitive queries. Use --time-range week (CLI) or tbs: "qdr:w" (MCP/REST) for news, CVEs, releases, or any freshness-sensitive topic.
  • After search, scrape the winner. crw search "…" returns candidates; crw scrape "<url>" gets the full content. Don't try to read content from search snippets alone.
  • Write large result sets to .crw/. Never stream a 20-result JSON blob to stdout into context. Use -o .crw/results.json then jq/grep.

See also

  • crw-scrape — scrape the URL you found
  • crw-dynamic-search — filter output in a subprocess to save context (use this on token-heavy tasks)
  • crw — hub skill with the full workflow ladder

Signals

GitHub stars
1k
Forks
88
Last commit
Sep 2026

ahel review

  • K2info
    exfiltration

Automated review, not a security audit. Ruleset v1+k2.

Advanced
Item type
skill
Key
crw-search
Source
github.com/us/crw