cb15c5e0d8
Release / Check for new version (push) Has been cancelled
Release / Build macOS ARM64 (push) Has been cancelled
Release / Build macOS x64 (push) Has been cancelled
Release / Build Linux ARM64 (push) Has been cancelled
Release / Build Linux musl ARM64 (push) Has been cancelled
Release / Build Linux musl x64 (push) Has been cancelled
Release / Build Linux x64 (push) Has been cancelled
Release / Build Windows x64 (push) Has been cancelled
Release / Publish to npm (push) Has been cancelled
Release / Publish sandbox package to npm (push) Has been cancelled
Release / Create GitHub Release (push) Has been cancelled
CI / Rust (windows-latest - x86_64-pc-windows-msvc) (push) Has been cancelled
CI / Native E2E Tests (push) Has been cancelled
CI / Windows Integration Test (push) Has been cancelled
CI / Global Install (macos-latest) (push) Has been cancelled
CI / Global Install (ubuntu-latest) (push) Has been cancelled
CI / Version Sync Check (push) Has been cancelled
CI / Rust (push) Has been cancelled
CI / Dashboard (push) Has been cancelled
CI / Sandbox Package (push) Has been cancelled
CI / Rust (macos-latest - aarch64-apple-darwin) (push) Has been cancelled
CI / Rust (macos-latest - x86_64-apple-darwin) (push) Has been cancelled
CI / Global Install (windows-latest) (push) Has been cancelled
181 lines
5.4 KiB
Markdown
181 lines
5.4 KiB
Markdown
# Session Management
|
|
|
|
Multiple isolated browser sessions with state persistence and concurrent browsing.
|
|
|
|
**Related**: [authentication.md](authentication.md) for login patterns, [SKILL.md](../SKILL.md) for quick start.
|
|
|
|
## Contents
|
|
|
|
- [Named Sessions](#named-sessions)
|
|
- [Session Isolation Properties](#session-isolation-properties)
|
|
- [Session State Persistence](#session-state-persistence)
|
|
- [Common Patterns](#common-patterns)
|
|
- [Default Session](#default-session)
|
|
- [Session Cleanup](#session-cleanup)
|
|
- [Best Practices](#best-practices)
|
|
|
|
## Named Sessions
|
|
|
|
Use `--session` to isolate browser contexts. Agent skills should derive one stable id and reuse it on every command:
|
|
|
|
```bash
|
|
SESSION="$(agent-browser session id --scope worktree --prefix my-skill)"
|
|
agent-browser --session "$SESSION" --restore open https://app.example.com/login
|
|
```
|
|
|
|
`--scope worktree` uses the Git worktree root when available, then the Git root, then the canonical current directory. This is the recommended default for agents because worktrees are commonly used for parallel agent runs.
|
|
|
|
```bash
|
|
# Session 1: Authentication flow
|
|
agent-browser --session auth open https://app.example.com/login
|
|
|
|
# Session 2: Public browsing (separate cookies, storage)
|
|
agent-browser --session public open https://example.com
|
|
|
|
# Commands are isolated by session
|
|
agent-browser --session auth fill @e1 "user@example.com"
|
|
agent-browser --session public get text body
|
|
```
|
|
|
|
## Session Isolation Properties
|
|
|
|
Each session has independent:
|
|
- Cookies
|
|
- LocalStorage / SessionStorage
|
|
- IndexedDB
|
|
- Cache
|
|
- Browsing history
|
|
- Open tabs
|
|
|
|
## Session State Persistence
|
|
|
|
### Automatic Restore
|
|
|
|
```bash
|
|
# Bare --restore uses the current --session as the persistence key
|
|
SESSION="$(agent-browser session id --scope worktree --prefix next-dev-loop)"
|
|
agent-browser --session "$SESSION" --restore open https://app.example.com/dashboard
|
|
```
|
|
|
|
State is loaded before navigation and saved on close, daemon shutdown, idle timeout, and compatible relaunch. It is also saved periodically while the browser is open (after commands settle, at most once per `AGENT_BROWSER_AUTOSAVE_INTERVAL_MS`, default 30000; set to `0` to save only on close), so a browser window the user closes by hand still leaves a recent save behind. Idle sessions keep saving on the same interval, capturing changes the page makes on its own such as token refreshes. The default save policy is `--restore-save auto`, which skips auto-save if restore failed or validation failed; `never` disables periodic autosave too.
|
|
|
|
```bash
|
|
agent-browser --session "$SESSION" --restore --restore-check-url "**/dashboard" open https://app.example.com/dashboard
|
|
agent-browser --session "$SESSION" --restore --restore-check-text Dashboard open https://app.example.com/dashboard
|
|
agent-browser --session "$SESSION" --restore --restore-check-fn "!!localStorage.getItem('session')" open https://app.example.com/dashboard
|
|
```
|
|
|
|
Use `agent-browser session info --json` for diagnostics:
|
|
|
|
```bash
|
|
agent-browser --session "$SESSION" session info --json
|
|
```
|
|
|
|
### Manual State Files
|
|
|
|
Use `state save`, `state load`, and `--state <path>` when you need an explicit portable JSON file. Do not make agents construct paths under `~/.agent-browser/sessions/`; prefer `--restore` for reusable agent sessions.
|
|
|
|
## Common Patterns
|
|
|
|
### Authenticated Session Reuse
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
SESSION="$(agent-browser session id --scope worktree --prefix app)"
|
|
agent-browser --session "$SESSION" --restore open https://app.example.com/dashboard
|
|
```
|
|
|
|
### Concurrent Scraping
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
# Scrape multiple sites concurrently
|
|
|
|
# Start all sessions
|
|
agent-browser --session site1 open https://site1.com &
|
|
agent-browser --session site2 open https://site2.com &
|
|
agent-browser --session site3 open https://site3.com &
|
|
wait
|
|
|
|
# Extract from each
|
|
agent-browser --session site1 get text body > site1.txt
|
|
agent-browser --session site2 get text body > site2.txt
|
|
agent-browser --session site3 get text body > site3.txt
|
|
|
|
# Cleanup
|
|
agent-browser --session site1 close
|
|
agent-browser --session site2 close
|
|
agent-browser --session site3 close
|
|
```
|
|
|
|
### A/B Testing Sessions
|
|
|
|
```bash
|
|
# Test different user experiences
|
|
agent-browser --session variant-a open "https://app.com?variant=a"
|
|
agent-browser --session variant-b open "https://app.com?variant=b"
|
|
|
|
# Compare
|
|
agent-browser --session variant-a screenshot /tmp/variant-a.png
|
|
agent-browser --session variant-b screenshot /tmp/variant-b.png
|
|
```
|
|
|
|
## Default Session
|
|
|
|
When `--session` is omitted, commands use the default session:
|
|
|
|
```bash
|
|
# These use the same default session
|
|
agent-browser open https://example.com
|
|
agent-browser snapshot -i
|
|
agent-browser close # Closes default session
|
|
```
|
|
|
|
## Session Cleanup
|
|
|
|
```bash
|
|
# Close specific session
|
|
agent-browser --session auth close
|
|
|
|
# List active sessions
|
|
agent-browser session list
|
|
```
|
|
|
|
## Best Practices
|
|
|
|
### 1. Name Sessions Semantically
|
|
|
|
```bash
|
|
# GOOD: Clear purpose
|
|
agent-browser --session github-auth open https://github.com
|
|
agent-browser --session docs-scrape open https://docs.example.com
|
|
|
|
# AVOID: Generic names
|
|
agent-browser --session s1 open https://github.com
|
|
```
|
|
|
|
### 2. Always Clean Up
|
|
|
|
```bash
|
|
# Close sessions when done
|
|
agent-browser --session auth close
|
|
agent-browser --session scrape close
|
|
```
|
|
|
|
### 3. Handle State Files Securely
|
|
|
|
```bash
|
|
# Don't commit state files (contain auth tokens!)
|
|
echo "*.auth-state.json" >> .gitignore
|
|
|
|
# Delete after use
|
|
rm /tmp/auth-state.json
|
|
```
|
|
|
|
### 4. Timeout Long Sessions
|
|
|
|
```bash
|
|
# Set timeout for automated scripts
|
|
timeout 60 agent-browser --session long-task get text body
|
|
```
|