This command group ships in the
praisonai-browser package. Running it inside praisonai triggers auto-install via the ensure_praisonai_browser() bootstrap helper. You can also invoke the standalone entry point directly with praisonai-browser ….Standalone Entry Point
Thepraisonai-browser console script mirrors every praisonai browser subcommand.
Commands
Doctor
Check browser health and configuration:Doctor Extension
Check whether the Chrome extension is working. This command reports two independent signals — the bridge connection is ground truth, the CDP check is optional.
Two signals:
- Bridge connection (ground truth) — queries
http://localhost:<server-port>/healthand reads theextension_connectionscount.✅ Extension connected to bridge (N connection(s))means the extension is working, regardless of which Chrome profile it runs in. - CDP :9222 (optional) — a service-worker check on the debug port. Shown as
ℹ️ Extension not in CDP Chrome on port 9222 (normal for daily 'Work' Chrome).— this is info only and is not a failure on its own.
doctor extension exits 0 when the bridge shows at least one extension connection (regardless of the CDP result), and exits 1 only when the bridge shows zero extension connections.
extension_connections counts only clients whose WebSocket Origin starts with chrome-extension://. Servers older than PraisonAI #3115 don’t return this field; the CLI falls back to the total connections count in that case (slightly noisier, but still works).Launch
Launch Chrome with the PraisonAI extension:Manual Load Fallback
Auto-load can fail silently on Chrome 137+ / Windows, which now blocks automated--load-extension. When the extension doesn’t connect, launch prints a manual “Load unpacked” recovery flow. The instructions differ by flag:
- Default — the bridge is running, so it points you to
curl http://127.0.0.1:<server-port>/health(expectextension_connections >= 1). --no-server— no bridge was started, so it tells you to runpraisonai browser startfirst, then verify withpraisonai browser doctor extension.
Run
Run a browser agent with a specific goal:run fails fast: it checks the bridge, honours typed exit codes, and aborts a stalled session in 30 seconds instead of hanging silently.
Pre-flight check
run hits GET http://127.0.0.1:8765/health with a 3-second timeout before opening the WebSocket, so a missing bridge or extension fails in seconds instead of hanging on the full --timeout. Three failures land here:
The “no extension” message lists four recovery steps: open Chrome with the PraisonAI extension and side panel, verify with
curl http://127.0.0.1:8765/health (expect extension_connections >= 1), use the side panel or the CLI (not both), and — as a tip — use --engine cdp for extension-free automation.
Exit codes
run returns a stable exit code you can script against in CI, cron, or make targets.
These codes apply to both normal and
--debug runs, so 2 always means “fix the environment” and 1 always means “the prompt or page didn’t work out.”
First-step watchdog
When the server can’t confirm the task reached an extension,run aborts after 30 seconds if no automation step has appeared:
2. The watchdog applies only when delivery is unconfirmed — a confirmed run honours --timeout fully, so a slow first step from a cold browser or slow initial model call is legitimate. Steps that arrive right at the deadline are shown before the watchdog fires.
Verbose delivery indicator
Add-v to see whether the task reached an extension once the session starts:
False, run fails fast with Extension automation did not start. (exit 2) instead of polling an empty session until timeout.
Common failures
Bridge down
Bridge down
The bridge server is not running. Start it in a separate terminal, then verify:
The failing layer is the local bridge server on port 8765, not the site named in
--url. This message replaces the raw WinError 1225 (Windows), errno 111 (Linux), and errno 61 (macOS) connection-refused errors, so those still land here when searched.No extension connected
No extension connected
The bridge is up but no extension is attached. Open Chrome with the PraisonAI extension and side panel, then confirm the count:For extension-free automation, use
--engine cdp instead.Side panel busy
Side panel busy
The side panel agent and the CLI can’t drive the same extension at once. Stop the side panel run, then retry from the CLI. You can confirm the bridge is idle with:
run surfaces server errors with a friendly message and exits 2:Two ways to start a session
praisonai browser run isn’t the only entry point — you can also start automation from the side panel inside Chrome. Only one at a time can drive the extension.
The side panel opens its own extension-origin WebSocket to the bridge and sends start_session on it. The bridge treats that connection as the extension itself (rather than self-excluding it as “no extension available”), so a side-panel task no longer fails with NO_EXTENSION on a single-extension setup.
While a side-panel session is running, /health reports extension_busy: true and active_session_id: <session_id>. A concurrent praisonai browser run in that state is rejected at the pre-flight check with:
2. The reverse also holds: starting a side-panel run while run is active is rejected the same way.
Navigate
Navigate a browser tab to a URL:Screenshot
Capture a screenshot of the current page:Pages
List all open browser pages/tabs:DOM
Get the DOM tree from a browser page:Content
Read page content as text:JS / Execute
Execute JavaScript in a browser page:Sessions
List browser automation sessions:completed, failed, stopped, or cancelled. cancelled covers mid-run disconnects (extension quit, CLI Ctrl-C, tab closed) — all four now stamp ended_at in the SQLite store, so sessions and history show accurate durations for interrupted runs.
History
Show step-by-step history for a session:Examples
Web Scraping Workflow
Using Browser Agent
Browser Health Check
Chrome Management
Start Server
Chrome Subcommands
Extension Subcommands
Environment Variables
Related
Bot CLI
Deploy messaging bots
Sandbox CLI
Sandbox container management

