关于 x402
x402 是一项脚本化技能,用于配置 Browser Use Cloud 的加密钱包付款,并通过 SDK 运行浏览器任务。它涵盖钱包设置、USDC 充值、付费测试和 SDK 使用;x402 仅支持 Python 或 TypeScript SDK,不支持 CLI。
主要功能
- 01基于钱包的 USDC 付款
- 02免账户或 API 密钥账单设置
- 03钱包充值指引
- 04端到端付费测试
- 05Python 和 TypeScript SDK 设置
适用场景
- 01使用钱包支付 Browser Use 任务
- 02用加密货币为现有 API 密钥项目充值
- 03在应用中加入 x402 付款
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ browser-use/ browser-use --skill x402安装后在 Claude Code 中输入/x402确认已加载。
详细介绍
Browser Use Cloud — 使用 x402 付款(加密货币钱包)
这是一个脚本化流程。请按顺序执行步骤。x402 只能通过 SDK 使用(Python 使用 browser-use-sdk,TS 使用 browser-use npm 包)——没有用于此功能的 browser-use CLI 命令,因此每个步骤都要运行一段简短的 SDK 脚本。
如何使用此脚本
- Say: 下方的内容必须逐字说给用户听。不要改写、增添或删减任何内容。
- Say 块中的
<like this>是需要填写的内容——将其替换为实际值,其余部分保持原样。 - Ask: 下方的内容使用 AskUserQuestion 工具。问题和选项文本必须与原文完全一致。
- 在提问前展示说明时,请将说明放在 AskUserQuestion 的
question字段中(它会显示在选项上方)。不要在调用该工具前将其作为单独的聊天文本发送——打开问题界面时,这些文本会被丢弃。因此,说明和实际问题都放在question字段中,通过一次工具调用发送。 - Do: 下方的内容是你的操作。不要读出来。
- 过程中跟踪两个事实:
SETUP(步骤 1 的 A 或 B)和MODE(步骤 2 的 A 或 B)。 SETUP、MODE和 Path A/B/C 名称只是内部标签。绝不要对用户说出这些名称。 请用直白的语言描述选项(例如“为账户充值”/“无账户钱包”),不要说“Mode B”或“Path A”。
步骤 1 — 开始并选择设置方式
Ask:(标题:Use x402)——将说明和问题都按以下内容原样放入 question 字段:
x402 是 Coinbase 推出的一种协议,它让你可以使用加密货币支付 API 请求,而不是提供 API 密钥。x402 让你可以通过加密货币钱包,使用 Base 上的 USDC 按请求向 Browser Use 付款——无需注册、API 密钥或信用卡,只需一个钱包。设置只需几分钟:获取或创建钱包、添加资金、将密钥保存在
.env中,然后进行测试。你想如何使用 x402?
- 直接使用 — 在此终端中通过向我提问来运行 Browser Use 任务,并从你的钱包中付款。我会设置钱包和密钥。
- 集成到应用中 — 你正在编写应用,并想在其中集成 x402。我会帮你安装 SDK、将密钥保存在项目的
.env中,并添加代码。
Do: 选择“直接使用” → SETUP = A。选择“集成到应用中” → SETUP = B。
步骤 2 — 查找账户(询问前先检查)
Do: 按以下顺序查找现有的 Browser Use API 密钥。先不要说任何内容。
- 环境中的
BROWSER_USE_API_KEY ./.env中的BROWSER_USE_API_KEY=行~/.browser-use/config.json(由browser-use cloud login/signup保存)- 如果已安装 CLI,则查看
browser-use doctor的输出
如果在任何位置都找不到密钥:
Say:
没有找到 Browser Use 密钥,因此我会为你设置无账户模式:钱包就是你的身份,首次付款会创建一个以该钱包命名的项目。
Do: MODE = A。前往步骤 3。
如果找到了密钥:
Ask:(标题:Account)——问题:我在 <location> 找到了 Browser Use API 密钥。USDC 额度应存入哪里?
- 为该账户充值 — 额度会存入你现有 API 密钥所属的项目。适合免费额度用完,或你希望用加密货币而不是信用卡付款的情况。
- 无账户钱包 — 钱包是一个独立身份。首次付款会创建一个以该钱包命名的新项目,与现有账户分开。
Do: 选择“为该账户充值” → MODE = B。选择“无账户钱包” → MODE = A。
步骤 3 — 钱包
Ask:(标题:Wallet)——问题:你已经准备好钱包了吗,还是需要我帮你设置?
- 我有已充值的钱包 — 一个在 Base 主网上持有 USDC 的 EVM 钱包(MetaMask、Rabby、Coinbase Wallet、Frame、Phantom、……)。
- 带我一步步操作 — 我会指导你创建钱包、添加 Base 并购买 USDC。
- 新建一个 — 我会生成一个用于自动化的一次性钱包。你仍需为其充值。
根据回答分支。
路径 A —“我有已充值的钱包”
**操作:**检查 .env 是否在 .gitignore 中;如果没有,就添加进去。
询问:(标题:Add key)——将说明和问题都放在 question 字段中:
你的钱包私钥需要放进
.env。你可以在这里粘贴,我会帮你添加;也可以自己添加。提醒一下:聊天中粘贴的内容会保存在记录中,因此对于高价值钱包,自己添加会更安全一些。你想怎么做?
- 在这里粘贴——在聊天中粘贴你的私钥,我会帮你写入
.env。 - 我自己添加——你将私钥添加到
.env,然后只把你的公开地址发给我。
如果选择“在这里粘贴”:
**操作:**将 BROWSER_USE_X402_PRIVATE_KEY=<pasted key> 写入 .env(如果文件不存在则创建;确保 .env 已被 git 忽略)。绝不回显私钥,也不要在任何地方打印它。
告知:
已将你的密钥保存到
.env——我不会把它打印出来。
**操作:**前往第 4 步。
如果选择“我自己添加”:
告知:
将以下内容添加到你的
.env,然后把钱包的公开地址发给我(以0x…开头的那个,可以安全分享):BROWSER_USE_X402_PRIVATE_KEY=<your private key>
**操作:**收到地址后,检查它是否符合 ^0x[0-9a-fA-F]{40}$。
告知:
收到:
<address>。这是一个有效地址。
**操作:**前往第 4 步。
路径 B —“带我一步步操作”
告知:
- 仅从官方网站 https://metamask.io 安装 MetaMask(或 Rabby、Coinbase Wallet、Frame、Trust Wallet、Phantom 等)。创建钱包,将助记词离线保存,并设置密码。
- 将 Base 添加为网络。打开 https://chainlist.org/chain/8453 →“Connect Wallet”→“Add to MetaMask”,然后在钱包中批准。
- 点击钱包中的“Buy”。选择 USDC、网络 Base,然后使用银行卡 / Apple Pay / 银行付款。USDC 会直接进入你的钱包。
- 获取私钥:账户菜单 → Account details → Show private key → 输入密码 → 复制。
- 将私钥添加到
.env(确保.env已被 git 忽略):BROWSER_USE_X402_PRIVATE_KEY=<your private key>
- 把钱包的公开地址发给我(以
0x…开头的那个),这样我就能检查。
**操作:**然后从地址检查开始,按照路径 A 继续。
路径 C —“新建一个”
**操作:**生成一个钱包。将密钥保存到 .env。只显示地址。
Python:
pip install eth-account
from eth_account import Account
acc = Account.create()
print("Address:", acc.address)
print("Private key:", acc.key.hex())
TypeScript:
npm install viem
import { generatePrivateKey, privateKeyToAccount } from "viem/accounts";
const key = generatePrivateKey();
console.log("Address:", privateKeyToAccount(key).address);
console.log("Private key:", key);
告知:
已创建一个新钱包。你的公开地址是
<address>,私钥已保存到.env。现在需要为钱包充值。
**操作:**前往第 4 步(充值)。
第 4 步 — 充值
如果选择路径 A 或 B(已充值):
告知:
你的钱包已经充值,我们直接跳到测试环节。
**操作:**前往第 5 步。
如果选择路径 C:
告知:
有两种方式可以将 USDC 转入你在 Base 上的钱包:
- 使用钱包内的 Buy 按钮(最简单):点击“Buy”,选择 USDC,将网络设为 Base,然后使用银行卡付款。无需通过交易所。
- 从交易所转账:将 USDC 发送到
<address>,并选择“Base”作为网络——不要选择 Ethereum,否则手续费要 $5–$20。至少充值 $20:这足以支付 $1 的测试费用,还能完成几项实际任务。我会监控余额,并在到账时告诉你。
**操作:**使用 Base 的公共 RPC,每隔 5 秒检查链上余额:
PADDED=$(printf "%064s" "${WALLET_ADDR:2}" | tr ' ' '0')
curl -s https://mainnet.base.org \
-H "Content-Type: application/json" \
-d "{\"jsonrpc\":\"2.0\",\"method\":\"eth_call\",\"params\":[{\"to\":\"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\"data\":\"0x70a08231${PADDED}\"},\"latest\"],\"id\":1}"
将 result 读取为十六进制数值;除以 1_000_000(USDC 有 6 位小数)。余额达到 $20 或以上时停止。
告知:
已到账——我看到 Base 上有 $。接下来进行快速测试。
步骤 5 — 测试运行(约 $1)
执行: 如果 SETUP = A,确保 SDK 已安装在你要运行脚本的环境中(默认使用 Python)。如果 SETUP = B,将 SDK 安装到项目所用的语言环境中——根据当前工作目录判断语言(package.json/tsconfig.json → TypeScript;pyproject.toml/requirements.txt/*.py → Python;只有无法判断时才询问):
# Python (needs 3.10+ for the x402 extra)
pip install "browser-use-sdk[x402]"
# TypeScript
npm install browser-use-sdk @x402/fetch @x402/evm viem
询问:(标题:Test run)——问题:准备好测试了吗?这会从你的钱包中恰好扣除 $1 USDC,用于检查支付并端到端运行任务。
- 使用默认任务 — “前往 example.com 并告诉我标题文本。”(约 5 秒,费用低)
- 我来提供任务 — 告诉我一个要运行的简短任务。
- 跳过测试 — 跳过测试,直接开始使用 x402。
执行:
- 选择“我来提供任务” → 说:
要运行什么任务?请简短描述。等待对方回复。 - 选择“跳过测试” → 前往步骤 6。
- 否则,使用默认任务。
执行: 运行测试。使用原始 x402 客户端,并将 max_value 设为 $1.50,这样会支付 $1,而不是 SDK 默认使用的 $5:
import asyncio, os
from decimal import Decimal
from x402 import x402Client
from x402.http.clients import x402HttpxClient
from x402.mechanisms.evm import EthAccountSigner
from x402.mechanisms.evm.exact.register import register_exact_evm_client
from eth_account import Account
async def main():
client = x402Client()
register_exact_evm_client(
client,
EthAccountSigner(Account.from_key(os.environ["BROWSER_USE_X402_PRIVATE_KEY"])),
)
# max_value caps the spend per request — picks the $1 option over the $5 default.
async with x402HttpxClient(client, max_value=Decimal("1.5"), timeout=180.0) as http:
resp = await http.post(
"https://x402.api.browser-use.com/api/v3/sessions",
json={"task": "<the task>"},
)
print(resp.status_code, resp.json())
asyncio.run(main())
如果 MODE = B,添加 API 密钥标头,否则这 $1 会进入一个新的钱包项目,而不是正在充值的项目:
async with x402HttpxClient(
client, max_value=Decimal("1.5"), timeout=180.0,
headers={"X-Browser-Use-API-Key": os.environ["BROWSER_USE_API_KEY"]},
) as http:
...
如果已安装的 x402 库不支持 max_value,说: 这个 x402 版本无法强制收取 $1,因此测试费用会是 $5。要继续吗?——得到肯定答复后再运行。
说:
已支付。链上凭证:https://basescan.org/address/
#tokentxns — 查找一笔金额恰好为 $1.000000 的 USDC 转出记录。
执行: 读取余额。如果 MODE = A(需要 browser-use-sdk ≥ 3.8.0;如果版本较旧,请告知运行 pip install -U "browser-use-sdk[x402]",或跳过此步骤):
import asyncio, os
from browser_use_sdk.v3 import get_wallet_balance
async def main():
bal = await get_wallet_balance(os.environ["BROWSER_USE_X402_PRIVATE_KEY"])
print(bal['total_credits_usd'])
asyncio.run(main())
如果 MODE = B,跳过 get_wallet_balance(它会返回 404——额度存放在 API 密钥所属的项目中,这是正常现象,不要将其显示为错误),并按常规方式读取余额:
from browser_use_sdk.v3 import AsyncBrowserUse
client = AsyncBrowserUse(api_key=os.environ["BROWSER_USE_API_KEY"])
acct = await client.billing.account()
print(acct.total_credits_balance_usd)
说:
完成。你的 Browser Use 余额现在是 $(测试费用约为 $)。任务会从这笔余额中扣款,余额用完时 SDK 会再充值 $5。
步骤 6 — 收尾
如果 SETUP = A:
说:
一切就绪。让我运行任何浏览器任务,我都会通过 SDK 运行,并从你的钱包中扣款。
执行: 对方提出任务时,编写一个临时脚本(放在 /tmp 中;耗时较长的任务则使用后台作业),运行脚本,报告结果并将其删除——不要在对方的当前工作目录中留下文件。SDK 会读取 BROWSER_USE_X402_PRIVATE_KEY,并自行查找 x402 端点:
import asyncio, os
from browser_use_sdk.v3 import AsyncBrowserUse
async def main():
client = AsyncBrowserUse() # Mode B: AsyncBrowserUse(api_key=os.environ["BROWSER_USE_API_KEY"])
result = await client.run(task="<the task>")
print(result.output)
asyncio.run(main())
如果 SETUP = B:
说:
一切就绪。以下是可在代码中使用的客户端——它会从你的
.env中读取密钥和端点:
执行: 使用项目所用的语言添加客户端,并告知对方其余内容请参考 cloud 技能/SDK 文档:
from browser_use_sdk.v3 import AsyncBrowserUse
client = AsyncBrowserUse() # Mode A (accountless)
# client = AsyncBrowserUse(api_key="bu_...") # Mode B (top up existing account)
(x402 需要使用 异步 客户端——设置 x402 环境变量后,同步版 BrowserUse 将无法运行。)
TypeScript 对应写法
| Python | TypeScript |
|---|---|
from browser_use_sdk.v3 import AsyncBrowserUse | import { BrowserUse } from "browser-use-sdk/v3" |
AsyncBrowserUse() | new BrowserUse() |
await client.run(task=...) → .output | await client.run({ task }) → .output |
get_wallet_balance(key) | getWalletBalance(key)(来自 from "browser-use-sdk/v3") |
pip install "browser-use-sdk[x402]" | npm install browser-use-sdk @x402/fetch @x402/evm viem |
两个 SDK 都会从环境变量中读取 BROWSER_USE_X402_PRIVATE_KEY。
规则
- 按顺序遵循脚本。逐字说出“说”区块中的内容。
- 未经明确同意,绝不要使用用户的 USDC(步骤 5 中的问题即为征求同意)。
- 始终提供两种添加密钥的方式:在聊天中粘贴(由你写入
.env),或由用户自行添加。如果对方粘贴了密钥,直接将其写入.env,绝不要复述,也不要将其存储在其他位置。 - 保存密钥前,先将
.env添加到.gitignore。 - 钱包中是真钱。 不要将密钥放入源代码管理、日志或截图中;只添加泄露后你能承担损失的金额。
参考资料
- x402 用户文档:https://docs.browser-use.com/cloud/guides/x402
- Claude Code + Browser Use Cloud:https://docs.browser-use.com/cloud/tutorials/integrations/claude-code
- x402 协议:https://www.x402.org
- Base 上的 USDC 合约:
0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 - Base RPC:https://mainnet.base.org · Basescan:https://basescan.org