Chrome Extension  ·  v0.1.1

Give your
AI agents
the keys.

Browser auth state capture for AI agents — Playwright, Claude Code & more.

Keyring captures your browser auth state — cookies, localStorage, all of it — and stores it locally so your AI agents can log in as you. No scripts. No credentials in code.

~/.keyring/storage-state.json
{
  "cookies": [
    {
      "name": "session_token",
      "value": "eyJhbGciOiJSUzI...",
      "domain": "github.com",
      "httpOnly": true
    }
  ],
  "origins": [
    {
      "origin": "https://github.com",
      "localStorage": [
        { "name": "user_id", "value": "u_8x..." }
      ]
    }
  ]
} 
100%
Local Storage
2x
Auth Methods
0
Servers Involved
1cmd
To Load State
The Problem

Agents can't log in.
Until now.

Before keyring

Your agent hits a wall.

Every time your AI opens a browser, it starts cold — no cookies, no sessions, no auth. You end up writing brittle login scripts, storing passwords in env files, or supervising every session manually.

After keyring

Your agent is already in.

Browse normally in Chrome. Keyring silently captures your auth state in the background. Your agent loads it with one line — and it's authenticated on every site you've visited.

How It Works

Three steps.
Zero config.

01
🔑

Install & browse

Install the Chrome extension and native host. Log into your sites as you normally would. Keyring watches silently — you don't change how you work.

02
💾

State is captured

Cookies and localStorage are saved to ~/.keyring/storage-state.json on your machine. Standard Playwright format. Nothing leaves your computer.

03
🤖

Agents use it

Your AI loads the state file before launching. It inherits all your sessions instantly — authenticated everywhere you are, with no credentials in code.

Integration

Works with
every tool.

Standard Playwright storage state format — compatible with any browser automation framework or AI agent.

playwright.ts TypeScript
// Load keyring auth state
const browser = await chromium.launch();
const context = await browser.newContext({
  storageState: "~/.keyring/storage-state.json"
});

// Agent is authenticated on every site
const page = await context.newPage();
await page.goto("https://github.com");
// ✓ Already logged in as you
agent-browser CLI Shell
$ agent-browser state load ~/.keyring/storage-state.json
✓ Loaded 24 cookies, 12 localStorage entries
AGENTS.md Markdown
# Browser Automation State

ALWAYS load auth state from
`~/.keyring/storage-state.json`
FIRST before any browser automation.
🎭
Playwright
Pass the file directly to storageState in any browser context. It just works.
🤖
agent-browser
One command loads all your sessions before any automated browser task.
Claude Code
Drop a reference in AGENTS.md — Claude automatically loads your auth state before every browser task.
🐍
Any automation tool
Standard JSON format compatible with Puppeteer, Selenium wrappers, or any tool accepting cookie/localStorage data.
Features

Built for
developers.

🔒

Local-only storage

Everything stays on your machine at ~/.keyring/storage-state.json. No servers, no cloud sync, no telemetry of any kind.

🍪

Full auth capture

Captures both HTTP cookies and localStorage — the two places websites actually store your sessions. Nothing slips through.

⚙️

Whitelist or global

Choose which sites to capture. Whitelist specific domains, or capture everywhere with per-site exclusions — you're in control.

📋

Playwright format

Output is the standard Playwright storage state format — readable JSON, compatible with every major browser automation framework.

🚀

Agent-assisted setup

The extension generates a setup prompt you can paste to your AI agent. It configures everything automatically — you don't need to read docs.

🔐

Privacy by design

No analytics, no telemetry, no external requests of any kind. Your auth data is yours — it never leaves your machine.

FAQ

Common questions.

Is my auth data sent to any server?

No. keyring is 100% local. Your cookies and localStorage data never leave your machine. There are no servers, no cloud sync, and no telemetry of any kind. Data is saved only to ~/.keyring/storage-state.json on your own computer.

How do agents load the captured auth state?

The state file uses the standard Playwright storageState JSON format. Pass it to browser.newContext({ storageState: '~/.keyring/storage-state.json' }) — or use agent-browser state load, or reference it in your AGENTS.md for Claude Code.

Do I need to change how I browse?

No. Install the extension and native host, then browse normally. keyring captures your sessions silently in the background — you don't change how you work.

Which tools and frameworks are compatible?

Playwright, Puppeteer, agent-browser, Claude Code, and any tool that accepts standard cookie or localStorage JSON data. If it supports Playwright's storageState format, it works with keyring.

Can I choose which sites to capture?

Yes. You can whitelist specific domains (only those sites are captured), or enable global capture with per-site exclusions. You stay in full control of what gets saved.

Get started

Your agents deserve
the keys.

Privacy-first. Works with Playwright, agent-browser, Claude Code, and any browser automation tool.