Open a browser
writ_browser_useA REAL CLOUD BROWSER FOR A TASK ON A WEBSITE: the user's own signed-in account (email, social, shop, bank or work portal, through a persona_id from writ_personas: the password stays sealed in Writ, and sessions never ask for a password), a click, form, submit, search inside an app, setting change, booking or post, or a page a plain fetch cannot open (login wall, 403, CAPTCHA).
OPENS a real cloud browser and returns the first live page observation. It is not an autonomous agent: Writ runs no model here, the caller is the brain and the driver, and each writ_browser_act(session_id) batch performs exactly the actions it is given. One call opens one browser for one task and performs no step itself.
RECORDING IS ALWAYS ON, saving is on demand: every interaction in the session is recorded. A task recorded for reuse carries each value that changes as {{name}} with its real value in writ_browser_act inputs, and its data leaves through an extract action; writ_browser_save(name) then answers with the steps, inputs and a run_example, and the workflow replays at zero AI cost (writ_run_workflow). writ_browser_cancel closes an unsaved session; an open browser bills until it is closed.
In the session: navigate, click, fill, type, select, press keys, scroll, switch tabs, upload a file, sign in (a persona's 2FA code is minted server-side); see the page (read_text, get_dom for the real HTML, inspect a selector, list_candidates for repeating rows, get_screenshot); read every backend call the page makes (capture_network, then search/read them with writ_browser_network); run any JavaScript on the live page (evaluate_js) and call the site's backend from inside the session with its cookies (api_call); work a page whose content only appears after interaction.
NOT FOR: reading a page, a few pages, or the top N items of a listing (writ_scrape: one call, 2-10s, no browser); collecting a site into a dataset (writ_crawl_site); turning a site into an API (writ_website_to_api, which opens the same browser bound to a build). A browser costs execution time for as long as it is open.
The page comes back after every batch and on demand via writ_browser_context(section=page). A sensitive fill carries data_key: the value is held server-side and the saved step keeps a placeholder, never the raw value. writ_browser_compose adds what the recorder cannot see (named functions, explicit steps, an input's description/default). A saved workflow replays the same task without a browser (writ_list_workflows -> writ_run_workflow); the first observation lists this site's matching ones in saved_for_this_site. A browser's exit IP is fixed once it opens: past a bot wall or CAPTCHA, a new session with use_residential=true exits residential (writ_browser_cancel closes the blocked one). writ_browser_sessions lists open sessions; an open one is warm and cheaper to continue than a new one.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Starting URL to open (required). | |
| goal | No | Optional label describing the task, for the run log. A label only: the tool performs no step from it, and every step is a writ_browser_act batch. | |
| auth_mode | No | reuse verifies unknown saved authentication before adopting it; fresh_login starts without old cookies/storage while preserving the persona's device and network identity, the mode for recording a new login. | |
| fresh_exit | No | Residential only: skips the persona's usual exit for this site and draws a new address, for after the site refused it (an IP rate limit, a sign-in rejected with correct credentials). Ignored on server-IP egress. | |
| persona_id | No | Saved identity to sign in with (writ_personas lists them). Required for sites behind a login with 2FA. A desktop persona ('device:…') opens the browser on its own desktop, which fills {{secret:username}} / {{secret:password}} / 2FA itself; its values never reach the caller. | |
| human_layer | No | Native keyboard input, distance-adaptive mouse paths and pre-click dwell for this session. Fresh login defaults to enabled; explicit false disables it. Native actionability checks remain active. | |
| use_residential | No | Opens on the platform residential network (premium), for a site that blocks datacenter IPs or shows a bot wall / captcha. Default off (free). | |
| execution_target | No | Where the session runs: 'cloud' (managed cloud fleet), 'auto' (the user's own linked Writ desktop app when it is online, else cloud), or 'local' (only their own desktop app). On the user's own machine the session keeps their computer and IP and exposes nothing local to the cloud. No value means the account's default set in the Writ app. A 'local' run reports local_agent_offline when their app is closed; execution_target='cloud' re-runs it in the cloud, off the user's machine. | |
| residential_country | No | Two-letter ISO country the residential exit should be in (e.g. 'us', 'fr'), for a site that serves a different page per country or throttles foreign traffic. No value means an automatic exit. Ignored unless the session egresses residential. |