web-search
Web Search Skill
Search the web. Prefer the built-in WebSearch tool — it uses Electron's built-in BrowserWindow to perform searches, so it can handle JavaScript-rendered search results and bypass basic anti-bot measures. This is NOT a simple HTTP request — it actually opens the page in a real browser window, performs the search, and extracts results from the rendered page. Fall back to curl only if WebSearch is unavailable.
DuckDuckGo Instant Answer API (No API key needed)
# Basic search — returns instant answers
curl -s "https://api.duckduckgo.com/?q=QUERY&format=json&no_html=1" | jq '.Abstract, .RelatedTopics[:5]'
DuckDuckGo HTML Search (Full results)
# Get search results page and extract links
curl -s "https://html.duckduckgo.com/html/?q=QUERY" | grep -o 'href="https\{0,1\}://[^"]*' | head -10
Google Search via SerpAPI (if API key available)
# Check if SERPAPI_KEY is set
alma config get serpapi.apiKey
# If available:
curl -s "https://serpapi.com/search.json?q=QUERY&api_key=API_KEY" | jq '.organic_results[:5] | .[] | {title, link, snippet}'
Fetching Page Content
After finding URLs from search, use the WebFetch tool to get the actual page content:
WebFetch(url="https://example.com/article")
Or via curl:
curl -sL "https://example.com/article" | head -200
Tips
- URL-encode the query: replace spaces with
+or%20 - Use
jqto parse JSON responses - For complex queries, try multiple search approaches
- Always summarize findings for the user rather than dumping raw results
- If DuckDuckGo doesn't have good results, try fetching specific known sources directly <<<<<<< Updated upstream
- For freshness queries (
today,latest,今天,最新), use the current year from runtime context instead of hardcoding a fixed year =======
Stashed changes
Examples
"Latest AI news":
<<<<<<< Updated upstream
curl -s "https://html.duckduckgo.com/html/?q=latest+AI+news+<current_year>" | grep -o 'href="https\{0,1\}://[^"]*' | grep -v duckduckgo | head -5
=======
curl -s "https://html.duckduckgo.com/html/?q=latest+AI+news+2026" | grep -o 'href="https\{0,1\}://[^"]*' | grep -v duckduckgo | head -5
>>>>>>> Stashed changes
"Python 3.13 new features":
curl -s "https://api.duckduckgo.com/?q=python+3.13+new+features&format=json&no_html=1" | jq '.Abstract'
More from ninehills/skills
file-manager
Find, organize, and manage files on the user's computer. Search by name, type, size, or date. Move, rename, compress, and clean up files.
125self-reflection
Daily self-reflection and personal growth. Triggered by heartbeat at end of day. Review the day's experiences, extract lessons, update personality, and write a diary entry.
124send-file
Send files, photos, audio, or videos to the current chat. MUST use whenever you need to deliver any file to the user. Covers: sending images, selfies, generated art, documents, music, videos, voice messages, screenshots, or ANY file the user asks to see. Triggers: 'send it to me', 'send it over', 'let me see', 'send me', 'show me', 'send photo', 'send file', sharing any file path. NEVER paste raw file paths in text — ALWAYS use this skill to send files.
117news-aggregator-skill
Comprehensive news aggregator that fetches, filters, and deeply analyzes real-time content from 8 major sources: Hacker News, GitHub Trending, Product Hunt, 36Kr, Tencent News, WallStreetCN, V2EX, and Weibo. Best for 'daily scans', 'tech news briefings', 'finance updates', and 'deep interpretations' of hot topics.
99tvscreener
Query TradingView screener data for HK, A-share, A-share ETF, and US symbols with deepentropy/tvscreener. Use for stock lookup, technical indicators (price/change/RSI/MACD/volume), symbol filtering, and custom field/filter-based market queries.
65screenshot
Take screenshots of the screen using macOS screencapture. Use when users ask to see the screen, debug UI, or capture what's displayed. Resize before returning to avoid blowing up model context.
38