feat: reuse Chrome profile login state via --profile <name> (#1131)
* feat(chrome): add Chrome profile name resolution and copy for --profile flag When --profile receives a name without path separators (e.g., "Default"), it now resolves the name against installed Chrome profiles, copies the profile to a temp directory (excluding large cache dirs), and launches Chrome with the copied profile to reuse login state. Key changes: - Add profile resolution: is_chrome_profile_name, find_chrome_user_data_dir, list_chrome_profiles, resolve_chrome_profile (3-tier matching) - Add copy_chrome_profile with best-effort copy and exclusion list - Wire preprocessing into launch_chrome before retry loop - Add use_real_keychain field to LaunchOptions for conditional keychain flags - Make --password-store=basic and --use-mock-keychain conditional Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * feat(cli): add `profiles` command to list available Chrome profiles Adds `agent-browser profiles` command that reads Chrome's Local State file to list available profiles with directory names and display names. Supports --json output. Added help text in print_command_help and print_help. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * docs: add Chrome profile reuse documentation across all locations Update all 5 documentation locations per AGENTS.md: - output.rs: updated --profile help text and examples - README.md: added Chrome Profile Reuse section, updated options table - SKILL.md: added profile reuse as Option 2 - docs/src/app/sessions/page.mdx: added Chrome profile reuse section - chrome.rs: added doc comments to get_chrome_user_data_dirs Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * style: fix formatting and clippy warning in chrome.rs Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * refactor: simplify profile resolution and launch integration - Only clone LaunchOptions when profile name requires resolution (avoids unnecessary allocation on every Chrome launch) - Remove redundant is_file() check before copy of Local State (copy() handles missing files naturally) - Extract format_profile_list() to deduplicate error formatting - Remove unnecessary section comments in tests Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * refactor(tests): use RAII TempDir guard for test cleanup Replace manual remove_dir_all calls with a TempDir struct that auto-cleans on drop, preventing temp dir leaks on test panics. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: ctate <366502+ctate@users.noreply.github.com>
This commit is contained in:
co-authored by
Claude Opus 4.6
ctate
parent
354dd8b615
commit
9f8e518a46
@@ -374,6 +374,7 @@ agent-browser provides multiple ways to persist login sessions so you don't re-a
|
||||
|
||||
| Approach | Best for | Flag / Env |
|
||||
|----------|----------|------------|
|
||||
| **Chrome profile reuse** | Reuse your existing Chrome login state (cookies, sessions) with zero setup | `--profile <name>` / `AGENT_BROWSER_PROFILE` |
|
||||
| **Persistent profile** | Full browser state (cookies, IndexedDB, service workers, cache) across restarts | `--profile <path>` / `AGENT_BROWSER_PROFILE` |
|
||||
| **Session persistence** | Auto-save/restore cookies + localStorage by name | `--session-name <name>` / `AGENT_BROWSER_SESSION_NAME` |
|
||||
| **Import from your browser** | Grab auth from a Chrome session you already logged into | `--auto-connect` + `state save` |
|
||||
@@ -437,9 +438,31 @@ Each session has its own:
|
||||
- Navigation history
|
||||
- Authentication state
|
||||
|
||||
## Chrome Profile Reuse
|
||||
|
||||
The fastest way to use your existing login state: pass a Chrome profile name to `--profile`:
|
||||
|
||||
```bash
|
||||
# List available Chrome profiles
|
||||
agent-browser profiles
|
||||
|
||||
# Reuse your default Chrome profile's login state
|
||||
agent-browser --profile Default open https://gmail.com
|
||||
|
||||
# Use a named profile (by display name or directory name)
|
||||
agent-browser --profile "Work" open https://app.example.com
|
||||
|
||||
# Or via environment variable
|
||||
AGENT_BROWSER_PROFILE=Default agent-browser open https://gmail.com
|
||||
```
|
||||
|
||||
This copies your Chrome profile to a temp directory (read-only snapshot, no changes to your original profile), so the browser launches with your existing cookies and sessions.
|
||||
|
||||
> **Note:** On Windows, close Chrome before using `--profile <name>` if Chrome is running, as some profile files may be locked.
|
||||
|
||||
## Persistent Profiles
|
||||
|
||||
By default, browser state (cookies, localStorage, login sessions) is ephemeral and lost when the browser closes. Use `--profile` to persist state across browser restarts:
|
||||
For a persistent custom profile directory that stores state across browser restarts, pass a path to `--profile`:
|
||||
|
||||
```bash
|
||||
# Use a persistent profile directory
|
||||
@@ -567,7 +590,7 @@ This is useful for multimodal AI models that can reason about visual layout, unl
|
||||
|--------|-------------|
|
||||
| `--session <name>` | Use isolated session (or `AGENT_BROWSER_SESSION` env) |
|
||||
| `--session-name <name>` | Auto-save/restore session state (or `AGENT_BROWSER_SESSION_NAME` env) |
|
||||
| `--profile <path>` | Persistent browser profile directory (or `AGENT_BROWSER_PROFILE` env) |
|
||||
| `--profile <name\|path>` | Chrome profile name or persistent directory path (or `AGENT_BROWSER_PROFILE` env) |
|
||||
| `--state <path>` | Load storage state from JSON file (or `AGENT_BROWSER_STATE` env) |
|
||||
| `--headers <json>` | Set HTTP headers scoped to the URL's origin |
|
||||
| `--executable-path <path>` | Custom browser executable (or `AGENT_BROWSER_EXECUTABLE_PATH` env) |
|
||||
|
||||
Reference in New Issue
Block a user