Skip to main content

Romek - AI Agent session management SDK

Project description

Romek

Romek

Persistent auth for AI agents. Works on any site, today.

No website integration required. No OAuth adoption needed. Just secure session management that works.

License: MIT PyPI version Python 3.8+ Dev.to

Quick StartLangChainn8nHow It WorksRoadmap


The Problem

# What every agent developer does today
cookies = {"session_id": "abc123..."}  # Hardcoded. Breaks constantly. Security nightmare.

Sessions expire. Cookies leak into git history. No audit trail. No access control.

The Solution

from romek import Vault

vault = Vault()
cookies = vault.get_session("linkedin.com")  # Encrypted. Scoped. Audited.
pip install romek

Works on sites as they exist today. No website changes. No OAuth adoption. No waiting for the ecosystem.


See It In Action

One command to grab cookies from Chrome

Agent automatically authenticates using stored session—no manual login, no hardcoded cookies.


How It Works

  1. Log into any site in Chrome (you probably already are)
  2. Run romek grab <domain> — cookies are encrypted and stored locally
  3. Your agent retrieves them securely on-demand

No extension required. No copy-paste. One command.


Quick Start

pip install romek
romek grab linkedin.com

That's it. Your LinkedIn session is now stored in an encrypted vault.

The grab command reads cookies directly from Chrome—no extension needed, no manual export.

from romek import Vault

vault = Vault()
cookies = vault.get_session("linkedin.com")

# Use with requests, Playwright, or any HTTP library
import requests
response = requests.get("https://linkedin.com/feed", cookies=cookies)

Works with any site you're logged into:

romek grab github.com
romek grab notion.so
romek grab twitter.com

Multiple Chrome Profiles

If you use multiple Chrome profiles, specify which one to grab from:

romek grab linkedin.com --profile "Profile 1"
romek grab github.com --profile "Work"

To find your profile names:

# Mac
ls ~/Library/Application\ Support/Google/Chrome/

# Linux
ls ~/.config/google-chrome/

# Windows
dir %LOCALAPPDATA%\Google\Chrome\User Data\

Default profile is used if no --profile flag is specified.


☁️ Remote Servers (VPS / Headless / Docker)

Running n8n or scripts on a server without Chrome? Sync your local session:

On your local machine:

romek grab linkedin.com
romek export linkedin.com -o cookies.json

Copy to server:

scp cookies.json user@your-server:~/

On your server:

pip install romek
romek import cookies.json --domain linkedin.com

Your server can now access your authenticated sessions.


Project Config (Team Workflows)

Define sessions your project needs in a config file:

romek init

Creates romek.yaml:

sessions:
  - linkedin.com
  - github.com
  - gmail.com

Then sync all sessions at once:

romek sync

Check health of all project sessions:

romek doctor

Output:

Checking session health...

linkedin.com
├── Status: ✅ Fresh
├── Cookies: 26 stored
└── Expires: in ~4 weeks

github.com
├── Status: ✅ Fresh
├── Cookies: 16 stored
└── Expires: in ~4 weeks

Health: 2/2 sessions ready

Share romek.yaml with your team. Each dev runs romek sync locally.


Why Romek?

Without Romek With Romek
Hardcoded cookies in code Encrypted vault storage
Sessions in git history Secrets separate from code
Any code can access anything Scoped access per agent
No idea what accessed what Full audit logging
Sessions break silently Expiration notifications

LangChain Integration

from langchain_openai import ChatOpenAI
from langchain.agents import initialize_agent, AgentType
from romek.langchain import get_romek_tools

tools = get_romek_tools(
    agent_name="sales-bot",
    vault_password="your-vault-password"  # Password auto-retrieved from system keyring if not provided
)

llm = ChatOpenAI(model="gpt-4", temperature=0)
agent = initialize_agent(
    tools=tools,
    llm=llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    verbose=True
)

# Agent automatically uses stored sessions
response = agent.run("Get my LinkedIn notifications")

Available tools:

  • authenticated_request — Make HTTP requests with stored session cookies
  • get_session_cookies — Retrieve cookies for custom requests

n8n Integration

Use Romek in your n8n workflows with our community node.

npm install n8n-nodes-romek

The node lets you:

  • Store and retrieve session cookies in n8n workflows
  • Use authenticated sessions with HTTP Request nodes
  • Build automation flows that require login

📦 View on npm | GitHub


Playwright Integration

from playwright.sync_api import sync_playwright
from romek import Vault

vault = Vault()
cookies = vault.get_session("github.com")

with sync_playwright() as p:
    browser = p.chromium.launch()
    context = browser.new_context()
    context.add_cookies(cookies)
    
    page = context.new_page()
    page.goto("https://github.com/notifications")
    # Already authenticated!

CLI Reference

Command Description
romek grab <domain> Grab cookies from Chrome
romek grab <domain> --profile "Name" Grab from specific Chrome profile
romek list List all stored sessions
romek delete <domain> Delete a stored session
romek refresh <domain> Re-grab cookies for a domain
romek init Create romek.yaml config file
romek sync Grab all sessions from romek.yaml
romek doctor Check health of all project sessions
romek status <domain> Check status of a specific session
romek export <domain> -o file.json Export cookies to JSON file
romek import <file> --domain <domain> Import cookies from JSON file
romek version Show current version

Security

  • AES-256 encryption with PBKDF2 key derivation (100k iterations)
  • Ed25519 keypairs for agent identity
  • Scoped access — agents only access approved domains
  • Audit logging — every access logged with timestamp
  • SQLite storage — encrypted database at ~/.romek/vault.db

Roadmap

  • Chrome extension for cookie export (replaced by grab command)
  • Encrypted local vault
  • Direct Chrome cookie extraction (romek grab)
  • Playwright integration
  • LangChain integration
  • n8n integrationn8n-nodes-romek
  • Project config (romek.yaml)
  • Session health checks (romek doctor)
  • Export/Import for remote servers
  • Firefox extension
  • Selenium examples
  • Cloud vault sync

Examples

Working demos available in the examples/ folder.

GitHub Agent Demo

Setup:

# 1. Create the agent
romek create-agent github-agent --scopes github.com

# 2. Grab cookies from Chrome
romek grab github.com

# 3. Your session is now stored and ready to use

Run:

PYTHONPATH=. python examples/github_agent.py

Contributing

PRs welcome. Check out the issues for feature requests.


License

MIT

Star us if Romek helps your agents authenticate!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

romek-0.3.2.tar.gz (27.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

romek-0.3.2-py3-none-any.whl (28.0 kB view details)

Uploaded Python 3

File details

Details for the file romek-0.3.2.tar.gz.

File metadata

  • Download URL: romek-0.3.2.tar.gz
  • Upload date:
  • Size: 27.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.6

File hashes

Hashes for romek-0.3.2.tar.gz
Algorithm Hash digest
SHA256 a0906a6b72473ea531b1e1410c9b3e91a6862e64a44dd130884046809876d920
MD5 b2696533b5b116286a259d7013978c84
BLAKE2b-256 85ea2dd4db370455638f8c323c67ce9d1094d0f7a43e0b14303ef78ac5a035b7

See more details on using hashes here.

File details

Details for the file romek-0.3.2-py3-none-any.whl.

File metadata

  • Download URL: romek-0.3.2-py3-none-any.whl
  • Upload date:
  • Size: 28.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.6

File hashes

Hashes for romek-0.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 9e48e7fbe794c01384c7e5f7a689fe71b31a77f36307c2a9eb286b37e73209ad
MD5 f1cb7ac411165c1fe3bb592f7d7185c4
BLAKE2b-256 40fb9b8b05e16eadca2cb3200c57a572214fe5e5e8aeca36d528c90c23d5f8a3

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page