{"id":50527255,"url":"https://github.com/zk1tty/login-run","last_synced_at":"2026-06-03T09:01:51.120Z","repository":{"id":361095840,"uuid":"1229160431","full_name":"zk1tty/login-run","owner":"zk1tty","description":"Simplest API server to execute and persist the user login session on remote browser","archived":false,"fork":false,"pushed_at":"2026-05-29T06:06:38.000Z","size":29371,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-29T08:09:41.222Z","etag":null,"topics":["browser-automation","browserless"],"latest_commit_sha":null,"homepage":"https://stay-authed.onrender.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zk1tty.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-04T19:03:09.000Z","updated_at":"2026-05-29T06:06:42.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/zk1tty/login-run","commit_stats":null,"previous_names":["zk1tty/login-run"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/zk1tty/login-run","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zk1tty%2Flogin-run","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zk1tty%2Flogin-run/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zk1tty%2Flogin-run/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zk1tty%2Flogin-run/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zk1tty","download_url":"https://codeload.github.com/zk1tty/login-run/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zk1tty%2Flogin-run/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33856287,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-03T02:00:06.370Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["browser-automation","browserless"],"created_at":"2026-06-03T09:01:50.164Z","updated_at":"2026-06-03T09:01:51.114Z","avatar_url":"https://github.com/zk1tty.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Login Run 🏃🏻‍♀️\n\nLogin Run is a minimal API for turning one-time human login into reusable, authenticated browser sessions for agents.\n\nMany workflows still depend on portals without APIs, where the agent needs to read or update data inside an end user's account. The user has to log in, pass CAPTCHA and OTP(one time passcode), and then the agent needs to keep working later **without asking the user to repeat the same login flow**.    \n\nLogin Run provides the remote browser session layer for that.\n\nTry it from [Demo site](https://stay-authed.onrender.com/demo)\n\n\u003e [!TIP]\n\u003e **Result:** HealthEquity login became **3x faster** than using browser agent on runtime — from **85 seconds** to **24 seconds**.\n\u003e So you can integrate this workflow synchronously to your frontend or chatbot via tool call, and launch the product!\n\n\u003ca href=\"https://www.youtube.com/watch?v=nSqYzkXConc\"\u003e\n  \u003cimg src=\"docs/LoginRun-demo-20s/LoginRun-demo-20s.gif\" alt=\"Login Run demo\" width=\"100%\"\u003e\n\u003c/a\u003e\n\n\n## What It Provides\n\nLogin Run has two parts:\n\n1. **LoginRun API** — a minimal API for logging into anti-bot-heavy web portals, handling CAPTCHA/OTP checkpoints, and maintaining authenticated browser session state for repeat agent workflows.\n2. **LoginRun Codegen** — a ReAct-style onboarding loop that generates site profiles and regression fixtures for deterministic browser automation, then validates them locally before they are promoted into API-backed workflows.\n\nThe API keeps authentication/session management separate from agent logic. Codegen helps teams add new websites without manually scripting every login flow.\n\n## Current API\n\nThe server exposes a small async login API.\n\n```text\nGET  /health\nPOST /v1/logins\nGET  /v1/logins/:runId\nGET  /v1/logins/:runId/events\nPOST /v1/logins/:runId/otp\n```\n\nStart phase 1:\n\n```bash\ncurl -s -X POST http://127.0.0.1:8787/v1/logins \\\n  -H \"content-type: application/json\" \\\n  -d '{\n    \"customerId\": \"demo-user\",\n    \"targetUrl\": \"https://example.com/login\",\n    \"username\": \"user@example.com\",\n    \"password\": \"password\",\n    \"otpDeliverySelection\": \"email\"\n  }'\n```\n\nPoll status:\n\n```bash\ncurl -s http://127.0.0.1:8787/v1/logins/\u003crunId\u003e\n```\n\nSubmit OTP:\n\n```bash\ncurl -s -X POST http://127.0.0.1:8787/v1/logins/\u003crunId\u003e/otp \\\n  -H \"content-type: application/json\" \\\n  -d '{\"code\":\"123456\"}'\n```\n\nFrontend clients can also subscribe to:\n\n```text\nGET /v1/logins/:runId/events\n```\n\nPolling is the source of truth; SSE is for frontend completion callbacks.\n\n## LoginRun Codegen\n\nTry the standalone Codegen demo without cloning this repo:\n\n```bash\nnpx @loginrun/codegen demo\n```\n\nIt generates a redacted HealthEquity-style onboarding profile, fixture artifacts, regression test, and report under `./loginrun/healthequity`. The demo does not submit credentials, request OTP, call LoginRun APIs, or require Browserless configuration.\n\n## Proof of CAPTCHA resolver\n\nLogin Run has been tested against Cloudflare Turnstile behavior using the public test page:\n\n```text\nhttps://browser-compat.turnstile.workers.dev/\n```\n\nThe run below is generated from real captured screenshots:\n\n![Cloudflare Turnstile auto-mode frames](docs/research/turnstile/assets/cloudflare-turnstile-auto-mode-frames.gif)\n\nIt has also completed a real HealthEquity-style login workflow against:\n\n```text\nhttps://my.healthequity.com/ClientLogin.aspx\n```\n\nThe animation below was generated from all screenshots in one captured run:\n\n![HealthEquity login workflow](docs/research/login/assets/healthequity-login-run-animated.png)\n\n## Setup\n\n```bash\ncp .env.example .env\nnpm install\nnpm run start:bl-server\n```\n\nUseful environment:\n\n- `BROWSERLESS_TOKEN`\n- `BL_PROXY=local|cloud|cloud_stealth|cloud_stealth_residential|cloud_stealth_residential_sticky`\n- `PUPPETEER_API_HOST=0.0.0.0`\n- `PUPPETEER_API_PORT=8787`\n\nBrowserless target profiles live in `config/browserless-targets.json`.\n\n## Scripts\n\n```bash\nnpm run login:probe\nnpm run login:probe:concurrency\nnpm run otp:gmail:init\nnpm run otp:gmail:watcher\nnpm test\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzk1tty%2Flogin-run","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzk1tty%2Flogin-run","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzk1tty%2Flogin-run/lists"}