Nephew — Help

nephew

Your logged-in identity, in any agent sandbox.

PORTABLE · CONTINUOUS · YOURS

Nephew is the profile layer for the sandbox providers you already use. It carries one logged-in browser identity — cookies, session state, a coherent fingerprint, and a pinned egress IP — into Modal, Steel, Browser Use, and Browserbase. It is not another sandbox, and it does not replace them: your jobs still run on your provider, under your account. Nephew is the identity they run as.

Start here

curl -fsSL https://nephew.ai/install | sh

nephew init                 # connect your own provider accounts
nephew capture              # sign in once, in your own browser
nephew run <job> --provider modal|steel|browseruse|browserbase
nephew run <job> --provider steel --handoff   # if challenged, take over live
nephew receipt verify <file>                 # verify a signed run receipt

Every run opens with a three-line trust receipt — the profile, the fingerprint it must match, and the egress it must come from:

profile     modal-proxy-20261030 · owner-held bundle · loaded from your vault
fingerprint 2ef43e20ca · seed 1000 · windows/Chrome
egress      brightdata-zone-isp_proxy3 · pinned

What you bring

There is no Nephew account to create and no Nephew cloud in the middle.

The keys the CLI reads from your environment:

PROFILE_ENCRYPTION_KEY  bundle decryption key (capture + live runs)
MODAL_TOKEN_ID / MODAL_TOKEN_SECRET  Modal connection (provider: modal)
STEEL_API_KEY / BROWSER_USE_API_KEY / BRIGHTDATA_API_KEY  provider keys (nephew init checks them)

How it works

  1. Capture once. Sign in once; the session is sealed into an encrypted bundle you hold — profile state, fingerprint recipe, pinned proxy reference. Keys never leave your machine.
    nephew capture [--name <id>] [--human <who>] [--bundle <dir>] [--sites <url,url>] [--seed <n>]
  2. Run anywhere. nephew run starts your provider sandbox, measures the live browser, and checks it against the recipe. The fingerprint gate must accept before any state is released — on mismatch, the run refuses.
    nephew run <job> --provider steel|browseruse|modal|browserbase [--dry-run] [--bundle <dir>] [--handoff [--handoff-ttl <seconds>] [--handoff-port <n>]]
  3. Challenged? Hand off, live. If a site challenges the run, it pauses with LOGIN_REQUIRED. On Steel, Browser Use, and Browserbase the run can hold its live session instead of closing it: the profile's designated human opens a local page, watches the session stream live, and fixes the login in place with their own mouse and keyboard. One controller, a per-handoff token, and a hard deadline (6 minutes by default) that late arrival cannot extend. Hand control back and the fixed session is captured into the same bundle; end the run and nothing is captured. Modal cannot attach a live handoff yet — its browser runs inside the sandbox with no host-side session to lend — so a Modal run that needs a login returns the plain pause.
  4. Capture back. When the job ends, the live session is sealed back into the same bundle. One identity, no forks — the next run, on any provider, continues where the last one stopped.

Signed run receipts

A run leaves a signed record: profile, run, provider, the fingerprint hashes it measured, the egress it observed, start and end times, the outcome, how many minutes of human attention it took, and whether a handoff was used. The receipt is signed with your own Ed25519 key — the same key that signs nephew revoke's deletion receipt — and stored in ~/.nephew/receipts/. Anyone you hand it to can verify it against your public key:

nephew receipt verify <file>   # PASS, or FAIL naming the field that changed

That is the compliance shape of the product: a run's record that a third party can check without trusting us, because there is no Nephew server in the middle to trust.

Trust facts, for the curl | sh skeptic

nephew revoke [--bundle <dir>] [--key-file <file>] [--receipt <file>]

Compatibility

Today: Modal, Steel, Browser Use, Browserbase — the same bundle, the same gate, all four. On Browserbase the bundle is the only state a session sees: Nephew never uses Browserbase Contexts (their provider-native persistent profiles), and sessions are created with your API key alone — no project id, no stored profile on their side.

Measured proof

Plain limits

Surfaces

The nephew CLI (init · capture · run · revoke · receipt verify), an MCP server (nephew mcp) exposing the profile_run tool with the same gate, a structured LOGIN_REQUIRED pause result, and — on Steel, Browser Use, and Browserbase — the live handoff handle routed with it, and a TypeScript helper (withProfile) that wraps a job function in a carried identity — Steel, Browser Use, and Browserbase today; Modal runs through the CLI. A Python decorator (with_profile, in the nephew Python package) wraps a Python job the same way, over the same gate and the same signed run receipts.

Start the MCP server (stdio):

nephew mcp

A profile_run call:

{ "tool": "profile_run",
  "args": { "job": "nightly-recon", "provider": "steel", "bundle": "/path/to/bundle" } }

The TypeScript helper:

import { withProfile } from "./src/with-profile.ts";
await withProfile(bundleDir, "steel", async ({ cdp, sessionId }) => {
  // already logged in as the owner — no login code in this file
});

The Python decorator:

from nephew import with_profile
from playwright.sync_api import sync_playwright

with with_profile(bundle="/path/to/bundle", provider="steel") as session:
    with sync_playwright() as pw:
        browser = pw.chromium.connect_over_cdp(session.cdp_url)
        # already logged in as the owner — no login code here

Reading this as an agent? The machine-readable twin of this page is /llms.txt, and the structured manifest is /nephew.json.

Plans

Your login, your device identity, your IP — in any agent run.

Free$02 profiles, BYO mode · 1 hosted run-hour trial · concurrency 1
BYO$19/mo10 profiles on your own Modal, Steel, Browser Use, Browserbase or Bright Data accounts · unlimited run-hours — you pay your providers directly · extra profiles $3/mo · concurrency 3
Hosted$59/mo5 profiles, each with its own dedicated ISP IP · 30 run-hours included, then $0.60/run-hour · concurrency 3
Hosted Team$199/mo20 profiles with dedicated ISP IPs · 200 run-hours included, then $0.50/run-hour · profile sharing, priority support · concurrency 10
EnterpriseCustomUnlimited profiles · own-stack / BYOC deploy, SSO, custom regions, SLA

You pay for profiles — identities you own and can revoke or take elsewhere — and for run-hours, the time an agent spends logged in as you. No per-seat fees. We never store your keys.