{
  "schemaVersion": "1.0",
  "item": {
    "slug": "brave-search-setup",
    "name": "Brave Search Setup",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/qingliu1617-art/brave-search-setup",
    "canonicalUrl": "https://clawhub.ai/qingliu1617-art/brave-search-setup",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/brave-search-setup",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=brave-search-setup",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "scripts/detect-proxy.sh"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/brave-search-setup"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/brave-search-setup",
    "agentPageUrl": "https://openagent3.xyz/skills/brave-search-setup/agent",
    "manifestUrl": "https://openagent3.xyz/skills/brave-search-setup/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/brave-search-setup/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Brave Search Setup & Proxy Configuration",
        "body": "Setup Brave Search API and resolve network connectivity issues for OpenClaw web tools."
      },
      {
        "title": "Prerequisites",
        "body": "Brave Search API key (get from https://brave.com/search/api/)\nOpenClaw CLI installed\nmacOS with proxy client (Clash/V2Ray/Surge) if behind GFW"
      },
      {
        "title": "Step 1: Configure API Key",
        "body": "# Option A: Via config.patch (key will be stored securely)\nopenclaw gateway config.patch --raw '{\"tools\":{\"web\":{\"search\":{\"apiKey\":\"YOUR_BRAVE_API_KEY\",\"enabled\":true,\"provider\":\"brave\"}}}}'\n\nOr edit ~/.openclaw/openclaw.json directly:\n\n{\n  \"tools\": {\n    \"web\": {\n      \"search\": {\n        \"enabled\": true,\n        \"provider\": \"brave\",\n        \"apiKey\": \"YOUR_BRAVE_API_KEY\"\n      }\n    }\n  }\n}"
      },
      {
        "title": "Step 2: Test Without Proxy",
        "body": "openclaw web.search --query \"test\" --count 1\n\nIf works → Done.\nIf \"fetch failed\" → Continue to proxy setup."
      },
      {
        "title": "Step 3: Detect Proxy Port",
        "body": "Common proxy ports by client:\n\nClash: 7890 (HTTP), 7891 (SOCKS5), 7897 (mixed-port)\nSurge: 6152, 6153\nV2Ray: 1080, 10808\n\nDetect actual port:\n\n# Check if Clash is running\nps aux | grep -i clash\n\n# Find mixed-port from Clash config\ncat \"~/Library/Application Support/io.github.clash-verge-rev.clash-verge-rev/clash-verge.yaml\" | grep mixed-port\n\n# Or test common ports\nfor port in 7890 7891 7897 6152 6153 1080 10808; do\n  if nc -z 127.0.0.1 $port 2>/dev/null; then\n    echo \"Port $port is open\"\n  fi\ndone"
      },
      {
        "title": "Step 4: Set System Proxy",
        "body": "Method A: launchctl (Recommended - survives restart)\n\n# Set for current session and future sessions\nlaunchctl setenv HTTPS_PROXY http://127.0.0.1:7897\nlaunchctl setenv HTTP_PROXY http://127.0.0.1:7897\n\nMethod B: Shell export (Session only)\n\nexport HTTPS_PROXY=http://127.0.0.1:7897\nexport HTTP_PROXY=http://127.0.0.1:7897\n\nMethod C: Add to shell profile (Permanent)\n\necho 'export HTTPS_PROXY=http://127.0.0.1:7897' >> ~/.zshrc\necho 'export HTTP_PROXY=http://127.0.0.1:7897' >> ~/.zshrc\nsource ~/.zshrc"
      },
      {
        "title": "Step 5: Enable Gateway Restart",
        "body": "openclaw gateway config.patch --raw '{\"commands\":{\"restart\":true}}'"
      },
      {
        "title": "Step 6: Restart Gateway with Proxy",
        "body": "# Restart to pick up proxy env vars\nopenclaw gateway restart\n\n# Or use SIGUSR1\nkill -USR1 $(pgrep -f \"openclaw gateway\")"
      },
      {
        "title": "Step 7: Verify",
        "body": "# Test web search\nopenclaw web.search --query \"Brave Search test\" --count 1\n\n# Test web fetch\nopenclaw web.fetch --url \"https://api.search.brave.com\" --max-chars 100"
      },
      {
        "title": "\"fetch failed\" but proxy works in browser",
        "body": "Symptom: Browser can access Google, but OpenClaw tools fail.\nCause: Gateway process started before proxy env vars were set.\nSolution: Restart Gateway after setting HTTPS_PROXY."
      },
      {
        "title": "Permission denied on Gateway restart",
        "body": "Enable restart command:\n\nopenclaw gateway config.patch --raw '{\"commands\":{\"restart\":true}}'"
      },
      {
        "title": "API key errors",
        "body": "Verify key is set:\n\nopenclaw gateway config.get | grep -A5 'web.*search'\n\nTest directly with curl:\n\ncurl -s \"https://api.search.brave.com/res/v1/web/search?q=test&count=1\" \\\n  -H \"Accept: application/json\" \\\n  -H \"X-Subscription-Token: YOUR_API_KEY\""
      },
      {
        "title": "Mixed-port vs dedicated ports",
        "body": "Clash \"mixed-port\" (default 7897) handles both HTTP and SOCKS5.\nIf using dedicated ports:\n\nHTTP proxy: 7890\nSOCKS5 proxy: 7891 (requires different handling)"
      },
      {
        "title": "Advanced: Per-Tool Proxy",
        "body": "Not all tools respect HTTPS_PROXY. For tools that don't:\n\n# Use proxychains-ng\nbrew install proxychains-ng\n\n# Configure\nsudo tee /usr/local/etc/proxychains.conf <<EOF\nstrict_chain\nproxy_dns\n[ProxyList]\nhttp 127.0.0.1 7897\nEOF\n\n# Run with proxy\nproxychains4 openclaw web.search --query \"test\""
      },
      {
        "title": "Workflow Summary",
        "body": "Configure API key → config.patch or edit JSON\nTest → If fails, proxy needed\nDetect port → Check Clash/Surge config\nSet env vars → launchctl setenv or shell export\nRestart Gateway → openclaw gateway restart\nVerify → Run test search"
      },
      {
        "title": "References",
        "body": "Brave Search API Docs: https://api.search.brave.com/app/docs\nOpenClaw Config: https://docs.openclaw.ai/config\nClash Verge: https://github.com/clash-verge-rev/clash-verge-rev"
      }
    ],
    "body": "Brave Search Setup & Proxy Configuration\n\nSetup Brave Search API and resolve network connectivity issues for OpenClaw web tools.\n\nPrerequisites\nBrave Search API key (get from https://brave.com/search/api/)\nOpenClaw CLI installed\nmacOS with proxy client (Clash/V2Ray/Surge) if behind GFW\nQuick Setup\nStep 1: Configure API Key\n# Option A: Via config.patch (key will be stored securely)\nopenclaw gateway config.patch --raw '{\"tools\":{\"web\":{\"search\":{\"apiKey\":\"YOUR_BRAVE_API_KEY\",\"enabled\":true,\"provider\":\"brave\"}}}}'\n\n\nOr edit ~/.openclaw/openclaw.json directly:\n\n{\n  \"tools\": {\n    \"web\": {\n      \"search\": {\n        \"enabled\": true,\n        \"provider\": \"brave\",\n        \"apiKey\": \"YOUR_BRAVE_API_KEY\"\n      }\n    }\n  }\n}\n\nStep 2: Test Without Proxy\nopenclaw web.search --query \"test\" --count 1\n\n\nIf works → Done. If \"fetch failed\" → Continue to proxy setup.\n\nProxy Setup (macOS)\nStep 3: Detect Proxy Port\n\nCommon proxy ports by client:\n\nClash: 7890 (HTTP), 7891 (SOCKS5), 7897 (mixed-port)\nSurge: 6152, 6153\nV2Ray: 1080, 10808\n\nDetect actual port:\n\n# Check if Clash is running\nps aux | grep -i clash\n\n# Find mixed-port from Clash config\ncat \"~/Library/Application Support/io.github.clash-verge-rev.clash-verge-rev/clash-verge.yaml\" | grep mixed-port\n\n# Or test common ports\nfor port in 7890 7891 7897 6152 6153 1080 10808; do\n  if nc -z 127.0.0.1 $port 2>/dev/null; then\n    echo \"Port $port is open\"\n  fi\ndone\n\nStep 4: Set System Proxy\n\nMethod A: launchctl (Recommended - survives restart)\n\n# Set for current session and future sessions\nlaunchctl setenv HTTPS_PROXY http://127.0.0.1:7897\nlaunchctl setenv HTTP_PROXY http://127.0.0.1:7897\n\n\nMethod B: Shell export (Session only)\n\nexport HTTPS_PROXY=http://127.0.0.1:7897\nexport HTTP_PROXY=http://127.0.0.1:7897\n\n\nMethod C: Add to shell profile (Permanent)\n\necho 'export HTTPS_PROXY=http://127.0.0.1:7897' >> ~/.zshrc\necho 'export HTTP_PROXY=http://127.0.0.1:7897' >> ~/.zshrc\nsource ~/.zshrc\n\nStep 5: Enable Gateway Restart\nopenclaw gateway config.patch --raw '{\"commands\":{\"restart\":true}}'\n\nStep 6: Restart Gateway with Proxy\n# Restart to pick up proxy env vars\nopenclaw gateway restart\n\n# Or use SIGUSR1\nkill -USR1 $(pgrep -f \"openclaw gateway\")\n\nStep 7: Verify\n# Test web search\nopenclaw web.search --query \"Brave Search test\" --count 1\n\n# Test web fetch\nopenclaw web.fetch --url \"https://api.search.brave.com\" --max-chars 100\n\nTroubleshooting\n\"fetch failed\" but proxy works in browser\n\nSymptom: Browser can access Google, but OpenClaw tools fail. Cause: Gateway process started before proxy env vars were set. Solution: Restart Gateway after setting HTTPS_PROXY.\n\nPermission denied on Gateway restart\n\nEnable restart command:\n\nopenclaw gateway config.patch --raw '{\"commands\":{\"restart\":true}}'\n\nAPI key errors\n\nVerify key is set:\n\nopenclaw gateway config.get | grep -A5 'web.*search'\n\n\nTest directly with curl:\n\ncurl -s \"https://api.search.brave.com/res/v1/web/search?q=test&count=1\" \\\n  -H \"Accept: application/json\" \\\n  -H \"X-Subscription-Token: YOUR_API_KEY\"\n\nMixed-port vs dedicated ports\n\nClash \"mixed-port\" (default 7897) handles both HTTP and SOCKS5. If using dedicated ports:\n\nHTTP proxy: 7890\nSOCKS5 proxy: 7891 (requires different handling)\nAdvanced: Per-Tool Proxy\n\nNot all tools respect HTTPS_PROXY. For tools that don't:\n\n# Use proxychains-ng\nbrew install proxychains-ng\n\n# Configure\nsudo tee /usr/local/etc/proxychains.conf <<EOF\nstrict_chain\nproxy_dns\n[ProxyList]\nhttp 127.0.0.1 7897\nEOF\n\n# Run with proxy\nproxychains4 openclaw web.search --query \"test\"\n\nWorkflow Summary\nConfigure API key → config.patch or edit JSON\nTest → If fails, proxy needed\nDetect port → Check Clash/Surge config\nSet env vars → launchctl setenv or shell export\nRestart Gateway → openclaw gateway restart\nVerify → Run test search\nReferences\nBrave Search API Docs: https://api.search.brave.com/app/docs\nOpenClaw Config: https://docs.openclaw.ai/config\nClash Verge: https://github.com/clash-verge-rev/clash-verge-rev"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/qingliu1617-art/brave-search-setup",
    "publisherUrl": "https://clawhub.ai/qingliu1617-art/brave-search-setup",
    "owner": "qingliu1617-art",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/brave-search-setup",
    "downloadUrl": "https://openagent3.xyz/downloads/brave-search-setup",
    "agentUrl": "https://openagent3.xyz/skills/brave-search-setup/agent",
    "manifestUrl": "https://openagent3.xyz/skills/brave-search-setup/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/brave-search-setup/agent.md"
  }
}