Claude Code, Codex and Cursor can sign in, pass the 2FA step and run commands with the accounts you allow. OTPilot uses the secrets; the model only sees the result.
> Test the staging login and check the dashboard loads the payments● otpilot.list_accounts()⎿ GitHub (2FA, login) · AWS staging (2FA, login) · acme-db (password)● otpilot.browser_login(account: "AWS staging")⎿ pending_approval — approve "Claude Code → AWS staging" in OTPilotI need access to AWS staging. Approve it in OTPilot and I'll continue.● otpilot.browser_login(account: "AWS staging")⎿ signed_in — session saved to .otpilot/aws-staging.json (expires 1h)● playwright.open("https://staging.acme.io/payments",storageState: ".otpilot/aws-staging.json")⎿ 200 · 14 payments listed● otpilot.run("psql -h db.staging -c 'select count(*) from payments'",env: { PGPASSWORD: "acme-db/password" })⎿ count: 14 (secrets redacted from output)Done: the staging login works and the dashboard shows all 14 payments.I never saw the password or the 2FA code.
Works with any MCP agent · Off by default · Revoke anytime
Asking an agent to test a login, check a dashboard or query a database usually ends in one of these.
Pasted into the chat
A password typed into a prompt lives on in the transcript, your history, logs and the model provider's servers.
Left in a .env file
Plaintext on disk, one wrong commit away from a public repo, and readable by every tool your agent runs.
Stuck at the 2FA step
Even with the password, the agent stops at "enter the code from your app" and hands the task back to you.
You stay in the extension. Your agent stays in the terminal. The secrets stay with OTPilot.
Add the OTPilot MCP server to Claude Code, Codex, Cursor or any MCP client. It shows a short code; approve it in the extension if the codes match.
A new agent gets nothing. Allow accounts one by one, per agent, and pick what each can use: just the 2FA code, the whole sign-in, or chosen fields.
The agent asks OTPilot to sign in or run a command. OTPilot does it with the real values and returns the result. Need another account? You get a request to approve.
You need the OTPilot extension and an OTPilot account (free works). Each agent is connected and approved on its own.
Install the plugin (the MCP server plus a skill that teaches Claude to use it):
/plugin install otpilot --marketplace OTPilot/OTPilot
Connect it once, then approve it in the extension if the codes match:
npx -y @otpilot/mcp@latest connect --name "Claude Code"
In the extension, open Agents and allow it the accounts it may use — or let it ask as it works.
Sign in to websites
Username, password and the 2FA code, on the account's own site only. Your agent's browser gets the signed-in session, never the credentials.
Run commands with secrets
psql, curl, deploy scripts: secrets go in as environment variables for that one process, and are scrubbed from the output before your agent reads it.
Fresh 2FA codes for scripts
End-to-end tests that log in with 2FA get a current code injected at run time, so the test passes without a human holding a phone.
Know what it can use
The agent can list the accounts you allowed it, by name and site. Nothing else in your vault exists for it.
Everything is off by default. Each agent gets exactly what you approved, and nothing it can open without you.
Encrypted for that agent only
Each agent has its own key, kept in your computer's keychain. An account you allow is encrypted for that key alone; our servers only ever see ciphertext.
Two approvals
Connecting an agent gives it no accounts. Every account is a separate approval, per agent: two agents, two decisions.
A code to catch impostors
The code in your terminal and the one in OTPilot must match before you approve, so nobody can slip in their own "Claude Code".
Ask every time
For the accounts that matter most, OTPilot asks you before each use, and you can allow an account for an hour instead of for good.
Every use on record
The activity log shows which agent used which account, when and for what. Revoke an agent, or a single account, in one click.
Only on the right site
A sign-in is only ever made on the site saved in the account, so a prompt injection can't send your password somewhere else.
Honest limit: an agent that runs commands decides what those commands do, and could try to reveal a secret on purpose. OTPilot scrubs secrets from what it returns; for sensitive accounts, allow only the 2FA code, limit the commands, or turn on "ask every time".
Free
$0
Personal & Team
from $3 / month
See all plans →·How it compares to 1Password and Bitwarden →
Let your agent finish the job
Sign-ins, 2FA and secrets, handled by OTPilot. Free to start.
Add to Chrome — it's free