How to Extract Cookies from Chrome/Firefox for Platform Authentication in Agent-Reach

Agent-Reach automates authentication cookie retrieval from local browsers using a dual-backend extraction system that supports Chrome, Firefox, Edge, Brave, and Opera.

The Panniantong/Agent-Reach library provides built-in capabilities to extract cookies from Chrome and Firefox for platform authentication without manual export. This functionality, implemented primarily in agent_reach/cookie_extract.py, enables seamless integration with social media and content platforms by reading authentication tokens directly from the browser's local storage. Understanding how to leverage this extraction mechanism allows developers to automate credential management for platforms like Twitter/X, XiaoHongShu, Bilibili, and Xueqiu.

Supported Browsers and Backends

Agent-Reach employs a flexible architecture that supports multiple browsers and implements fallback mechanisms for maximum compatibility.

Browser Whitelist Validation

The extraction process begins with strict validation. In agent_reach/cookie_extract.py, the extract_all function validates the browser argument against a whitelist containing Chrome, Firefox, Edge, Brave, and Opera (lines 68-73). This ensures that only supported browsers are queried, preventing errors from invalid browser specifications.

Dual Backend Architecture

The library implements two extraction backends to maximize portability:

  • rookiepy (Rust-based, preferred) – A high-performance Rust implementation that is attempted first. It returns a list of dictionaries representing cookies, which the code wraps in a lightweight _Cookie class to provide uniform access across the codebase (lines 75-92).
  • browser_cookie3 (pure-Python fallback) – If rookiepy is unavailable, the library falls back to this Python-based alternative to ensure the extraction still succeeds (lines 98-107).

Both backends extract cookies from the browser's encrypted storage, assuming the browser process is closed or accessible.

The PLATFORM_SPECS dictionary in agent_reach/cookie_extract.py (lines 14-20) declares which domains and cookie names are required for each supported platform. This declarative approach maps specific authentication tokens to their respective services.

For example, Twitter/X requires the auth_token and ct0 cookies from the domains .x.com and .twitter.com. When extraction runs, the system filters browser cookies against these specifications, ensuring only relevant authentication data is retrieved for each platform integration.

Extraction Workflow and Core Functions

The cookie extraction process follows a structured pipeline from browser storage to library configuration.

The extract_all Function

The extract_all function serves as the primary entry point for cookie extraction. It accepts a browser name, iterates over every cookie returned by the chosen backend, and groups them by platform according to PLATFORM_SPECS (lines 42-52).

This function handles two output formats:

  • Key-value mapping – When specific cookie names are listed in the platform specification, it returns a dictionary mapping cookie names to their values.
  • Header-style string – When the cookies parameter is None, it formats cookies as a standard HTTP Cookie header string.

The final output maps each config_key (e.g., "twitter" or "xhs") to its extracted authentication data (lines 35-45).

The configure_from_browser Function

For automated configuration, configure_from_browser orchestrates the full integration pipeline (lines 32-38). This function:

  1. Invokes extract_all to retrieve cookies from the specified browser.
  2. Writes the retrieved values into the central configuration object managed by agent_reach/config.py.
  3. Returns a list of tuples indicating which platforms were successfully configured (lines 51-58).

For Twitter specifically, this function also performs legacy credential synchronization to helper files for backward compatibility, though this step is best-effort and does not affect the core extraction flow.

Implementation Examples

You can extract cookies programmatically or via the command-line interface.

Programmatic Usage

Import the extraction utilities and configuration classes to integrate cookie retrieval directly into your automation scripts:

from agent_reach.cookie_extract import extract_all, configure_from_browser
from agent_reach.config import Config

# Extract cookies from Chrome (fallback to Firefox if Chrome is closed)

cookies = extract_all("chrome")
print(cookies)          # → {'twitter': {'auth_token': '…', 'ct0': '…'}, ...}

# Apply the extracted cookies to the library configuration

cfg = Config()
results = configure_from_browser("chrome", cfg)
print(results)          # → [('Twitter/X', True, 'auth_token + ct0'), …]

Command-Line Interface

The CLI provides a convenient wrapper around the extraction logic through agent_reach/cli.py:


# Pull cookies from Chrome and store them in the config file

agent-reach configure --from-browser chrome

# Explicitly use Firefox for extraction

agent-reach configure --from-browser firefox

Both approaches automatically handle permission errors when browsers are running and raise a clear RuntimeError if neither rookiepy nor browser_cookie3 is installed in your environment.

Configuration Persistence

Once extracted, cookies are persisted through agent_reach/config.py, the central configuration store. Channel implementations in agent_reach/channels/* (such as those for Twitter or XiaoHongShu) read these stored values during initialization, enabling authenticated API requests without hardcoding credentials or manual cookie copying.

Summary

  • Multi-browser support: Agent-Reach validates and extracts cookies from Chrome, Firefox, Edge, Brave, and Opera via extract_all in agent_reach/cookie_extract.py.
  • Dual backend system: Prioritizes the Rust-based rookiepy library, falling back to browser_cookie3 for maximum compatibility.
  • Platform-aware extraction: PLATFORM_SPECS defines required cookies per platform (e.g., Twitter/X needs auth_token and ct0 from .x.com domains).
  • Flexible output: Returns either key-value dictionaries or header-style strings depending on platform requirements.
  • CLI and programmatic access: Use agent-reach configure --from-browser <browser> or call configure_from_browser() directly to persist credentials to agent_reach/config.py.

Frequently Asked Questions

Agent-Reach supports Chrome, Firefox, Edge, Brave, and Opera. The extract_all function validates the browser parameter against this whitelist in agent_reach/cookie_extract.py (lines 68-73) before attempting extraction.

What dependencies are required to extract cookies from Chrome or Firefox?

The library attempts to use rookiepy first, a Rust-based extraction library that provides high-performance cookie reading. If rookiepy is not installed, it falls back to browser_cookie3, a pure-Python alternative. You must have at least one of these packages installed, or the code will raise a RuntimeError.

How does Agent-Reach handle different authentication requirements for various platforms?

The PLATFORM_SPECS dictionary in agent_reach/cookie_extract.py (lines 14-20) maps each platform to its required domains and specific cookie names. For instance, Twitter/X requires auth_token and ct0 from .x.com and .twitter.com domains. The extraction logic filters browser cookies against these specifications, ensuring only relevant authentication tokens are retrieved for each platform.

Can I extract cookies while Chrome or Firefox is running?

Typically no. Both rookiepy and browser_cookie3 require the browser to be closed to access the encrypted cookie database. If the browser is running, you may encounter permission errors. The library handles these gracefully but will fail to extract cookies until the browser process is terminated.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →