A run first checks the start page. If the browser profile is already signed in, it just reads the page. If the site asks for a sign-in and the skill has a saved login, the run signs in once and carries on. If it still cannot get in, it stops and tells you why. It never retries in a loop.
To set either one up, see Use a saved login.
Browser profiles
A browser profile stores a browser’s signed-in state. Every workspace has a Default profile, used by cloud runs unless a skill picks another one. You can also pick a profile per workflow step, so different steps run as different accounts. Each profile has an exit IP: the country the site sees. Keep it the same as where you first signed in. A mismatch can make the site end the session. If you imported your sign-in from your own Chrome, leave it on No proxy. Sessions expire. When one does, runs fail withtriage_kind: "logged_out" and you get a notice to sign in again on that profile.
Saved logins
A saved login is encrypted and shown only masked (to***h). Your password, authenticator seed, and sign-in codes:
- never reach the AI model that drives the browser. It sees placeholders such as
vault_password, and the real value is typed only on the login site. - are never written to logs, run results, rows, webhooks, or AI assistant results.
- are never recorded while the run signs in.
- are never shared with your workspace.
logins:use scope, or anyone running a public copy of the skill gets needs_user.kind = "no_login" instead. A copied skill never carries your login.
A login is a setting on a skill, not a tool. No AI assistant can ask Valendata to “log in somewhere”, and nothing can read a saved password back.
Two-step sign-in
When a run cannot sign in
The run fails withtriage_kind: "login_failed" (or "logged_out" when there is no login to use) and a needs_user object:
You also get an inbox note with a link to the Vault. Valendata never asks for your password in a chat.

