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) |
development
Federation-wide gold (XAUUSD) trading capability. Python stack, OANDA broker, backtesting, macro signals, RSI strategy. Every organ has a role.
development
Capital claim state management — tracks claim lifecycle across WEALTH organ.
development
Archived constitutional warga placeholder retained only for audit provenance. Do not use for active work; use the live arifOS governance and constitutional skills instead.
testing
Warga (citizen) agent skills for AAA federation members. See subdirectories for specialized warga skills.