Credential handoff for browser logins: password manager integration for headless/mobile sessions

Status Open
Reported on v2.1.220
Maintainer reply None cached
Activity 7 comments · opened Aug 2, 2026

Problem

I run an IT consultancy and manage infrastructure for a dozen or so client organizations. A routine, unavoidable part of that work is signing into browser-based admin panels: domain registrars, firewalls, PBX consoles, WordPress installs, vendor portals. Many of these have no API at all, so the browser is the only interface.

Claude Code cannot enter a password into a login form. That limit holds even when I own the account, I supply the credential, and I explicitly authorize it. The result is that Claude does the entire job right up to the sign-in box and then stops, and I have to finish it by hand.

This hurts most in the case I rely on Claude Code for the most: working from my phone, away from my desk. Claude can research the problem, reach the systems, diagnose the fault and tell me exactly which fields to change, but cannot get through the one login standing between it and finishing. On a phone that is the difference between a task being done and a task being parked.

Concretely, this week Claude diagnosed a broken WHOIS record for a client domain entirely on its own, using registrar WHOIS, the DNS provider's API, and Google Workspace admin tooling, and identified the exact four fields that needed correcting. It could not sign into the registrar to make the four edits. Everything hard was automated. The trivial part was not.

Supporting evidence: this behavior changed between model versions

I asked Claude to check rather than speculate, and it searched my own Claude Code transcripts under ~/.claude/projects (524 sessions, 563 MB).

  • 17 password entries into web login forms between 2026-06-05 and 2026-07-24, using browser_fill_form, browser_type, and browser_evaluate.
  • Every one of them was claude-opus-4-8.
  • The last one was 2026-07-24. The first claude-opus-5 message in my history is 2026-07-25, the following day.
  • Zero password form fills under claude-opus-5 across 8,965 messages.

I am not reporting this as a regression to be reverted, and I understand why the limit exists. I am reporting it because it shows the workflow was real and that I built around it, and because the change removed a capability I depend on without leaving any supported way to accomplish the same thing.

Note that Claude Code does not store system prompts in its transcripts, so it could not determine whether the underlying instruction changed or model compliance did. I would rather flag that as unknown than guess.

Requested solution

A supported credential handoff, where the secret goes from a password manager or OS keychain to the page without the model ever seeing or typing it, and the user approves each item in the password manager's own interface.

Claude tells me a mechanism along these lines is described to it but is not available in this environment. If that is accurate, exposing it in Claude Code is the whole request. It solves the problem without a model handling plaintext credentials, which seems strictly better than the status quo for everyone.

Useful properties, in rough priority order:

  1. Works headlessly and from mobile, since that is the case that hurts.
  2. Per-item approval rather than a blanket unlock.
  3. Scoped to a specific origin, so approving a login for one site does not authorize others.
  4. Auditable, so I can see afterward which credentials were used where.

Alternatives considered

  • settings.json permissions. Does not apply. The allow and deny lists take tool call patterns such as Bash(ssh user@host:*). This is not a tool permission, so no entry reaches it.
  • Hooks. PreToolUse and PermissionRequest hooks intercept tool calls and can approve or deny them. Wrong layer, same reason.
  • CLAUDE.md or saved memory. These shape how Claude works, they do not grant permissions.
  • Selecting an older model. Opus 4.8 is still available and by the evidence above still exhibits the old behavior. This is not a real answer. I do not want to pick models based on which one will do a login, and it leaves me on an older model for unrelated work.
  • Doing the logins myself. What I do now. It defeats the purpose when I am away from a computer, which is exactly when I lean on Claude Code hardest.

Use case

Solo IT consultant, roughly a dozen client organizations, heavy Claude Code user across desktop and mobile. Typical sessions involve reaching client infrastructure over SSH and WinRM, driving vendor APIs, and administering Google Workspace and Microsoft 365 tenants. Credentials are already stored in a password manager and a documentation platform.

The pattern is consistent: everything with an API, Claude handles end to end. Everything browser-only stops at the login box. Given how much client infrastructure is administered through vendor web consoles with no API, that gap is large and it is growing.

Environment

  • Claude Code 2.1.220
  • macOS 26.4
  • Models: claude-opus-5 and claude-opus-4-8

View original on GitHub ↗

3 Comments

danfitz36 · 1 month ago

+1, with a second workflow that hits the same wall from a different direction — design review rather than infrastructure.

I'm a designer using Claude Code as my whole front end to a monorepo. Part of every PR I open is screenshots of the screens I changed, so a reviewer can see the result without checking the branch out. Claude does all of it: starts the app, drives it to the changed screen, captures the shots, uploads them to the PR. Except when the screen is behind our staging login, where it stops at the sign-in box exactly as you describe.

Two details from my case that I think sharpen the request:

The vault already exists; the handoff is what's missing. The credential is a dedicated staging-only account, in a chmod 600 dotenv outside any git repo, which Claude itself can read. So the secret is stored, scoped, and authorized — and still unusable, because the only remaining step is Claude typing it, which is the prohibited part. Your point that a broker is "strictly better than the status quo" lands hard here: I've already done the storage work, and the missing piece is a channel that keeps the model out of it.

Every workaround I tried is correctly blocked, which is the argument for a supported one. Filling the field, pasting via the clipboard, and standing up a local HTTP endpoint to serve the value were each refused or blocked as the same action wearing a different hat. That's the right outcome — but it means there is currently no compliant path at all, not just no convenient one.

On the "sign in once to a persistent browser profile" workaround (also listed as a direction in #82668): it does work, and it's what I fall back on, but it degrades badly in the case that matters. Browser sessions are per-origin, and preview builds live on a per-branch subdomain or a per-worktree localhost port. So a one-time sign-in doesn't carry to the next branch, and the manual login reappears on every piece of work rather than once per machine. It solves the demo and not the workflow.

Re your requested properties, 1 and 2 are the ones I'd weight highest for this use case as well — unattended matters because the screenshot pass is the last step before a PR goes up, and a human-in-the-loop login there turns a background task back into a foreground one.

Worth noting Anthropic already shipped the mechanism, just not to this surface: 1Password for Claude does per-item, zero-exposure credential injection today on Claude Desktop and Claude in Chrome, and the help docs say explicitly that it does not cover Claude Code. Which matches what you were told about the mechanism being described but unavailable — so as you say, exposing the existing thing in Claude Code may be the entire ask.

Related: #82668, same wall, and its concrete case is also screenshotting an authenticated admin panel for a client-facing doc.

zdayang · 1 month ago

For the mobile, away-from-desk case, I built an MIT-licensed local workaround: it hands only the blocked Chrome tab to a short-lived phone URL, the user types, scans, or approves there, and the relay then stops.

It keeps credentials out of Claude Code, but is currently macOS + Chrome and remains human-in-the-loop rather than password-manager injection: https://github.com/zdayang/remote-login-relay (Disclosure: I maintain it.)

mironoprea · 1 month ago

Adding a second real-world case, from a different kind of user, in support of this request.

I run a small 3D-printing business (STRATUA, Bucharest) and use both Codex and Claude Code daily. The business's Facebook, Instagram and TikTok credentials live in a 1Password vault that both agents can already reach through a service-account wrapper (op CLI, scoped vault, never printed).

Codex opens a browser, pulls the login from 1Password, signs in, then posts, schedules and replies on its own. Claude Code refuses to enter the password even when I ask explicitly and the value comes straight from my own password manager. The workaround (sign in manually in Chrome with the extension, then let Claude drive the session) works, but it is enough friction that I reach for Codex first for anything account-based. As of today (September 2026) this single gap is the main reason ChatGPT agents feel nicer to use than Claude Code for this kind of work.

The requested solution above is exactly right for my case too: a password-manager handoff where I approve each fill in the 1Password UI and the model never sees the value. The safety property is kept and the "log in yourself first" step disappears. Per-origin scoping and an audit trail would matter for me as well, since several people may end up running agents against the same business accounts.

Environment: Claude Code desktop app on Windows 11, model claude-fable-5-1, 1Password CLI 2.34.1.

Showing cached comments. Read the full discussion on GitHub ↗