Communitygithub.com

vercel-labs/derive-client

ブラウザのトラフィックをHARファイルに記録し、サイトの内部APIをリバースエンジニアリングして、ブラウザ不要で直接APIを呼び出すスタンドアロンクライアント(スクリプト、CLI、ライブラリ)を生成します。

derive-client とは?

このスキルは、ウェブサイトへの最初のアクセスにはブラウザを使い、その後の自動化ではブラウザを介さずに直接内部APIを呼び出すことで効率化するためのものです。ユーザーがサイトを操作する際のネットワークトラフィックをHARファイルに1回だけ記録し、その内容からリクエスト形状、レスポンススキーマ、認証情報を抽出して、対象のフローを再現する関数群を持つクライアントコードを自動生成します。対応プラットフォームはagent-browser(HARキャプチャとブラウザ操作)とjq(HAR解析)で、生成されたクライアントは任意の言語・環境で動作します。このアプローチにより、同じサイトへの複数回のアクセスを劇的に高速化し、ブラウザ駆動に伴うオーバーヘッドやレート制限のリスクを低減します。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/vercel-labs/agent-browser/tree/main/skill-data/derive-client

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

記録セッションからAPIクライアントを導出する

ブラウザを駆動するのは最初の訪問には適したツールですが、100回目には適していません。このスキルは、サイトを使用している間に一度だけネットワークトラフィックを記録し、そのキャプチャしたリクエストを、サイト内部APIと直接通信するスタンドアロンクライアント(スクリプト、CLI、ライブラリ)に変換します。

記録だけですべての情報が含まれています。agent-browserはデフォルトでテキストレスポンスボディ(JSON/HTML/JS)をHARに埋め込むため、ブラウザを閉じた後でもエンドポイントの形状をオフラインで調査できます。

ワークフロー

1. 記録     HARキャプチャを開始し、クライアントに必要なフローを実行する
2. 特定     ノイズの中から実際のAPIエンドポイントを見つける
3. 抽出     リクエスト形状、レスポンススキーマ、認証情報を抽出する
4. 生成     フローごとに関数を持つクライアントを記述する
5. 検証     完了宣言前にすべてのエンドポイントを実際に呼び出す

1. 記録

agent-browser network har start          # デフォルトでテキストレスポンスボディを埋め込む
# ... サイトを操作する: 検索、詳細ページを開く、ページネーションなど ...
agent-browser network har stop /tmp/site.har
  • クライアントがサポートするすべてのフローを実行し、それぞれを異なる入力(2つの検索語、2つの詳細ページ)で少なくとも2回実行します。記録されたURLを差分比較することで、どの部分がパラメータかを特定できます。
  • サイトにログインが必要な場合は、HARを開始する前にログインして、認証情報が不要に記録されないようにします。セッションクッキーはステップ3で別途エクスポートします。
  • --content all はバイナリボディも埋め込みます(base64)。--content none は埋め込みを無効にします。ボディあたりの上限は2MBです。

セッションが開いている間は、agent-browser network requests および network request <id> でも同じデータを対話的に取得できます。ただし、ブラウザのナビゲーションやクローズ後も保持されるのはHARのみであるため、複数ページにまたがる操作にはHARを使用することを推奨します。

2. エンドポイントの特定

jq を使用してHARをクエリします:

# すべてのJSON API呼び出し: メソッド、URL、ステータス
jq -r '.log.entries[]
  | select(.response.content.mimeType | test("json"))
  | "\(.request.method) \(.response.status) \(.request.url)"' /tmp/site.har

アナリティクスやインフラストラクチャのノイズは無視します: テレメトリアップポイント(/collect、/track、/beacon、/log)、サードパーティドメイン(google-analytics、segment、sentry、datadog、intercom、hotjar)、静的アセット。実際のAPIは通常、ファーストパーティ、JSON、そして実行したアクションと相関しています。

3. 形状と認証情報の抽出

# 1つのエンドポイントの詳細: リクエストヘッダー、POSTボディ、レスポンスボディ
jq '.log.entries[] | select(.request.url | test("api/search"))
  | {request: {method: .request.method, headers: .request.headers,
     postData: .request.postData.text},
     response: .response.content.text}' /tmp/site.har
  • レスポンススキーマ: .response.content.text を読む — これが実際のペイロードであり、型を導出するために使用します。
  • 認証: エンドポイント間でリクエストヘッダーを比較します。authorization、cookie、x-csrf-token、x-api-key、およびサイト固有の x-* ヘッダーを探します。重要なものだけを再生 — ステップ5で省略してテストします。
  • クッキー: agent-browser cookies get --json > cookies.json でライブセッションをエクスポートし、クライアントが実行時に読み込めるようにします。生成されたソースにクッキー値をハードコードしないでください。

4. クライアントの生成

  • 記録されたフローごとに1つの関数(search(query)、getItem(id))を、観測されたレスポンスボディから型付けして作成します。
  • 認証情報(クッキー、ベアラートークン)はファイルまたは環境変数から読み込み、期限切れ時にユーザーにブラウザログインの再実行を促す明確なエラーメッセージを表示します。
  • APIが実際に必要とするヘッダーを再現します — 一部のサイトでは user-agent、referer、x-requested-with が一致しないと403になります。
  • 記録されたクエリ文字列に現れたページネーション、ソート、フィルタパラメータは関数のオプションとして保持します。

5. 検証

生成されたすべての関数を実際のAPIに対して呼び出し、レスポンスの形状を記録と比較します。一般的な障害:

症状原因修正
401/403期限切れまたは欠落したセッションagent-browserで再ログインし、クッキーを再エクスポート
403/419(書き込み時)CSRFトークンがセッションごとまたはフォームごとに異なるまずトークンエンドポイントを取得するか、そのフローはブラウザ駆動のままにする
動作してから壊れる署名付き/有効期限付きのリクエストパラメータそのステップはブラウザにフォールバックし、残りは導出する
HARと異なる形状A/Bテストや地域依存のレスポンス再記録し、結合をオプションフィールドとして扱う

注意点

  • 内部APIはバージョン管理されておらず、予告なく変更されることがあります。クライアントを再導出できるようにHARを保持してください。
  • サイトの利用規約とレート制限を尊重し、バルクフェッチには遅延を追加してください。
  • HARファイルにはライブセッションの認証情報(クッキー、トークン、POSTボディ)が含まれています。機密情報として扱い、バージョン管理から除外し、使用後は削除してください。

Individual skills in this repo

This repo contains 8 individual skills — each has its own dedicated page.

agent-browser

Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to

vercel-labs/agentcore

Run agent-browser on AWS Bedrock AgentCore cloud browsers. Use when the user wants to use AgentCore, run browser automation on AWS, use a cloud browser with AWS credentials, or needs a managed browser session backed by AWS infrastructure. Triggers include "use agentcore", "run on AWS", "cloud browser with AWS", "bedrock browser", "agentcore session", or any task requiring AWS-hosted browser automation.

vercel-labs/dogfood

Systematically explore and test a web application to find bugs, UX issues, and other problems. Use when asked to "dogfood", "QA", "exploratory test", "find issues", "bug hunt", "test this app/site/platform", or review the quality of a web application. Produces a structured report with full reproduction evidence -- step-by-step screenshots, repro videos, and detailed repro steps for every issue -- so findings can be handed directly to the responsible teams.

vercel-labs/electron

Automate Electron desktop apps (VS Code, Slack, Discord, Figma, Notion, Spotify, etc.) using agent-browser via Chrome DevTools Protocol. Use when the user needs to interact with an Electron app, automate a desktop app, connect to a running app, control a native app, or test an Electron application. Triggers include "automate Slack app", "control VS Code", "interact with Discord app", "test this Electron app", "connect to desktop app", or any task requiring automation of a native Electron application.

vercel-labs/protected-vercel-deployments

Access and test Vercel deployments protected by Vercel Authentication, SSO, or Deployment Protection with agent-browser. Use when a preview or production URL redirects to a Vercel login page, returns a protection 401 or 403, or needs short-lived Trusted Sources OIDC authentication instead of a static bypass secret or public exception.

vercel-labs/slack

Interact with Slack workspaces using browser automation. Use when the user needs to check unread channels, navigate Slack, send messages, extract data, find information, search conversations, or automate any Slack task. Triggers include "check my Slack", "what channels have unreads", "send a message to", "search Slack for", "extract from Slack", "find who said", or any task requiring programmatic Slack interaction.

vercel-labs/vercel-sandbox

Run agent-browser + Chrome inside Vercel Sandbox microVMs for browser automation from any Vercel-deployed app. Use when the user needs browser automation in a Vercel app (Next.js, SvelteKit, Nuxt, Remix, Astro, etc.), wants to run headless Chrome without binary size limits, needs persistent browser sessions across commands, or wants ephemeral isolated browser environments. Triggers include "Vercel Sandbox browser", "microVM Chrome", "agent-browser in sandbox", "browser automation on Vercel", or any task requiring Chrome in a Vercel Sandbox.

vercel-labs/webmcp-gen

Build and validate experimental WebMCP tools for an existing web page. Use when an agent needs to expose a site's real workflows as page tools, create webmcp.init.js, define deterministic checks, or compare WebMCP with accessibility-tree automation.

関連スキル