Migrating providers

Banana Peel routes browser work across many runners. Prefer the native Browser Agent API for new integrations. If you already use a provider SDK, thin compatibility wrappers (HTTP + in-repo TypeScript packages under packages/wrappers/*) let you change base URL + key first, then adopt routing.

Recommended: native Responses call

// Preferred for new code — Banana Peel Browser Agent API
const res = await fetch(`${process.env.BANANA_PEEL_BASE}/api/v1/responses`, {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.BANANA_PEEL_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    model: "banana-peel",
    input: "Return JSON with the title and link count",
    url: "https://example.com",
    routing: "smart",
  }),
});

From Browserbase

Point @browserbasehq/sdk at Banana Peel's /api base and authenticate with a bp_live_… key. Sessions — live browsers you drive yourself — are proxied to a real Browserbase account, so your CDP / Playwright flow stays the same.

import Browserbase from "@browserbasehq/sdk";
import { chromium } from "playwright-core";
import { browserbaseSdkOptions } from "@bananapeel/browserbase";
// Or skip the helper and set apiKey + baseURL yourself.

const bb = new Browserbase(
  browserbaseSdkOptions({
    apiKey: process.env.BANANA_PEEL_API_KEY, // bp_live_…
    // baseURL → ${BANANA_PEEL_BASE}/api so SDK hits /api/v1/sessions
  }),
);

// projectId is optional / stripped — BP proxies to its Browserbase account
const session = await bb.sessions.create({});
const browser = await chromium.connectOverCDP(session.connectUrl);

// Prefer agent tasks? Use POST /api/v1/responses — routing: "smart" (default),
// or pin "browserbase" for provider parity

Details: Browserbase wrapper.

From Steel / Browser Use / Skyvern / Hyperbrowser

Use the matching wrapper package or HTTP route, or skip wrappers and call /api/v1/responses with routing set to that runner (or smart).

import { Steel } from "@bananapeel/steel";
// Local: import { Steel } from "../packages/wrappers/steel/src";

const client = new Steel({
  apiKey: process.env.BANANA_PEEL_API_KEY, // bp_live_…
  // baseURL defaults to production Cloud Run
});

// Agent task — smart-routed across all runners by default,
// Banana Peel envelope included
const task = await client.tasks.create({
  task: "Get the page title",
  url: "https://example.com",
  // routing: "steel", // optional pin for provider parity (or ["steel", "browserbase"])
});

const done = await client.tasks.waitForCompletion(task.id);
console.log(done.output, done.banana_peel?.runner);

// Optional: Steel sessions proxy (needs STEEL_API_KEY on the BP deployment)
// Or point official steel-sdk at Banana Peel:
// new Steel({ steelAPIKey: bpKey, baseURL: bpBase + "/api/wrappers/steel" })

See also

Command Palette

Search for a command to run...