Stagehand constructor
// Basic usage
// Defaults to Browserbase; if no API key is provided, it will default to LOCAL
// Default model is gpt-4o
const stagehand = new Stagehand();
// Custom configuration
const stagehand = new Stagehand({
env: "LOCAL",
// env: "BROWSERBASE", // To run remotely on Browserbase (needs API keys)
verbose: 1,
enableCaching: true,
logger: (logLine: LogLine) => {
console.log(`[${logLine.category}] ${logLine.message}`);
},
// LLM configuration
modelName: "google/gemini-2.0-flash", /* Name of the model to use in "provider/model" format */
modelClientOptions: {
apiKey: process.env.GOOGLE_GENERATIVE_AI_API_KEY, /* Model API key */
}, /* Configuration options for the model client */
apiKey: process.env.BROWSERBASE_API_KEY,
projectId: process.env.BROWSERBASE_PROJECT_ID,
/* API keys for authentication (if you want to use Browserbase) */
browserbaseSessionID:
undefined, /* Can set Session ID for resuming Browserbase sessions */
browserbaseSessionCreateParams: { /* Browser Session Params */
projectId: process.env.BROWSERBASE_PROJECT_ID!,
proxies: true, /* Using Browserbase's Proxies */
browserSettings: {
advancedStealth: true, /* Only available on Scale Plans */
blockAds: true, /* To Block Ad Popups (defaults to False) */
viewport: { // Browser Size (ie 1920x1080, 1024x768)
width: 1024,
height: 768,
},
},
},
localBrowserLaunchOptions: {
headless: true, // Launches the browser in headless mode.
executablePath: '/path/to/chrome', // Custom path to the Chrome executable.
args: ['--no-sandbox', '--disable-setuid-sandbox'], // Additional launch arguments.
env: { NODE_ENV: "production" }, // Environment variables for the browser process.
handleSIGHUP: true,
handleSIGINT: true,
handleSIGTERM: true,
ignoreDefaultArgs: false, // or specify an array of arguments to ignore.
proxy: {
server: 'http://proxy.example.com:8080',
bypass: 'localhost',
username: 'user',
password: 'pass'
},
tracesDir: '/path/to/traces', // Directory to store trace files.
userDataDir: '/path/to/user/data', // Custom user data directory.
acceptDownloads: true,
downloadsPath: '/path/to/downloads',
extraHTTPHeaders: { 'User-Agent': 'Custom Agent' },
geolocation: { latitude: 37.7749, longitude: -122.4194, accuracy: 10 },
permissions: ["geolocation", "notifications"],
locale: "en-US",
viewport: { width: 1280, height: 720 },
deviceScaleFactor: 1,
hasTouch: false,
ignoreHTTPSErrors: true,
recordVideo: { dir: '/path/to/videos', size: { width: 1280, height: 720 } },
recordHar: {
path: '/path/to/har.har',
mode: "full",
omitContent: false,
content: "embed",
urlFilter: '.*'
},
chromiumSandbox: true,
devtools: true,
bypassCSP: false,
cdpUrl: 'http://localhost:9222',
preserveUserDataDir: false, // Whether to preserve the user data directory after Stagehand is closed. Defaults to false.
},
});
// Resume existing Browserbase session
const stagehand = new Stagehand({
env: "BROWSERBASE",
browserbaseSessionID: "existing-session-id",
});
import os
from stagehand import Stagehand
# Basic usage
# Defaults to Browserbase; if no API key is provided, it will default to LOCAL
# Default model is gpt-4.1-mini
stagehand = Stagehand()
# Custom configuration
def custom_logger(log_line):
print(f"[{log_line.category}] {log_line.message}")
stagehand = Stagehand(
env="LOCAL",
# env="BROWSERBASE", # To run remotely on Browserbase (needs API keys)
verbose=1,
enable_caching=True,
logger=custom_logger,
# LLM configuration
model_name="google/gemini-2.0-flash", # Name of the model to use in "provider/model" format
model_api_key=os.getenv("GOOGLE_GENERATIVE_AI_API_KEY"), # Model API key
api_key=os.getenv("BROWSERBASE_API_KEY"),
project_id=os.getenv("BROWSERBASE_PROJECT_ID"),
# API keys for authentication (if you want to use Browserbase)
browserbase_session_id=None, # Can set Session ID for resuming Browserbase sessions
browserbase_session_create_params={ # Browser Session Params
"project_id": os.getenv("BROWSERBASE_PROJECT_ID"),
"proxies": True, # Using Browserbase's Proxies
"browser_settings": {
"advanced_stealth": True, # Only available on Scale Plans
"block_ads": True, # To Block Ad Popups (defaults to False)
"viewport": { # Browser Size (ie 1920x1080, 1024x768)
"width": 1024,
"height": 768,
},
},
},
local_browser_launch_options={
"headless": True, # Launches the browser in headless mode.
"executable_path": "/path/to/chrome", # Custom path to the Chrome executable.
"args": ["--no-sandbox", "--disable-setuid-sandbox"], # Additional launch arguments.
"env": {"NODE_ENV": "production"}, # Environment variables for the browser process.
"handle_sighup": True,
"handle_sigint": True,
"handle_sigterm": True,
"ignore_default_args": False, # or specify a list of arguments to ignore.
"proxy": {
"server": "http://proxy.example.com:8080",
"bypass": "localhost",
"username": "user",
"password": "pass"
},
"traces_dir": "/path/to/traces", # Directory to store trace files.
"user_data_dir": "/path/to/user/data", # Custom user data directory.
"accept_downloads": True,
"downloads_path": "/path/to/downloads",
"extra_http_headers": {"User-Agent": "Custom Agent"},
"geolocation": {"latitude": 37.7749, "longitude": -122.4194, "accuracy": 10},
"permissions": ["geolocation", "notifications"],
"locale": "en-US",
"viewport": {"width": 1280, "height": 720},
"device_scale_factor": 1,
"has_touch": False,
"ignore_https_errors": True,
"record_video": {"dir": "/path/to/videos", "size": {"width": 1280, "height": 720}},
"record_har": {
"path": "/path/to/har.har",
"mode": "full",
"omit_content": False,
"content": "embed",
"url_filter": ".*"
},
"chromium_sandbox": True,
"devtools": True,
"bypass_csp": False,
"cdp_url": "http://localhost:9222",
},
)
# Resume existing Browserbase session
stagehand = Stagehand(
env="BROWSERBASE",
browserbase_session_id="existing-session-id",
)
Arguments: ConstructorParams
- TypeScript
- Python
Defaults to
'BROWSERBASE'Your Browserbase API key. Defaults to
BROWSERBASE_API_KEY environment variableYour Browserbase project ID. Defaults to
BROWSERBASE_PROJECT_ID environment variableEnables access to experimental features.
Whether to use the stagehand API. Defaults to
true when env: "BROWSERBASE".Configuration options for creating new Browserbase sessions. More information on browserbaseSessionCreateParams can be found here.
Show properties
Show properties
Show properties
Show properties
The uploaded Extension ID. See Upload Extension.
See usage examples in the Stealth Mode page.
Show properties
Show properties
Available options:
1, 2Available options:
chrome, edge, firefox, safariAvailable options:
desktop, mobileNote:
operatingSystems set to ios or android requires devices to include "mobile".
Available options: android, ios,linux, macos, windowsEnable or disable ad blocking in the browser. Defaults to
false.Enable or disable captcha solving in the browser. Defaults to
true.Enable or disable session recording. Defaults to
true.Advanced Browser Stealth Mode.
The uploaded Extension ID. See Upload Extension.
Set to true to keep the session alive even after disconnections. This is available on the Browserbase Startup plan only.
Proxy configuration. Can be true for default proxy, or an array of proxy configurations.
The region where the Session should run. Available options:
us-west-2, us-east-1, eu-central-1, ap-southeast-1Duration in seconds after which the session will automatically end. Defaults to the Project’s defaultTimeout.
Required range:
60 < x < 21600Arbitrary user metadata to attach to the session. For more information about user metadata, see UserMetadata
Show Properties
Show Properties
userMetadata.
{key} anyID of an existing Browserbase session to resume
Specifying the default language model to use. Format supported is
{provider}/{modelName}. For a list of supported providers, see Available Providers.Configuration options for the language model client (i.e.
apiKey)Enables caching of LLM responses. When set to
true, the LLM requests will be cached on disk and reused for identical requests. Defaults to falseSpecifies the timeout in milliseconds for waiting for the DOM to settle. Defaults to
30_000 (30 seconds)message is a LogLine object. Handles log messages. Useful for custom logging implementations. For more information, see the Logging pageWhether Pino should be disabled for logging. This is helpful for Next.js or test environments. Pino will automatically be disabled if a custom
logger is defined.Enables several levels of logging during automation:
0: ERROR (limited to no logging)1: INFO (SDK-level logging)2: DEBUG (Detailed logging and tracing)
A custom system prompt to use for the LLM in addition to the default system prompt for act, extract, and observe methods.
Enables self-healing mode. When set to
true, Stagehand will attempt to recover from errors (eg. outdated cached element not resolving) by retrying the last action. Defaults to true. Set to false to disable LLM inference on cache errors.Provides comprehensive options for local browser instances.
Show properties
Show properties
Additional command-line arguments to pass to the browser.
Enable or disable Chromium’s sandbox.
Open the browser’s developer tools on launch.
Environment variables for the browser process.
Path to the browser executable.
Option to handle the SIGHUP signal.
Option to handle the SIGINT signal.
Option to handle the SIGTERM signal.
Launches the browser in headless mode.
Ignore all default arguments or specify an array to ignore.
Directory to store trace files.
Custom user data directory.
Allow file downloads.
Directory where downloads are saved.
Additional HTTP headers to send with each request.
Indicates if the device has touch capabilities.
Whether to ignore HTTPS errors.
Sets the browser’s locale.
Array of permissions to grant (e.g., “geolocation”, “notifications”).
Device scale factor for high-DPI displays.
Timezone to emulate (e.g., “America/Los_Angeles”).
Whether to bypass Content Security Policy.
Array of cookies to initialize the browser session.
URL for the Chrome DevTools Protocol. Useful for connecting to a running browser instance.
Whether to preserve the user data directory after Stagehand is closed. This is useful for reusing local context with multiple sessions. Defaults to false.
Defaults to
'BROWSERBASE'Your Browserbase API key. Defaults to
BROWSERBASE_API_KEY environment variableYour Browserbase project ID. Defaults to
BROWSERBASE_PROJECT_ID environment variableEnables access to experimental features.
Whether to use the stagehand API. Defaults to
true when env: "BROWSERBASE".Configuration options for creating new Browserbase sessions. More information on browserbaseSessionCreateParams can be found here.
Show properties
Show properties
Show properties
Show properties
The uploaded Extension ID. See Upload Extension.
See usage examples in the Stealth Mode page.
Show properties
Show properties
Available options:
1, 2Available options:
chrome, edge, firefox, safariAvailable options:
desktop, mobileNote:
operatingSystems set to ios or android requires devices to include "mobile".
Available options: android, ios,linux, macos, windowsEnable or disable ad blocking in the browser. Defaults to
false.Enable or disable captcha solving in the browser. Defaults to
true.Enable or disable session recording. Defaults to
true.Advanced Browser Stealth Mode.
The uploaded Extension ID. See Upload Extension.
Set to true to keep the session alive even after disconnections. This is available on the Browserbase Startup plan only.
Proxy configuration. Can be true for default proxy, or an array of proxy configurations.
The region where the Session should run. Available options:
us-west-2, us-east-1, eu-central-1, ap-southeast-1Duration in seconds after which the session will automatically end. Defaults to the Project’s defaultTimeout.
Required range:
60 < x < 21600Arbitrary user metadata to attach to the session. For more information about user metadata, see UserMetadata
Show Properties
Show Properties
userMetadata.
{key} anyID of an existing Browserbase session to resume
Specifying the default language model to use. Format supported is
{provider}/{model_name}. For a list of supported providers, see Available Providers.Configuration options for the language model client (i.e.
apiKey)Specifies the timeout in milliseconds for waiting for the DOM to settle. Defaults to
30_000 (30 seconds)message is a LogLine object. Handles log messages. Useful for custom logging implementations. For more information, see the Logging pageEnables several levels of logging during automation:
0: ERROR (limited to no logging)1: INFO (SDK-level logging)2: DEBUG (Detailed logging and tracing)
A custom system prompt to use for the LLM in addition to the default system prompt for act, extract, and observe methods.
Enables self-healing mode. When set to
true, Stagehand will attempt to recover from errors (eg. outdated cached element not resolving) by retrying the last action. Defaults to true. Set to false to disable LLM inference on cache errors.Specifies the timeout in milliseconds for act commands. Defaults to
30_000 (30 seconds)Launches the browser in headless mode.
Whether to use Rich for colorized logging. Defaults to
true.Provides comprehensive options for local browser instances.
Show properties
Show properties
Additional command-line arguments to pass to the browser.
Enable or disable Chromium’s sandbox.
Open the browser’s developer tools on launch.
Environment variables for the browser process.
Path to the browser executable.
Option to handle the SIGHUP signal.
Option to handle the SIGINT signal.
Option to handle the SIGTERM signal.
Launches the browser in headless mode.
Ignore all default arguments or specify an array to ignore.
Directory to store trace files.
Custom user data directory.
Allow file downloads.
Directory where downloads are saved.
Additional HTTP headers to send with each request.
Indicates if the device has touch capabilities.
Whether to ignore HTTPS errors.
Sets the browser’s locale.
Array of permissions to grant (e.g., “geolocation”, “notifications”).
Device scale factor for high-DPI displays.
Timezone to emulate (e.g., “America/Los_Angeles”).
Whether to bypass Content Security Policy.
Array of cookies to initialize the browser session.
URL for the Chrome DevTools Protocol. Useful for connecting to a running browser instance.
Whether to preserve the user data directory after Stagehand is closed. This is useful for reusing local context with multiple sessions. Defaults to false.
Returns: Stagehand object
The constructor returns an instance of theStagehand class configured with the specified options. However, to use Stagehand, you must still initialize it with init().
stagehand.init()
await stagehand.init();
await stagehand.init()
init() asynchronously initializes the Stagehand instance. It should be called before any other methods.
stagehand.close()
await stagehand.close();
await stagehand.close()
close() is a cleanup method to remove the temporary files created by Stagehand. It’s recommended that you call this explicitly when you’re done with your automation.
