I gave Claude Code a browser with my real logins. Here’s what I had to get right
Description and use
A custom browser (Kinaya) was built to allow Claude Code agents to use real logins, with per‑session background tabs, user‑approved actions, and encrypted local password storage.
Problem
Agents built on Playwright start with a fresh profile, leaving them logged out of user accounts; using the main Chrome browser was insecure.
Outcome
Agents can now perform authenticated browsing tasks daily without manual login, with user‑approved actions and secure password handling.
Workflow
- Add Kinaya MCP to Claude Code with a single command
- Launch Kinaya automatically if not running
- Open a dedicated background tab per MCP session
- Use tab_id to target specific tabs
- Allow read actions freely while requiring approval for clicks, typing, navigation, form fills, uploads, and sign‑ins
- Store passwords in an encrypted local vault (XChaCha20‑Poly1305) and never expose them to the model
- Handle CAPTCHAs and phone codes via ask_user tool
- Configure dialogs to auto‑answer and report back to the agent
- Batch multiple actions to reduce round trips
Evidence
Tools built on Playwright start a fresh profile, so the agent is logged out of everything.
Adding it to Claude Code is one line: claude mcp add kinaya -- /Applications/Kinaya.app/Contents/MacOS/kinaya —mcp
The tab I'm looking at never moves. Every tool also takes an optional tab_id, so one agent running several tabs is still explicit.
The agent never sees a password. sign_in fills a login saved in the browser's password vault, and create_login generates and saves a strong password for a sign-up.
A browser alert or confirm can freeze an automated session. In Kinaya, dialogs raised while the agent acts are answered and reported back to the agent instead of blocking.
- Record date: 2026-10-22T15:11:06.535Z