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
Governed intelligence skill for AAA as the abstraction, attestation, and abduction control plane across arifOS, APEX, A-FORGE, GEOX, WEALTH, WELL, and the ariffazil profile repository. Use when the user asks to explain or design AAA, route agentic work, reduce chaos/entropy in an arifOS federation task, create AREP/task declarations, classify risk, plan multi-repo changes, review governance boundaries, or translate human intent into evidence-backed, authority-safe, recursively agentic workflows. Provides deterministic F1-F13 floor checking, bounded abduction, and FederationReceipt composition.
development
Check every skill’s “use when” and “do not use when” clauses for collisions, missing negatives, and vague verbs like “help,” “assist,” or “improve.” Load when linting, reviewing, or validating trigger boundaries.
development
Bootstrap, design, and package new skills. Load when capturing user intent for a new skill or drafting its initial instruction framework.
content-media
Diagnose which federation services are up, down, or drifting. Produce a prioritized remediation plan.