Web 上の作業には API がないものもあります。仕入先のポータル、見積もりフォーム、求人への応募、ログインが必要なアカウントページなどです。ブラウザエージェントなら、こうした作業を 1 回の API 呼び出しでこなせます。タスクを普段の言葉で説明し、開始 URL を渡すだけです。AI エージェントが実際の Chromium ブラウザを自動操作して作業を進め、フィールドを入力し、自分では値を見ないシークレットでログインし、ファイルを添付し、送信前にあなたの承認を待ち、結果をテキストと JSON で返します。
AI エージェントに任せる
このプロンプトを Claude Code、Cursor、Codex などのコーディングエージェントに貼り付けてください。ドキュメントの場所と API キーの使い方をエージェントに伝えます。
Automate a web form or multi-step web task for me with the Lovely Router browser agent: a real browser that fills forms, signs in (including 2FA), attaches files and asks before it submits.
- Docs (read first): https://lovelyrouter.com/docs/browser-agent.md and https://lovelyrouter.com/docs/browser-agent/logins.md and https://lovelyrouter.com/docs/browser-agent/human-in-the-loop.md
- Start: POST https://lovelyrouter.com/v1/browser/runs with `{"goal": "...", "start_url": "...", "approve": "submit", "output_schema": {...}}`. Put every value the form needs in the goal. Poll the `poll` path; when it waits (`needs`), show me the fields and only reply `{"approve": true}` at .../reply after I say so.
- Never put passwords or codes in the goal: store them with PUT https://lovelyrouter.com/v1/browser/vault/<name> (`value`, `kind`, `origins`) and pass the names in `secrets`.
- Billed per step. Use it only on accounts I own or may use.
- Auth: read my API key from the LOVELY_API_KEY environment variable and send it as `Authorization: Bearer $LOVELY_API_KEY`. Never print or commit the key. If it is not set, ask me to create one at https://lovelyrouter.com/app/keys.
- Billing is prepaid: every call is charged to my balance, so test with a small request before running anything large.
- Every docs page is plain Markdown; the full index is https://lovelyrouter.com/llms.txt.
My task: <the site, what to fill in or do, and what proves it worked>仕組み
タスクを説明する
几帳面なアシスタントに指示するつもりでゴールを書きます。フォームに必要なすべての値と、何をもって成功とするか(「確認番号を教えてください」など)を含めます。フォームの URL がわかっているなら、そのフォームから始めましょう。
エージェントがフォームを入力する
エージェントはステップごとにページを読み、クリック、入力、選択肢の選択、ファイルのアップロード、保存済みシークレットの入力のいずれか 1 つの操作を行います。フォームを送信するボタンをクリックする前には、すべてのフィールドをゴールと照合し、合わない値を修正します。
あなたが承認し、エージェントが送信する
デフォルトでは、エージェントは購入、予約、メッセージ送信、削除、応募の前に一時停止し、フォームの値を見せます。あなたが承認を返信すると、実行は
answerと、スキーマを指定した場合はそのスキーマに沿ったdataを返して終了します。
1 回のリクエストでフォームを入力して送信する
curl https://lovelyrouter.com/v1/browser/runs \
-H "Authorization: Bearer $LOVELY_API_KEY" \
-H "content-type: application/json" \
-d '{
"goal": "Request a quote for 500 blue 750 ml water bottles with our logo, delivered to 12 Main St, Springfield, IL 62701 by December 1, 2026. Contact: Ada Lovelace, ada@example.com. Submit the form and tell me the quote reference.",
"start_url": "https://supplier.example.com/quote",
"approve": "submit",
"output_schema": {"quote_reference": "string", "confirmation_message": "string"},
"webhook": "https://api.example.com/hooks/browser"
}'リクエストはすぐに 202 を返し、エージェントはバックグラウンドで作業します。"approve": "submit" を指定すると送信ボタンの手前で止まり、Webhook に署名付きの run.waiting イベントが届きます。その needs には、人に向けた prompt、fields に入ったフォームの値、action に入ったボタンのラベル、そしてスクリーンショットが含まれます。次のように承認します。
curl https://lovelyrouter.com/v1/browser/runs/brun_5b7d9f1a3c5e7a9b1d3f5a7c/reply \
-H "Authorization: Bearer $LOVELY_API_KEY" \
-H "content-type: application/json" \
-d '{"approve": true}'エージェントがボタンをクリックして作業を終えると、answer と data の JSON を含む run.finished が届きます。代わりに {"approve": false, "reason": "Wrong address"} と返信すると、エージェントは送信しません。理由を読み、別の方法を試すか、送信できない理由を報告します。
ログインと二要素認証のコード
各認証情報は PUT /v1/browser/vault/{name} で一度だけ保存します。値の value、種類の kind(password、username、text、totp)、入力してよい origins を指定します。実行の secrets には名前を渡します。モデルに見えるのは portal_password のような名前だけで、値は許可したサイトでしか入力されないため、そっくりな偽のログインページに値が渡ることはありません。
TOTP のシードを totp シークレットとして保存すると、エージェントが現在の 6 桁のコードを入力します。
エージェントが質問を出して一時停止するので、{"secret": "481923"} と返信します。エージェントはコードを見ずに入力します。
ログインする実行に save_profile を追加し、以降の実行を profile 付きで開始すれば、ログインを省けます。
1 回の実行の間だけ保持すべき認証情報は ephemeral_secrets で渡します。実行が終わると削除されます。
レシピ
PUT /v1/browser/files/{name} で履歴書とカバーレターをアップロードし、両方を files で渡して、どちらをどこに添付するかをゴールに書きます。エージェントはファイル形式だけでなく、書類の用途に合わせて各アップロード欄を選びます。
webhook を設定して run.waiting の承認依頼をチームのチャットに転送し、チームの回答を実行の reply パスに送ります。
保存した profile から開始し、セッションが切れていた場合に再ログインできるよう secrets も渡して、最新の請求額を output_schema で要求します。
社内ツールでの勤務時間の記録など、エージェントに単独で送信させても問題ないフォームでは、"human": false と "approve": "none" を設定します。この場合、実行は待ち時間の分を何も仮押さえしません。
実行の様子を見るには、"stream": true, "screen": true を追加すると、各ステップとブラウザの画面をリアルタイムで受け取れます。ページに CAPTCHA が表示されると、エージェントがライブビューのリンクを渡します。あなたが CAPTCHA を解いて {"done": true} と返信すると、エージェントは作業を続けます。エージェントは、あなたが所有しているか利用を許可されているアカウントでのみ使ってください。詳しくは利用規定をご覧ください。
料金
料金はステップ単位で、高速モードは $0.006、日付ピッカー、地図、独自ウィジェット向けの高精度モードは $0.012 です。モデル料金は含まれており、実行料金はかかりません。ログインには 4〜8 ステップ、複数ページにわたる長いフォームには 15〜25 ステップかかります。各ステップには 1 分が含まれており、人の対応を待つ時間がそれを超えると 1 分あたり $0.005 がかかります。一時停止そのものはステップとして課金されません。実行は max_steps × ステップ単価に、human_timeout_minutes までの待機 1 回分を加えた額を仮押さえし、実際の利用分で精算されます。失敗した実行や停止した実行は、実行済みのステップ分を支払います。料金と、ベンチマークについてはブラウザエージェントのページをご覧ください。
よくある質問
二要素認証付きのログインが必要なフォームも AI で入力できますか?+
はい。2FA 付きのログインも自動化できます。パスワードと TOTP のシードをボールトのシークレットとして保存すると、エージェントがログインし、現在の 6 桁のコードを入力します。SMS やメールで届くコードの場合は、エージェントが一時停止するので、コードを返信してください。
モデルにパスワードは見えますか?+
いいえ。エージェントはシークレットの名前だけを扱い、各値は許可したサイトの該当するフィールドに入力される時点でのみ復号されます。6 文字以上のシークレットの値は、ページのテキスト、回答、データ、ステップのトレースから取り除かれます。
サイトに CAPTCHA が表示されたらどうなりますか?+
エージェントは CAPTCHA を解けません。1 時間有効なライブビューのリンクを通じて人にブラウザを引き渡し、その人が完了したと返信すると作業を再開します。
送信前に自分の承認を待たせることはできますか?+
はい。デフォルトの approve "risky" では、購入、注文、予約、メッセージ送信、削除、応募の前に一時停止します。approve を "submit" にするとすべての送信の前に一時停止し、"none" にするとエージェントが単独で送信します。
Claude Code などのエージェントからフォーム入力に使えますか?+
はい。MCP サーバーはブラウザエージェントを browser_run、browser_status、browser_reply、browser_takeover として公開しています。エージェントが渡すのはボールトのシークレット名だけで、値は渡しません。
データを送信するのではなく読み取る場合は Web データ抽出を、API の全体はブラウザエージェントのドキュメントをご覧ください。