{"adoption": {"forks": 2809, "observed_at": "2026-08-28T04:11:52.726734+00:00", "stars": 28619}, "canonical_url": "https://ross.abutalabs.com/products/opencli", "card": {"archived": false, "artifact_type": "cli-tool", "description": "Make Any Website into CLI & Use your logged-in browser by AI agent. ", "domain": ["developer-tools", "browser-extensions", "web-development"], "enriched": true, "function": ["cli", "web-scraping", "browser-extension", "workflow-automation", "agent-framework", "developer-tools"], "health_score": 100, "homepage": "https://opencli.info/", "language": "JavaScript", "license": "Apache-2.0", "license_family": "permissive", "maturity": "active", "member_repos": ["jackwener/OpenCLI"], "name": "jackwener/OpenCLI", "platform": ["cli", "windows", "browser", "cross-platform"], "pushed_at": "2026-08-26T09:23:22+00:00", "repo": "jackwener/OpenCLI", "stars": 28619, "tags": ["browser-automation", "playwright", "browser-use", "ai-agent-tools", "website-to-cli", "electron-apps", "chrome-extension", "automation", "command-line", "ai-agents", "nodejs", "macos"], "topics": ["ai-agent", "ai-agents", "ai-tools", "cli", "browser-automation", "browser-use", "playwright"], "urls": [], "use_cases": ["turn any website into a cli command", "let ai agent control my logged-in browser", "scrape data from sites requiring login", "automate form filling and clicking in chrome", "build cli adapters for websites", "automate electron desktop apps from the terminal", "extract web page content to markdown"], "what_it_is": "OpenCLI is a Node.js CLI tool that converts websites, browser sessions, and Electron apps into deterministic command-line interfaces for humans and AI agents. It ships built-in site adapters, browser automation primitives driven through a Chrome extension bridge, and skills that let AI agents operate any logged-in browser.", "when_to_avoid": ["you need headless scraping at scale on servers without a browser session", "you only need simple HTTP API clients rather than browser automation", "you can't install a Chrome extension or local daemon", "you need a pure no-browser pure-node scraping library"], "when_to_choose": ["you want deterministic CLI access to websites you're logged into", "you want an AI agent to drive a real logged-in Chrome session", "you need to automate Electron apps or register local binaries under one CLI hub", "you want to author reusable site adapters with guided tooling"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/opencli", "repo": "jackwener/OpenCLI", "role": "main", "score": 77}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:11:52.726734+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T16:54:21.097821+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a624621cd4ef15765e7be3efab289b5941167eb59960db47292eebb6360a60db", "fetched_at": "2026-08-28T04:11:52.726734+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jackwener/OpenCLI"}, {"content_hash": "f4643351c5f23cffb019877ce67760fc656f8db37d49fd61846f193ce8b4b1a4", "fetched_at": "2026-08-29T07:51:01.760876+00:00", "kind": "homepage", "missing": false, "url": "https://opencli.info/"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:11:52.726734+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T16:54:21.097821+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a624621cd4ef15765e7be3efab289b5941167eb59960db47292eebb6360a60db", "fetched_at": "2026-08-28T04:11:52.726734+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jackwener/OpenCLI"}, {"content_hash": "f4643351c5f23cffb019877ce67760fc656f8db37d49fd61846f193ce8b4b1a4", "fetched_at": "2026-08-29T07:51:01.760876+00:00", "kind": "homepage", "missing": false, "url": "https://opencli.info/"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T16:54:21.097821+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a624621cd4ef15765e7be3efab289b5941167eb59960db47292eebb6360a60db", "fetched_at": "2026-08-28T04:11:52.726734+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jackwener/OpenCLI"}, {"content_hash": "f4643351c5f23cffb019877ce67760fc656f8db37d49fd61846f193ce8b4b1a4", "fetched_at": "2026-08-29T07:51:01.760876+00:00", "kind": "homepage", "missing": false, "url": "https://opencli.info/"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:11:52.726734+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:11:52.726734+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:11:52.726734+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T16:54:21.097821+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a624621cd4ef15765e7be3efab289b5941167eb59960db47292eebb6360a60db", "fetched_at": "2026-08-28T04:11:52.726734+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jackwener/OpenCLI"}, {"content_hash": "f4643351c5f23cffb019877ce67760fc656f8db37d49fd61846f193ce8b4b1a4", "fetched_at": "2026-08-29T07:51:01.760876+00:00", "kind": "homepage", "missing": false, "url": "https://opencli.info/"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:11:52.726734+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:11:52.726734+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T16:54:21.097821+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a624621cd4ef15765e7be3efab289b5941167eb59960db47292eebb6360a60db", "fetched_at": "2026-08-28T04:11:52.726734+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jackwener/OpenCLI"}, {"content_hash": "f4643351c5f23cffb019877ce67760fc656f8db37d49fd61846f193ce8b4b1a4", "fetched_at": "2026-08-29T07:51:01.760876+00:00", "kind": "homepage", "missing": false, "url": "https://opencli.info/"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:11:52.726734+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:11:52.726734+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:11:52.726734+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T16:54:21.097821+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a624621cd4ef15765e7be3efab289b5941167eb59960db47292eebb6360a60db", "fetched_at": "2026-08-28T04:11:52.726734+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jackwener/OpenCLI"}, {"content_hash": "f4643351c5f23cffb019877ce67760fc656f8db37d49fd61846f193ce8b4b1a4", "fetched_at": "2026-08-29T07:51:01.760876+00:00", "kind": "homepage", "missing": false, "url": "https://opencli.info/"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:11:52.726734+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:11:52.726734+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T16:54:21.097821+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a624621cd4ef15765e7be3efab289b5941167eb59960db47292eebb6360a60db", "fetched_at": "2026-08-28T04:11:52.726734+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jackwener/OpenCLI"}, {"content_hash": "f4643351c5f23cffb019877ce67760fc656f8db37d49fd61846f193ce8b4b1a4", "fetched_at": "2026-08-29T07:51:01.760876+00:00", "kind": "homepage", "missing": false, "url": "https://opencli.info/"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T16:54:21.097821+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a624621cd4ef15765e7be3efab289b5941167eb59960db47292eebb6360a60db", "fetched_at": "2026-08-28T04:11:52.726734+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jackwener/OpenCLI"}, {"content_hash": "f4643351c5f23cffb019877ce67760fc656f8db37d49fd61846f193ce8b4b1a4", "fetched_at": "2026-08-29T07:51:01.760876+00:00", "kind": "homepage", "missing": false, "url": "https://opencli.info/"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T16:54:21.097821+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a624621cd4ef15765e7be3efab289b5941167eb59960db47292eebb6360a60db", "fetched_at": "2026-08-28T04:11:52.726734+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jackwener/OpenCLI"}, {"content_hash": "f4643351c5f23cffb019877ce67760fc656f8db37d49fd61846f193ce8b4b1a4", "fetched_at": "2026-08-29T07:51:01.760876+00:00", "kind": "homepage", "missing": false, "url": "https://opencli.info/"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T16:54:21.097821+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a624621cd4ef15765e7be3efab289b5941167eb59960db47292eebb6360a60db", "fetched_at": "2026-08-28T04:11:52.726734+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jackwener/OpenCLI"}, {"content_hash": "f4643351c5f23cffb019877ce67760fc656f8db37d49fd61846f193ce8b4b1a4", "fetched_at": "2026-08-29T07:51:01.760876+00:00", "kind": "homepage", "missing": false, "url": "https://opencli.info/"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 12, "rhythm": 87}, "computed_at": "2026-09-03T02:39:23.370411+00:00", "flags": ["young"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 172, "days_push": 7, "days_rel": 10, "gap_med": 0, "n_releases_24m": 112}, "score": 77, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}