{
  "schemaVersion": "1.0",
  "item": {
    "slug": "proxybase-openclaw-skill",
    "name": "Proxybase Openclaw Skill",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/proxybase-user/proxybase-openclaw-skill",
    "canonicalUrl": "https://clawhub.ai/proxybase-user/proxybase-openclaw-skill",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/proxybase-openclaw-skill",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=proxybase-openclaw-skill",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "SKILL.md",
      "config/openclaw-config-snippet.json",
      "proxybase.sh",
      "test_security.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. Then review README.md for any prerequisites, environment setup, or post-install checks. 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. Then review README.md for any prerequisites, environment setup, or post-install checks. 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/proxybase-openclaw-skill"
    },
    "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/proxybase-openclaw-skill",
    "agentPageUrl": "https://openagent3.xyz/skills/proxybase-openclaw-skill/agent",
    "manifestUrl": "https://openagent3.xyz/skills/proxybase-openclaw-skill/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/proxybase-openclaw-skill/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. Then review README.md for any prerequisites, environment setup, or post-install checks. 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. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "ProxyBase — SOCKS5 Proxy Purchasing & Management",
        "body": "ProxyBase provides US residential SOCKS5 proxies for AI agents via a REST API\nwith cryptocurrency payments. Proxies never expire by time — only by bandwidth."
      },
      {
        "title": "Quick Reference",
        "body": "ItemValueAPI Base$PROXYBASE_API_URL (default: https://api.proxybase.xyz/v1)SOCKS5 Hostapi.proxybase.xyz:1080Auth HeaderX-API-Key: <key> (key starts with pk_)PaymentsCrypto (USDT, USDCSOL, BTC, ETH, SOL, etc.)Pricing~$10/GB US residential"
      },
      {
        "title": "Setup",
        "body": "This skill uses zero-configuration registration. The first time any\nProxyBase command is run, the agent automatically registers and stores\ncredentials in {baseDir}/state/credentials.env. No manual API key setup\nor openclaw.json edits are required.\n\nFor manual or debugging use, you can also register explicitly:\n\nbash {baseDir}/proxybase.sh register"
      },
      {
        "title": "State Files",
        "body": "All persistent state lives in {baseDir}/state/:\n\ncredentials.env — API key (PROXYBASE_API_KEY=pk_...)\norders.json — Tracked orders with status and proxy info\n.proxy-env — Sourceable SOCKS5 proxy environment variables"
      },
      {
        "title": "Register Agent (one-time)",
        "body": "curl -s -X POST \"$PROXYBASE_API_URL/agents\" | jq .\n\nReturns { \"agent_id\": \"...\", \"api_key\": \"pk_...\" }.\nSave the api_key — it is required for every subsequent call."
      },
      {
        "title": "List Packages",
        "body": "curl -s \"$PROXYBASE_API_URL/packages\" -H \"X-API-Key: $PROXYBASE_API_KEY\" | jq .\n\nReturns array of packages:\n\nus_residential_1gb — 1 GB, $10\nus_residential_5gb — 5 GB, $50\nus_residential_10gb — 10 GB, $100\n\nEach has: id, name, bandwidth_bytes, price_usd, proxy_type, country."
      },
      {
        "title": "List Payment Currencies",
        "body": "curl -s \"$PROXYBASE_API_URL/currencies\" -H \"X-API-Key: $PROXYBASE_API_KEY\" | jq .\n\nReturns { \"currencies\": [\"usdcsol\", \"btc\", \"eth\", \"sol\", ...] }.\nDefault: usdcsol."
      },
      {
        "title": "Create Order",
        "body": "curl -s -X POST \"$PROXYBASE_API_URL/orders\" \\\n  -H \"X-API-Key: $PROXYBASE_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"package_id\":\"PACKAGE_ID\",\"pay_currency\":\"usdcsol\"}' | jq .\n\nParameters:\n\npackage_id (required) — from list packages\npay_currency (optional) — default usdcsol\ncallback_url (optional) — webhook URL for status notifications\n\nReturns: order_id, payment_id, pay_address, pay_amount, pay_currency,\nprice_usd, status, expiration_estimate_date."
      },
      {
        "title": "Check Order Status",
        "body": "curl -s \"$PROXYBASE_API_URL/orders/ORDER_ID/status\" \\\n  -H \"X-API-Key: $PROXYBASE_API_KEY\" | jq .\n\nStatus progression:\npayment_pending → confirming → paid → proxy_active → bandwidth_exhausted\n\nWhen proxy_active, the response includes:\n\n{\n  \"status\": \"proxy_active\",\n  \"proxy\": {\n    \"host\": \"api.proxybase.xyz\",\n    \"port\": 1080,\n    \"username\": \"pb_xxxx\",\n    \"password\": \"xxxx\"\n  },\n  \"bandwidth_used\": 52428800,\n  \"bandwidth_total\": 1073741824\n}"
      },
      {
        "title": "Top Up Bandwidth",
        "body": "curl -s -X POST \"$PROXYBASE_API_URL/orders/ORDER_ID/topup\" \\\n  -H \"X-API-Key: $PROXYBASE_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"package_id\":\"PACKAGE_ID\",\"pay_currency\":\"usdcsol\"}' | jq .\n\nReturns same shape as create order. Bandwidth is additive — same credentials,\nsame proxy, more bandwidth."
      },
      {
        "title": "Rotate Proxy IP",
        "body": "curl -s -X POST \"$PROXYBASE_API_URL/orders/ORDER_ID/rotate\" \\\n  -H \"X-API-Key: $PROXYBASE_API_KEY\" | jq .\n\nReturns { \"order_id\": \"...\", \"message\": \"...\", \"rotated\": true }.\nThe next connection gets a fresh IP. Existing connections are unaffected."
      },
      {
        "title": "Interactive (Chat with Human)",
        "body": "Load credentials: source {baseDir}/state/credentials.env 2>/dev/null\nRegister if needed: Run bash {baseDir}/proxybase.sh register if no key\nList packages: Show user available packages with prices\nList currencies: Show user payment options (default: usdcsol)\nCreate order: POST /orders with chosen package + currency\nPresent payment: Show user the pay_address, pay_amount, pay_currency, and expiration_estimate_date\nPAUSE — human sends crypto payment\nPoll status: Check every 30s until proxy_active, expired, or failed\nDeliver proxy: Present SOCKS5 credentials to user"
      },
      {
        "title": "Using the Helper Scripts",
        "body": "For a streamlined flow, use the provided scripts:\n\nCreate order and track it:\n\nbash {baseDir}/proxybase.sh order us_residential_1gb usdcsol\n\nPoll an order until terminal state:\n\nbash {baseDir}/proxybase.sh poll ORDER_ID\n\nCheck all tracked orders:\n\nbash {baseDir}/proxybase.sh status\n\nClean up expired/failed orders:\n\nbash {baseDir}/proxybase.sh status --cleanup\n\nTop up bandwidth on an active order:\n\nbash {baseDir}/proxybase.sh topup ORDER_ID us_residential_1gb\n\nRotate proxy credentials (new IP):\n\nbash {baseDir}/proxybase.sh rotate ORDER_ID\n\nPoll with extended timeout (for slow BTC confirmations):\n\nbash {baseDir}/proxybase.sh poll ORDER_ID --max-attempts 200"
      },
      {
        "title": "Payment Pause — Polling Strategies",
        "body": "After order creation, the flow must pause for crypto payment."
      },
      {
        "title": "Strategy A: Cron Polling (Recommended for Unattended)",
        "body": "Set up a cron job to poll every 30 seconds:\n\n{\n  \"name\": \"proxybase-poll-ORDER_ID\",\n  \"schedule\": { \"kind\": \"every\", \"everyMs\": 30000 },\n  \"sessionTarget\": \"isolated\",\n  \"payload\": {\n    \"kind\": \"agentTurn\",\n    \"message\": \"Check the status of ProxyBase order ORDER_ID by running: bash {baseDir}/proxybase.sh poll ORDER_ID --once --quiet\\nThe script validates the ORDER_ID internally. If the output shows proxy_active, announce the SOCKS5 credentials to the user and delete this cron job. If expired or failed, announce the failure and delete this cron job. If still pending or confirming, reply with NO_REPLY.\"\n  },\n  \"delivery\": { \"mode\": \"announce\", \"channel\": \"last\" },\n  \"deleteAfterRun\": false\n}"
      },
      {
        "title": "Strategy B: Manual Polling",
        "body": "Tell the user: \"Let me know when you've sent the payment and I'll check the status.\"\nWhen they say they paid:\n\nbash {baseDir}/proxybase.sh poll ORDER_ID"
      },
      {
        "title": "Strategy C: Webhook (If Gateway is Internet-Reachable)",
        "body": "Pass callback_url when creating the order:\n\ncurl -s -X POST \"$PROXYBASE_API_URL/orders\" \\\n  -H \"X-API-Key: $PROXYBASE_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"package_id\":\"PACKAGE_ID\",\"pay_currency\":\"usdcsol\",\"callback_url\":\"https://your-gateway/hooks/proxybase\"}'\n\nProxyBase sends status updates to the webhook. Always combine with cron polling as backup."
      },
      {
        "title": "Option 1: Set ENV Variables (Auto-Routes All curl/wget/python)",
        "body": "source {baseDir}/state/.proxy-env\n# Now all curl/wget commands go through the proxy automatically\ncurl https://lemontv.xyz/api/ip\n\nOr manually:\n\nexport ALL_PROXY=\"socks5://USERNAME:PASSWORD@api.proxybase.xyz:1080\"\nexport HTTPS_PROXY=\"socks5://USERNAME:PASSWORD@api.proxybase.xyz:1080\"\nexport NO_PROXY=\"localhost,127.0.0.1,api.proxybase.xyz\""
      },
      {
        "title": "Option 2: Per-Command Proxy",
        "body": "curl --proxy socks5://USERNAME:PASSWORD@api.proxybase.xyz:1080 https://lemontv.xyz/api/ip"
      },
      {
        "title": "Option 3: Python with Proxy",
        "body": "import requests\nproxies = {\"https\": \"socks5://USERNAME:PASSWORD@api.proxybase.xyz:1080\"}\nr = requests.get(\"https://lemontv.xyz/api/ip\", proxies=proxies)\nprint(r.text)"
      },
      {
        "title": "Verify Proxy is Working",
        "body": "# Direct IP\ncurl -s https://lemontv.xyz/api/ip | jq .ip\n\n# Proxied IP (should be different)\ncurl -s --proxy socks5://USERNAME:PASSWORD@api.proxybase.xyz:1080 https://lemontv.xyz/api/ip | jq .ip"
      },
      {
        "title": "Error Handling",
        "body": "ErrorMeaningAction401 UnauthorizedAPI key invalid or missingRe-register: bash {baseDir}/proxybase.sh register404 Not FoundOrder ID invalidCheck order ID, remove from tracking429 Too Many RequestsRate limitedWait 5-10s and retry, max 3 attempts500/502/503Server errorRetry up to 3 times with 5s delaypartially_paidUnderpaymentTell user the remaining amount; keep pollingexpiredPayment window closed (~24h)Create new orderfailedPayment errorCreate new order, log for supportbandwidth_exhaustedAll bandwidth usedTop up: POST /orders/{id}/topup"
      },
      {
        "title": "Important Notes",
        "body": "Proxies never expire by time — only by bandwidth consumption\nMultiple active proxies per agent are supported\nBandwidth is tracked in real-time at byte level\nTop-ups are additive (extend existing bandwidth, same credentials)\nWebhook notifications at 80% and 95% bandwidth usage if callback_url provided\nPayment expires after ~24h (NOWPayments window)\nUSDC on SOL is recommended: fast confirmations, low fees\nNever expose api_key or proxy passwords in chat messages — use env vars"
      },
      {
        "title": "Input Validation",
        "body": "All inputs from API responses and command arguments are validated against strict\ncharacter allowlists before use:\n\nProxy credentials (username, password, host, port): Only alphanumeric\ncharacters and a limited set of URL-safe symbols are allowed. Shell\nmetacharacters ($, `, \", ', ;, &, |, >, <, (), {},\n\\) are rejected, preventing command injection if the API is compromised.\nOrder IDs, API keys, package IDs: Only alphanumeric, hyphens, and\nunderscores.\nProxy env files (.proxy-env): Written with single-quoted values to\nprevent shell expansion when sourced."
      },
      {
        "title": "Argument Safety for AI Agent Execution",
        "body": "When the AI agent executes ProxyBase commands, all arguments (order IDs,\npackage IDs) must come from previously validated ProxyBase API responses\nor the local orders.json state file — never from raw user chat input without\nvalidation. The scripts enforce this by validating all arguments against strict\npatterns (e.g., [a-zA-Z0-9_-]+ for order IDs)."
      },
      {
        "title": "inject-gateway Safety",
        "body": "The inject-gateway command modifies the OpenClaw gateway's systemd service\nfile. It includes multiple safety guards:\n\nProxy URL validation: The URL must match socks5://user:pass@host:port\nwith only safe characters\nService file verification: The file must contain [Service] and\nreference openclaw/OpenClaw — arbitrary service files are rejected\nAutomatic backup: Creates a .bak copy before any modification\nDry-run mode: Use --dry-run to preview changes without applying them:\nbash {baseDir}/proxybase.sh inject-gateway ORDER_ID --dry-run\n\n\nPost-write validation: Verifies the rewritten file contains the\nexpected environment lines; restores from backup on failure"
      }
    ],
    "body": "ProxyBase — SOCKS5 Proxy Purchasing & Management\n\nProxyBase provides US residential SOCKS5 proxies for AI agents via a REST API with cryptocurrency payments. Proxies never expire by time — only by bandwidth.\n\nQuick Reference\nItem\tValue\nAPI Base\t$PROXYBASE_API_URL (default: https://api.proxybase.xyz/v1)\nSOCKS5 Host\tapi.proxybase.xyz:1080\nAuth Header\tX-API-Key: <key> (key starts with pk_)\nPayments\tCrypto (USDT, USDCSOL, BTC, ETH, SOL, etc.)\nPricing\t~$10/GB US residential\nSetup\n\nThis skill uses zero-configuration registration. The first time any ProxyBase command is run, the agent automatically registers and stores credentials in {baseDir}/state/credentials.env. No manual API key setup or openclaw.json edits are required.\n\nFor manual or debugging use, you can also register explicitly:\n\nbash {baseDir}/proxybase.sh register\n\nState Files\n\nAll persistent state lives in {baseDir}/state/:\n\ncredentials.env — API key (PROXYBASE_API_KEY=pk_...)\norders.json — Tracked orders with status and proxy info\n.proxy-env — Sourceable SOCKS5 proxy environment variables\nAPI Reference\nRegister Agent (one-time)\ncurl -s -X POST \"$PROXYBASE_API_URL/agents\" | jq .\n\n\nReturns { \"agent_id\": \"...\", \"api_key\": \"pk_...\" }. Save the api_key — it is required for every subsequent call.\n\nList Packages\ncurl -s \"$PROXYBASE_API_URL/packages\" -H \"X-API-Key: $PROXYBASE_API_KEY\" | jq .\n\n\nReturns array of packages:\n\nus_residential_1gb — 1 GB, $10\nus_residential_5gb — 5 GB, $50\nus_residential_10gb — 10 GB, $100\n\nEach has: id, name, bandwidth_bytes, price_usd, proxy_type, country.\n\nList Payment Currencies\ncurl -s \"$PROXYBASE_API_URL/currencies\" -H \"X-API-Key: $PROXYBASE_API_KEY\" | jq .\n\n\nReturns { \"currencies\": [\"usdcsol\", \"btc\", \"eth\", \"sol\", ...] }. Default: usdcsol.\n\nCreate Order\ncurl -s -X POST \"$PROXYBASE_API_URL/orders\" \\\n  -H \"X-API-Key: $PROXYBASE_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"package_id\":\"PACKAGE_ID\",\"pay_currency\":\"usdcsol\"}' | jq .\n\n\nParameters:\n\npackage_id (required) — from list packages\npay_currency (optional) — default usdcsol\ncallback_url (optional) — webhook URL for status notifications\n\nReturns: order_id, payment_id, pay_address, pay_amount, pay_currency, price_usd, status, expiration_estimate_date.\n\nCheck Order Status\ncurl -s \"$PROXYBASE_API_URL/orders/ORDER_ID/status\" \\\n  -H \"X-API-Key: $PROXYBASE_API_KEY\" | jq .\n\n\nStatus progression: payment_pending → confirming → paid → proxy_active → bandwidth_exhausted\n\nWhen proxy_active, the response includes:\n\n{\n  \"status\": \"proxy_active\",\n  \"proxy\": {\n    \"host\": \"api.proxybase.xyz\",\n    \"port\": 1080,\n    \"username\": \"pb_xxxx\",\n    \"password\": \"xxxx\"\n  },\n  \"bandwidth_used\": 52428800,\n  \"bandwidth_total\": 1073741824\n}\n\nTop Up Bandwidth\ncurl -s -X POST \"$PROXYBASE_API_URL/orders/ORDER_ID/topup\" \\\n  -H \"X-API-Key: $PROXYBASE_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"package_id\":\"PACKAGE_ID\",\"pay_currency\":\"usdcsol\"}' | jq .\n\n\nReturns same shape as create order. Bandwidth is additive — same credentials, same proxy, more bandwidth.\n\nRotate Proxy IP\ncurl -s -X POST \"$PROXYBASE_API_URL/orders/ORDER_ID/rotate\" \\\n  -H \"X-API-Key: $PROXYBASE_API_KEY\" | jq .\n\n\nReturns { \"order_id\": \"...\", \"message\": \"...\", \"rotated\": true }. The next connection gets a fresh IP. Existing connections are unaffected.\n\nComplete Purchase Flow\nInteractive (Chat with Human)\nLoad credentials: source {baseDir}/state/credentials.env 2>/dev/null\nRegister if needed: Run bash {baseDir}/proxybase.sh register if no key\nList packages: Show user available packages with prices\nList currencies: Show user payment options (default: usdcsol)\nCreate order: POST /orders with chosen package + currency\nPresent payment: Show user the pay_address, pay_amount, pay_currency, and expiration_estimate_date\nPAUSE — human sends crypto payment\nPoll status: Check every 30s until proxy_active, expired, or failed\nDeliver proxy: Present SOCKS5 credentials to user\nUsing the Helper Scripts\n\nFor a streamlined flow, use the provided scripts:\n\nCreate order and track it:\n\nbash {baseDir}/proxybase.sh order us_residential_1gb usdcsol\n\n\nPoll an order until terminal state:\n\nbash {baseDir}/proxybase.sh poll ORDER_ID\n\n\nCheck all tracked orders:\n\nbash {baseDir}/proxybase.sh status\n\n\nClean up expired/failed orders:\n\nbash {baseDir}/proxybase.sh status --cleanup\n\n\nTop up bandwidth on an active order:\n\nbash {baseDir}/proxybase.sh topup ORDER_ID us_residential_1gb\n\n\nRotate proxy credentials (new IP):\n\nbash {baseDir}/proxybase.sh rotate ORDER_ID\n\n\nPoll with extended timeout (for slow BTC confirmations):\n\nbash {baseDir}/proxybase.sh poll ORDER_ID --max-attempts 200\n\nPayment Pause — Polling Strategies\n\nAfter order creation, the flow must pause for crypto payment.\n\nStrategy A: Cron Polling (Recommended for Unattended)\n\nSet up a cron job to poll every 30 seconds:\n\n{\n  \"name\": \"proxybase-poll-ORDER_ID\",\n  \"schedule\": { \"kind\": \"every\", \"everyMs\": 30000 },\n  \"sessionTarget\": \"isolated\",\n  \"payload\": {\n    \"kind\": \"agentTurn\",\n    \"message\": \"Check the status of ProxyBase order ORDER_ID by running: bash {baseDir}/proxybase.sh poll ORDER_ID --once --quiet\\nThe script validates the ORDER_ID internally. If the output shows proxy_active, announce the SOCKS5 credentials to the user and delete this cron job. If expired or failed, announce the failure and delete this cron job. If still pending or confirming, reply with NO_REPLY.\"\n  },\n  \"delivery\": { \"mode\": \"announce\", \"channel\": \"last\" },\n  \"deleteAfterRun\": false\n}\n\nStrategy B: Manual Polling\n\nTell the user: \"Let me know when you've sent the payment and I'll check the status.\" When they say they paid:\n\nbash {baseDir}/proxybase.sh poll ORDER_ID\n\nStrategy C: Webhook (If Gateway is Internet-Reachable)\n\nPass callback_url when creating the order:\n\ncurl -s -X POST \"$PROXYBASE_API_URL/orders\" \\\n  -H \"X-API-Key: $PROXYBASE_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"package_id\":\"PACKAGE_ID\",\"pay_currency\":\"usdcsol\",\"callback_url\":\"https://your-gateway/hooks/proxybase\"}'\n\n\nProxyBase sends status updates to the webhook. Always combine with cron polling as backup.\n\nUsing Your Proxy\nOption 1: Set ENV Variables (Auto-Routes All curl/wget/python)\nsource {baseDir}/state/.proxy-env\n# Now all curl/wget commands go through the proxy automatically\ncurl https://lemontv.xyz/api/ip\n\n\nOr manually:\n\nexport ALL_PROXY=\"socks5://USERNAME:PASSWORD@api.proxybase.xyz:1080\"\nexport HTTPS_PROXY=\"socks5://USERNAME:PASSWORD@api.proxybase.xyz:1080\"\nexport NO_PROXY=\"localhost,127.0.0.1,api.proxybase.xyz\"\n\nOption 2: Per-Command Proxy\ncurl --proxy socks5://USERNAME:PASSWORD@api.proxybase.xyz:1080 https://lemontv.xyz/api/ip\n\nOption 3: Python with Proxy\nimport requests\nproxies = {\"https\": \"socks5://USERNAME:PASSWORD@api.proxybase.xyz:1080\"}\nr = requests.get(\"https://lemontv.xyz/api/ip\", proxies=proxies)\nprint(r.text)\n\nVerify Proxy is Working\n# Direct IP\ncurl -s https://lemontv.xyz/api/ip | jq .ip\n\n# Proxied IP (should be different)\ncurl -s --proxy socks5://USERNAME:PASSWORD@api.proxybase.xyz:1080 https://lemontv.xyz/api/ip | jq .ip\n\nError Handling\nError\tMeaning\tAction\n401 Unauthorized\tAPI key invalid or missing\tRe-register: bash {baseDir}/proxybase.sh register\n404 Not Found\tOrder ID invalid\tCheck order ID, remove from tracking\n429 Too Many Requests\tRate limited\tWait 5-10s and retry, max 3 attempts\n500/502/503\tServer error\tRetry up to 3 times with 5s delay\npartially_paid\tUnderpayment\tTell user the remaining amount; keep polling\nexpired\tPayment window closed (~24h)\tCreate new order\nfailed\tPayment error\tCreate new order, log for support\nbandwidth_exhausted\tAll bandwidth used\tTop up: POST /orders/{id}/topup\nImportant Notes\nProxies never expire by time — only by bandwidth consumption\nMultiple active proxies per agent are supported\nBandwidth is tracked in real-time at byte level\nTop-ups are additive (extend existing bandwidth, same credentials)\nWebhook notifications at 80% and 95% bandwidth usage if callback_url provided\nPayment expires after ~24h (NOWPayments window)\nUSDC on SOL is recommended: fast confirmations, low fees\nNever expose api_key or proxy passwords in chat messages — use env vars\nSecurity\nInput Validation\n\nAll inputs from API responses and command arguments are validated against strict character allowlists before use:\n\nProxy credentials (username, password, host, port): Only alphanumeric characters and a limited set of URL-safe symbols are allowed. Shell metacharacters ($, `, \", ', ;, &, |, >, <, (), {}, \\) are rejected, preventing command injection if the API is compromised.\nOrder IDs, API keys, package IDs: Only alphanumeric, hyphens, and underscores.\nProxy env files (.proxy-env): Written with single-quoted values to prevent shell expansion when sourced.\nArgument Safety for AI Agent Execution\n\nWhen the AI agent executes ProxyBase commands, all arguments (order IDs, package IDs) must come from previously validated ProxyBase API responses or the local orders.json state file — never from raw user chat input without validation. The scripts enforce this by validating all arguments against strict patterns (e.g., [a-zA-Z0-9_-]+ for order IDs).\n\ninject-gateway Safety\n\nThe inject-gateway command modifies the OpenClaw gateway's systemd service file. It includes multiple safety guards:\n\nProxy URL validation: The URL must match socks5://user:pass@host:port with only safe characters\nService file verification: The file must contain [Service] and reference openclaw/OpenClaw — arbitrary service files are rejected\nAutomatic backup: Creates a .bak copy before any modification\nDry-run mode: Use --dry-run to preview changes without applying them:\nbash {baseDir}/proxybase.sh inject-gateway ORDER_ID --dry-run\n\nPost-write validation: Verifies the rewritten file contains the expected environment lines; restores from backup on failure"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/proxybase-user/proxybase-openclaw-skill",
    "publisherUrl": "https://clawhub.ai/proxybase-user/proxybase-openclaw-skill",
    "owner": "proxybase-user",
    "version": "1.0.11",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/proxybase-openclaw-skill",
    "downloadUrl": "https://openagent3.xyz/downloads/proxybase-openclaw-skill",
    "agentUrl": "https://openagent3.xyz/skills/proxybase-openclaw-skill/agent",
    "manifestUrl": "https://openagent3.xyz/skills/proxybase-openclaw-skill/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/proxybase-openclaw-skill/agent.md"
  }
}