lock-me-in
/install lock-me-in
lock-me-in
Remote browser login via temporary public URL. The user logs in visually; cookies persist for future automation.
How It Works
- Agent launches headless Chromium with Playwright
- A web UI streams live screenshots of the browser
- Cloudflared creates a temporary public tunnel URL
- User opens the link, clicks/types to log in
- Session (cookies + localStorage) saved to disk
- Future Playwright sessions load the saved state
Quick Start
# Start a login session
node \x3Cskill-dir>/scripts/browser-login.mjs \x3Curl> \x3Csession-name>
# Examples
node \x3Cskill-dir>/scripts/browser-login.mjs https://linkedin.com/login linkedin
node \x3Cskill-dir>/scripts/browser-login.mjs https://github.com/login github
node \x3Cskill-dir>/scripts/browser-login.mjs https://mail.google.com gmail
Run in background with nohup, capture the tunnel URL from stdout:
nohup node \x3Cskill-dir>/scripts/browser-login.mjs \x3Curl> \x3Cname> > /tmp/lock-me-in.log 2>&1 &
# Wait for URL:
grep -m1 'LOGIN URL' /tmp/lock-me-in.log
Send the tunnel URL to the user via their messaging channel.
Loading Saved Sessions
To use a saved session in Playwright automation:
import { chromium } from 'playwright-core';
const browser = await chromium.launch({ executablePath: CHROME_PATH, headless: true, args: ['--no-sandbox'] });
const context = await browser.newContext({
storageState: '/data/home/.browser-sessions/\x3Csession-name>/storage.json'
});
const page = await context.newPage();
await page.goto('https://linkedin.com/feed'); // Already logged in!
Session Storage
Sessions persist at /data/home/.browser-sessions/\x3Cname>/:
storage.json— Cookies + localStorage (Playwright format)meta.json— Session metadata (last URL, timestamp, cookie count)
List saved sessions: ls /data/home/.browser-sessions/
Configuration
Environment variables:
LOCK_ME_IN_SESSIONS_DIR— Override sessions dir (default:/data/home/.browser-sessions)LOCK_ME_IN_CHROME_PATH— Override Chrome path (auto-detected from Playwright)LOCK_ME_IN_PORT— Override local proxy port (default: 18850)OPENCLAW_PROXY_URL— HTTP proxy for browser traffic (auto-parsed for auth)
Script flags:
--port=N— Local proxy port--timeout=N— Auto-close after N seconds (default: 900 = 15 min)
Requirements
- Playwright-compatible Chromium (installed via
npx playwright install chromium) cloudflaredbinary for tunneling (install:curl -sL https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -o /usr/local/bin/cloudflared && chmod +x /usr/local/bin/cloudflared)- Node.js 18+
Web UI Controls
- Click on screenshot to click that position
- Send types text into the focused element
- Tab / Enter for keyboard navigation
- ← Back browser back button
- ↓ Scroll scroll down
- Navigate go to a specific URL
- 💾 Save persist session without closing
- ✅ Done save and close everything
Security Notes
- Tunnel URLs are random and short-lived (valid only while the process runs)
- No authentication on the tunnel by default — share the URL only with the intended user
- Sessions contain auth cookies — treat
storage.jsonas sensitive - Auto-closes after 15 minutes by default to limit exposure
- Make sure OpenClaw is installed (local or Docker)
- Run the install command in chat:
/install lock-me-in - After installation, invoke the skill by name or use
/lock-me-in - Provide required inputs per the skill's parameter spec and get structured output
What is lock-me-in?
Remote browser login and session persistence for headless servers. Start an interactive browser session via a temporary public URL (cloudflared tunnel), let... It is an AI Agent Skill for Claude Code / OpenClaw, with 315 downloads so far.
How do I install lock-me-in?
Run "/install lock-me-in" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.
Is lock-me-in free?
Yes, lock-me-in is completely free, licensed under MIT-0. You can download, install and use it at no cost.
Which platforms does lock-me-in support?
lock-me-in is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).
Who created lock-me-in?
It is built and maintained by MichaelLod (@michaellod); the current version is v1.2.0.