Use the user's saved sign-ins
writ_personasThe user's own accounts on websites. When a task needs the user signed in (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, and its answers never ask for one: credentials are typed only into a Writ window. 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. Its persona_id is accepted by writ_browser_use, writ_crawl_site, writ_scrape and writ_run_workflow. action='list' (filter by domain) shows the personas usable on a site; 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 sign itself back in. This tool cannot create a persona. list with a domain and no match answers persona_needed: a tell_user (a message written for the user), a create_url (a minted link to 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). action='wait' link_id= is one held call that answers the moment the user saves the persona, with its persona_id. Also listed: the personas of the user's linked Writ desktop (source='device', id device:<agent>:<id>, name and site only). That id as persona_id on writ_run_workflow, writ_browser_use / writ_record_website, writ_scrape or writ_crawl_site sends the work 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: why the account is needed. | |
| wait | No | list + domain: one call holds up to 75s for a persona for that site to appear. A link_id is awaited with action='wait'. | |
| 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`, a request worded for 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, else `still_waiting` (repeatable). | |
| 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). |