Sign in with 1Password
Let your agent sign in to the sites you own, without you handing it a password. Connect a read-only 1Password service account once; when a browser session reaches a login page, Solari fills in the username, the password and the one-time code, and the agent carries on.
How it works
When a session lands on a login page for a site you have set up, Solari tries three things in order and stops at the first that works:
- A saved session. If the session is already signed in (for example it carries a profile), nothing else happens and no credential is read.
- Your password manager. Solari reads that one login from 1Password, types the username and password, submits, and if the site then asks for a one-time code, types that too.
- A person. If there is no matching item, the form can't be found, or the site wants something Solari can't give it (an SMS code, a passkey, a captcha), the session is handed to a human with a link and a plain reason. The person opens the link, finishes the sign-in in the live browser, and the agent carries on.
Your agent never sees the credential. The password is read at the moment it is typed, held in memory for that one fill, and is not stored, logged or returned by any API. What the agent gets back is the outcome.
Set it up
1. Create a read-only service account in 1Password
In 1Password go to Developer → Infrastructure Secrets Management → Create a Service Account. Give it read-only access to just the vaults your agents should use, and copy the token (it starts with ops_). A separate vault for agent logins keeps the blast radius small: the token can only reach the vaults you choose, and you can revoke it in one click.
2. Store the login in a vault the account can read
Create a Login item with:
- Website: the address of the login page. This is how Solari finds the item. It matches the site's host, and an item saved for
example.comalso serveslogin.example.com. - username and password fields.
- Optionally a one-time password field. If the site asks for a 2FA code and the item has this field, Solari computes the current code and types it. Without it, a site that asks for a code is handed to a person.
3. Connect 1Password in the console
Open the console → Settings → Connections → Password Manager → Connect 1Password. Give it a name and paste the service account token.
Solari checks the token against 1Password before saving it, and shows Can read N vaults: … so you can confirm the token reaches exactly what you meant it to. A token that is invalid, or that can see no vaults, is rejected here rather than failing weeks later at a login. The token is stored encrypted, is never shown again and is never returned by the API; the console only shows a short fingerprint. To rotate it, connect again with the same name and a new token.
4. Tell Solari which sites to sign in to
Connecting a password manager does nothing on its own: a site has to point at it. Under Sites choose Add a site and fill in:
- Site: the host, for example
github.com. - Sign in using: the connection you just made. Leave it on Ask a human if you only want Solari to remember the session and ask you when a fresh login is needed.
- Vault item (optional):
Vault/Item. Leave it blank and Solari finds the login by site. Set it when one site has several logins.
Each site shows its state: Not signed in yet, Signed in or Session expired. Remove a site to stop signing in to it; disconnecting the password manager leaves the sites in place and they fall back to asking a person.
Use it from a session
Over the API
Create the session with autoLogin: true. Solari then watches the session and signs in when it reaches a login page for a site you set up. Connect your client to the session as you normally would.
curl -s https://api.getsolari.com/sessions \
-H "Authorization: Bearer $SOLARI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"autoLogin": true}'autoLogin option yet, so sessions.create() doesn't pass it through. Use the request above (or the MCP server below), then connect with your usual client using the returned wsEndpoint or cdpEndpoint.Ask for it explicitly
To sign in right now, whatever page the session is on, call:
curl -s -X POST https://api.getsolari.com/sessions/$SESSION_ID/autologin \
-H "Authorization: Bearer $SOLARI_API_KEY"
# {"outcome":"vault_login","sessionSaved":false}The response is always a status, never a credential:
outcome | Meaning |
|---|---|
already_authenticated | The session was already signed in. No credential was read. |
vault_login | Solari signed in with the login from your password manager. sessionSaved says whether the signed-in state was also saved to a profile. |
human_required | Solari couldn't finish on its own. The response has a reason and a handoffUrl to give to a person. If nothing is set up for the site it also has setupRequired: true and a setupUrl. |
failed | Auto-login failed and no hand-off could be opened. The reason says why. |
Through the MCP server
Sessions made with solari_browser_create have auto-login on by default, so an agent that navigates to a set-up site is signed in by the time the page has loaded. Two tools let the agent see and change the setup:
solari_browser_autologin_status: which password managers are connected (name, provider, the vaults they can read), which sites are set up, and each site's state. It never returns a credential.solari_browser_autologin_sitewithdomainandmanager(the connection's name): set a site to sign in using that password manager.
solari_browser_autologin_site without manager sets the site to "remember the session and ask a person", which removes its link to a password manager. The same thing happens if you save a site in the console with Ask a human selected. Always pass the manager when you mean to keep signing in automatically.What is and isn't exposed
- The password is never returned by the API, never in the MCP tool output, never in logs, and never in a session recording.
- Recordings. While Solari signs in, recording of the page is paused, the same way it is during a human hand-off, so the replay does not capture what was typed.
- The service account token is stored encrypted, never returned, and only ever read-only if you made it so. Revoke it in 1Password at any time and sign-ins stop.
- Scope. Solari reads one item per sign-in, chosen by the site (or the
Vault/Itemyou set). It does not copy or list the contents of your vaults.
When it falls back to a person
The reason in a human_required response is specific. The common ones:
| Reason | What to do |
|---|---|
| No credentials are connected for the site | Add the site under Settings → Connections → Sites and choose the password manager. |
| No matching login in the vault | Check the item's Website matches the login page's host, that the item is in a vault the service account can read, and that it has a password. |
| No login form was found | The page isn't a plain username and password form (or hasn't finished loading). A person can finish this one. |
| The site asked for a 2FA code and there is none in the item | Add a one-time password field to the item. SMS codes and passkeys can't be filled; they need a person. |
| The site rejected the sign-in | The reason includes the site's own message with the credentials removed. Check the password and the one-time code in the item. |
Limits
- 1Password service accounts only; no Bitwarden or other managers.
- One-time codes are TOTP (the standard authenticator codes). SMS, email codes, passkeys and hardware keys need a person.
- Sign-in is by heuristics over the page's form fields. When it can't be sure, it asks a person rather than guess.
- Sites that block automated sign-in, or that show a captcha, fall back to a person (see Captcha Solving).
