Default profiles
Every user has a default profile per browser flavor (for examplechromium): a browser that remembers you across sessions. You upload nothing and track no ids.
Browser that follows the default profile
- First use creates it. If you have no default yet, the session creates an empty profile and marks it as your default when it starts. Sign in to your sites once (for example in the session’s live view) and the state carries forward.
- Sessions save back automatically. Each session writes its final state back when it ends. Best-effort: when several default-profile sessions run at once, the first to start writes and the others run read-only. They never fail over it.
- Exclusive with
browser_profile_id. Name a profile or follow the default, not both.
default-<browser>-.... Delete one and the next default-profile session starts from a fresh empty default.
Choosing your own default
Promote a profile you curated (for example one you uploaded). You can only mark profiles you created yourself. Profile objects report their status inis_default.
Persisting state back into the profile
A profile named withbrowser_profile_id is read-only by default: the session discards whatever the run changes (new cookies, refreshed tokens, dismissed banners), so its logins age out. Set persist_browser_profile: true to write the final state back when the session ends.
Browser that keeps its profile fresh
- One writer at a time. A persisting session holds an exclusive write lock until it ends. A second session asking to persist the same profile still starts, but read-only. Any number of sessions can load a profile read-only in parallel. For a run that must persist (like a scheduled login-refresh job), check the session’s effective persist state after creation and reschedule if it was downgraded.
- Last write wins. The session’s final state replaces the stored state. It is not merged.
- Decided at create time. Request persistence when creating the session, not when attaching to one.
- Best-effort on stop. If the write-back fails, the session still stops cleanly and the profile keeps its previous state.
Upload your own profile
Upload a profile when you want to bring logins built outside H. You build a Chrome user-data directory (the folder holding cookies, local storage, saved logins, and extensions), zip it, and upload it.Creating a profile
--password-store=basic makes cookies portable: Chrome encrypts them with a built-in key that the session runner also uses. Without it, the agent starts logged out.
- Docker (any OS)
- Linux Chrome
You need Docker. The image tag is pinned to the runner’s Chromium, so do not use
:latest.Uploading a profile
The archive goes straight to object storage through a presigned URL, never through the Agents API.1
Initiate the upload
POST /initiate-upload returns a profile_id, a presigned upload_url, and the upload_fields to send with the file.2
Upload the archive to storage
POST the .zip to upload_url as multipart/form-data, with every entry of upload_fields, unmodified. The archive must be application/zip, at most 1 GB. The URL and fields expire after upload_expires_in seconds, so upload right away.3
Complete the upload
POST /{profile_id}/complete-upload with name, browser_name, and browser_version within 1 day. The platform verifies the archive and creates the profile. It deletes a pending upload after 1 day.browser_profile_id on the browser environment. List, retrieve, or delete your profiles with the browser profile endpoints.
Related: Vaults, Configure the browser.