Use the user's saved sign-ins
writ_personasList, inspect, sign in, or record login workflows for saved website personas to run tasks as the user without passwords. Request or wait for new persona links before asking for credentials.
Instructions
The user's OWN accounts on websites. When a task needs them signed in (their email, social, shop, bank or work portal), a persona is how Writ signs in as them: no password passes through this tool or the conversation, so never ask for one. A persona is a saved sign-in identity: a site's username plus credentials sealed server-side (never readable here), optional 2FA whose codes are minted server-side, and a warm signed-in session. USE one by passing its persona_id to writ_browser_use, writ_crawl_site, writ_scrape or writ_run_workflow. BEFORE asking the user for credentials for a site, call action='list' (filter by domain). action='get' inspects one (include_runs adds its recent runs); action='sign_in' runs its login workflow NOW (force=true re-logs-in even when the session looks usable); action='record_login' has a server-side AI sign in as it once and RECORD the flow as its login workflow, so it can always sign itself back in. NONE FITS? This tool can NOT create a persona and no credential ever passes through it. list with a domain answers persona_needed: a tell_user, a create_url (a MINTED link: a small Writ window with only the persona form, pre-filled for that site) and its link_id; action='request' domain= mints one on purpose (another account for a site). Relay it BEFORE starting the task, then action='wait' link_id=: ONE held call that answers the moment the user saves it, with the persona_id — continue on your own. ALSO LISTED: the personas of the user's linked Writ DESKTOP (source='device', id device:<agent>:<id>, name and site only). Pass that id as persona_id to writ_run_workflow, writ_browser_use / writ_record_website, writ_scrape or writ_crawl_site: the work goes to that desktop, which signs in from its own vault and only on the persona's own site - the credentials never leave it.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| why | No | request: one line the user sees in the window — what you need the account for. | |
| wait | No | list + domain: hold up to 75s for a persona for that site to appear. With a link_id prefer action='wait'. Never poll in a loop instead. | |
| force | No | sign_in: re-run the login even when the current session still looks usable. | |
| action | Yes | What to do (default list). request = mint the persona link for a site (domain); wait = hold until the user saves it (link_id). | |
| domain | No | list: only personas usable on this host (suffix match), e.g. 'github.com'. With no match the answer is `persona_needed` — the ask to relay to the user. request: the site the new persona is for. | |
| link_id | No | wait: the `link_id` of a persona_needed / request answer. Holds up to 75s and answers the moment the user saves the persona (persona_id), declines, or closes the window; `still_waiting` means call it again. | |
| login_url | No | record_login: exact sign-in page URL when known; defaults to the persona's domain root (the AI finds the form from there). list / request: the site's sign-in page, carried into `create_url` so the new persona can record it. | |
| persona_id | No | Which persona — required for get / sign_in / record_login. | |
| include_runs | No | get: include the persona's recent runs (which workflows acted as it, and whether they succeeded). |