{"id":45818849,"url":"https://github.com/unbrowse-ai/unbrowse","last_synced_at":"2026-07-24T13:00:14.791Z","repository":{"id":336354271,"uuid":"1143440578","full_name":"unbrowse-ai/unbrowse","owner":"unbrowse-ai","description":"Unbrowse — api native browser Skill/CLI/MCP/SDK for any agent. Auto-discovers APIs from browser traffic, generates skills on the fly to call APIs directly 100x faster, 80% cheaper locally.","archived":false,"fork":false,"pushed_at":"2026-07-18T06:57:15.000Z","size":225336,"stargazers_count":730,"open_issues_count":25,"forks_count":63,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-18T08:07:57.668Z","etag":null,"topics":["agents","agentskills","browser-use","clawdbot","clawdbot-plugin","har","moltbot","openclaw","openclaw-skills","reverse-engineering","skills"],"latest_commit_sha":null,"homepage":"https://unbrowse.ai","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/unbrowse-ai.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"docs/SECURITY.md","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},"funding":{"github":null,"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":null,"buy_me_a_coffee":null,"thanks_dev":null,"custom":["https://buy.stripe.com/9B67sM3nn46feT62gGbbG03"]}},"created_at":"2026-01-27T15:30:07.000Z","updated_at":"2026-07-18T07:20:33.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/unbrowse-ai/unbrowse","commit_stats":null,"previous_names":["lekt9/unbrowse-openclaw","lekt9/unbrowse"],"tags_count":264,"template":false,"template_full_name":null,"purl":"pkg:github/unbrowse-ai/unbrowse","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unbrowse-ai%2Funbrowse","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unbrowse-ai%2Funbrowse/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unbrowse-ai%2Funbrowse/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unbrowse-ai%2Funbrowse/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/unbrowse-ai","download_url":"https://codeload.github.com/unbrowse-ai/unbrowse/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unbrowse-ai%2Funbrowse/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35842301,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-07-24T02:00:07.870Z","response_time":62,"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":["agents","agentskills","browser-use","clawdbot","clawdbot-plugin","har","moltbot","openclaw","openclaw-skills","reverse-engineering","skills"],"created_at":"2026-02-26T19:38:30.224Z","updated_at":"2026-07-24T13:00:14.785Z","avatar_url":"https://github.com/unbrowse-ai.png","language":"TypeScript","funding_links":["https://buy.stripe.com/9B67sM3nn46feT62gGbbG03"],"categories":["Developer Tools","🧰 Skills \u0026 Registries"],"sub_categories":["Infrastructure"],"readme":"# Unbrowse\n\nUnbrowse is the action layer for AI agents. It learns a site's first-party API\nroutes from real browsing, then replays known routes directly instead of driving\na browser for every task.\n\n```bash\nnpm install -g unbrowse@11.1.9\nunbrowse setup\nunbrowse \"top stories with point counts\" --url https://news.ycombinator.com\n```\n\nOn a cache hit, Unbrowse resolves, executes, and reads the route in one call. On\na miss, it can open a real browser, observe the working request, and make that\nroute reusable. The browser remains available for login, consent, CAPTCHA, and\nUI-only flows.\n\n## Why Unbrowse\n\n- **Fast on repeat work.** Known routes skip page rendering and DOM parsing.\n- **Honest fallback.** Browser automation stays available when direct requests\n  are not enough.\n- **Local credentials.** Site sessions remain on the machine running Unbrowse.\n- **One agent interface.** Use the same intent from the CLI, Agent Skill, MCP,\n  or TypeScript.\n- **Shared learning.** Sanitized route metadata can be published so other\n  agents do not rediscover the same site flow.\n\nThe published 94-domain benchmark measured a 3.6× mean and 5.4× median speedup\nfor warmed cached routes over Playwright. See\n[Internal APIs Are All You Need](https://arxiv.org/abs/2604.00694) and the\n[benchmark notes](docs/benchmarks.md).\n\n## CLI\n\nThe default interface is one command:\n\n```bash\nunbrowse \"task\" --url https://example.com\n```\n\nUseful lower-level commands:\n\n```bash\nunbrowse health\nunbrowse fetch https://example.com\nunbrowse resolve --intent \"search products\" --url https://example.com --no-execute\nunbrowse capture --url https://example.com --intent \"search products\"\nunbrowse auth https://example.com/login\n```\n\nUse `go`, `snap`, `click`, `submit`, and `close` when a task genuinely needs the\nDOM. Run `unbrowse \u003ccommand\u003e --help` for the current options.\n\n## TypeScript SDK\n\nThe current SDK ships inside the `unbrowse` package:\n\n```bash\nnpm install unbrowse@11.1.9\n```\n\n```ts\nimport { createHole } from \"unbrowse/sdk\";\n\nconst result = await createHole().fill({\n  intent: \"list tomorrow's events\",\n  url: \"https://calendar.google.com\",\n});\n\nconsole.log(result.answer ?? result.items);\n```\n\nUse the lower-level client when your application should inspect route choices:\n\n```ts\nimport { Unbrowse } from \"unbrowse/sdk\";\n\nconst unbrowse = new Unbrowse({ apiKey: process.env.UNBROWSE_API_KEY });\nconst resolved = await unbrowse.resolve({\n  intent: \"find recent TypeScript releases\",\n  contextUrl: \"https://github.com/microsoft/TypeScript/releases\",\n});\n\nconst endpoint = resolved.available_operations?.[0];\nif (endpoint) {\n  const result = await unbrowse.execute({ endpoint_id: endpoint.endpoint_id });\n  console.log(result.data);\n}\n```\n\nSee the [SDK quickstart](docs/for-developers/sdk-quickstart.md) for retries,\ntyped errors, proxy options, and account resources.\n\n## Accounts and billing\n\nUnbrowse uses API keys for account access and credits for metered work.\n\n```bash\nunbrowse register --email you@example.com\nunbrowse dashboard\n```\n\nNo separate payment setup is required. Added, promotional, and earned credits\nlive in one account ledger.\n\n```ts\nconst credits = await unbrowse.account.credits();\nconsole.log(`${credits.balance_credits} credits`);\n```\n\n## Agent Skill and MCP\n\n`unbrowse setup` installs the Agent Skill by default. MCP is an optional\ncompatibility surface:\n\n```bash\nunbrowse setup --mcp\n```\n\nThe Agent Skill teaches compatible hosts the current flat CLI commands and the\npreferred one-call flow.\n\n## Development\n\n```bash\ngit clone --recursive https://github.com/unbrowse-ai/unbrowse.git\ncd unbrowse\nbun install\n./setup\nbun test\n```\n\nThe local runtime listens on `127.0.0.1:6969` by default. Site profiles and\ncredentials are stored below `~/.unbrowse/`; logs and route caches are kept\nseparate so they can be inspected or removed independently.\n\n## Documentation\n\n- [Quickstart](docs/guides/quickstart.md)\n- [How an agent uses Unbrowse](docs/for-agents/how-an-agent-uses-unbrowse.md)\n- [SDK quickstart](docs/for-developers/sdk-quickstart.md)\n- [Billing and usage](docs/for-agents/credits.md)\n- [Architecture](docs/architecture/README.md)\n- [Security](SECURITY.md)\n- [Contributing](CONTRIBUTING.md)\n\nUnbrowse is MIT licensed. See the [open-source notice](docs/OPEN-SOURCE-NOTICE.md)\nfor the client/server boundary.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Funbrowse-ai%2Funbrowse","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Funbrowse-ai%2Funbrowse","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Funbrowse-ai%2Funbrowse/lists"}