{"adoption": {"forks": 277, "observed_at": "2026-08-28T04:07:12.018195+00:00", "stars": 2715}, "canonical_url": "https://ross.abutalabs.com/products/open-interface", "card": {"archived": false, "artifact_type": "application", "description": "Control Any Computer Using LLMs.", "domain": ["artificial-intelligence", "large-language-models", "developer-tools"], "enriched": true, "function": ["agent-framework", "llm-inference", "workflow-automation", "computer-vision", "gui"], "health_score": 88, "homepage": null, "language": "Python", "license": "GPL-3.0", "license_family": "copyleft", "maturity": "active", "member_repos": ["AmberSahdev/Open-Interface"], "name": "AmberSahdev/Open-Interface", "platform": ["windows", "python", "cross-platform"], "pushed_at": "2026-07-17T02:26:26+00:00", "repo": "AmberSahdev/Open-Interface", "stars": 2715, "tags": ["computer-control", "self-driving-computer", "pyautogui", "gpt-4o", "screen-understanding", "desktop-automation", "llm-agent", "ai-agents", "automation", "macos", "linux", "desktop"], "topics": ["gpt", "llm", "machine-learning", "macos", "openai", "python", "automation", "assistant", "assistant-computer-control", "gpt4", "gpt4v", "gpt4vision", "linux", "pyautogui", "pyinstaller", "self-driving", "self-driving-software", "windows"], "urls": [], "use_cases": ["control my computer with natural language", "automate tasks on my desktop using an LLM", "have an AI agent operate my mouse and keyboard", "solve Wordle automatically with AI", "create documents hands-free with a computer autopilot", "self-driving software for my computer"], "what_it_is": "Open Interface is a cross-platform desktop application that lets users control their computer using natural language requests processed by LLM backends like GPT-4o and Gemini. It plans the required steps, simulates keyboard and mouse input via PyAutoGUI, and course-corrects using screenshots of progress.", "when_to_avoid": ["you need headless server automation without a GUI", "you require guaranteed reliability or strict security, since simulated input can be error-prone", "you only want simple scripting without LLM costs or API dependencies"], "when_to_choose": ["you want an open-source LLM agent that directly controls a desktop GUI", "you need cross-platform (macOS, Linux, Windows) computer automation", "you want screenshot-based feedback loops for task course-correction"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/open-interface", "repo": "AmberSahdev/Open-Interface", "role": "main", "score": 65}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:07:12.018195+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:15:22.003542+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "981ca0e9a0b4e98febfb8b918313a6ebacdd6ab3f7408a01e3c26ebc6ca74a4a", "fetched_at": "2026-08-28T04:07:12.018195+00:00", "kind": "readme", "missing": false, "url": "https://github.com/AmberSahdev/Open-Interface"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:07:12.018195+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:15:22.003542+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "981ca0e9a0b4e98febfb8b918313a6ebacdd6ab3f7408a01e3c26ebc6ca74a4a", "fetched_at": "2026-08-28T04:07:12.018195+00:00", "kind": "readme", "missing": false, "url": "https://github.com/AmberSahdev/Open-Interface"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:15:22.003542+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "981ca0e9a0b4e98febfb8b918313a6ebacdd6ab3f7408a01e3c26ebc6ca74a4a", "fetched_at": "2026-08-28T04:07:12.018195+00:00", "kind": "readme", "missing": false, "url": "https://github.com/AmberSahdev/Open-Interface"}], "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:07:12.018195+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:07:12.018195+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:07:12.018195+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:15:22.003542+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "981ca0e9a0b4e98febfb8b918313a6ebacdd6ab3f7408a01e3c26ebc6ca74a4a", "fetched_at": "2026-08-28T04:07:12.018195+00:00", "kind": "readme", "missing": false, "url": "https://github.com/AmberSahdev/Open-Interface"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:07:12.018195+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:07:12.018195+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:15:22.003542+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "981ca0e9a0b4e98febfb8b918313a6ebacdd6ab3f7408a01e3c26ebc6ca74a4a", "fetched_at": "2026-08-28T04:07:12.018195+00:00", "kind": "readme", "missing": false, "url": "https://github.com/AmberSahdev/Open-Interface"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:07:12.018195+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:07:12.018195+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:07:12.018195+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:15:22.003542+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "981ca0e9a0b4e98febfb8b918313a6ebacdd6ab3f7408a01e3c26ebc6ca74a4a", "fetched_at": "2026-08-28T04:07:12.018195+00:00", "kind": "readme", "missing": false, "url": "https://github.com/AmberSahdev/Open-Interface"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:07:12.018195+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:07:12.018195+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:15:22.003542+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "981ca0e9a0b4e98febfb8b918313a6ebacdd6ab3f7408a01e3c26ebc6ca74a4a", "fetched_at": "2026-08-28T04:07:12.018195+00:00", "kind": "readme", "missing": false, "url": "https://github.com/AmberSahdev/Open-Interface"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:15:22.003542+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "981ca0e9a0b4e98febfb8b918313a6ebacdd6ab3f7408a01e3c26ebc6ca74a4a", "fetched_at": "2026-08-28T04:07:12.018195+00:00", "kind": "readme", "missing": false, "url": "https://github.com/AmberSahdev/Open-Interface"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:15:22.003542+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "981ca0e9a0b4e98febfb8b918313a6ebacdd6ab3f7408a01e3c26ebc6ca74a4a", "fetched_at": "2026-08-28T04:07:12.018195+00:00", "kind": "readme", "missing": false, "url": "https://github.com/AmberSahdev/Open-Interface"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:15:22.003542+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "981ca0e9a0b4e98febfb8b918313a6ebacdd6ab3f7408a01e3c26ebc6ca74a4a", "fetched_at": "2026-08-28T04:07:12.018195+00:00", "kind": "readme", "missing": false, "url": "https://github.com/AmberSahdev/Open-Interface"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 92, "longevity": 68, "rhythm": 28}, "computed_at": "2026-09-03T02:39:23.370411+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 952, "days_push": 48, "days_rel": 535, "gap_med": 34, "n_releases_24m": 4}, "score": 65, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}