hermes-skills/brave-search/SKILL.md
Web search via Brave Search API for [email protected] — real-time search, no hallucinations. Preferred over Bing for person/company research (fewer bot blocks).
npx skillsauth add ariffazil/openclaw-workspace brave-searchInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Any task requiring web search, fact-check, person lookup, company research, or general internet lookup.
BRAVE_API_KEY — set in /root/.hermes/.env
Get free key: https://brave.com/search/api/ (free tier: 2,000 queries/month)
npm install -g @modelcontextprotocol/server-brave-search
# Note: package is deprecated but still works
Binary installs to /usr/bin/mcp-server-brave-search.
Add brave-search to toolsets in /root/.hermes/config.yaml:
toolsets:
- hermes-cli
- brave-search # ← add this
Then restart the Hermes session for tools to appear.
If the MCP tool isn't loaded yet, use curl directly:
BRAVE_KEY=$(grep BRAVE_API_KEY /root/.hermes/.env | sed 's/.*=//')
curl -s -H "Accept: application/json" \
-H "X-Subscription-Token: $BRAVE_KEY" \
"https://api.search.brave.com/res/v1/web/search?q=SEARCH_QUERY&count=10" \
| python3 -c "
import json, sys
data = json.load(sys.stdin)
for r in data.get('web', {}).get('results', []):
print(r.get('title'))
print(r.get('url'))
print(r.get('description','')[:200])
print('---')
"
count param sets result window (max ~20)Many Malaysian sites (malaysianbar.org.my, scoop.my) use Cloudflare email obfuscation. Decode with Python:
def decode_cfemail(hex_str):
"""hex_str: the data-cfemail attribute value."""
key = int(hex_str[0:2], 16)
return ''.join(
chr(int(hex_str[i:i+2], 16) ^ key)
for i in range(2, len(hex_str)-1, 2)
)
# Example:
html = '<a href="mailto:[email protected]" data-cfemail="6abc123...">Email</a>'
hex_email = re.search(r'data-cfemail="([^"]+)"', html).group(1)
print(decode_cfemail(hex_email)) # → [email protected]
| Source | URL | Notes | |--------|-----|-------| | Malaysian Bar Council | malaysianbar.org.my | CF-encoded emails, footer has decoded version | | SUHAKAM | suhakam.org.my | [email protected] | | Big Boom Media | bigboommedia.com.my | enquiry@, corporate@, [email protected] | | Perdana Foundation | perdida.org.my | [email protected] | | WWF Malaysia | wwf.org.my | [email protected] | | Malaysianiakini | malaysiakini.com | [email protected] |
grep output may show BSABWb...Qflt (truncated). Always use the full key from the actual file, not from display/output.@modelcontextprotocol/server-brave-search shows npm deprecation warning but is still functional. Do NOT wait for replacement — install it and use it.R&R Halal Sadao returns Wikipedia R programming language results because & is parsed as a query operator. Use quotes ("R&R Halal" Sadao) or reformulate: search for R and R Halal Sadao or the Thai name instead.ซีเรียก๋วยเตี๋ยวเรือ Dannok vs Syria boat noodle Dannok.When researching Thai restaurants, search results often embed ratings and prices in unstructured descriptions. Use this Python parser on Brave Search JSON output:
import re, json
def parse_thai_restaurant_results(data):
"""Parse Brave Search JSON for Thai restaurant metrics."""
results = data.get('web', {}).get('results', [])
for r in results:
title = r.get('title', '')
desc = r.get('description', '') + ' ' + title
# Rating: "4.6 out of 5" or "4.6/5" in text
rating_match = re.findall(r'(\d\.\d)\s*(?:out of|/)\s*5', desc)
# Thai price: ฿299, 299 baht, THB299
price_match = re.findall(r'[\฿£\$]?\s*(\d{3})\s*(?:baht|THB|Bht|บาท)', desc, re.IGNORECASE)
# Halal signal detection
halal_kw = ['halal', 'ฮาลาล', 'muslim owned', 'islam', 'certified halal', 'all food is halal']
halal_signal = any(k.lower() in desc.lower() for k in halal_kw)
# Review count: "604 reviews" or "2,192 reviews"
review_match = re.findall(r'([\d,]+)\s*(?:reviews?|รีวิว)', desc, re.IGNORECASE)
print(f"Rating: {rating_match}")
print(f"Price ฿: {price_match}")
print(f"Halal: {halal_signal}")
print(f"Reviews: {review_match}")
| Source | URL Pattern | Strength | |--------|-------------|----------| | Restaurant Guru | restaurantguru.com | Reliable numeric ratings + review counts | | Tripadvisor | tripadvisor.com | "All food is Halal" explicit confirmations | | Wanderlog | wanderlog.com | Price per person (฿299), good descriptions | | HaveHalalWillTravel | havehalalwilltravel.com | Halal verification focus | | Wongnai | wongnai.com | Thai-language reviews, but star parsing harder | | Top-Rated.Online | top-rated.online | Price verification (฿299 Thai Baht confirmed) | | TikTok | tiktok.com | Price menus (฿199 buffet), fresh but unverified — best for emerging local spots in border areas | | Wikimapia | wikimapia.org | Halal verification for local spots (e.g., Nurlaila confirmed halal via Wikimapia entry) | | Mustakshif | mustakshif.com | Halal verification status (even if "not verified", shows community declaration + hours) |
testing
OpenClaw edge agent bridge — operational triage, doctor, restart, and A2A bridge routing for the federation edge (Telegram surface). USE WHEN: "openclaw unhealthy", "gateway down", "edge bot not responding", "a2a bridge disconnected", "watchdog tripped", "openclaw doctor", "openclaw restart". NOT for token/security audit — use FORGE-telegram-audit.
tools
Generate images, videos, TTS, voice clone, and music via MiniMax MCP server. Use when user asks to "draw", "generate image", "create picture", "make a photo", "text to image", "image generation".
testing
Single load-bearing constitutional-judgment skill. Routes all F1–F13, verdict, hold, seal, scope, authority and floor-check calls through the live arif_judge surface. Replaces 7 overlapping predecessors (arifos-constitutional-judge, arifos-constitutional-judge, arifos-constitutional-judge, arifos-constitutional-judge, arifos-constitutional-judge, arifos-constitutional-judge, arifos-constitutional-judge).
development
MANDATORY LSP grounding gate BEFORE any code mutation on .ts, .py, .js, .tsx, .jsx files. Forces the agent to read real-time compiler diagnostics and structural project context before editing — eliminating blind guesses and anchoring every mutation in F2 (TRUTH). Routes through arifOS kernel (:8088) for centralized gate logic.