Browser Use Cloud — x402로 결제 (암호화폐 지갑)
이것은 스크립트 기반 흐름입니다. 단계를 순서대로 따르세요. x402는 SDK (browser-use-sdk for Python, browser-use npm package for TS)를 통해서만 작동합니다 — browser-use CLI 명령어는 없으므로 모든 단계는 짧은 SDK 스크립트를 실행합니다.
이 스크립트 사용 방법
- 말하기: 아래 줄은 사용자에게 단어 그대로 전달합니다. 의역하거나 추가/삭제하지 마세요.
- 말하기 블록 내
<이와 같이>는 채워넣을 값입니다 — 실제 값으로 바꾸고 나머지는 정확하게 유지하세요. - 묻기: 아래 줄은 AskUserQuestion 도구를 사용합니다. 질문과 옵션 텍스트를 정확히 그대로 사용하세요.
- 질문 전에 설명을 표시하려면 AskUserQuestion
question필드 안에 넣으세요 (옵션 위에 렌더링됩니다). 도구 호출 전에 별도의 채팅 텍스트로 보내지 마세요 — 해당 텍스트는 질문 UI가 열릴 때 사라집니다. 따라서 설명 + 실제 질문을 모두question필드에, 한 번의 도구 호출로 넣으세요. - 실행: 아래 줄은 당신의 행동입니다. 소리내어 읽지 마세요.
- 진행하면서 두 가지 사실을 추적하세요:
SETUP(Step 1에서 A 또는 B)과MODE(Step 2에서 A 또는 B). SETUP,MODE, 그리고 경로 A/B/C 이름은 당신만을 위한 내부 레이블입니다. 절대 사용자에게 말하지 마세요. 대신 선택지를 평이한 단어로 설명하세요(예: "계정에 충전" / "계정 없는 지갑"), 절대 "모드 B"나 "경로 A"라고 하지 마세요.
Step 1 — 설정 방식 열기 및 선택
묻기: (헤더: x402 사용) — 설명과 질문을 모두 question 필드에 정확히 넣으세요:
x402는 Coinbase의 프로토콜로, API 키 대신 암호화폐로 API 요청 비용을 지불할 수 있게 합니다. x402를 사용하면 Browser Use를 요청당 암호화폐 지갑의 USDC on Base mainnet으로 지불할 수 있습니다 — 회원가입, API 키, 신용카드가 필요 없으며 지갑만 있으면 됩니다. 설정은 몇 분이면 완료됩니다: 지갑을 만들거나 준비하고, 자금을 추가하고, 키를
.env에 저장하고, 테스트하세요.x402를 어떻게 사용하시겠습니까?
- 그냥 사용하기 — 터미널에서 저에게 요청하여 지갑에서 비용을 지불하는 Browser Use 작업을 실행합니다. 제가 지갑과 키를 설정합니다.
- 프로젝트에 통합하기 — 앱을 코딩 중이고 x402를 통합하려는 경우입니다. SDK 설치, 프로젝트의
.env에 키 저장, 코드 추가를 도와드립니다.
실행: "그냥 사용하기" → SETUP = A. "프로젝트에 통합하기" → SETUP = B.
Step 2 — 계정 확인 (묻기 전에 확인)
실행: 기존 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출력
키가 어디서도 발견되지 않으면:
말하기:
Browser Use 키를 찾을 수 없어서 계정 없이 설정하겠습니다: 지갑이 당신의 신원이 되며, 첫 번째 결제로 지갑 이름의 프로젝트가 생성됩니다.
실행: MODE = A. Step 3으로 이동.
키가 발견되면:
묻기: (헤더: 계정) — 질문: <위치>에서 Browser Use API 키를 찾았습니다. USDC 크레딧을 어디로 보낼까요?
- 해당 계정에 충전 — 크레딧이 기존 API 키의 프로젝트로 전달됩니다. 무료 크레딧이 소진되었거나 카드 대신 암호화폐로 결제하고 싶은 경우 좋습니다.
- 계정 없는 지갑 — 지갑은 별도의 신원입니다. 첫 번째 결제로 기존 계정과 별도로 지갑 이름의 새 프로젝트가 생성됩니다.
실행: "해당 계정에 충전" → MODE = B. "계정 없는 지갑" → MODE = A.
Step 3 — 지갑
묻기: (헤더: 지갑) — 질문: 준비된 지갑이 있나요, 아니면 새로 만들어 드릴까요?
- 자금이 있는 지갑이 있습니다 — EVM 지갑(MetaMask, Rabby, Coinbase Wallet, Frame, Phantom, …)에 USDC on Base mainnet이 있습니다.
- 단계별 안내를 원합니다 — 지갑 만들기, Base 네트워크 추가, USDC 구매를 안내해 드립니다.
- 새로 만들어 주세요 — 자동화를 위한 일회용 지갑을 생성해 드립니다. 자금은 직접 추가하셔야 합니다.
답변에 따라 분기합니다.
경로 A — "자금이 있는 지갑이 있습니다"
실행: .gitignore에 .env가 있는지 확인하고, 없으면 추가합니다.
묻기: (헤더: 키 추가) — 참고사항과 질문을 모두 question 필드에 넣으세요:
지갑의 비공개 키를
.env에 넣어야 합니다. 여기에 붙여넣으시면 제가 추가해 드리거나, 직접 추가하실 수 있습니다. 참고: 채팅에 붙여넣은 모든 내용은 대화 기록에 저장되므로, 고가치 지갑의 경우 직접 추가하는 것이 약간 더 안전합니다. 어떻게 하시겠습니까?
- 여기에 붙여넣기 — 비공개 키를 채팅에 붙여넣으시면 제가
.env에 작성해 드립니다. - 직접 추가하겠습니다 —
.env에 직접 추가하시고, 공개 주소만 보내주세요.
"여기에 붙여넣기" 선택 시:
실행: BROWSER_USE_X402_PRIVATE_KEY=<붙여넣은 키>를 .env에 작성합니다(파일이 없으면 생성, .env가 gitignored인지 확인). 키를 다시 출력하거나 다른 곳에 인쇄하지 마세요.
말하기:
키를
.env에 저장했습니다 — 다시 출력하지 않겠습니다.
실행: Step 4로 이동.
"직접 추가하겠습니다" 선택 시:
말하기:
다음 줄을
.env에 추가하고, 지갑의 공개 주소(0x…로 시작하는 것 — 공유해도 안전함)를 보내주세요:BROWSER_USE_X402_PRIVATE_KEY=<비공개 키>
실행: 사용자가 주소를 보내면, ^0x[0-9a-fA-F]{40}$ 패턴과 일치하는지 확인합니다.
말하기:
확인했습니다:
<주소>. 유효한 주소입니다.
실행: Step 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가 지갑에 바로 입금됩니다.
- 비공개 키를 가져오세요: 계정 메뉴 → 계정 세부 정보 → 비공개 키 표시 → 비밀번호 입력 → 복사.
.env에 추가하세요(.env가 gitignored인지 확인):BROWSER_USE_X402_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);
말하기:
새 지갑을 만들었습니다. 공개 주소는
<주소>이며, 비공개 키는.env에 저장했습니다. 이제 자금이 필요합니다.
실행: Step 4(자금 추가)로 이동.
Step 4 — 자금 추가
경로 A 또는 B(이미 자금 있음)인 경우:
말하기:
지갑에 이미 자금이 있으므로 테스트로 넘어가겠습니다.
실행: Step 5로 이동.
경로 C인 경우:
말하기:
Base 네트워크에서 지갑에 USDC를 입금하는 두 가지 방법이 있습니다:
- 지갑 내 Buy 버튼(가장 쉬움): "Buy"를 클릭하고 USDC를 선택한 후 네트워크를 Base로 설정하고 카드로 결제하세요. 거래소가 필요 없습니다.
- 거래소에서 전송: USDC를
<주소>로 보내고 네트워크로 "Base"를 선택하세요 — 수수료가 $5–$20인 Ethereum이 아닙니다.최소 $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를 16진수로 읽고 1_000_000으로 나눕니다(USDC는 소수점 6자리). $20 이상이 되면 멈춥니다.
말하기:
자금이 확인되었습니다 — Base에서 $<금액>이 보입니다. 다음으로, 간단한 테스트를 실행하겠습니다.
Step 5 — 테스트 실행 (~$1)
실행: SETUP = A이면, 스크립트를 실행할 위치(기본 Python)에 SDK가 설치되어 있는지 확인합니다. SETUP = B이면, 프로젝트에 해당 언어로 SDK를 설치합니다 — cwd에서 언어를 파악합니다(package.json/tsconfig.json → TypeScript; pyproject.toml/requirements.txt/*.py → Python; 알 수 없으면 물어보세요):
# Python (x402 extra를 위해 3.10+ 필요)
pip install "browser-use-sdk[x402]"
# TypeScript
npm install browser-use-sdk @x402/fetch @x402/evm viem
묻기: (헤더: 테스트 실행) — 질문: 테스트할 준비가 되셨나요? 이 테스트는 지갑에서 정확히 $1 USDC를 사용하여 결제와 작업 실행을 종단간 확인합니다.
- 기본 작업 사용 — "Go to example.com and tell me the heading text." (~5초, 저렴함)
- 직접 작업을 알려주겠습니다 — 대신 실행할 짧은 작업을 알려주세요.
- 테스트 건너뛰기 — 테스트를 건너뛰고 바로 x402 사용으로 넘어갑니다.
실행:
- "직접 작업을 알려주겠습니다" → 말하기:
작업이 무엇인가요? 짧게 작성해 주세요.대기. - "테스트 건너뛰기" → Step 6으로 이동.
- 그 외에는 기본 작업을 사용합니다.
실행: 테스트를 실행합니다. max_value가 $1.50인 raw x402 클라이언트를 사용하여 SDK 기본값인 $5 대신 $1를 결제하도록 합니다:
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는 요청당 지출上限을 설정 — 기본 $5 대신 $1 옵션을 선택합니다.
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를 추가합니다.
Step 6 — 마무리
SETUP = A인 경우:
말하기:
모든 설정이 완료되었습니다. 브라우저 작업을 요청하시면 SDK를 통해 지갑에서 결제하여 실행해 드리겠습니다.
실행: 사용자가 작업을 요청하면, 일회용 스크립트를 작성하고(/tmp 또는 장기 작업의 경우 백그라운드 작업으로), 실행하고, 결과를 보고하고, 삭제합니다 — cwd에 파일을 남기지 마세요. 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="<작업>")
print(result.output)
asyncio.run(main())
SETUP = B인 경우:
말하기:
모든 설정이 완료되었습니다. 코드에서 사용할 클라이언트입니다 —
.env에서 키와 엔드포인트를 읽습니다:
실행: 프로젝트 언어에 맞는 클라이언트를 추가하고 나머지는 cloud 스킬 / SDK 문서를 참조하도록 안내합니다:
from browser_use_sdk.v3 import AsyncBrowserUse
client = AsyncBrowserUse() # Mode A (계정 없음)
# client = AsyncBrowserUse(api_key="bu_...") # Mode B (기존 계정 충전)
(x402는 비동기 클라이언트가 필요합니다 — 동기 BrowserUse는 x402 환경 변수가 설정된 경우 실행되지 않습니다.)
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를 사용하지 마세요 (Step 5의 질문이 그 동의입니다).
- 키 추가 방법은 항상 두 가지를 모두 제시하세요: 채팅에 붙여넣기(당신이
.env에 작성) 또는 사용자가 직접 추가. 사용자가 붙여넣으면, 즉시.env에 작성하고 절대 다시 출력하거나 다른 곳에 저장하지 마세요. - 키를 저장하기 전에
.gitignore에.env를 추가하세요. - 지갑에는 실제 돈이 들어 있습니다. 키를 소스 코드, 로그, 스크린샷에서 멀리하세요; 유출될 경우 손실을 감당할 수 있는 금액만 추가하세요.
참고
- x402 사용자 문서: https://docs.browser-use.com/customize/x402-pay-per-use
- SDK 문서: https://docs.browser-use.com/development/getting-started
- Basescan: https://basescan.org