[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-browser-use-x402":3,"mdc-avfsul-key":45,"related-org-browser-use-x402":3233,"related-repo-browser-use-x402":3405},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":29,"repoUrl":30,"updatedAt":31,"license":32,"forks":33,"topics":34,"repo":40,"sourceUrl":43,"mdContent":44},"x402","configure x402 payments for Browser Use Cloud","Set up Browser Use Cloud payments with x402 — pay per request from a crypto wallet (USDC on Base mainnet), no signup or API key. Two setups it works out up front — \"just use it\" (set up a wallet so you or Claude Code can run cloud browser tasks paid from the wallet — Claude writes and runs throwaway scripts, nothing touches your codebase) or \"build it in\" (install the SDK and write the key + code into your project). Walks through wallet setup, funding, .env, and a ~$1 test run. Use when the user asks about x402, pay-per-use, USDC payments, or wants Browser Use Cloud without an API key. For the free-tier signup (reverse-CAPTCHA → API key), use `browser-use cloud signup` or the `cloud` skill instead.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"browser-use","Browser-use","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fbrowser-use.png",[12,16,17,20,23,26],{"name":13,"slug":14,"type":15},"Automation","automation","tag",{"name":4,"slug":4,"type":15},{"name":18,"slug":19,"type":15},"Web3","web3",{"name":21,"slug":22,"type":15},"Payments","payments",{"name":24,"slug":25,"type":15},"Browser Automation","browser-automation",{"name":27,"slug":28,"type":15},"Base","base",106789,"https:\u002F\u002Fgithub.com\u002Fbrowser-use\u002Fbrowser-use","2026-06-02T07:51:20.889935",null,11736,[35,36,25,8,37,38,39],"ai-agents","ai-tools","llm","playwright","python",{"repoUrl":30,"stars":29,"forks":33,"topics":41,"description":42},[35,36,25,8,37,38,39],"🌐 Make websites accessible for AI agents. Automate tasks online with ease.","https:\u002F\u002Fgithub.com\u002Fbrowser-use\u002Fbrowser-use\u002Ftree\u002FHEAD\u002Fskills\u002Fx402","---\nname: x402\ndescription: Set up Browser Use Cloud payments with x402 — pay per request from a crypto wallet (USDC on Base mainnet), no signup or API key. Two setups it works out up front — \"just use it\" (set up a wallet so you or Claude Code can run cloud browser tasks paid from the wallet — Claude writes and runs throwaway scripts, nothing touches your codebase) or \"build it in\" (install the SDK and write the key + code into your project). Walks through wallet setup, funding, .env, and a ~$1 test run. Use when the user asks about x402, pay-per-use, USDC payments, or wants Browser Use Cloud without an API key. For the free-tier signup (reverse-CAPTCHA → API key), use `browser-use cloud signup` or the `cloud` skill instead.\nallowed-tools: Bash, Read, Write, Edit\n---\n\n# Browser Use Cloud — pay with x402 (crypto wallet)\n\nThis is a scripted flow. Follow the steps in order. x402 only works through the **SDK** (`browser-use-sdk` for Python, the `browser-use` npm package for TS) — there is no `browser-use` CLI command for it, so every step runs a short SDK script.\n\n## How to use this script\n\n- Lines under **Say:** are spoken to the user **word for word.** Don't paraphrase, add, or drop anything.\n- `\u003Clike this>` inside a Say block is a fill-in — replace it with the real value, keep the rest exact.\n- Lines under **Ask:** use the AskUserQuestion tool. Use the question and option text exactly as written.\n- **To show an explanation before a question, put it inside the AskUserQuestion `question` field** (it renders above the options). Don't send it as separate chat text before calling the tool — that text gets dropped when the question UI opens. So: explanation + the actual question both go in the `question` field, in one tool call.\n- Lines under **Do:** are your actions. Don't read them out.\n- Track two facts as you go: `SETUP` (A or B, from Step 1) and `MODE` (A or B, from Step 2).\n- **`SETUP`, `MODE`, and the Path A\u002FB\u002FC names are internal labels for you only. Never say them to the user.** Describe choices in plain words instead (e.g. \"top up your account\" \u002F \"accountless wallet\"), never \"Mode B\" or \"Path A\".\n\n---\n\n## Step 1 — Open and pick the setup\n\n**Ask:** (header: `Use x402`) — put the explanation and the question both in the `question` field, exactly:\n\n> x402 is a protocol from Coinbase that, instead of presenting an API key, allows you to use crypto to pay for API requests. x402 lets you pay Browser Use per request from a crypto wallet with USDC on Base — no signup, API key, or credit card needed, just a wallet. Setup takes a few minutes: get or make a wallet, add funds, save the key in `.env`, and test it.\n>\n> How do you want to use x402?\n- **Just use it** — Run Browser Use tasks, paid from your wallet, here in terminal by asking me. I set up the wallet and key.\n- **Build it in** — You're coding an app and want x402 in it. I will help you install the SDK, save the key to your project's `.env`, and add code.\n\n**Do:** \"Just use it\" → `SETUP = A`. \"Build it in\" → `SETUP = B`.\n\n---\n\n## Step 2 — Find the account (check before asking)\n\n**Do:** Look for an existing Browser Use API key, in this order. Don't say anything yet.\n1. `BROWSER_USE_API_KEY` in the environment\n2. a `BROWSER_USE_API_KEY=` line in `.\u002F.env`\n3. `~\u002F.browser-use\u002Fconfig.json` (saved by `browser-use cloud login` \u002F `signup`)\n4. `browser-use doctor` output, if the CLI is installed\n\n**If no key is found anywhere:**\n\n**Say:**\n> No Browser Use key found, so I'll set this up accountless: the wallet is your identity, and the first payment makes a project named after it.\n\n**Do:** `MODE = A`. Go to Step 3.\n\n**If a key is found:**\n\n**Ask:** (header: `Account`) — question: `I found a Browser Use API key in \u003Clocation>. Where should the USDC credits go?`\n- **Top up that account** — Credits go to your existing API key's project. Good if your free credits ran out, or you'd rather pay with crypto than a card.\n- **Accountless wallet** — The wallet is a separate identity. The first payment makes a fresh project named after the wallet, apart from your existing account.\n\n**Do:** \"Top up that account\" → `MODE = B`. \"Accountless wallet\" → `MODE = A`.\n\n---\n\n## Step 3 — Wallet\n\n**Ask:** (header: `Wallet`) — question: `Do you have a wallet ready, or should I set one up?`\n- **I have a funded wallet** — An EVM wallet (MetaMask, Rabby, Coinbase Wallet, Frame, Phantom, …) with USDC on Base mainnet.\n- **Walk me through it** — I'll guide you through making a wallet, adding Base, and buying USDC.\n- **Make a fresh one** — I'll generate a throwaway wallet for automation. You'll still need to fund it.\n\nBranch on the answer.\n\n### Path A — \"I have a funded wallet\"\n\n**Do:** Check `.env` is in `.gitignore`; add it if missing.\n\n**Ask:** (header: `Add key`) — put the note and the question both in the `question` field:\n> Your wallet's private key needs to go into `.env`. You can paste it here and I'll add it for you, or add it yourself. Heads up: anything pasted in chat is saved in the transcript, so for a high-value wallet, adding it yourself is a bit safer. How do you want to do it?\n\n- **Paste it here** — Paste your private key in the chat and I'll write it to `.env` for you.\n- **I'll add it myself** — You add it to `.env`, then send me just your public address.\n\n**If \"Paste it here\":**\n\n**Do:** Write `BROWSER_USE_X402_PRIVATE_KEY=\u003Cpasted key>` to `.env` (create the file if needed; make sure `.env` is gitignored). Never echo the key back or print it anywhere.\n\n**Say:**\n> Saved your key to `.env` — I won't print it back.\n\n**Do:** Go to Step 4.\n\n**If \"I'll add it myself\":**\n\n**Say:**\n> Add this line to your `.env`, then send me your wallet's public address (the `0x…` one — safe to share):\n> ```\n> BROWSER_USE_X402_PRIVATE_KEY=\u003Cyour private key>\n> ```\n\n**Do:** When they send the address, check it matches `^0x[0-9a-fA-F]{40}$`.\n\n**Say:**\n> Got it: `\u003Caddress>`. That's a valid address.\n\n**Do:** Go to Step 4.\n\n### Path B — \"Walk me through it\"\n\n**Say:**\n> 1. Install MetaMask (or Rabby, Coinbase Wallet, Frame, Trust Wallet, Phantom, …) from the official site only: https:\u002F\u002Fmetamask.io. Make a wallet, save the seed phrase offline, set a password.\n> 2. Add Base as a network. Open https:\u002F\u002Fchainlist.org\u002Fchain\u002F8453 → \"Connect Wallet\" → \"Add to MetaMask\", then approve it in your wallet.\n> 3. Click \"Buy\" in your wallet. Pick USDC, network Base, pay with card \u002F Apple Pay \u002F bank. The USDC lands straight in your wallet.\n> 4. Get the private key: account menu → Account details → Show private key → enter password → copy.\n> 5. Add it to your `.env` (make sure `.env` is gitignored):\n> ```\n> BROWSER_USE_X402_PRIVATE_KEY=\u003Cyour private key>\n> ```\n> 6. Send me your wallet's public address (the `0x…` one) so I can check it.\n\n**Do:** Then follow Path A from the address check onward.\n\n### Path C — \"Make a fresh one\"\n\n**Do:** Generate a wallet. Save the key to `.env`. Show the address only.\n\nPython:\n```bash\npip install eth-account\n```\n```python\nfrom eth_account import Account\nacc = Account.create()\nprint(\"Address:\", acc.address)\nprint(\"Private key:\", acc.key.hex())\n```\n\nTypeScript:\n```bash\nnpm install viem\n```\n```typescript\nimport { generatePrivateKey, privateKeyToAccount } from \"viem\u002Faccounts\";\nconst key = generatePrivateKey();\nconsole.log(\"Address:\", privateKeyToAccount(key).address);\nconsole.log(\"Private key:\", key);\n```\n\n**Say:**\n> Made a fresh wallet. Your public address is `\u003Caddress>`, and I've saved the private key to `.env`. Now it needs funds.\n\n**Do:** Go to Step 4 (funding).\n\n---\n\n## Step 4 — Add funds\n\n**If Path A or B (already funded):**\n\n**Say:**\n> Your wallet's already funded, so we'll skip ahead to the test.\n\n**Do:** Go to Step 5.\n\n**If Path C:**\n\n**Say:**\n> Two ways to get USDC into your wallet on Base:\n> - In-wallet Buy button (easiest): click \"Buy\", pick USDC, set the network to Base, pay with a card. No exchange needed.\n> - From an exchange: send USDC to `\u003Caddress>` and pick \"Base\" as the network — not Ethereum, which costs $5–$20 in fees.\n>\n> Add at least $20: that covers the $1 test plus a few real tasks. I'll watch the balance and tell you when it lands.\n\n**Do:** Check the on-chain balance every 5s with Base's public RPC:\n```bash\nPADDED=$(printf \"%064s\" \"${WALLET_ADDR:2}\" | tr ' ' '0')\ncurl -s https:\u002F\u002Fmainnet.base.org \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d \"{\\\"jsonrpc\\\":\\\"2.0\\\",\\\"method\\\":\\\"eth_call\\\",\\\"params\\\":[{\\\"to\\\":\\\"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\\\",\\\"data\\\":\\\"0x70a08231${PADDED}\\\"},\\\"latest\\\"],\\\"id\\\":1}\"\n```\nRead `result` as a hex number; divide by `1_000_000` (USDC has 6 decimals). Stop once it's $20 or more.\n\n**Say:**\n> Funded — I see $\u003Camount> on Base. Next, a quick test.\n\n---\n\n## Step 5 — Test run (~$1)\n\n**Do:** If `SETUP = A`, make sure the SDK is installed where you'll run scripts (default Python). If `SETUP = B`, install it into the project in the project's language — work out the language from the cwd (`package.json`\u002F`tsconfig.json` → TypeScript; `pyproject.toml`\u002F`requirements.txt`\u002F`*.py` → Python; ask only if you can't tell):\n```bash\n# Python (needs 3.10+ for the x402 extra)\npip install \"browser-use-sdk[x402]\"\n# TypeScript\nnpm install browser-use-sdk @x402\u002Ffetch @x402\u002Fevm viem\n```\n\n**Ask:** (header: `Test run`) — question: `Ready to test? This spends exactly $1 USDC from your wallet to check payment + run work end to end.`\n- **Use the default task** — \"Go to example.com and tell me the heading text.\" (~5 seconds, cheap)\n- **I'll give you a task** — Tell me a short task to run instead.\n- **Skip the test** — Skip the test and go straight to using x402.\n\n**Do:**\n- \"I'll give you a task\" → **Say:** `What's the task? Keep it short.` Wait for it.\n- \"Skip the test\" → go to Step 6.\n- Otherwise use the default task.\n\n**Do:** Run the test. Use the raw x402 client with `max_value` of $1.50 so it pays $1, not the $5 the SDK uses by default:\n```python\nimport asyncio, os\nfrom decimal import Decimal\nfrom x402 import x402Client\nfrom x402.http.clients import x402HttpxClient\nfrom x402.mechanisms.evm import EthAccountSigner\nfrom x402.mechanisms.evm.exact.register import register_exact_evm_client\nfrom eth_account import Account\n\nasync def main():\n    client = x402Client()\n    register_exact_evm_client(\n        client,\n        EthAccountSigner(Account.from_key(os.environ[\"BROWSER_USE_X402_PRIVATE_KEY\"])),\n    )\n    # max_value caps the spend per request — picks the $1 option over the $5 default.\n    async with x402HttpxClient(client, max_value=Decimal(\"1.5\"), timeout=180.0) as http:\n        resp = await http.post(\n            \"https:\u002F\u002Fx402.api.browser-use.com\u002Fapi\u002Fv3\u002Fsessions\",\n            json={\"task\": \"\u003Cthe task>\"},\n        )\n        print(resp.status_code, resp.json())\n\nasyncio.run(main())\n```\nIf `MODE = B`, add the API key header, or the $1 goes to a new wallet project instead of the one being topped up:\n```python\nasync with x402HttpxClient(\n    client, max_value=Decimal(\"1.5\"), timeout=180.0,\n    headers={\"X-Browser-Use-API-Key\": os.environ[\"BROWSER_USE_API_KEY\"]},\n) as http:\n    ...\n```\nIf the installed `x402` lib has no `max_value`, **Say:** `That x402 version can't force a $1 charge, so the test will cost $5 instead. Want me to go ahead?` — wait for a yes before running.\n\n**Say:**\n> Paid. On-chain proof: https:\u002F\u002Fbasescan.org\u002Faddress\u002F\u003Caddress>#tokentxns — look for a USDC transfer out of exactly $1.000000.\n\n**Do:** Read the balance. If `MODE = A` (needs `browser-use-sdk` ≥ 3.8.0; if older, say to run `pip install -U \"browser-use-sdk[x402]\"` or skip this):\n```python\nimport asyncio, os\nfrom browser_use_sdk.v3 import get_wallet_balance\n\nasync def main():\n    bal = await get_wallet_balance(os.environ[\"BROWSER_USE_X402_PRIVATE_KEY\"])\n    print(bal['total_credits_usd'])\n\nasyncio.run(main())\n```\nIf `MODE = B`, skip `get_wallet_balance` (it returns 404 — the credits sit in the API key's project, that's normal, don't show it as an error) and read it the normal way:\n```python\nfrom browser_use_sdk.v3 import AsyncBrowserUse\nclient = AsyncBrowserUse(api_key=os.environ[\"BROWSER_USE_API_KEY\"])\nacct = await client.billing.account()\nprint(acct.total_credits_balance_usd)\n```\n\n**Say:**\n> Done. Your Browser Use balance is now $\u003Cbalance> (the test cost about $\u003Ccost>). Tasks draw from this, and the SDK adds another $5 when it runs out.\n\n---\n\n## Step 6 — Wrap up\n\n**If `SETUP = A`:**\n\n**Say:**\n> All set. Ask me to run any browser task and I'll run it through the SDK, paid from your wallet.\n\n**Do:** When they ask for a task, write a throwaway script (in `\u002Ftmp`, or a background job for long ones), run it, report the result, and delete it — don't leave files in their cwd. The SDK reads `BROWSER_USE_X402_PRIVATE_KEY` and finds the x402 endpoint on its own:\n```python\nimport asyncio, os\nfrom browser_use_sdk.v3 import AsyncBrowserUse\n\nasync def main():\n    client = AsyncBrowserUse()  # Mode B: AsyncBrowserUse(api_key=os.environ[\"BROWSER_USE_API_KEY\"])\n    result = await client.run(task=\"\u003Cthe task>\")\n    print(result.output)\n\nasyncio.run(main())\n```\n\n**If `SETUP = B`:**\n\n**Say:**\n> All set. Here's the client to use in your code — it reads the key and endpoint from your `.env`:\n\n**Do:** Add the client in the project's language and point them at the `cloud` skill \u002F SDK docs for the rest:\n```python\nfrom browser_use_sdk.v3 import AsyncBrowserUse\n\nclient = AsyncBrowserUse()                                  # Mode A (accountless)\n# client = AsyncBrowserUse(api_key=\"bu_...\")                # Mode B (top up existing account)\n```\n\n(x402 needs the **async** client — the sync `BrowserUse` won't run when the x402 env var is set.)\n\n---\n\n## TypeScript equivalents\n\n| Python | TypeScript |\n|---|---|\n| `from browser_use_sdk.v3 import AsyncBrowserUse` | `import { BrowserUse } from \"browser-use-sdk\u002Fv3\"` |\n| `AsyncBrowserUse()` | `new BrowserUse()` |\n| `await client.run(task=...)` → `.output` | `await client.run({ task })` → `.output` |\n| `get_wallet_balance(key)` | `getWalletBalance(key)` (`from \"browser-use-sdk\u002Fv3\"`) |\n| `pip install \"browser-use-sdk[x402]\"` | `npm install browser-use-sdk @x402\u002Ffetch @x402\u002Fevm viem` |\n\nBoth SDKs read `BROWSER_USE_X402_PRIVATE_KEY` from the env.\n\n## Rules\n\n- **Follow the script in order. Say the Say blocks word for word.**\n- **Never spend the user's USDC without a clear yes** (the Step 5 question is that yes).\n- **Always offer both ways to add the key**: paste it in chat (you write it to `.env`) or the user adds it themselves. If they paste it, write it straight to `.env` and never echo it back or store it anywhere else.\n- **Add `.env` to `.gitignore` before saving keys.**\n- **Wallets hold real money.** Keep keys out of source control, logs, and screenshots; only add what you can afford to lose if it leaks.\n\n## Reference\n\n- x402 user docs: https:\u002F\u002Fdocs.browser-use.com\u002Fcloud\u002Fguides\u002Fx402\n- Claude Code + Browser Use Cloud: https:\u002F\u002Fdocs.browser-use.com\u002Fcloud\u002Ftutorials\u002Fintegrations\u002Fclaude-code\n- x402 protocol: https:\u002F\u002Fwww.x402.org\n- USDC on Base contract: `0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913`\n- Base RPC: https:\u002F\u002Fmainnet.base.org · Basescan: https:\u002F\u002Fbasescan.org\n",{"data":46,"body":48},{"name":4,"description":6,"allowed-tools":47},"Bash, Read, Write, Edit",{"type":49,"children":50},"root",[51,60,97,104,229,233,239,263,285,315,340,343,349,358,430,438,445,453,470,478,500,523,546,549,555,576,609,614,621,645,668,683,720,728,759,766,781,790,798,805,840,856,863,879,887,893,900,987,996,1002,1018,1023,1055,1098,1103,1127,1336,1343,1365,1374,1377,1383,1391,1398,1406,1415,1423,1430,1463,1472,1849,1870,1877,1891,1894,1900,1961,2039,2060,2093,2100,2131,2148,2356,2368,2415,2446,2453,2473,2504,2570,2589,2628,2635,2655,2658,2664,2677,2684,2692,2717,2790,2803,2810,2824,2841,2878,2898,2901,2907,3062,3074,3080,3156,3162,3227],{"type":52,"tag":53,"props":54,"children":56},"element","h1",{"id":55},"browser-use-cloud-pay-with-x402-crypto-wallet",[57],{"type":58,"value":59},"text","Browser Use Cloud — pay with x402 (crypto wallet)",{"type":52,"tag":61,"props":62,"children":63},"p",{},[64,66,72,74,81,83,88,90,95],{"type":58,"value":65},"This is a scripted flow. Follow the steps in order. x402 only works through the ",{"type":52,"tag":67,"props":68,"children":69},"strong",{},[70],{"type":58,"value":71},"SDK",{"type":58,"value":73}," (",{"type":52,"tag":75,"props":76,"children":78},"code",{"className":77},[],[79],{"type":58,"value":80},"browser-use-sdk",{"type":58,"value":82}," for Python, the ",{"type":52,"tag":75,"props":84,"children":86},{"className":85},[],[87],{"type":58,"value":8},{"type":58,"value":89}," npm package for TS) — there is no ",{"type":52,"tag":75,"props":91,"children":93},{"className":92},[],[94],{"type":58,"value":8},{"type":58,"value":96}," CLI command for it, so every step runs a short SDK script.",{"type":52,"tag":98,"props":99,"children":101},"h2",{"id":100},"how-to-use-this-script",[102],{"type":58,"value":103},"How to use this script",{"type":52,"tag":105,"props":106,"children":107},"ul",{},[108,128,139,150,175,186,207],{"type":52,"tag":109,"props":110,"children":111},"li",{},[112,114,119,121,126],{"type":58,"value":113},"Lines under ",{"type":52,"tag":67,"props":115,"children":116},{},[117],{"type":58,"value":118},"Say:",{"type":58,"value":120}," are spoken to the user ",{"type":52,"tag":67,"props":122,"children":123},{},[124],{"type":58,"value":125},"word for word.",{"type":58,"value":127}," Don't paraphrase, add, or drop anything.",{"type":52,"tag":109,"props":129,"children":130},{},[131,137],{"type":52,"tag":75,"props":132,"children":134},{"className":133},[],[135],{"type":58,"value":136},"\u003Clike this>",{"type":58,"value":138}," inside a Say block is a fill-in — replace it with the real value, keep the rest exact.",{"type":52,"tag":109,"props":140,"children":141},{},[142,143,148],{"type":58,"value":113},{"type":52,"tag":67,"props":144,"children":145},{},[146],{"type":58,"value":147},"Ask:",{"type":58,"value":149}," use the AskUserQuestion tool. Use the question and option text exactly as written.",{"type":52,"tag":109,"props":151,"children":152},{},[153,166,168,173],{"type":52,"tag":67,"props":154,"children":155},{},[156,158,164],{"type":58,"value":157},"To show an explanation before a question, put it inside the AskUserQuestion ",{"type":52,"tag":75,"props":159,"children":161},{"className":160},[],[162],{"type":58,"value":163},"question",{"type":58,"value":165}," field",{"type":58,"value":167}," (it renders above the options). Don't send it as separate chat text before calling the tool — that text gets dropped when the question UI opens. So: explanation + the actual question both go in the ",{"type":52,"tag":75,"props":169,"children":171},{"className":170},[],[172],{"type":58,"value":163},{"type":58,"value":174}," field, in one tool call.",{"type":52,"tag":109,"props":176,"children":177},{},[178,179,184],{"type":58,"value":113},{"type":52,"tag":67,"props":180,"children":181},{},[182],{"type":58,"value":183},"Do:",{"type":58,"value":185}," are your actions. Don't read them out.",{"type":52,"tag":109,"props":187,"children":188},{},[189,191,197,199,205],{"type":58,"value":190},"Track two facts as you go: ",{"type":52,"tag":75,"props":192,"children":194},{"className":193},[],[195],{"type":58,"value":196},"SETUP",{"type":58,"value":198}," (A or B, from Step 1) and ",{"type":52,"tag":75,"props":200,"children":202},{"className":201},[],[203],{"type":58,"value":204},"MODE",{"type":58,"value":206}," (A or B, from Step 2).",{"type":52,"tag":109,"props":208,"children":209},{},[210,227],{"type":52,"tag":67,"props":211,"children":212},{},[213,218,220,225],{"type":52,"tag":75,"props":214,"children":216},{"className":215},[],[217],{"type":58,"value":196},{"type":58,"value":219},", ",{"type":52,"tag":75,"props":221,"children":223},{"className":222},[],[224],{"type":58,"value":204},{"type":58,"value":226},", and the Path A\u002FB\u002FC names are internal labels for you only. Never say them to the user.",{"type":58,"value":228}," Describe choices in plain words instead (e.g. \"top up your account\" \u002F \"accountless wallet\"), never \"Mode B\" or \"Path A\".",{"type":52,"tag":230,"props":231,"children":232},"hr",{},[],{"type":52,"tag":98,"props":234,"children":236},{"id":235},"step-1-open-and-pick-the-setup",[237],{"type":58,"value":238},"Step 1 — Open and pick the setup",{"type":52,"tag":61,"props":240,"children":241},{},[242,246,248,254,256,261],{"type":52,"tag":67,"props":243,"children":244},{},[245],{"type":58,"value":147},{"type":58,"value":247}," (header: ",{"type":52,"tag":75,"props":249,"children":251},{"className":250},[],[252],{"type":58,"value":253},"Use x402",{"type":58,"value":255},") — put the explanation and the question both in the ",{"type":52,"tag":75,"props":257,"children":259},{"className":258},[],[260],{"type":58,"value":163},{"type":58,"value":262}," field, exactly:",{"type":52,"tag":264,"props":265,"children":266},"blockquote",{},[267,280],{"type":52,"tag":61,"props":268,"children":269},{},[270,272,278],{"type":58,"value":271},"x402 is a protocol from Coinbase that, instead of presenting an API key, allows you to use crypto to pay for API requests. x402 lets you pay Browser Use per request from a crypto wallet with USDC on Base — no signup, API key, or credit card needed, just a wallet. Setup takes a few minutes: get or make a wallet, add funds, save the key in ",{"type":52,"tag":75,"props":273,"children":275},{"className":274},[],[276],{"type":58,"value":277},".env",{"type":58,"value":279},", and test it.",{"type":52,"tag":61,"props":281,"children":282},{},[283],{"type":58,"value":284},"How do you want to use x402?",{"type":52,"tag":105,"props":286,"children":287},{},[288,298],{"type":52,"tag":109,"props":289,"children":290},{},[291,296],{"type":52,"tag":67,"props":292,"children":293},{},[294],{"type":58,"value":295},"Just use it",{"type":58,"value":297}," — Run Browser Use tasks, paid from your wallet, here in terminal by asking me. I set up the wallet and key.",{"type":52,"tag":109,"props":299,"children":300},{},[301,306,308,313],{"type":52,"tag":67,"props":302,"children":303},{},[304],{"type":58,"value":305},"Build it in",{"type":58,"value":307}," — You're coding an app and want x402 in it. I will help you install the SDK, save the key to your project's ",{"type":52,"tag":75,"props":309,"children":311},{"className":310},[],[312],{"type":58,"value":277},{"type":58,"value":314},", and add code.",{"type":52,"tag":61,"props":316,"children":317},{},[318,322,324,330,332,338],{"type":52,"tag":67,"props":319,"children":320},{},[321],{"type":58,"value":183},{"type":58,"value":323}," \"Just use it\" → ",{"type":52,"tag":75,"props":325,"children":327},{"className":326},[],[328],{"type":58,"value":329},"SETUP = A",{"type":58,"value":331},". \"Build it in\" → ",{"type":52,"tag":75,"props":333,"children":335},{"className":334},[],[336],{"type":58,"value":337},"SETUP = B",{"type":58,"value":339},".",{"type":52,"tag":230,"props":341,"children":342},{},[],{"type":52,"tag":98,"props":344,"children":346},{"id":345},"step-2-find-the-account-check-before-asking",[347],{"type":58,"value":348},"Step 2 — Find the account (check before asking)",{"type":52,"tag":61,"props":350,"children":351},{},[352,356],{"type":52,"tag":67,"props":353,"children":354},{},[355],{"type":58,"value":183},{"type":58,"value":357}," Look for an existing Browser Use API key, in this order. Don't say anything yet.",{"type":52,"tag":359,"props":360,"children":361},"ol",{},[362,373,392,419],{"type":52,"tag":109,"props":363,"children":364},{},[365,371],{"type":52,"tag":75,"props":366,"children":368},{"className":367},[],[369],{"type":58,"value":370},"BROWSER_USE_API_KEY",{"type":58,"value":372}," in the environment",{"type":52,"tag":109,"props":374,"children":375},{},[376,378,384,386],{"type":58,"value":377},"a ",{"type":52,"tag":75,"props":379,"children":381},{"className":380},[],[382],{"type":58,"value":383},"BROWSER_USE_API_KEY=",{"type":58,"value":385}," line in ",{"type":52,"tag":75,"props":387,"children":389},{"className":388},[],[390],{"type":58,"value":391},".\u002F.env",{"type":52,"tag":109,"props":393,"children":394},{},[395,401,403,409,411,417],{"type":52,"tag":75,"props":396,"children":398},{"className":397},[],[399],{"type":58,"value":400},"~\u002F.browser-use\u002Fconfig.json",{"type":58,"value":402}," (saved by ",{"type":52,"tag":75,"props":404,"children":406},{"className":405},[],[407],{"type":58,"value":408},"browser-use cloud login",{"type":58,"value":410}," \u002F ",{"type":52,"tag":75,"props":412,"children":414},{"className":413},[],[415],{"type":58,"value":416},"signup",{"type":58,"value":418},")",{"type":52,"tag":109,"props":420,"children":421},{},[422,428],{"type":52,"tag":75,"props":423,"children":425},{"className":424},[],[426],{"type":58,"value":427},"browser-use doctor",{"type":58,"value":429}," output, if the CLI is installed",{"type":52,"tag":61,"props":431,"children":432},{},[433],{"type":52,"tag":67,"props":434,"children":435},{},[436],{"type":58,"value":437},"If no key is found anywhere:",{"type":52,"tag":61,"props":439,"children":440},{},[441],{"type":52,"tag":67,"props":442,"children":443},{},[444],{"type":58,"value":118},{"type":52,"tag":264,"props":446,"children":447},{},[448],{"type":52,"tag":61,"props":449,"children":450},{},[451],{"type":58,"value":452},"No Browser Use key found, so I'll set this up accountless: the wallet is your identity, and the first payment makes a project named after it.",{"type":52,"tag":61,"props":454,"children":455},{},[456,460,462,468],{"type":52,"tag":67,"props":457,"children":458},{},[459],{"type":58,"value":183},{"type":58,"value":461}," ",{"type":52,"tag":75,"props":463,"children":465},{"className":464},[],[466],{"type":58,"value":467},"MODE = A",{"type":58,"value":469},". Go to Step 3.",{"type":52,"tag":61,"props":471,"children":472},{},[473],{"type":52,"tag":67,"props":474,"children":475},{},[476],{"type":58,"value":477},"If a key is found:",{"type":52,"tag":61,"props":479,"children":480},{},[481,485,486,492,494],{"type":52,"tag":67,"props":482,"children":483},{},[484],{"type":58,"value":147},{"type":58,"value":247},{"type":52,"tag":75,"props":487,"children":489},{"className":488},[],[490],{"type":58,"value":491},"Account",{"type":58,"value":493},") — question: ",{"type":52,"tag":75,"props":495,"children":497},{"className":496},[],[498],{"type":58,"value":499},"I found a Browser Use API key in \u003Clocation>. Where should the USDC credits go?",{"type":52,"tag":105,"props":501,"children":502},{},[503,513],{"type":52,"tag":109,"props":504,"children":505},{},[506,511],{"type":52,"tag":67,"props":507,"children":508},{},[509],{"type":58,"value":510},"Top up that account",{"type":58,"value":512}," — Credits go to your existing API key's project. Good if your free credits ran out, or you'd rather pay with crypto than a card.",{"type":52,"tag":109,"props":514,"children":515},{},[516,521],{"type":52,"tag":67,"props":517,"children":518},{},[519],{"type":58,"value":520},"Accountless wallet",{"type":58,"value":522}," — The wallet is a separate identity. The first payment makes a fresh project named after the wallet, apart from your existing account.",{"type":52,"tag":61,"props":524,"children":525},{},[526,530,532,538,540,545],{"type":52,"tag":67,"props":527,"children":528},{},[529],{"type":58,"value":183},{"type":58,"value":531}," \"Top up that account\" → ",{"type":52,"tag":75,"props":533,"children":535},{"className":534},[],[536],{"type":58,"value":537},"MODE = B",{"type":58,"value":539},". \"Accountless wallet\" → ",{"type":52,"tag":75,"props":541,"children":543},{"className":542},[],[544],{"type":58,"value":467},{"type":58,"value":339},{"type":52,"tag":230,"props":547,"children":548},{},[],{"type":52,"tag":98,"props":550,"children":552},{"id":551},"step-3-wallet",[553],{"type":58,"value":554},"Step 3 — Wallet",{"type":52,"tag":61,"props":556,"children":557},{},[558,562,563,569,570],{"type":52,"tag":67,"props":559,"children":560},{},[561],{"type":58,"value":147},{"type":58,"value":247},{"type":52,"tag":75,"props":564,"children":566},{"className":565},[],[567],{"type":58,"value":568},"Wallet",{"type":58,"value":493},{"type":52,"tag":75,"props":571,"children":573},{"className":572},[],[574],{"type":58,"value":575},"Do you have a wallet ready, or should I set one up?",{"type":52,"tag":105,"props":577,"children":578},{},[579,589,599],{"type":52,"tag":109,"props":580,"children":581},{},[582,587],{"type":52,"tag":67,"props":583,"children":584},{},[585],{"type":58,"value":586},"I have a funded wallet",{"type":58,"value":588}," — An EVM wallet (MetaMask, Rabby, Coinbase Wallet, Frame, Phantom, …) with USDC on Base mainnet.",{"type":52,"tag":109,"props":590,"children":591},{},[592,597],{"type":52,"tag":67,"props":593,"children":594},{},[595],{"type":58,"value":596},"Walk me through it",{"type":58,"value":598}," — I'll guide you through making a wallet, adding Base, and buying USDC.",{"type":52,"tag":109,"props":600,"children":601},{},[602,607],{"type":52,"tag":67,"props":603,"children":604},{},[605],{"type":58,"value":606},"Make a fresh one",{"type":58,"value":608}," — I'll generate a throwaway wallet for automation. You'll still need to fund it.",{"type":52,"tag":61,"props":610,"children":611},{},[612],{"type":58,"value":613},"Branch on the answer.",{"type":52,"tag":615,"props":616,"children":618},"h3",{"id":617},"path-a-i-have-a-funded-wallet",[619],{"type":58,"value":620},"Path A — \"I have a funded wallet\"",{"type":52,"tag":61,"props":622,"children":623},{},[624,628,630,635,637,643],{"type":52,"tag":67,"props":625,"children":626},{},[627],{"type":58,"value":183},{"type":58,"value":629}," Check ",{"type":52,"tag":75,"props":631,"children":633},{"className":632},[],[634],{"type":58,"value":277},{"type":58,"value":636}," is in ",{"type":52,"tag":75,"props":638,"children":640},{"className":639},[],[641],{"type":58,"value":642},".gitignore",{"type":58,"value":644},"; add it if missing.",{"type":52,"tag":61,"props":646,"children":647},{},[648,652,653,659,661,666],{"type":52,"tag":67,"props":649,"children":650},{},[651],{"type":58,"value":147},{"type":58,"value":247},{"type":52,"tag":75,"props":654,"children":656},{"className":655},[],[657],{"type":58,"value":658},"Add key",{"type":58,"value":660},") — put the note and the question both in the ",{"type":52,"tag":75,"props":662,"children":664},{"className":663},[],[665],{"type":58,"value":163},{"type":58,"value":667}," field:",{"type":52,"tag":264,"props":669,"children":670},{},[671],{"type":52,"tag":61,"props":672,"children":673},{},[674,676,681],{"type":58,"value":675},"Your wallet's private key needs to go into ",{"type":52,"tag":75,"props":677,"children":679},{"className":678},[],[680],{"type":58,"value":277},{"type":58,"value":682},". You can paste it here and I'll add it for you, or add it yourself. Heads up: anything pasted in chat is saved in the transcript, so for a high-value wallet, adding it yourself is a bit safer. How do you want to do it?",{"type":52,"tag":105,"props":684,"children":685},{},[686,703],{"type":52,"tag":109,"props":687,"children":688},{},[689,694,696,701],{"type":52,"tag":67,"props":690,"children":691},{},[692],{"type":58,"value":693},"Paste it here",{"type":58,"value":695}," — Paste your private key in the chat and I'll write it to ",{"type":52,"tag":75,"props":697,"children":699},{"className":698},[],[700],{"type":58,"value":277},{"type":58,"value":702}," for you.",{"type":52,"tag":109,"props":704,"children":705},{},[706,711,713,718],{"type":52,"tag":67,"props":707,"children":708},{},[709],{"type":58,"value":710},"I'll add it myself",{"type":58,"value":712}," — You add it to ",{"type":52,"tag":75,"props":714,"children":716},{"className":715},[],[717],{"type":58,"value":277},{"type":58,"value":719},", then send me just your public address.",{"type":52,"tag":61,"props":721,"children":722},{},[723],{"type":52,"tag":67,"props":724,"children":725},{},[726],{"type":58,"value":727},"If \"Paste it here\":",{"type":52,"tag":61,"props":729,"children":730},{},[731,735,737,743,745,750,752,757],{"type":52,"tag":67,"props":732,"children":733},{},[734],{"type":58,"value":183},{"type":58,"value":736}," Write ",{"type":52,"tag":75,"props":738,"children":740},{"className":739},[],[741],{"type":58,"value":742},"BROWSER_USE_X402_PRIVATE_KEY=\u003Cpasted key>",{"type":58,"value":744}," to ",{"type":52,"tag":75,"props":746,"children":748},{"className":747},[],[749],{"type":58,"value":277},{"type":58,"value":751}," (create the file if needed; make sure ",{"type":52,"tag":75,"props":753,"children":755},{"className":754},[],[756],{"type":58,"value":277},{"type":58,"value":758}," is gitignored). Never echo the key back or print it anywhere.",{"type":52,"tag":61,"props":760,"children":761},{},[762],{"type":52,"tag":67,"props":763,"children":764},{},[765],{"type":58,"value":118},{"type":52,"tag":264,"props":767,"children":768},{},[769],{"type":52,"tag":61,"props":770,"children":771},{},[772,774,779],{"type":58,"value":773},"Saved your key to ",{"type":52,"tag":75,"props":775,"children":777},{"className":776},[],[778],{"type":58,"value":277},{"type":58,"value":780}," — I won't print it back.",{"type":52,"tag":61,"props":782,"children":783},{},[784,788],{"type":52,"tag":67,"props":785,"children":786},{},[787],{"type":58,"value":183},{"type":58,"value":789}," Go to Step 4.",{"type":52,"tag":61,"props":791,"children":792},{},[793],{"type":52,"tag":67,"props":794,"children":795},{},[796],{"type":58,"value":797},"If \"I'll add it myself\":",{"type":52,"tag":61,"props":799,"children":800},{},[801],{"type":52,"tag":67,"props":802,"children":803},{},[804],{"type":58,"value":118},{"type":52,"tag":264,"props":806,"children":807},{},[808,828],{"type":52,"tag":61,"props":809,"children":810},{},[811,813,818,820,826],{"type":58,"value":812},"Add this line to your ",{"type":52,"tag":75,"props":814,"children":816},{"className":815},[],[817],{"type":58,"value":277},{"type":58,"value":819},", then send me your wallet's public address (the ",{"type":52,"tag":75,"props":821,"children":823},{"className":822},[],[824],{"type":58,"value":825},"0x…",{"type":58,"value":827}," one — safe to share):",{"type":52,"tag":829,"props":830,"children":834},"pre",{"className":831,"code":833,"language":58},[832],"language-text","BROWSER_USE_X402_PRIVATE_KEY=\u003Cyour private key>\n",[835],{"type":52,"tag":75,"props":836,"children":838},{"__ignoreMap":837},"",[839],{"type":58,"value":833},{"type":52,"tag":61,"props":841,"children":842},{},[843,847,849,855],{"type":52,"tag":67,"props":844,"children":845},{},[846],{"type":58,"value":183},{"type":58,"value":848}," When they send the address, check it matches ",{"type":52,"tag":75,"props":850,"children":852},{"className":851},[],[853],{"type":58,"value":854},"^0x[0-9a-fA-F]{40}$",{"type":58,"value":339},{"type":52,"tag":61,"props":857,"children":858},{},[859],{"type":52,"tag":67,"props":860,"children":861},{},[862],{"type":58,"value":118},{"type":52,"tag":264,"props":864,"children":865},{},[866],{"type":52,"tag":61,"props":867,"children":868},{},[869,871,877],{"type":58,"value":870},"Got it: ",{"type":52,"tag":75,"props":872,"children":874},{"className":873},[],[875],{"type":58,"value":876},"\u003Caddress>",{"type":58,"value":878},". That's a valid address.",{"type":52,"tag":61,"props":880,"children":881},{},[882,886],{"type":52,"tag":67,"props":883,"children":884},{},[885],{"type":58,"value":183},{"type":58,"value":789},{"type":52,"tag":615,"props":888,"children":890},{"id":889},"path-b-walk-me-through-it",[891],{"type":58,"value":892},"Path B — \"Walk me through it\"",{"type":52,"tag":61,"props":894,"children":895},{},[896],{"type":52,"tag":67,"props":897,"children":898},{},[899],{"type":58,"value":118},{"type":52,"tag":264,"props":901,"children":902},{},[903,963,971],{"type":52,"tag":359,"props":904,"children":905},{},[906,921,934,939,944],{"type":52,"tag":109,"props":907,"children":908},{},[909,911,919],{"type":58,"value":910},"Install MetaMask (or Rabby, Coinbase Wallet, Frame, Trust Wallet, Phantom, …) from the official site only: ",{"type":52,"tag":912,"props":913,"children":917},"a",{"href":914,"rel":915},"https:\u002F\u002Fmetamask.io",[916],"nofollow",[918],{"type":58,"value":914},{"type":58,"value":920},". Make a wallet, save the seed phrase offline, set a password.",{"type":52,"tag":109,"props":922,"children":923},{},[924,926,932],{"type":58,"value":925},"Add Base as a network. Open ",{"type":52,"tag":912,"props":927,"children":930},{"href":928,"rel":929},"https:\u002F\u002Fchainlist.org\u002Fchain\u002F8453",[916],[931],{"type":58,"value":928},{"type":58,"value":933}," → \"Connect Wallet\" → \"Add to MetaMask\", then approve it in your wallet.",{"type":52,"tag":109,"props":935,"children":936},{},[937],{"type":58,"value":938},"Click \"Buy\" in your wallet. Pick USDC, network Base, pay with card \u002F Apple Pay \u002F bank. The USDC lands straight in your wallet.",{"type":52,"tag":109,"props":940,"children":941},{},[942],{"type":58,"value":943},"Get the private key: account menu → Account details → Show private key → enter password → copy.",{"type":52,"tag":109,"props":945,"children":946},{},[947,949,954,956,961],{"type":58,"value":948},"Add it to your ",{"type":52,"tag":75,"props":950,"children":952},{"className":951},[],[953],{"type":58,"value":277},{"type":58,"value":955}," (make sure ",{"type":52,"tag":75,"props":957,"children":959},{"className":958},[],[960],{"type":58,"value":277},{"type":58,"value":962}," is gitignored):",{"type":52,"tag":829,"props":964,"children":966},{"className":965,"code":833,"language":58},[832],[967],{"type":52,"tag":75,"props":968,"children":969},{"__ignoreMap":837},[970],{"type":58,"value":833},{"type":52,"tag":359,"props":972,"children":974},{"start":973},6,[975],{"type":52,"tag":109,"props":976,"children":977},{},[978,980,985],{"type":58,"value":979},"Send me your wallet's public address (the ",{"type":52,"tag":75,"props":981,"children":983},{"className":982},[],[984],{"type":58,"value":825},{"type":58,"value":986}," one) so I can check it.",{"type":52,"tag":61,"props":988,"children":989},{},[990,994],{"type":52,"tag":67,"props":991,"children":992},{},[993],{"type":58,"value":183},{"type":58,"value":995}," Then follow Path A from the address check onward.",{"type":52,"tag":615,"props":997,"children":999},{"id":998},"path-c-make-a-fresh-one",[1000],{"type":58,"value":1001},"Path C — \"Make a fresh one\"",{"type":52,"tag":61,"props":1003,"children":1004},{},[1005,1009,1011,1016],{"type":52,"tag":67,"props":1006,"children":1007},{},[1008],{"type":58,"value":183},{"type":58,"value":1010}," Generate a wallet. Save the key to ",{"type":52,"tag":75,"props":1012,"children":1014},{"className":1013},[],[1015],{"type":58,"value":277},{"type":58,"value":1017},". Show the address only.",{"type":52,"tag":61,"props":1019,"children":1020},{},[1021],{"type":58,"value":1022},"Python:",{"type":52,"tag":829,"props":1024,"children":1028},{"className":1025,"code":1026,"language":1027,"meta":837,"style":837},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pip install eth-account\n","bash",[1029],{"type":52,"tag":75,"props":1030,"children":1031},{"__ignoreMap":837},[1032],{"type":52,"tag":1033,"props":1034,"children":1037},"span",{"class":1035,"line":1036},"line",1,[1038,1044,1050],{"type":52,"tag":1033,"props":1039,"children":1041},{"style":1040},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[1042],{"type":58,"value":1043},"pip",{"type":52,"tag":1033,"props":1045,"children":1047},{"style":1046},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[1048],{"type":58,"value":1049}," install",{"type":52,"tag":1033,"props":1051,"children":1052},{"style":1046},[1053],{"type":58,"value":1054}," eth-account\n",{"type":52,"tag":829,"props":1056,"children":1059},{"className":1057,"code":1058,"language":39,"meta":837,"style":837},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","from eth_account import Account\nacc = Account.create()\nprint(\"Address:\", acc.address)\nprint(\"Private key:\", acc.key.hex())\n",[1060],{"type":52,"tag":75,"props":1061,"children":1062},{"__ignoreMap":837},[1063,1071,1080,1089],{"type":52,"tag":1033,"props":1064,"children":1065},{"class":1035,"line":1036},[1066],{"type":52,"tag":1033,"props":1067,"children":1068},{},[1069],{"type":58,"value":1070},"from eth_account import Account\n",{"type":52,"tag":1033,"props":1072,"children":1074},{"class":1035,"line":1073},2,[1075],{"type":52,"tag":1033,"props":1076,"children":1077},{},[1078],{"type":58,"value":1079},"acc = Account.create()\n",{"type":52,"tag":1033,"props":1081,"children":1083},{"class":1035,"line":1082},3,[1084],{"type":52,"tag":1033,"props":1085,"children":1086},{},[1087],{"type":58,"value":1088},"print(\"Address:\", acc.address)\n",{"type":52,"tag":1033,"props":1090,"children":1092},{"class":1035,"line":1091},4,[1093],{"type":52,"tag":1033,"props":1094,"children":1095},{},[1096],{"type":58,"value":1097},"print(\"Private key:\", acc.key.hex())\n",{"type":52,"tag":61,"props":1099,"children":1100},{},[1101],{"type":58,"value":1102},"TypeScript:",{"type":52,"tag":829,"props":1104,"children":1106},{"className":1025,"code":1105,"language":1027,"meta":837,"style":837},"npm install viem\n",[1107],{"type":52,"tag":75,"props":1108,"children":1109},{"__ignoreMap":837},[1110],{"type":52,"tag":1033,"props":1111,"children":1112},{"class":1035,"line":1036},[1113,1118,1122],{"type":52,"tag":1033,"props":1114,"children":1115},{"style":1040},[1116],{"type":58,"value":1117},"npm",{"type":52,"tag":1033,"props":1119,"children":1120},{"style":1046},[1121],{"type":58,"value":1049},{"type":52,"tag":1033,"props":1123,"children":1124},{"style":1046},[1125],{"type":58,"value":1126}," viem\n",{"type":52,"tag":829,"props":1128,"children":1132},{"className":1129,"code":1130,"language":1131,"meta":837,"style":837},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { generatePrivateKey, privateKeyToAccount } from \"viem\u002Faccounts\";\nconst key = generatePrivateKey();\nconsole.log(\"Address:\", privateKeyToAccount(key).address);\nconsole.log(\"Private key:\", key);\n","typescript",[1133],{"type":52,"tag":75,"props":1134,"children":1135},{"__ignoreMap":837},[1136,1197,1230,1291],{"type":52,"tag":1033,"props":1137,"children":1138},{"class":1035,"line":1036},[1139,1145,1151,1157,1162,1167,1172,1177,1182,1187,1192],{"type":52,"tag":1033,"props":1140,"children":1142},{"style":1141},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[1143],{"type":58,"value":1144},"import",{"type":52,"tag":1033,"props":1146,"children":1148},{"style":1147},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[1149],{"type":58,"value":1150}," {",{"type":52,"tag":1033,"props":1152,"children":1154},{"style":1153},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[1155],{"type":58,"value":1156}," generatePrivateKey",{"type":52,"tag":1033,"props":1158,"children":1159},{"style":1147},[1160],{"type":58,"value":1161},",",{"type":52,"tag":1033,"props":1163,"children":1164},{"style":1153},[1165],{"type":58,"value":1166}," privateKeyToAccount",{"type":52,"tag":1033,"props":1168,"children":1169},{"style":1147},[1170],{"type":58,"value":1171}," }",{"type":52,"tag":1033,"props":1173,"children":1174},{"style":1141},[1175],{"type":58,"value":1176}," from",{"type":52,"tag":1033,"props":1178,"children":1179},{"style":1147},[1180],{"type":58,"value":1181}," \"",{"type":52,"tag":1033,"props":1183,"children":1184},{"style":1046},[1185],{"type":58,"value":1186},"viem\u002Faccounts",{"type":52,"tag":1033,"props":1188,"children":1189},{"style":1147},[1190],{"type":58,"value":1191},"\"",{"type":52,"tag":1033,"props":1193,"children":1194},{"style":1147},[1195],{"type":58,"value":1196},";\n",{"type":52,"tag":1033,"props":1198,"children":1199},{"class":1035,"line":1073},[1200,1206,1211,1216,1221,1226],{"type":52,"tag":1033,"props":1201,"children":1203},{"style":1202},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[1204],{"type":58,"value":1205},"const",{"type":52,"tag":1033,"props":1207,"children":1208},{"style":1153},[1209],{"type":58,"value":1210}," key ",{"type":52,"tag":1033,"props":1212,"children":1213},{"style":1147},[1214],{"type":58,"value":1215},"=",{"type":52,"tag":1033,"props":1217,"children":1219},{"style":1218},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[1220],{"type":58,"value":1156},{"type":52,"tag":1033,"props":1222,"children":1223},{"style":1153},[1224],{"type":58,"value":1225},"()",{"type":52,"tag":1033,"props":1227,"children":1228},{"style":1147},[1229],{"type":58,"value":1196},{"type":52,"tag":1033,"props":1231,"children":1232},{"class":1035,"line":1082},[1233,1238,1242,1247,1252,1256,1261,1265,1269,1273,1278,1282,1287],{"type":52,"tag":1033,"props":1234,"children":1235},{"style":1153},[1236],{"type":58,"value":1237},"console",{"type":52,"tag":1033,"props":1239,"children":1240},{"style":1147},[1241],{"type":58,"value":339},{"type":52,"tag":1033,"props":1243,"children":1244},{"style":1218},[1245],{"type":58,"value":1246},"log",{"type":52,"tag":1033,"props":1248,"children":1249},{"style":1153},[1250],{"type":58,"value":1251},"(",{"type":52,"tag":1033,"props":1253,"children":1254},{"style":1147},[1255],{"type":58,"value":1191},{"type":52,"tag":1033,"props":1257,"children":1258},{"style":1046},[1259],{"type":58,"value":1260},"Address:",{"type":52,"tag":1033,"props":1262,"children":1263},{"style":1147},[1264],{"type":58,"value":1191},{"type":52,"tag":1033,"props":1266,"children":1267},{"style":1147},[1268],{"type":58,"value":1161},{"type":52,"tag":1033,"props":1270,"children":1271},{"style":1218},[1272],{"type":58,"value":1166},{"type":52,"tag":1033,"props":1274,"children":1275},{"style":1153},[1276],{"type":58,"value":1277},"(key)",{"type":52,"tag":1033,"props":1279,"children":1280},{"style":1147},[1281],{"type":58,"value":339},{"type":52,"tag":1033,"props":1283,"children":1284},{"style":1153},[1285],{"type":58,"value":1286},"address)",{"type":52,"tag":1033,"props":1288,"children":1289},{"style":1147},[1290],{"type":58,"value":1196},{"type":52,"tag":1033,"props":1292,"children":1293},{"class":1035,"line":1091},[1294,1298,1302,1306,1310,1314,1319,1323,1327,1332],{"type":52,"tag":1033,"props":1295,"children":1296},{"style":1153},[1297],{"type":58,"value":1237},{"type":52,"tag":1033,"props":1299,"children":1300},{"style":1147},[1301],{"type":58,"value":339},{"type":52,"tag":1033,"props":1303,"children":1304},{"style":1218},[1305],{"type":58,"value":1246},{"type":52,"tag":1033,"props":1307,"children":1308},{"style":1153},[1309],{"type":58,"value":1251},{"type":52,"tag":1033,"props":1311,"children":1312},{"style":1147},[1313],{"type":58,"value":1191},{"type":52,"tag":1033,"props":1315,"children":1316},{"style":1046},[1317],{"type":58,"value":1318},"Private key:",{"type":52,"tag":1033,"props":1320,"children":1321},{"style":1147},[1322],{"type":58,"value":1191},{"type":52,"tag":1033,"props":1324,"children":1325},{"style":1147},[1326],{"type":58,"value":1161},{"type":52,"tag":1033,"props":1328,"children":1329},{"style":1153},[1330],{"type":58,"value":1331}," key)",{"type":52,"tag":1033,"props":1333,"children":1334},{"style":1147},[1335],{"type":58,"value":1196},{"type":52,"tag":61,"props":1337,"children":1338},{},[1339],{"type":52,"tag":67,"props":1340,"children":1341},{},[1342],{"type":58,"value":118},{"type":52,"tag":264,"props":1344,"children":1345},{},[1346],{"type":52,"tag":61,"props":1347,"children":1348},{},[1349,1351,1356,1358,1363],{"type":58,"value":1350},"Made a fresh wallet. Your public address is ",{"type":52,"tag":75,"props":1352,"children":1354},{"className":1353},[],[1355],{"type":58,"value":876},{"type":58,"value":1357},", and I've saved the private key to ",{"type":52,"tag":75,"props":1359,"children":1361},{"className":1360},[],[1362],{"type":58,"value":277},{"type":58,"value":1364},". Now it needs funds.",{"type":52,"tag":61,"props":1366,"children":1367},{},[1368,1372],{"type":52,"tag":67,"props":1369,"children":1370},{},[1371],{"type":58,"value":183},{"type":58,"value":1373}," Go to Step 4 (funding).",{"type":52,"tag":230,"props":1375,"children":1376},{},[],{"type":52,"tag":98,"props":1378,"children":1380},{"id":1379},"step-4-add-funds",[1381],{"type":58,"value":1382},"Step 4 — Add funds",{"type":52,"tag":61,"props":1384,"children":1385},{},[1386],{"type":52,"tag":67,"props":1387,"children":1388},{},[1389],{"type":58,"value":1390},"If Path A or B (already funded):",{"type":52,"tag":61,"props":1392,"children":1393},{},[1394],{"type":52,"tag":67,"props":1395,"children":1396},{},[1397],{"type":58,"value":118},{"type":52,"tag":264,"props":1399,"children":1400},{},[1401],{"type":52,"tag":61,"props":1402,"children":1403},{},[1404],{"type":58,"value":1405},"Your wallet's already funded, so we'll skip ahead to the test.",{"type":52,"tag":61,"props":1407,"children":1408},{},[1409,1413],{"type":52,"tag":67,"props":1410,"children":1411},{},[1412],{"type":58,"value":183},{"type":58,"value":1414}," Go to Step 5.",{"type":52,"tag":61,"props":1416,"children":1417},{},[1418],{"type":52,"tag":67,"props":1419,"children":1420},{},[1421],{"type":58,"value":1422},"If Path C:",{"type":52,"tag":61,"props":1424,"children":1425},{},[1426],{"type":52,"tag":67,"props":1427,"children":1428},{},[1429],{"type":58,"value":118},{"type":52,"tag":264,"props":1431,"children":1432},{},[1433,1438,1458],{"type":52,"tag":61,"props":1434,"children":1435},{},[1436],{"type":58,"value":1437},"Two ways to get USDC into your wallet on Base:",{"type":52,"tag":105,"props":1439,"children":1440},{},[1441,1446],{"type":52,"tag":109,"props":1442,"children":1443},{},[1444],{"type":58,"value":1445},"In-wallet Buy button (easiest): click \"Buy\", pick USDC, set the network to Base, pay with a card. No exchange needed.",{"type":52,"tag":109,"props":1447,"children":1448},{},[1449,1451,1456],{"type":58,"value":1450},"From an exchange: send USDC to ",{"type":52,"tag":75,"props":1452,"children":1454},{"className":1453},[],[1455],{"type":58,"value":876},{"type":58,"value":1457}," and pick \"Base\" as the network — not Ethereum, which costs $5–$20 in fees.",{"type":52,"tag":61,"props":1459,"children":1460},{},[1461],{"type":58,"value":1462},"Add at least $20: that covers the $1 test plus a few real tasks. I'll watch the balance and tell you when it lands.",{"type":52,"tag":61,"props":1464,"children":1465},{},[1466,1470],{"type":52,"tag":67,"props":1467,"children":1468},{},[1469],{"type":58,"value":183},{"type":58,"value":1471}," Check the on-chain balance every 5s with Base's public RPC:",{"type":52,"tag":829,"props":1473,"children":1475},{"className":1025,"code":1474,"language":1027,"meta":837,"style":837},"PADDED=$(printf \"%064s\" \"${WALLET_ADDR:2}\" | tr ' ' '0')\ncurl -s https:\u002F\u002Fmainnet.base.org \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d \"{\\\"jsonrpc\\\":\\\"2.0\\\",\\\"method\\\":\\\"eth_call\\\",\\\"params\\\":[{\\\"to\\\":\\\"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\\\",\\\"data\\\":\\\"0x70a08231${PADDED}\\\"},\\\"latest\\\"],\\\"id\\\":1}\"\n",[1476],{"type":52,"tag":75,"props":1477,"children":1478},{"__ignoreMap":837},[1479,1573,1596,1621],{"type":52,"tag":1033,"props":1480,"children":1481},{"class":1035,"line":1036},[1482,1487,1492,1497,1501,1506,1510,1515,1520,1525,1530,1535,1540,1545,1550,1554,1558,1563,1568],{"type":52,"tag":1033,"props":1483,"children":1484},{"style":1153},[1485],{"type":58,"value":1486},"PADDED",{"type":52,"tag":1033,"props":1488,"children":1489},{"style":1147},[1490],{"type":58,"value":1491},"=$(",{"type":52,"tag":1033,"props":1493,"children":1494},{"style":1218},[1495],{"type":58,"value":1496},"printf",{"type":52,"tag":1033,"props":1498,"children":1499},{"style":1147},[1500],{"type":58,"value":1181},{"type":52,"tag":1033,"props":1502,"children":1503},{"style":1046},[1504],{"type":58,"value":1505},"%064s",{"type":52,"tag":1033,"props":1507,"children":1508},{"style":1147},[1509],{"type":58,"value":1191},{"type":52,"tag":1033,"props":1511,"children":1512},{"style":1147},[1513],{"type":58,"value":1514}," \"${",{"type":52,"tag":1033,"props":1516,"children":1517},{"style":1153},[1518],{"type":58,"value":1519},"WALLET_ADDR",{"type":52,"tag":1033,"props":1521,"children":1522},{"style":1147},[1523],{"type":58,"value":1524},":",{"type":52,"tag":1033,"props":1526,"children":1527},{"style":1153},[1528],{"type":58,"value":1529},"2",{"type":52,"tag":1033,"props":1531,"children":1532},{"style":1147},[1533],{"type":58,"value":1534},"}\"",{"type":52,"tag":1033,"props":1536,"children":1537},{"style":1147},[1538],{"type":58,"value":1539}," |",{"type":52,"tag":1033,"props":1541,"children":1542},{"style":1040},[1543],{"type":58,"value":1544}," tr",{"type":52,"tag":1033,"props":1546,"children":1547},{"style":1147},[1548],{"type":58,"value":1549}," '",{"type":52,"tag":1033,"props":1551,"children":1552},{"style":1147},[1553],{"type":58,"value":1549},{"type":52,"tag":1033,"props":1555,"children":1556},{"style":1147},[1557],{"type":58,"value":1549},{"type":52,"tag":1033,"props":1559,"children":1560},{"style":1046},[1561],{"type":58,"value":1562},"0",{"type":52,"tag":1033,"props":1564,"children":1565},{"style":1147},[1566],{"type":58,"value":1567},"'",{"type":52,"tag":1033,"props":1569,"children":1570},{"style":1147},[1571],{"type":58,"value":1572},")\n",{"type":52,"tag":1033,"props":1574,"children":1575},{"class":1035,"line":1073},[1576,1581,1586,1591],{"type":52,"tag":1033,"props":1577,"children":1578},{"style":1040},[1579],{"type":58,"value":1580},"curl",{"type":52,"tag":1033,"props":1582,"children":1583},{"style":1046},[1584],{"type":58,"value":1585}," -s",{"type":52,"tag":1033,"props":1587,"children":1588},{"style":1046},[1589],{"type":58,"value":1590}," https:\u002F\u002Fmainnet.base.org",{"type":52,"tag":1033,"props":1592,"children":1593},{"style":1153},[1594],{"type":58,"value":1595}," \\\n",{"type":52,"tag":1033,"props":1597,"children":1598},{"class":1035,"line":1082},[1599,1604,1608,1613,1617],{"type":52,"tag":1033,"props":1600,"children":1601},{"style":1046},[1602],{"type":58,"value":1603},"  -H",{"type":52,"tag":1033,"props":1605,"children":1606},{"style":1147},[1607],{"type":58,"value":1181},{"type":52,"tag":1033,"props":1609,"children":1610},{"style":1046},[1611],{"type":58,"value":1612},"Content-Type: application\u002Fjson",{"type":52,"tag":1033,"props":1614,"children":1615},{"style":1147},[1616],{"type":58,"value":1191},{"type":52,"tag":1033,"props":1618,"children":1619},{"style":1153},[1620],{"type":58,"value":1595},{"type":52,"tag":1033,"props":1622,"children":1623},{"class":1035,"line":1091},[1624,1629,1633,1638,1643,1648,1652,1656,1660,1665,1669,1673,1677,1682,1686,1690,1694,1699,1703,1707,1711,1716,1720,1725,1729,1734,1738,1742,1746,1751,1755,1759,1763,1768,1772,1776,1780,1785,1790,1794,1799,1803,1808,1812,1817,1821,1826,1830,1835,1839,1844],{"type":52,"tag":1033,"props":1625,"children":1626},{"style":1046},[1627],{"type":58,"value":1628},"  -d",{"type":52,"tag":1033,"props":1630,"children":1631},{"style":1147},[1632],{"type":58,"value":1181},{"type":52,"tag":1033,"props":1634,"children":1635},{"style":1046},[1636],{"type":58,"value":1637},"{",{"type":52,"tag":1033,"props":1639,"children":1640},{"style":1153},[1641],{"type":58,"value":1642},"\\\"",{"type":52,"tag":1033,"props":1644,"children":1645},{"style":1046},[1646],{"type":58,"value":1647},"jsonrpc",{"type":52,"tag":1033,"props":1649,"children":1650},{"style":1153},[1651],{"type":58,"value":1642},{"type":52,"tag":1033,"props":1653,"children":1654},{"style":1046},[1655],{"type":58,"value":1524},{"type":52,"tag":1033,"props":1657,"children":1658},{"style":1153},[1659],{"type":58,"value":1642},{"type":52,"tag":1033,"props":1661,"children":1662},{"style":1046},[1663],{"type":58,"value":1664},"2.0",{"type":52,"tag":1033,"props":1666,"children":1667},{"style":1153},[1668],{"type":58,"value":1642},{"type":52,"tag":1033,"props":1670,"children":1671},{"style":1046},[1672],{"type":58,"value":1161},{"type":52,"tag":1033,"props":1674,"children":1675},{"style":1153},[1676],{"type":58,"value":1642},{"type":52,"tag":1033,"props":1678,"children":1679},{"style":1046},[1680],{"type":58,"value":1681},"method",{"type":52,"tag":1033,"props":1683,"children":1684},{"style":1153},[1685],{"type":58,"value":1642},{"type":52,"tag":1033,"props":1687,"children":1688},{"style":1046},[1689],{"type":58,"value":1524},{"type":52,"tag":1033,"props":1691,"children":1692},{"style":1153},[1693],{"type":58,"value":1642},{"type":52,"tag":1033,"props":1695,"children":1696},{"style":1046},[1697],{"type":58,"value":1698},"eth_call",{"type":52,"tag":1033,"props":1700,"children":1701},{"style":1153},[1702],{"type":58,"value":1642},{"type":52,"tag":1033,"props":1704,"children":1705},{"style":1046},[1706],{"type":58,"value":1161},{"type":52,"tag":1033,"props":1708,"children":1709},{"style":1153},[1710],{"type":58,"value":1642},{"type":52,"tag":1033,"props":1712,"children":1713},{"style":1046},[1714],{"type":58,"value":1715},"params",{"type":52,"tag":1033,"props":1717,"children":1718},{"style":1153},[1719],{"type":58,"value":1642},{"type":52,"tag":1033,"props":1721,"children":1722},{"style":1046},[1723],{"type":58,"value":1724},":[{",{"type":52,"tag":1033,"props":1726,"children":1727},{"style":1153},[1728],{"type":58,"value":1642},{"type":52,"tag":1033,"props":1730,"children":1731},{"style":1046},[1732],{"type":58,"value":1733},"to",{"type":52,"tag":1033,"props":1735,"children":1736},{"style":1153},[1737],{"type":58,"value":1642},{"type":52,"tag":1033,"props":1739,"children":1740},{"style":1046},[1741],{"type":58,"value":1524},{"type":52,"tag":1033,"props":1743,"children":1744},{"style":1153},[1745],{"type":58,"value":1642},{"type":52,"tag":1033,"props":1747,"children":1748},{"style":1046},[1749],{"type":58,"value":1750},"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",{"type":52,"tag":1033,"props":1752,"children":1753},{"style":1153},[1754],{"type":58,"value":1642},{"type":52,"tag":1033,"props":1756,"children":1757},{"style":1046},[1758],{"type":58,"value":1161},{"type":52,"tag":1033,"props":1760,"children":1761},{"style":1153},[1762],{"type":58,"value":1642},{"type":52,"tag":1033,"props":1764,"children":1765},{"style":1046},[1766],{"type":58,"value":1767},"data",{"type":52,"tag":1033,"props":1769,"children":1770},{"style":1153},[1771],{"type":58,"value":1642},{"type":52,"tag":1033,"props":1773,"children":1774},{"style":1046},[1775],{"type":58,"value":1524},{"type":52,"tag":1033,"props":1777,"children":1778},{"style":1153},[1779],{"type":58,"value":1642},{"type":52,"tag":1033,"props":1781,"children":1782},{"style":1046},[1783],{"type":58,"value":1784},"0x70a08231",{"type":52,"tag":1033,"props":1786,"children":1787},{"style":1147},[1788],{"type":58,"value":1789},"${",{"type":52,"tag":1033,"props":1791,"children":1792},{"style":1153},[1793],{"type":58,"value":1486},{"type":52,"tag":1033,"props":1795,"children":1796},{"style":1147},[1797],{"type":58,"value":1798},"}",{"type":52,"tag":1033,"props":1800,"children":1801},{"style":1153},[1802],{"type":58,"value":1642},{"type":52,"tag":1033,"props":1804,"children":1805},{"style":1046},[1806],{"type":58,"value":1807},"},",{"type":52,"tag":1033,"props":1809,"children":1810},{"style":1153},[1811],{"type":58,"value":1642},{"type":52,"tag":1033,"props":1813,"children":1814},{"style":1046},[1815],{"type":58,"value":1816},"latest",{"type":52,"tag":1033,"props":1818,"children":1819},{"style":1153},[1820],{"type":58,"value":1642},{"type":52,"tag":1033,"props":1822,"children":1823},{"style":1046},[1824],{"type":58,"value":1825},"],",{"type":52,"tag":1033,"props":1827,"children":1828},{"style":1153},[1829],{"type":58,"value":1642},{"type":52,"tag":1033,"props":1831,"children":1832},{"style":1046},[1833],{"type":58,"value":1834},"id",{"type":52,"tag":1033,"props":1836,"children":1837},{"style":1153},[1838],{"type":58,"value":1642},{"type":52,"tag":1033,"props":1840,"children":1841},{"style":1046},[1842],{"type":58,"value":1843},":1}",{"type":52,"tag":1033,"props":1845,"children":1846},{"style":1147},[1847],{"type":58,"value":1848},"\"\n",{"type":52,"tag":61,"props":1850,"children":1851},{},[1852,1854,1860,1862,1868],{"type":58,"value":1853},"Read ",{"type":52,"tag":75,"props":1855,"children":1857},{"className":1856},[],[1858],{"type":58,"value":1859},"result",{"type":58,"value":1861}," as a hex number; divide by ",{"type":52,"tag":75,"props":1863,"children":1865},{"className":1864},[],[1866],{"type":58,"value":1867},"1_000_000",{"type":58,"value":1869}," (USDC has 6 decimals). Stop once it's $20 or more.",{"type":52,"tag":61,"props":1871,"children":1872},{},[1873],{"type":52,"tag":67,"props":1874,"children":1875},{},[1876],{"type":58,"value":118},{"type":52,"tag":264,"props":1878,"children":1879},{},[1880],{"type":52,"tag":61,"props":1881,"children":1882},{},[1883,1885],{"type":58,"value":1884},"Funded — I see $",{"type":52,"tag":1886,"props":1887,"children":1888},"amount",{},[1889],{"type":58,"value":1890}," on Base. Next, a quick test.",{"type":52,"tag":230,"props":1892,"children":1893},{},[],{"type":52,"tag":98,"props":1895,"children":1897},{"id":1896},"step-5-test-run-1",[1898],{"type":58,"value":1899},"Step 5 — Test run (~$1)",{"type":52,"tag":61,"props":1901,"children":1902},{},[1903,1907,1909,1914,1916,1921,1923,1929,1931,1937,1939,1945,1946,1952,1953,1959],{"type":52,"tag":67,"props":1904,"children":1905},{},[1906],{"type":58,"value":183},{"type":58,"value":1908}," If ",{"type":52,"tag":75,"props":1910,"children":1912},{"className":1911},[],[1913],{"type":58,"value":329},{"type":58,"value":1915},", make sure the SDK is installed where you'll run scripts (default Python). If ",{"type":52,"tag":75,"props":1917,"children":1919},{"className":1918},[],[1920],{"type":58,"value":337},{"type":58,"value":1922},", install it into the project in the project's language — work out the language from the cwd (",{"type":52,"tag":75,"props":1924,"children":1926},{"className":1925},[],[1927],{"type":58,"value":1928},"package.json",{"type":58,"value":1930},"\u002F",{"type":52,"tag":75,"props":1932,"children":1934},{"className":1933},[],[1935],{"type":58,"value":1936},"tsconfig.json",{"type":58,"value":1938}," → TypeScript; ",{"type":52,"tag":75,"props":1940,"children":1942},{"className":1941},[],[1943],{"type":58,"value":1944},"pyproject.toml",{"type":58,"value":1930},{"type":52,"tag":75,"props":1947,"children":1949},{"className":1948},[],[1950],{"type":58,"value":1951},"requirements.txt",{"type":58,"value":1930},{"type":52,"tag":75,"props":1954,"children":1956},{"className":1955},[],[1957],{"type":58,"value":1958},"*.py",{"type":58,"value":1960}," → Python; ask only if you can't tell):",{"type":52,"tag":829,"props":1962,"children":1964},{"className":1025,"code":1963,"language":1027,"meta":837,"style":837},"# Python (needs 3.10+ for the x402 extra)\npip install \"browser-use-sdk[x402]\"\n# TypeScript\nnpm install browser-use-sdk @x402\u002Ffetch @x402\u002Fevm viem\n",[1965],{"type":52,"tag":75,"props":1966,"children":1967},{"__ignoreMap":837},[1968,1977,2001,2009],{"type":52,"tag":1033,"props":1969,"children":1970},{"class":1035,"line":1036},[1971],{"type":52,"tag":1033,"props":1972,"children":1974},{"style":1973},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[1975],{"type":58,"value":1976},"# Python (needs 3.10+ for the x402 extra)\n",{"type":52,"tag":1033,"props":1978,"children":1979},{"class":1035,"line":1073},[1980,1984,1988,1992,1997],{"type":52,"tag":1033,"props":1981,"children":1982},{"style":1040},[1983],{"type":58,"value":1043},{"type":52,"tag":1033,"props":1985,"children":1986},{"style":1046},[1987],{"type":58,"value":1049},{"type":52,"tag":1033,"props":1989,"children":1990},{"style":1147},[1991],{"type":58,"value":1181},{"type":52,"tag":1033,"props":1993,"children":1994},{"style":1046},[1995],{"type":58,"value":1996},"browser-use-sdk[x402]",{"type":52,"tag":1033,"props":1998,"children":1999},{"style":1147},[2000],{"type":58,"value":1848},{"type":52,"tag":1033,"props":2002,"children":2003},{"class":1035,"line":1082},[2004],{"type":52,"tag":1033,"props":2005,"children":2006},{"style":1973},[2007],{"type":58,"value":2008},"# TypeScript\n",{"type":52,"tag":1033,"props":2010,"children":2011},{"class":1035,"line":1091},[2012,2016,2020,2025,2030,2035],{"type":52,"tag":1033,"props":2013,"children":2014},{"style":1040},[2015],{"type":58,"value":1117},{"type":52,"tag":1033,"props":2017,"children":2018},{"style":1046},[2019],{"type":58,"value":1049},{"type":52,"tag":1033,"props":2021,"children":2022},{"style":1046},[2023],{"type":58,"value":2024}," browser-use-sdk",{"type":52,"tag":1033,"props":2026,"children":2027},{"style":1046},[2028],{"type":58,"value":2029}," @x402\u002Ffetch",{"type":52,"tag":1033,"props":2031,"children":2032},{"style":1046},[2033],{"type":58,"value":2034}," @x402\u002Fevm",{"type":52,"tag":1033,"props":2036,"children":2037},{"style":1046},[2038],{"type":58,"value":1126},{"type":52,"tag":61,"props":2040,"children":2041},{},[2042,2046,2047,2053,2054],{"type":52,"tag":67,"props":2043,"children":2044},{},[2045],{"type":58,"value":147},{"type":58,"value":247},{"type":52,"tag":75,"props":2048,"children":2050},{"className":2049},[],[2051],{"type":58,"value":2052},"Test run",{"type":58,"value":493},{"type":52,"tag":75,"props":2055,"children":2057},{"className":2056},[],[2058],{"type":58,"value":2059},"Ready to test? This spends exactly $1 USDC from your wallet to check payment + run work end to end.",{"type":52,"tag":105,"props":2061,"children":2062},{},[2063,2073,2083],{"type":52,"tag":109,"props":2064,"children":2065},{},[2066,2071],{"type":52,"tag":67,"props":2067,"children":2068},{},[2069],{"type":58,"value":2070},"Use the default task",{"type":58,"value":2072}," — \"Go to example.com and tell me the heading text.\" (~5 seconds, cheap)",{"type":52,"tag":109,"props":2074,"children":2075},{},[2076,2081],{"type":52,"tag":67,"props":2077,"children":2078},{},[2079],{"type":58,"value":2080},"I'll give you a task",{"type":58,"value":2082}," — Tell me a short task to run instead.",{"type":52,"tag":109,"props":2084,"children":2085},{},[2086,2091],{"type":52,"tag":67,"props":2087,"children":2088},{},[2089],{"type":58,"value":2090},"Skip the test",{"type":58,"value":2092}," — Skip the test and go straight to using x402.",{"type":52,"tag":61,"props":2094,"children":2095},{},[2096],{"type":52,"tag":67,"props":2097,"children":2098},{},[2099],{"type":58,"value":183},{"type":52,"tag":105,"props":2101,"children":2102},{},[2103,2121,2126],{"type":52,"tag":109,"props":2104,"children":2105},{},[2106,2108,2112,2113,2119],{"type":58,"value":2107},"\"I'll give you a task\" → ",{"type":52,"tag":67,"props":2109,"children":2110},{},[2111],{"type":58,"value":118},{"type":58,"value":461},{"type":52,"tag":75,"props":2114,"children":2116},{"className":2115},[],[2117],{"type":58,"value":2118},"What's the task? Keep it short.",{"type":58,"value":2120}," Wait for it.",{"type":52,"tag":109,"props":2122,"children":2123},{},[2124],{"type":58,"value":2125},"\"Skip the test\" → go to Step 6.",{"type":52,"tag":109,"props":2127,"children":2128},{},[2129],{"type":58,"value":2130},"Otherwise use the default task.",{"type":52,"tag":61,"props":2132,"children":2133},{},[2134,2138,2140,2146],{"type":52,"tag":67,"props":2135,"children":2136},{},[2137],{"type":58,"value":183},{"type":58,"value":2139}," Run the test. Use the raw x402 client with ",{"type":52,"tag":75,"props":2141,"children":2143},{"className":2142},[],[2144],{"type":58,"value":2145},"max_value",{"type":58,"value":2147}," of $1.50 so it pays $1, not the $5 the SDK uses by default:",{"type":52,"tag":829,"props":2149,"children":2151},{"className":1057,"code":2150,"language":39,"meta":837,"style":837},"import asyncio, os\nfrom decimal import Decimal\nfrom x402 import x402Client\nfrom x402.http.clients import x402HttpxClient\nfrom x402.mechanisms.evm import EthAccountSigner\nfrom x402.mechanisms.evm.exact.register import register_exact_evm_client\nfrom eth_account import Account\n\nasync def main():\n    client = x402Client()\n    register_exact_evm_client(\n        client,\n        EthAccountSigner(Account.from_key(os.environ[\"BROWSER_USE_X402_PRIVATE_KEY\"])),\n    )\n    # max_value caps the spend per request — picks the $1 option over the $5 default.\n    async with x402HttpxClient(client, max_value=Decimal(\"1.5\"), timeout=180.0) as http:\n        resp = await http.post(\n            \"https:\u002F\u002Fx402.api.browser-use.com\u002Fapi\u002Fv3\u002Fsessions\",\n            json={\"task\": \"\u003Cthe task>\"},\n        )\n        print(resp.status_code, resp.json())\n\nasyncio.run(main())\n",[2152],{"type":52,"tag":75,"props":2153,"children":2154},{"__ignoreMap":837},[2155,2163,2171,2179,2187,2196,2204,2212,2222,2231,2240,2249,2258,2267,2276,2285,2294,2303,2312,2321,2330,2339,2347],{"type":52,"tag":1033,"props":2156,"children":2157},{"class":1035,"line":1036},[2158],{"type":52,"tag":1033,"props":2159,"children":2160},{},[2161],{"type":58,"value":2162},"import asyncio, os\n",{"type":52,"tag":1033,"props":2164,"children":2165},{"class":1035,"line":1073},[2166],{"type":52,"tag":1033,"props":2167,"children":2168},{},[2169],{"type":58,"value":2170},"from decimal import Decimal\n",{"type":52,"tag":1033,"props":2172,"children":2173},{"class":1035,"line":1082},[2174],{"type":52,"tag":1033,"props":2175,"children":2176},{},[2177],{"type":58,"value":2178},"from x402 import x402Client\n",{"type":52,"tag":1033,"props":2180,"children":2181},{"class":1035,"line":1091},[2182],{"type":52,"tag":1033,"props":2183,"children":2184},{},[2185],{"type":58,"value":2186},"from x402.http.clients import x402HttpxClient\n",{"type":52,"tag":1033,"props":2188,"children":2190},{"class":1035,"line":2189},5,[2191],{"type":52,"tag":1033,"props":2192,"children":2193},{},[2194],{"type":58,"value":2195},"from x402.mechanisms.evm import EthAccountSigner\n",{"type":52,"tag":1033,"props":2197,"children":2198},{"class":1035,"line":973},[2199],{"type":52,"tag":1033,"props":2200,"children":2201},{},[2202],{"type":58,"value":2203},"from x402.mechanisms.evm.exact.register import register_exact_evm_client\n",{"type":52,"tag":1033,"props":2205,"children":2207},{"class":1035,"line":2206},7,[2208],{"type":52,"tag":1033,"props":2209,"children":2210},{},[2211],{"type":58,"value":1070},{"type":52,"tag":1033,"props":2213,"children":2215},{"class":1035,"line":2214},8,[2216],{"type":52,"tag":1033,"props":2217,"children":2219},{"emptyLinePlaceholder":2218},true,[2220],{"type":58,"value":2221},"\n",{"type":52,"tag":1033,"props":2223,"children":2225},{"class":1035,"line":2224},9,[2226],{"type":52,"tag":1033,"props":2227,"children":2228},{},[2229],{"type":58,"value":2230},"async def main():\n",{"type":52,"tag":1033,"props":2232,"children":2234},{"class":1035,"line":2233},10,[2235],{"type":52,"tag":1033,"props":2236,"children":2237},{},[2238],{"type":58,"value":2239},"    client = x402Client()\n",{"type":52,"tag":1033,"props":2241,"children":2243},{"class":1035,"line":2242},11,[2244],{"type":52,"tag":1033,"props":2245,"children":2246},{},[2247],{"type":58,"value":2248},"    register_exact_evm_client(\n",{"type":52,"tag":1033,"props":2250,"children":2252},{"class":1035,"line":2251},12,[2253],{"type":52,"tag":1033,"props":2254,"children":2255},{},[2256],{"type":58,"value":2257},"        client,\n",{"type":52,"tag":1033,"props":2259,"children":2261},{"class":1035,"line":2260},13,[2262],{"type":52,"tag":1033,"props":2263,"children":2264},{},[2265],{"type":58,"value":2266},"        EthAccountSigner(Account.from_key(os.environ[\"BROWSER_USE_X402_PRIVATE_KEY\"])),\n",{"type":52,"tag":1033,"props":2268,"children":2270},{"class":1035,"line":2269},14,[2271],{"type":52,"tag":1033,"props":2272,"children":2273},{},[2274],{"type":58,"value":2275},"    )\n",{"type":52,"tag":1033,"props":2277,"children":2279},{"class":1035,"line":2278},15,[2280],{"type":52,"tag":1033,"props":2281,"children":2282},{},[2283],{"type":58,"value":2284},"    # max_value caps the spend per request — picks the $1 option over the $5 default.\n",{"type":52,"tag":1033,"props":2286,"children":2288},{"class":1035,"line":2287},16,[2289],{"type":52,"tag":1033,"props":2290,"children":2291},{},[2292],{"type":58,"value":2293},"    async with x402HttpxClient(client, max_value=Decimal(\"1.5\"), timeout=180.0) as http:\n",{"type":52,"tag":1033,"props":2295,"children":2297},{"class":1035,"line":2296},17,[2298],{"type":52,"tag":1033,"props":2299,"children":2300},{},[2301],{"type":58,"value":2302},"        resp = await http.post(\n",{"type":52,"tag":1033,"props":2304,"children":2306},{"class":1035,"line":2305},18,[2307],{"type":52,"tag":1033,"props":2308,"children":2309},{},[2310],{"type":58,"value":2311},"            \"https:\u002F\u002Fx402.api.browser-use.com\u002Fapi\u002Fv3\u002Fsessions\",\n",{"type":52,"tag":1033,"props":2313,"children":2315},{"class":1035,"line":2314},19,[2316],{"type":52,"tag":1033,"props":2317,"children":2318},{},[2319],{"type":58,"value":2320},"            json={\"task\": \"\u003Cthe task>\"},\n",{"type":52,"tag":1033,"props":2322,"children":2324},{"class":1035,"line":2323},20,[2325],{"type":52,"tag":1033,"props":2326,"children":2327},{},[2328],{"type":58,"value":2329},"        )\n",{"type":52,"tag":1033,"props":2331,"children":2333},{"class":1035,"line":2332},21,[2334],{"type":52,"tag":1033,"props":2335,"children":2336},{},[2337],{"type":58,"value":2338},"        print(resp.status_code, resp.json())\n",{"type":52,"tag":1033,"props":2340,"children":2342},{"class":1035,"line":2341},22,[2343],{"type":52,"tag":1033,"props":2344,"children":2345},{"emptyLinePlaceholder":2218},[2346],{"type":58,"value":2221},{"type":52,"tag":1033,"props":2348,"children":2350},{"class":1035,"line":2349},23,[2351],{"type":52,"tag":1033,"props":2352,"children":2353},{},[2354],{"type":58,"value":2355},"asyncio.run(main())\n",{"type":52,"tag":61,"props":2357,"children":2358},{},[2359,2361,2366],{"type":58,"value":2360},"If ",{"type":52,"tag":75,"props":2362,"children":2364},{"className":2363},[],[2365],{"type":58,"value":537},{"type":58,"value":2367},", add the API key header, or the $1 goes to a new wallet project instead of the one being topped up:",{"type":52,"tag":829,"props":2369,"children":2371},{"className":1057,"code":2370,"language":39,"meta":837,"style":837},"async with x402HttpxClient(\n    client, max_value=Decimal(\"1.5\"), timeout=180.0,\n    headers={\"X-Browser-Use-API-Key\": os.environ[\"BROWSER_USE_API_KEY\"]},\n) as http:\n    ...\n",[2372],{"type":52,"tag":75,"props":2373,"children":2374},{"__ignoreMap":837},[2375,2383,2391,2399,2407],{"type":52,"tag":1033,"props":2376,"children":2377},{"class":1035,"line":1036},[2378],{"type":52,"tag":1033,"props":2379,"children":2380},{},[2381],{"type":58,"value":2382},"async with x402HttpxClient(\n",{"type":52,"tag":1033,"props":2384,"children":2385},{"class":1035,"line":1073},[2386],{"type":52,"tag":1033,"props":2387,"children":2388},{},[2389],{"type":58,"value":2390},"    client, max_value=Decimal(\"1.5\"), timeout=180.0,\n",{"type":52,"tag":1033,"props":2392,"children":2393},{"class":1035,"line":1082},[2394],{"type":52,"tag":1033,"props":2395,"children":2396},{},[2397],{"type":58,"value":2398},"    headers={\"X-Browser-Use-API-Key\": os.environ[\"BROWSER_USE_API_KEY\"]},\n",{"type":52,"tag":1033,"props":2400,"children":2401},{"class":1035,"line":1091},[2402],{"type":52,"tag":1033,"props":2403,"children":2404},{},[2405],{"type":58,"value":2406},") as http:\n",{"type":52,"tag":1033,"props":2408,"children":2409},{"class":1035,"line":2189},[2410],{"type":52,"tag":1033,"props":2411,"children":2412},{},[2413],{"type":58,"value":2414},"    ...\n",{"type":52,"tag":61,"props":2416,"children":2417},{},[2418,2420,2425,2427,2432,2433,2437,2438,2444],{"type":58,"value":2419},"If the installed ",{"type":52,"tag":75,"props":2421,"children":2423},{"className":2422},[],[2424],{"type":58,"value":4},{"type":58,"value":2426}," lib has no ",{"type":52,"tag":75,"props":2428,"children":2430},{"className":2429},[],[2431],{"type":58,"value":2145},{"type":58,"value":219},{"type":52,"tag":67,"props":2434,"children":2435},{},[2436],{"type":58,"value":118},{"type":58,"value":461},{"type":52,"tag":75,"props":2439,"children":2441},{"className":2440},[],[2442],{"type":58,"value":2443},"That x402 version can't force a $1 charge, so the test will cost $5 instead. Want me to go ahead?",{"type":58,"value":2445}," — wait for a yes before running.",{"type":52,"tag":61,"props":2447,"children":2448},{},[2449],{"type":52,"tag":67,"props":2450,"children":2451},{},[2452],{"type":58,"value":118},{"type":52,"tag":264,"props":2454,"children":2455},{},[2456,2467],{"type":52,"tag":61,"props":2457,"children":2458},{},[2459,2461],{"type":58,"value":2460},"Paid. On-chain proof: ",{"type":52,"tag":912,"props":2462,"children":2465},{"href":2463,"rel":2464},"https:\u002F\u002Fbasescan.org\u002Faddress\u002F",[916],[2466],{"type":58,"value":2463},{"type":52,"tag":2468,"props":2469,"children":2470},"address",{},[2471],{"type":58,"value":2472},"#tokentxns — look for a USDC transfer out of exactly $1.000000.",{"type":52,"tag":61,"props":2474,"children":2475},{},[2476,2480,2482,2487,2489,2494,2496,2502],{"type":52,"tag":67,"props":2477,"children":2478},{},[2479],{"type":58,"value":183},{"type":58,"value":2481}," Read the balance. If ",{"type":52,"tag":75,"props":2483,"children":2485},{"className":2484},[],[2486],{"type":58,"value":467},{"type":58,"value":2488}," (needs ",{"type":52,"tag":75,"props":2490,"children":2492},{"className":2491},[],[2493],{"type":58,"value":80},{"type":58,"value":2495}," ≥ 3.8.0; if older, say to run ",{"type":52,"tag":75,"props":2497,"children":2499},{"className":2498},[],[2500],{"type":58,"value":2501},"pip install -U \"browser-use-sdk[x402]\"",{"type":58,"value":2503}," or skip this):",{"type":52,"tag":829,"props":2505,"children":2507},{"className":1057,"code":2506,"language":39,"meta":837,"style":837},"import asyncio, os\nfrom browser_use_sdk.v3 import get_wallet_balance\n\nasync def main():\n    bal = await get_wallet_balance(os.environ[\"BROWSER_USE_X402_PRIVATE_KEY\"])\n    print(bal['total_credits_usd'])\n\nasyncio.run(main())\n",[2508],{"type":52,"tag":75,"props":2509,"children":2510},{"__ignoreMap":837},[2511,2518,2526,2533,2540,2548,2556,2563],{"type":52,"tag":1033,"props":2512,"children":2513},{"class":1035,"line":1036},[2514],{"type":52,"tag":1033,"props":2515,"children":2516},{},[2517],{"type":58,"value":2162},{"type":52,"tag":1033,"props":2519,"children":2520},{"class":1035,"line":1073},[2521],{"type":52,"tag":1033,"props":2522,"children":2523},{},[2524],{"type":58,"value":2525},"from browser_use_sdk.v3 import get_wallet_balance\n",{"type":52,"tag":1033,"props":2527,"children":2528},{"class":1035,"line":1082},[2529],{"type":52,"tag":1033,"props":2530,"children":2531},{"emptyLinePlaceholder":2218},[2532],{"type":58,"value":2221},{"type":52,"tag":1033,"props":2534,"children":2535},{"class":1035,"line":1091},[2536],{"type":52,"tag":1033,"props":2537,"children":2538},{},[2539],{"type":58,"value":2230},{"type":52,"tag":1033,"props":2541,"children":2542},{"class":1035,"line":2189},[2543],{"type":52,"tag":1033,"props":2544,"children":2545},{},[2546],{"type":58,"value":2547},"    bal = await get_wallet_balance(os.environ[\"BROWSER_USE_X402_PRIVATE_KEY\"])\n",{"type":52,"tag":1033,"props":2549,"children":2550},{"class":1035,"line":973},[2551],{"type":52,"tag":1033,"props":2552,"children":2553},{},[2554],{"type":58,"value":2555},"    print(bal['total_credits_usd'])\n",{"type":52,"tag":1033,"props":2557,"children":2558},{"class":1035,"line":2206},[2559],{"type":52,"tag":1033,"props":2560,"children":2561},{"emptyLinePlaceholder":2218},[2562],{"type":58,"value":2221},{"type":52,"tag":1033,"props":2564,"children":2565},{"class":1035,"line":2214},[2566],{"type":52,"tag":1033,"props":2567,"children":2568},{},[2569],{"type":58,"value":2355},{"type":52,"tag":61,"props":2571,"children":2572},{},[2573,2574,2579,2581,2587],{"type":58,"value":2360},{"type":52,"tag":75,"props":2575,"children":2577},{"className":2576},[],[2578],{"type":58,"value":537},{"type":58,"value":2580},", skip ",{"type":52,"tag":75,"props":2582,"children":2584},{"className":2583},[],[2585],{"type":58,"value":2586},"get_wallet_balance",{"type":58,"value":2588}," (it returns 404 — the credits sit in the API key's project, that's normal, don't show it as an error) and read it the normal way:",{"type":52,"tag":829,"props":2590,"children":2592},{"className":1057,"code":2591,"language":39,"meta":837,"style":837},"from browser_use_sdk.v3 import AsyncBrowserUse\nclient = AsyncBrowserUse(api_key=os.environ[\"BROWSER_USE_API_KEY\"])\nacct = await client.billing.account()\nprint(acct.total_credits_balance_usd)\n",[2593],{"type":52,"tag":75,"props":2594,"children":2595},{"__ignoreMap":837},[2596,2604,2612,2620],{"type":52,"tag":1033,"props":2597,"children":2598},{"class":1035,"line":1036},[2599],{"type":52,"tag":1033,"props":2600,"children":2601},{},[2602],{"type":58,"value":2603},"from browser_use_sdk.v3 import AsyncBrowserUse\n",{"type":52,"tag":1033,"props":2605,"children":2606},{"class":1035,"line":1073},[2607],{"type":52,"tag":1033,"props":2608,"children":2609},{},[2610],{"type":58,"value":2611},"client = AsyncBrowserUse(api_key=os.environ[\"BROWSER_USE_API_KEY\"])\n",{"type":52,"tag":1033,"props":2613,"children":2614},{"class":1035,"line":1082},[2615],{"type":52,"tag":1033,"props":2616,"children":2617},{},[2618],{"type":58,"value":2619},"acct = await client.billing.account()\n",{"type":52,"tag":1033,"props":2621,"children":2622},{"class":1035,"line":1091},[2623],{"type":52,"tag":1033,"props":2624,"children":2625},{},[2626],{"type":58,"value":2627},"print(acct.total_credits_balance_usd)\n",{"type":52,"tag":61,"props":2629,"children":2630},{},[2631],{"type":52,"tag":67,"props":2632,"children":2633},{},[2634],{"type":58,"value":118},{"type":52,"tag":264,"props":2636,"children":2637},{},[2638],{"type":52,"tag":61,"props":2639,"children":2640},{},[2641,2643],{"type":58,"value":2642},"Done. Your Browser Use balance is now $",{"type":52,"tag":2644,"props":2645,"children":2646},"balance",{},[2647,2649],{"type":58,"value":2648}," (the test cost about $",{"type":52,"tag":2650,"props":2651,"children":2652},"cost",{},[2653],{"type":58,"value":2654},"). Tasks draw from this, and the SDK adds another $5 when it runs out.",{"type":52,"tag":230,"props":2656,"children":2657},{},[],{"type":52,"tag":98,"props":2659,"children":2661},{"id":2660},"step-6-wrap-up",[2662],{"type":58,"value":2663},"Step 6 — Wrap up",{"type":52,"tag":61,"props":2665,"children":2666},{},[2667],{"type":52,"tag":67,"props":2668,"children":2669},{},[2670,2671,2676],{"type":58,"value":2360},{"type":52,"tag":75,"props":2672,"children":2674},{"className":2673},[],[2675],{"type":58,"value":329},{"type":58,"value":1524},{"type":52,"tag":61,"props":2678,"children":2679},{},[2680],{"type":52,"tag":67,"props":2681,"children":2682},{},[2683],{"type":58,"value":118},{"type":52,"tag":264,"props":2685,"children":2686},{},[2687],{"type":52,"tag":61,"props":2688,"children":2689},{},[2690],{"type":58,"value":2691},"All set. Ask me to run any browser task and I'll run it through the SDK, paid from your wallet.",{"type":52,"tag":61,"props":2693,"children":2694},{},[2695,2699,2701,2707,2709,2715],{"type":52,"tag":67,"props":2696,"children":2697},{},[2698],{"type":58,"value":183},{"type":58,"value":2700}," When they ask for a task, write a throwaway script (in ",{"type":52,"tag":75,"props":2702,"children":2704},{"className":2703},[],[2705],{"type":58,"value":2706},"\u002Ftmp",{"type":58,"value":2708},", or a background job for long ones), run it, report the result, and delete it — don't leave files in their cwd. The SDK reads ",{"type":52,"tag":75,"props":2710,"children":2712},{"className":2711},[],[2713],{"type":58,"value":2714},"BROWSER_USE_X402_PRIVATE_KEY",{"type":58,"value":2716}," and finds the x402 endpoint on its own:",{"type":52,"tag":829,"props":2718,"children":2720},{"className":1057,"code":2719,"language":39,"meta":837,"style":837},"import asyncio, os\nfrom browser_use_sdk.v3 import AsyncBrowserUse\n\nasync def main():\n    client = AsyncBrowserUse()  # Mode B: AsyncBrowserUse(api_key=os.environ[\"BROWSER_USE_API_KEY\"])\n    result = await client.run(task=\"\u003Cthe task>\")\n    print(result.output)\n\nasyncio.run(main())\n",[2721],{"type":52,"tag":75,"props":2722,"children":2723},{"__ignoreMap":837},[2724,2731,2738,2745,2752,2760,2768,2776,2783],{"type":52,"tag":1033,"props":2725,"children":2726},{"class":1035,"line":1036},[2727],{"type":52,"tag":1033,"props":2728,"children":2729},{},[2730],{"type":58,"value":2162},{"type":52,"tag":1033,"props":2732,"children":2733},{"class":1035,"line":1073},[2734],{"type":52,"tag":1033,"props":2735,"children":2736},{},[2737],{"type":58,"value":2603},{"type":52,"tag":1033,"props":2739,"children":2740},{"class":1035,"line":1082},[2741],{"type":52,"tag":1033,"props":2742,"children":2743},{"emptyLinePlaceholder":2218},[2744],{"type":58,"value":2221},{"type":52,"tag":1033,"props":2746,"children":2747},{"class":1035,"line":1091},[2748],{"type":52,"tag":1033,"props":2749,"children":2750},{},[2751],{"type":58,"value":2230},{"type":52,"tag":1033,"props":2753,"children":2754},{"class":1035,"line":2189},[2755],{"type":52,"tag":1033,"props":2756,"children":2757},{},[2758],{"type":58,"value":2759},"    client = AsyncBrowserUse()  # Mode B: AsyncBrowserUse(api_key=os.environ[\"BROWSER_USE_API_KEY\"])\n",{"type":52,"tag":1033,"props":2761,"children":2762},{"class":1035,"line":973},[2763],{"type":52,"tag":1033,"props":2764,"children":2765},{},[2766],{"type":58,"value":2767},"    result = await client.run(task=\"\u003Cthe task>\")\n",{"type":52,"tag":1033,"props":2769,"children":2770},{"class":1035,"line":2206},[2771],{"type":52,"tag":1033,"props":2772,"children":2773},{},[2774],{"type":58,"value":2775},"    print(result.output)\n",{"type":52,"tag":1033,"props":2777,"children":2778},{"class":1035,"line":2214},[2779],{"type":52,"tag":1033,"props":2780,"children":2781},{"emptyLinePlaceholder":2218},[2782],{"type":58,"value":2221},{"type":52,"tag":1033,"props":2784,"children":2785},{"class":1035,"line":2224},[2786],{"type":52,"tag":1033,"props":2787,"children":2788},{},[2789],{"type":58,"value":2355},{"type":52,"tag":61,"props":2791,"children":2792},{},[2793],{"type":52,"tag":67,"props":2794,"children":2795},{},[2796,2797,2802],{"type":58,"value":2360},{"type":52,"tag":75,"props":2798,"children":2800},{"className":2799},[],[2801],{"type":58,"value":337},{"type":58,"value":1524},{"type":52,"tag":61,"props":2804,"children":2805},{},[2806],{"type":52,"tag":67,"props":2807,"children":2808},{},[2809],{"type":58,"value":118},{"type":52,"tag":264,"props":2811,"children":2812},{},[2813],{"type":52,"tag":61,"props":2814,"children":2815},{},[2816,2818,2823],{"type":58,"value":2817},"All set. Here's the client to use in your code — it reads the key and endpoint from your ",{"type":52,"tag":75,"props":2819,"children":2821},{"className":2820},[],[2822],{"type":58,"value":277},{"type":58,"value":1524},{"type":52,"tag":61,"props":2825,"children":2826},{},[2827,2831,2833,2839],{"type":52,"tag":67,"props":2828,"children":2829},{},[2830],{"type":58,"value":183},{"type":58,"value":2832}," Add the client in the project's language and point them at the ",{"type":52,"tag":75,"props":2834,"children":2836},{"className":2835},[],[2837],{"type":58,"value":2838},"cloud",{"type":58,"value":2840}," skill \u002F SDK docs for the rest:",{"type":52,"tag":829,"props":2842,"children":2844},{"className":1057,"code":2843,"language":39,"meta":837,"style":837},"from browser_use_sdk.v3 import AsyncBrowserUse\n\nclient = AsyncBrowserUse()                                  # Mode A (accountless)\n# client = AsyncBrowserUse(api_key=\"bu_...\")                # Mode B (top up existing account)\n",[2845],{"type":52,"tag":75,"props":2846,"children":2847},{"__ignoreMap":837},[2848,2855,2862,2870],{"type":52,"tag":1033,"props":2849,"children":2850},{"class":1035,"line":1036},[2851],{"type":52,"tag":1033,"props":2852,"children":2853},{},[2854],{"type":58,"value":2603},{"type":52,"tag":1033,"props":2856,"children":2857},{"class":1035,"line":1073},[2858],{"type":52,"tag":1033,"props":2859,"children":2860},{"emptyLinePlaceholder":2218},[2861],{"type":58,"value":2221},{"type":52,"tag":1033,"props":2863,"children":2864},{"class":1035,"line":1082},[2865],{"type":52,"tag":1033,"props":2866,"children":2867},{},[2868],{"type":58,"value":2869},"client = AsyncBrowserUse()                                  # Mode A (accountless)\n",{"type":52,"tag":1033,"props":2871,"children":2872},{"class":1035,"line":1091},[2873],{"type":52,"tag":1033,"props":2874,"children":2875},{},[2876],{"type":58,"value":2877},"# client = AsyncBrowserUse(api_key=\"bu_...\")                # Mode B (top up existing account)\n",{"type":52,"tag":61,"props":2879,"children":2880},{},[2881,2883,2888,2890,2896],{"type":58,"value":2882},"(x402 needs the ",{"type":52,"tag":67,"props":2884,"children":2885},{},[2886],{"type":58,"value":2887},"async",{"type":58,"value":2889}," client — the sync ",{"type":52,"tag":75,"props":2891,"children":2893},{"className":2892},[],[2894],{"type":58,"value":2895},"BrowserUse",{"type":58,"value":2897}," won't run when the x402 env var is set.)",{"type":52,"tag":230,"props":2899,"children":2900},{},[],{"type":52,"tag":98,"props":2902,"children":2904},{"id":2903},"typescript-equivalents",[2905],{"type":58,"value":2906},"TypeScript equivalents",{"type":52,"tag":2908,"props":2909,"children":2910},"table",{},[2911,2930],{"type":52,"tag":2912,"props":2913,"children":2914},"thead",{},[2915],{"type":52,"tag":2916,"props":2917,"children":2918},"tr",{},[2919,2925],{"type":52,"tag":2920,"props":2921,"children":2922},"th",{},[2923],{"type":58,"value":2924},"Python",{"type":52,"tag":2920,"props":2926,"children":2927},{},[2928],{"type":58,"value":2929},"TypeScript",{"type":52,"tag":2931,"props":2932,"children":2933},"tbody",{},[2934,2956,2977,3012,3041],{"type":52,"tag":2916,"props":2935,"children":2936},{},[2937,2947],{"type":52,"tag":2938,"props":2939,"children":2940},"td",{},[2941],{"type":52,"tag":75,"props":2942,"children":2944},{"className":2943},[],[2945],{"type":58,"value":2946},"from browser_use_sdk.v3 import AsyncBrowserUse",{"type":52,"tag":2938,"props":2948,"children":2949},{},[2950],{"type":52,"tag":75,"props":2951,"children":2953},{"className":2952},[],[2954],{"type":58,"value":2955},"import { BrowserUse } from \"browser-use-sdk\u002Fv3\"",{"type":52,"tag":2916,"props":2957,"children":2958},{},[2959,2968],{"type":52,"tag":2938,"props":2960,"children":2961},{},[2962],{"type":52,"tag":75,"props":2963,"children":2965},{"className":2964},[],[2966],{"type":58,"value":2967},"AsyncBrowserUse()",{"type":52,"tag":2938,"props":2969,"children":2970},{},[2971],{"type":52,"tag":75,"props":2972,"children":2974},{"className":2973},[],[2975],{"type":58,"value":2976},"new BrowserUse()",{"type":52,"tag":2916,"props":2978,"children":2979},{},[2980,2997],{"type":52,"tag":2938,"props":2981,"children":2982},{},[2983,2989,2991],{"type":52,"tag":75,"props":2984,"children":2986},{"className":2985},[],[2987],{"type":58,"value":2988},"await client.run(task=...)",{"type":58,"value":2990}," → ",{"type":52,"tag":75,"props":2992,"children":2994},{"className":2993},[],[2995],{"type":58,"value":2996},".output",{"type":52,"tag":2938,"props":2998,"children":2999},{},[3000,3006,3007],{"type":52,"tag":75,"props":3001,"children":3003},{"className":3002},[],[3004],{"type":58,"value":3005},"await client.run({ task })",{"type":58,"value":2990},{"type":52,"tag":75,"props":3008,"children":3010},{"className":3009},[],[3011],{"type":58,"value":2996},{"type":52,"tag":2916,"props":3013,"children":3014},{},[3015,3024],{"type":52,"tag":2938,"props":3016,"children":3017},{},[3018],{"type":52,"tag":75,"props":3019,"children":3021},{"className":3020},[],[3022],{"type":58,"value":3023},"get_wallet_balance(key)",{"type":52,"tag":2938,"props":3025,"children":3026},{},[3027,3033,3034,3040],{"type":52,"tag":75,"props":3028,"children":3030},{"className":3029},[],[3031],{"type":58,"value":3032},"getWalletBalance(key)",{"type":58,"value":73},{"type":52,"tag":75,"props":3035,"children":3037},{"className":3036},[],[3038],{"type":58,"value":3039},"from \"browser-use-sdk\u002Fv3\"",{"type":58,"value":418},{"type":52,"tag":2916,"props":3042,"children":3043},{},[3044,3053],{"type":52,"tag":2938,"props":3045,"children":3046},{},[3047],{"type":52,"tag":75,"props":3048,"children":3050},{"className":3049},[],[3051],{"type":58,"value":3052},"pip install \"browser-use-sdk[x402]\"",{"type":52,"tag":2938,"props":3054,"children":3055},{},[3056],{"type":52,"tag":75,"props":3057,"children":3059},{"className":3058},[],[3060],{"type":58,"value":3061},"npm install browser-use-sdk @x402\u002Ffetch @x402\u002Fevm viem",{"type":52,"tag":61,"props":3063,"children":3064},{},[3065,3067,3072],{"type":58,"value":3066},"Both SDKs read ",{"type":52,"tag":75,"props":3068,"children":3070},{"className":3069},[],[3071],{"type":58,"value":2714},{"type":58,"value":3073}," from the env.",{"type":52,"tag":98,"props":3075,"children":3077},{"id":3076},"rules",[3078],{"type":58,"value":3079},"Rules",{"type":52,"tag":105,"props":3081,"children":3082},{},[3083,3091,3101,3125,3146],{"type":52,"tag":109,"props":3084,"children":3085},{},[3086],{"type":52,"tag":67,"props":3087,"children":3088},{},[3089],{"type":58,"value":3090},"Follow the script in order. Say the Say blocks word for word.",{"type":52,"tag":109,"props":3092,"children":3093},{},[3094,3099],{"type":52,"tag":67,"props":3095,"children":3096},{},[3097],{"type":58,"value":3098},"Never spend the user's USDC without a clear yes",{"type":58,"value":3100}," (the Step 5 question is that yes).",{"type":52,"tag":109,"props":3102,"children":3103},{},[3104,3109,3111,3116,3118,3123],{"type":52,"tag":67,"props":3105,"children":3106},{},[3107],{"type":58,"value":3108},"Always offer both ways to add the key",{"type":58,"value":3110},": paste it in chat (you write it to ",{"type":52,"tag":75,"props":3112,"children":3114},{"className":3113},[],[3115],{"type":58,"value":277},{"type":58,"value":3117},") or the user adds it themselves. If they paste it, write it straight to ",{"type":52,"tag":75,"props":3119,"children":3121},{"className":3120},[],[3122],{"type":58,"value":277},{"type":58,"value":3124}," and never echo it back or store it anywhere else.",{"type":52,"tag":109,"props":3126,"children":3127},{},[3128],{"type":52,"tag":67,"props":3129,"children":3130},{},[3131,3133,3138,3139,3144],{"type":58,"value":3132},"Add ",{"type":52,"tag":75,"props":3134,"children":3136},{"className":3135},[],[3137],{"type":58,"value":277},{"type":58,"value":744},{"type":52,"tag":75,"props":3140,"children":3142},{"className":3141},[],[3143],{"type":58,"value":642},{"type":58,"value":3145}," before saving keys.",{"type":52,"tag":109,"props":3147,"children":3148},{},[3149,3154],{"type":52,"tag":67,"props":3150,"children":3151},{},[3152],{"type":58,"value":3153},"Wallets hold real money.",{"type":58,"value":3155}," Keep keys out of source control, logs, and screenshots; only add what you can afford to lose if it leaks.",{"type":52,"tag":98,"props":3157,"children":3159},{"id":3158},"reference",[3160],{"type":58,"value":3161},"Reference",{"type":52,"tag":105,"props":3163,"children":3164},{},[3165,3176,3187,3198,3208],{"type":52,"tag":109,"props":3166,"children":3167},{},[3168,3170],{"type":58,"value":3169},"x402 user docs: ",{"type":52,"tag":912,"props":3171,"children":3174},{"href":3172,"rel":3173},"https:\u002F\u002Fdocs.browser-use.com\u002Fcloud\u002Fguides\u002Fx402",[916],[3175],{"type":58,"value":3172},{"type":52,"tag":109,"props":3177,"children":3178},{},[3179,3181],{"type":58,"value":3180},"Claude Code + Browser Use Cloud: ",{"type":52,"tag":912,"props":3182,"children":3185},{"href":3183,"rel":3184},"https:\u002F\u002Fdocs.browser-use.com\u002Fcloud\u002Ftutorials\u002Fintegrations\u002Fclaude-code",[916],[3186],{"type":58,"value":3183},{"type":52,"tag":109,"props":3188,"children":3189},{},[3190,3192],{"type":58,"value":3191},"x402 protocol: ",{"type":52,"tag":912,"props":3193,"children":3196},{"href":3194,"rel":3195},"https:\u002F\u002Fwww.x402.org",[916],[3197],{"type":58,"value":3194},{"type":52,"tag":109,"props":3199,"children":3200},{},[3201,3203],{"type":58,"value":3202},"USDC on Base contract: ",{"type":52,"tag":75,"props":3204,"children":3206},{"className":3205},[],[3207],{"type":58,"value":1750},{"type":52,"tag":109,"props":3209,"children":3210},{},[3211,3213,3219,3221],{"type":58,"value":3212},"Base RPC: ",{"type":52,"tag":912,"props":3214,"children":3217},{"href":3215,"rel":3216},"https:\u002F\u002Fmainnet.base.org",[916],[3218],{"type":58,"value":3215},{"type":58,"value":3220}," · Basescan: ",{"type":52,"tag":912,"props":3222,"children":3225},{"href":3223,"rel":3224},"https:\u002F\u002Fbasescan.org",[916],[3226],{"type":58,"value":3223},{"type":52,"tag":3228,"props":3229,"children":3230},"style",{},[3231],{"type":58,"value":3232},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":3234,"total":2260},[3235,3246,3257,3267,3278,3287,3308,3321,3338,3354,3377,3388],{"slug":8,"name":8,"fn":3236,"description":3237,"org":3238,"tags":3239,"stars":29,"repoUrl":30,"updatedAt":3245},"automate browser interactions","Direct browser control via CDP for web interaction: automation, scraping, testing, screenshots, and site\u002Fapp work.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3240,3241,3242],{"name":13,"slug":14,"type":15},{"name":24,"slug":25,"type":15},{"name":3243,"slug":3244,"type":15},"Web Scraping","web-scraping","2026-07-28T05:35:58.143842",{"slug":2838,"name":2838,"fn":3247,"description":3248,"org":3249,"tags":3250,"stars":29,"repoUrl":30,"updatedAt":3256},"use Browser Use Cloud API","Documentation reference for using Browser Use Cloud — the hosted API and SDK for browser automation. Use this skill whenever the user needs help with the Cloud REST API (v2 or v3), browser-use-sdk (Python or TypeScript), X-Browser-Use-API-Key authentication, cloud sessions, browser profiles, profile sync, CDP WebSocket connections, stealth browsers, residential proxies, CAPTCHA handling, webhooks, workspaces, skills marketplace, liveUrl streaming, pricing, or integration patterns (chat UI, subagent, adding browser tools to existing agents). Also trigger for questions about n8n\u002FMake\u002FZapier integration, Playwright\u002F Puppeteer\u002FSelenium on cloud infrastructure, or 1Password vault integration. Do NOT use this for the open-source Python library (Agent, Browser, Tools config) — use the open-source skill instead.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3251,3252,3253],{"name":24,"slug":25,"type":15},{"name":2924,"slug":39,"type":15},{"name":3254,"slug":3255,"type":15},"REST API","rest-api","2026-04-06T18:06:10.225871",{"slug":3258,"name":3258,"fn":3259,"description":3260,"org":3261,"tags":3262,"stars":29,"repoUrl":30,"updatedAt":3266},"open-source","write browser-use Python code","Documentation reference for writing Python code using the browser-use open-source library. Use this skill whenever the user needs help with Agent, Browser, or Tools configuration, is writing code that imports from browser_use, asks about @sandbox deployment, supported LLM models, Actor API, custom tools, lifecycle hooks, MCP server setup, or monitoring\u002Fobservability with Laminar or OpenLIT. Also trigger for questions about browser-use installation, prompting strategies, or sensitive data handling. Do NOT use this for Cloud API\u002FSDK usage or pricing — use the cloud skill instead. Do NOT use this for directly automating a browser via CLI commands — use the browser-use skill instead.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3263,3264,3265],{"name":13,"slug":14,"type":15},{"name":24,"slug":25,"type":15},{"name":2924,"slug":39,"type":15},"2026-04-06T18:06:14.102374",{"slug":3268,"name":3268,"fn":3269,"description":3270,"org":3271,"tags":3272,"stars":29,"repoUrl":30,"updatedAt":3277},"remote-browser","control a local browser from a sandbox","Controls a local browser from a sandboxed remote machine. Use when the agent is running in a sandbox (no GUI) and needs to navigate websites, interact with web pages, fill forms, take screenshots, or expose local dev servers via tunnels.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3273,3274],{"name":24,"slug":25,"type":15},{"name":3275,"slug":3276,"type":15},"Sandboxing","sandboxing","2026-04-06T18:06:12.842351",{"slug":4,"name":4,"fn":5,"description":6,"org":3279,"tags":3280,"stars":29,"repoUrl":30,"updatedAt":31},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3281,3282,3283,3284,3285,3286],{"name":13,"slug":14,"type":15},{"name":27,"slug":28,"type":15},{"name":24,"slug":25,"type":15},{"name":21,"slug":22,"type":15},{"name":18,"slug":19,"type":15},{"name":4,"slug":4,"type":15},{"slug":3288,"name":3288,"fn":3289,"description":3290,"org":3291,"tags":3292,"stars":3305,"repoUrl":3306,"updatedAt":3307},"manim-video","create technical animations with Manim","Production pipeline for mathematical and technical animations using Manim Community Edition. Creates 3Blue1Brown-style explainer videos, algorithm visualizations, equation derivations, architecture diagrams, and data stories. Use when users request: animated explanations, math animations, concept visualizations, algorithm walkthroughs, technical explainers, 3Blue1Brown style videos, or any programmatic animation with geometric\u002Fmathematical content.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3293,3296,3299,3302],{"name":3294,"slug":3295,"type":15},"Animation","animation",{"name":3297,"slug":3298,"type":15},"Creative","creative",{"name":3300,"slug":3301,"type":15},"Mathematics","mathematics",{"name":3303,"slug":3304,"type":15},"Video","video",17171,"https:\u002F\u002Fgithub.com\u002Fbrowser-use\u002Fvideo-use","2026-04-16T05:01:44.229054",{"slug":3309,"name":3309,"fn":3310,"description":3311,"org":3312,"tags":3313,"stars":3305,"repoUrl":3306,"updatedAt":3320},"video-use","edit and process videos via conversation","Edit any video by conversation. Transcribe, cut, color grade, generate overlay animations, burn subtitles — for talking heads, montages, tutorials, travel, interviews. No presets, no menus. Ask questions, confirm the plan, execute, iterate, persist. Production-correctness rules are hard; everything else is artistic freedom.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3314,3315,3316,3319],{"name":3294,"slug":3295,"type":15},{"name":3297,"slug":3298,"type":15},{"name":3317,"slug":3318,"type":15},"Transcription","transcription",{"name":3303,"slug":3304,"type":15},"2026-04-16T12:17:10.522375",{"slug":3322,"name":3322,"fn":3323,"description":3324,"org":3325,"tags":3326,"stars":3335,"repoUrl":3336,"updatedAt":3337},"browser-use-terminal","automate web interactions via CLI","Direct browser control via the Browser Use Terminal CLI. Use when the user wants to automate, scrape, test, or interact with web pages — you drive the browser yourself with Python helpers.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3327,3328,3331,3332],{"name":24,"slug":25,"type":15},{"name":3329,"slug":3330,"type":15},"CLI","cli",{"name":2924,"slug":39,"type":15},{"name":3333,"slug":3334,"type":15},"Web Development","web-development",607,"https:\u002F\u002Fgithub.com\u002Fbrowser-use\u002Fterminal","2026-06-12T08:15:38.34797",{"slug":3339,"name":3339,"fn":3340,"description":3341,"org":3342,"tags":3343,"stars":3351,"repoUrl":3352,"updatedAt":3353},"cdp","drive Chrome via DevTools Protocol","Drive Chrome via the DevTools Protocol from JavaScript. Run JS snippets through the `browser-harness-js` CLI — it auto-spawns a long-lived bun HTTP server holding a fully-typed CDP `Session`, and every call (`browser-harness-js 'await session.Page.navigate(...)'`) executes against the same persistent connection. Session, active target, and globals survive across calls. Use when the user wants to automate, script, or inspect a Chrome browser via CDP — single tab or multi-tab, attach to existing Chrome or to a new one launched with --remote-debugging-port.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3344,3345,3348],{"name":24,"slug":25,"type":15},{"name":3346,"slug":3347,"type":15},"JavaScript","javascript",{"name":3349,"slug":3350,"type":15},"Testing","testing",473,"https:\u002F\u002Fgithub.com\u002Fbrowser-use\u002Fbrowser-harness-js","2026-04-21T04:55:40.331082",{"slug":3355,"name":3355,"fn":3356,"description":3357,"org":3358,"tags":3359,"stars":3374,"repoUrl":3375,"updatedAt":3376},"agents-sdk","build AI agents on Cloudflare Workers","Build AI agents on Cloudflare Workers using the Agents SDK. Load when creating stateful agents, durable workflows, real-time WebSocket apps, scheduled tasks, MCP servers, or chat applications. Covers Agent class, state management, callable RPC, Workflows integration, and React hooks.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3360,3363,3366,3369,3371],{"name":3361,"slug":3362,"type":15},"Agents","agents",{"name":3364,"slug":3365,"type":15},"AI Infrastructure","ai-infrastructure",{"name":3367,"slug":3368,"type":15},"Cloudflare Workers","cloudflare-workers",{"name":71,"slug":3370,"type":15},"sdk",{"name":3372,"slug":3373,"type":15},"Serverless","serverless",255,"https:\u002F\u002Fgithub.com\u002Fbrowser-use\u002Fbrowsercode","2026-04-27T05:34:19.800431",{"slug":3378,"name":3378,"fn":3379,"description":3380,"org":3381,"tags":3382,"stars":3374,"repoUrl":3375,"updatedAt":3387},"browser-execute","execute browser automation tasks","Use ONLY when calling the `browser_execute` tool or driving a real browser via the Chrome DevTools Protocol. Required reading before the first `browser_execute` call in a session. Covers the three connection methods (local Chrome with remote debugging, isolated debug-port profile, Browser Use cloud), the in-process `session` \u002F `console` snippet model, attaching to a page target, common CDP commands, the per-project `.bcode\u002Fagent-workspace\u002F` for reusable scripts, and screenshot auto-attachment.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3383,3384],{"name":24,"slug":25,"type":15},{"name":3385,"slug":3386,"type":15},"Debugging","debugging","2026-07-31T05:55:46.960752",{"slug":3389,"name":3389,"fn":3390,"description":3391,"org":3392,"tags":3393,"stars":3374,"repoUrl":3375,"updatedAt":3404},"cloudflare","manage Cloudflare platform resources","Comprehensive Cloudflare platform skill covering Workers, Pages, storage (KV, D1, R2), AI (Workers AI, Vectorize, Agents SDK), networking (Tunnel, Spectrum), security (WAF, DDoS), and infrastructure-as-code (Terraform, Pulumi). Use for any Cloudflare development task.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3394,3395,3397,3400,3403],{"name":3364,"slug":3365,"type":15},{"name":3396,"slug":3389,"type":15},"Cloudflare",{"name":3398,"slug":3399,"type":15},"Database","database",{"name":3401,"slug":3402,"type":15},"Security","security",{"name":3372,"slug":3373,"type":15},"2026-04-27T05:34:21.032189",{"items":3406,"total":2189},[3407,3413,3419,3425,3430],{"slug":8,"name":8,"fn":3236,"description":3237,"org":3408,"tags":3409,"stars":29,"repoUrl":30,"updatedAt":3245},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3410,3411,3412],{"name":13,"slug":14,"type":15},{"name":24,"slug":25,"type":15},{"name":3243,"slug":3244,"type":15},{"slug":2838,"name":2838,"fn":3247,"description":3248,"org":3414,"tags":3415,"stars":29,"repoUrl":30,"updatedAt":3256},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3416,3417,3418],{"name":24,"slug":25,"type":15},{"name":2924,"slug":39,"type":15},{"name":3254,"slug":3255,"type":15},{"slug":3258,"name":3258,"fn":3259,"description":3260,"org":3420,"tags":3421,"stars":29,"repoUrl":30,"updatedAt":3266},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3422,3423,3424],{"name":13,"slug":14,"type":15},{"name":24,"slug":25,"type":15},{"name":2924,"slug":39,"type":15},{"slug":3268,"name":3268,"fn":3269,"description":3270,"org":3426,"tags":3427,"stars":29,"repoUrl":30,"updatedAt":3277},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3428,3429],{"name":24,"slug":25,"type":15},{"name":3275,"slug":3276,"type":15},{"slug":4,"name":4,"fn":5,"description":6,"org":3431,"tags":3432,"stars":29,"repoUrl":30,"updatedAt":31},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3433,3434,3435,3436,3437,3438],{"name":13,"slug":14,"type":15},{"name":27,"slug":28,"type":15},{"name":24,"slug":25,"type":15},{"name":21,"slug":22,"type":15},{"name":18,"slug":19,"type":15},{"name":4,"slug":4,"type":15}]