Prefer tabs for one browser identity
For a personal assistant or another workflow where concurrent tasks act as the same end user, start one browser with that user’s profile and open multiple tabs in it. Tabs in the same browser context share a live cookie jar and persistent origin storage, so a login or cookie update in one tab is available to the others without loading the profile again or restarting Chrome. Tab-local state such assessionStorage remains separate.
Open additional tabs with Playwright’s context.newPage(). Keep each task on its own Page, and coordinate actions that change shared account or browser state. See Playwright Execution for ways to run code against the browser.
Use separate browser sessions when tasks need isolation, different proxies or browser settings, or independent failure and lifecycle boundaries. Each browser loads its own profile snapshot, so changes don’t propagate between those sessions while they run.
Use one writer and many readers
Multiple browsers can safely load the same profile when they don’t save changes. If a workflow needs to persist state, designate one browser as the writer and setsave_changes: true only on that browser.
If multiple browsers write to the same profile, the browser that ends last overwrites changes saved by the others. Use a separate profile per independent writer when each browser needs durable state.
Detect active writers
Before starting a writer, list active browsers matching the profile ID and checkprofile_save_changes.
Understand running-browser behavior
Saving a profile doesn’t update browsers that are already running with it. Those browsers keep the snapshot they loaded at startup. If the work can share one browser identity, keep it in that browser and use multiple tabs so every task sees live state. To apply a profile that was saved by another browser, start a new browser with the updated profile. You can also load the profile into a running browser that started without one, but loading restarts Chromium and disconnects CDP clients. See Load a profile after browser creation.Use profiles with browser pools
A profile configured directly on a browser pool is read-only. Every browser in the pool shares that baseline, sosave_changes on the pool profile is ignored.
For per-user durable state:
- Create the pool without a profile.
- Acquire a browser.
- Attach the user’s profile with
save_changes: true. - Release the browser with
reuse: falseso that user’s state can’t reach the next acquirer.
refresh_on_profile_update replaces idle browsers after that profile is saved. Acquired browsers keep their existing state until they are released. See Refresh on profile update.