{"repo":"alibaba/page-agent","free":true,"listed":false,"github":"https://github.com/alibaba/page-agent","clone":"git clone https://github.com/alibaba/page-agent.git","description":"JavaScript in-page GUI agent. Control web interfaces with natural language.","language":"TypeScript","stars":28642,"topics":["agent","ai","ai-agents","browser-automation","javascript","mcp","typescript","web"],"license":"MIT","category":"lowcode_engine","readme_excerpt":"# Page Agent\n\n<picture>\n  <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://page-agent.github.io/assets/readme/banner-dark.png\">\n  <img alt=\"Page Agent Banner\" src=\"https://page-agent.github.io/assets/readme/banner-light.png\">\n</picture>\n\n[![CI](https://img.shields.io/github/actions/workflow/status/alibaba/page-agent/main-ci.yml?branch=main&style=flat-square&label=ci)](https://github.com/alibaba/page-agent/actions/workflows/main-ci.yml)\n[![npm](https://img.shields.io/npm/v/page-agent?style=flat-square&label=npm)](https://www.npmjs.com/package/page-agent)\n[![downloads](https://img.shields.io/npm/dt/page-agent?style=flat-square)](https://www.npmjs.com/package/page-agent)\n[![size](https://img.shields.io/bundlephobia/minzip/page-agent?style=flat-square&label=size)](https://bundlephobia.com/package/page-agent)\n[![license](https://img.shields.io/badge/license-MIT-blue?style=flat-square)](https://opensource.org/licenses/MIT)\n[![typescript](https://img.shields.io/badge/%3C%2F%3E-typescript-blue?style=flat-square)](http://www.typescriptlang.org/)\n[![Chrome Web Store Rating](https://img.shields.io/chrome-web-store/rating/akldabonmimlicnjlflnapfeklbfemhj?style=flat-square&label=chrome%20rating)](https://chromewebstore.google.com/detail/page-agent-ext/akldabonmimlicnjlflnapfeklbfemhj)\n[![GitHub stars](https://img.shields.io/github/stars/alibaba/page-agent.svg)](https://github.com/alibaba/page-agent)\n\nThe GUI Agent Living in Your Webpage. One script gives any web page its own AI agent.\n\n<a href=\"https://trendshift.io/repositories/22551?utm_source=repository-badge&amp;utm_medium=badge&amp;utm_campaign=badge-repository-22551\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://trendshift.io/api/badge/repositories/22551\" alt=\"alibaba%2Fpage-agent | Trendshift\" width=\"180\"/></a>\n\n🌐 **English** | [中文](./docs/README-zh.md)\n\n<a href=\"https://alibaba.github.io/page-agent/\" target=\"_blank\"><b>🚀 Demo</b></a> | <a href=\"https://alibaba.github.io/page-agent/docs/introduction/overview\" target=\"_blank\"><b>📖 Docs</b></a> | <a href=\"https://news.ycombinator.com/item?id=47264138\" target=\"_blank\"><b>📢 HN Discussion</b></a> | <a href=\"https://x.com/simonluvramen\" target=\"_blank\"><b>𝕏 Follow on X</b></a>\n\n<!-- demo video -->\n\n[![Watch the demo](https://page-agent.github.io/assets/readme/poster.jpg)](https://github.com/user-attachments/assets/a1f2eae2-13fb-4aae-98cf-a3fc1620a6c2)\n\n---\n\n## ✨ Features\n\n- **🎯 Easy integration**\n    - No need for `browser extension` / `python` / `headless browser`.\n    - Just in-page javascript. Everything happens in your web page.\n- **📖 Text-based DOM manipulation**\n    - No screenshots. No multi-modal LLMs or special permissions needed.\n- **🧠 Bring your own LLMs**\n    - Works with most mainstream models, including locally deployed ones. See [supported models](https://alibaba.github.io/page-agent/docs/features/models).\n- **🐙 Optional [chrome extension](https://alibaba.github.io/page-agent/docs/features/chrome-extension) for multi-page tasks.**\n    - And an [MCP Server (Beta)](https://alibaba.github.io/page-agent/docs/features/mcp-server) to control it from outside\n\n## 💡 Use Cases\n\n- **SaaS AI Copilot** — Ship an AI copilot in your product in lines of code. No backend rewrite.\n- **Smart Form Filling** — Turn 20-click workflows into one sentence. Perfect for ERP, CRM, and admin systems.\n- **Accessibility** — Make any web app accessible through natural language. Voice commands, screen readers, zero barrier.\n- **Multi-page Agent** — Extend your own web agent's reach across browser tabs via the [Chrome extension](https://alibaba.github.io/page-agent/docs/features/chrome-extension).\n- **MCP** - Allow your agent clients to control your browser.\n\n## 🚀 Quick Start\n\n### One-line integration\n\nFastest way to try PageAgent with our free Demo LLM:\n\n```html\n<script\n    src=\"https://cdn.jsdelivr.net/npm/page-agent@1.12.2/dist/iife/page-agent.demo.js\"\n    crossorigin=\"anonymous\"\n></script>\n\n<!-- China CDN mirror if you can't access jsDelivr -->\n<!-- https://registry.npmmirror.com/page-agent/1.12.2/files/dist/iife/page-agent.demo.js -->\n```\n\n> **⚠️ For technical evaluation only.** This demo CDN uses our free [testing LLM API](https://alibaba.github.io/page-agent/docs/features/models#free-testing-api). By using it, you agree to its [terms](https://github.com/alibaba/page-agent/blob/main/docs/terms-and-privacy.md).\n>\n> Add `?autoInit=false` to load the script without creating the demo agent automatically. You can then instantiate it with `new window.PageAgent(...)` and your own LLMs.\n\n### NPM Installation\n\n```bash\nnpm install page-agent\n```\n\n```javascript\nimport { PageAgent } from 'page-agent'\n\nconst agent = new PageAgent({\n    model: 'qwen3.5-plus',\n    baseURL: 'https://dashscope.aliyuncs.com/compatible-mode/v1',\n    apiKey: 'YOUR_API_KEY',\n    language: 'en-US',\n})\n\nawait agent.execute('Click the login button')\n```\n\nFor more programmatic usage, see [📖 Documentations](https://alibaba.github.io/page-agent/docs/introduction/overview).\n\n## 🤝 Contributing\n\nWe welcome contributions from the community! See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines and [docs/developer-guide.md](docs/developer-guide.md) for local development workflows.\n\nBuilt something cool with PageAgent? Share it in [Show and Tell](https://github.com/alibaba/page-agent/discussions/categories/show-and-tell). 🙌\n\nPlease read the [maintainer's note](https://github.com/alibaba/page-agent/issues/349) on principles and current state.\n\nContributions generated entirely by **bots or AI** without substantial human involvement will **not be accepted**.\n\n## ⚖️ License\n\n[MIT License](LICENSE)\n\n## 👏 Acknowledgments\n\nThis project builds upon the excellent work of **[`browser-use`](https://github.com/browser-use/browser-use)**.\n\n`PageAgent` is designed for **client-side web enhancement**, not server-side automation.\n\n```\nDOM processing components and prompt are derived from browser-use:\n\nBrowser Use <https://github.com/browser-use/browser-use>\nCopyright (c) 2024 Gregor Zunic\nLicensed under the MIT License\n\nWe gratefully acknowledge the browser-use project and its contributors for their\nexcellent work on web automation and DOM interaction patterns that helped make\nthis project possible.\n```\n\n**⭐ Star this repo if you find PageAgent helpful!**\n","default_branch":"main","files":250,"tree":[".agents/skills/git-cleanup/SKILL.md",".agents/skills/maintain-model-list/SKILL.md",".agents/skills/pre-impl-discussion/SKILL.md",".agents/skills/submit-pr-from-current-changes/SKILL.md",".agents/skills/update-changelog/SKILL.md",".github/ISSUE_TEMPLATE/bug_report.yml",".github/ISSUE_TEMPLATE/config.yml",".github/ISSUE_TEMPLATE/feature_request.yml",".github/PULL_REQUEST_TEMPLATE.md",".github/dependabot.yml",".github/workflows/ci.yml",".github/workflows/deploy-website.yml",".github/workflows/main-ci.yml",".github/workflows/release.yml",".gitignore",".husky/commit-msg",".husky/pre-commit",".prettierignore",".vscode/cspell.json",".vscode/extensions.json",".vscode/settings.json","AGENTS.md","CLAUDE.md","CONTRIBUTING.md","LICENSE","README.md","docs/CHANGELOG.md","docs/CODE_OF_CONDUCT.md","docs/README-zh.md","docs/SECURITY.md","docs/developer-guide.md","docs/terms-and-privacy.md","eslint.config.js","package-lock.json","package.json","packages/core/package.json","packages/core/src/PageAgentCore.test.ts","packages/core/src/PageAgentCore.ts","packages/core/src/env.d.ts","packages/core/src/prompts/system_prompt.md","packages/core/src/tools/index.ts","packages/core/src/types.ts","packages/core/src/utils/autoFixer.ts","packages/core/src/utils/index.ts","packages/core/tsconfig.json","packages/core/vite.config.js","packages/core/vitest.config.js","packages/extension/PRIVACY.md","packages/extension/components.json","packages/extension/docs/extension_api.md","packages/extension/package.json","packages/extension/public/_locales/en/messages.json","packages/extension/public/_locales/zh_CN/messages.json","packages/extension/public/assets/page-agent-256.webp","packages/extension/public/assets/page-agent-64.png","packages/extension/src/agent/MultiPageAgent.ts","packages/extension/src/agent/RemotePageController.background.ts","packages/extension/src/agent/RemotePageController.content.ts","packages/extension/src/agent/RemotePageController.ts","packages/extension/src/agent/TabsController.background.ts","packages/extension/src/agent/TabsController.test.ts","packages/extension/src/agent/TabsController.ts","packages/extension/src/agent/constants.ts","packages/extension/src/agent/system_prompt.md","packages/extension/src/agent/tabTools.ts","packages/extension/src/agent/useAgent.ts","packages/extension/src/assets/index.css","packages/extension/src/assets/page-agent-64.png","packages/extension/src/components/ConfigPanel.tsx","packages/extension/src/components/ErrorBoundary.tsx","packages/extension/src/components/HistoryDetail.tsx","packages/extension/src/components/HistoryList.tsx","packages/extension/src/components/cards.tsx","packages/extension/src/components/misc.tsx","packages/extension/src/components/ui/button.tsx","packages/extension/src/components/ui/card.tsx","packages/extension/src/components/ui/field.tsx","packages/extension/src/components/ui/hover-card.tsx","packages/extension/src/components/ui/input-group.tsx","packages/extension/src/components/ui/input.tsx","packages/extension/src/components/ui/item.tsx","packages/extension/src/components/ui/label.tsx","packages/extension/src/components/ui/separator.tsx","packages/extension/src/components/ui/sonner.tsx","packages/extension/src/components/ui/spinner.tsx","packages/extension/src/components/ui/switch.tsx","packages/extension/src/components/ui/textarea.tsx","packages/extension/src/components/ui/typing-animation.tsx","packages/extension/src/entrypoints/background.ts","packages/extension/src/entrypoints/content.ts","packages/extension/src/entrypoints/hub/App.tsx","packages/extension/src/entrypoints/hub/hub-ws.ts","packages/extension/src/entrypoints/hub/index.html","packages/extension/src/entrypoints/hub/main.tsx","packages/extension/src/entrypoints/main-world.ts","packages/extension/src/entrypoints/sidepanel/App.tsx","packages/extension/src/entrypoints/sidepanel/index.html","packages/extension/src/entrypoints/sidepanel/main.tsx","packages/extension/src/lib/db.ts","packages/extension/src/lib/history-export.ts","packages/extension/src/lib/utils.ts","packages/extension/src/types/assets.d.ts","packages/extension/src/types/globals.d.ts","packages/extension/src/types/markdown.d.ts","packages/extension/tsconfig.json","packages/extension/vitest.config.js","packages/extension/wxt.config.js","packages/llms/package.json","packages/llms/src/OpenAIClient.test.ts","packages/llms/src/OpenAIClient.ts","packages/llms/src/errors.ts","packages/llms/src/index.test.ts","packages/llms/src/index.ts","packages/llms/src/models.live.test.ts","packages/llms/src/types.ts","packages/llms/src/utils.test.ts","packages/llms/src/utils.ts","packages/llms/tsconfig.json","packages/llms/vite.config.js","packages/llms/vitest.config.js","packages/mcp/README.md","packages/mcp/package.json","packages/mcp/src/hub-bridge.js","packages/mcp/src/index.js","packages/mcp/src/launcher.html","packages/page-agent/package.json","packages/page-agent/src/PageAgent.ts","packages/page-agent/src/demo.ts","packages/page-agent/src/env.d.ts","packages/page-agent/tsconfig.json","packages/page-agent/vite.config.js","packages/page-agent/vite.iife.config.js","packages/page-controller/package.json","packages/page-controller/src/PageController.test.ts","packages/page-controller/src/PageController.ts","packages/page-controller/src/actions.ts","packages/page-controller/src/dom/dom_tree/index.d.ts","packages/page-controller/src/dom/dom_tree/index.js","packages/page-controller/src/dom/dom_tree/type.ts","packages/page-controller/src/dom/getPageInfo.ts","packages/page-controller/src/dom/index.ts","packages/page-controller/src/env.d.ts","packages/page-controller/src/mask/SimulatorMask.module.css","packages/page-controller/src/mask/SimulatorMask.ts","packages/page-controller/src/mask/checkDarkMode.ts","packages/page-controller/src/mask/cursor-border.svg","packages/page-controller/src/mask/cursor-fill.svg","packages/page-controller/src/mask/cursor.module.css","packages/page-controller/src/patches/antd.ts","packages/page-controller/src/patches/react.ts","packages/page-controller/src/utils/index.ts","packages/page-controller/tsconfig.json","packages/page-controller/vite.config.js","packages/page-controller/vitest.config.js","packages/ui/package.json","packages/ui/src/env.d.ts","packages/ui/src/i18n/index.ts","packages/ui/src/i18n/locales.ts","packages/ui/src/index.ts","packages/ui/src/panel/Panel.module.css","packages/ui/src/panel/Panel.ts","packages/ui/src/panel/cards.ts","packages/ui/src/panel/types.ts","packages/ui/src/utils.ts","packages/ui/tsconfig.json","packages/ui/vite.config.js","packages/website/AGENTS.md","packages/website/components.json","packages/website/index.html","packages/website/package.json","packages/website/public/robots.txt","packages/website/src/components/APIReference.tsx","packages/website/src/components/BetaNotice.tsx","packages/website/src/components/CodeEditor.tsx","packages/website/src/components/Footer.tsx","packages/website/src/components/Header.tsx","packages/website/src/components/Heading.tsx","packages/website/src/components/HighlightSyntax.module.css","packages/website/src/components/HighlightSyntax.tsx","packages/website/src/components/JSConsole.module.css","packages/website/src/components/JSConsole.tsx","packages/website/src/components/LanguageSwitcher.tsx","packages/website/src/components/ThemeSwitcher.tsx","packages/website/src/components/ui/alert.tsx","packages/website/src/components/ui/animated-gradient-text.tsx","packages/website/src/components/ui/animated-shiny-text.tsx","packages/website/src/components/ui/aurora-text.tsx","packages/website/src/components/ui/badge.tsx","packages/website/src/components/ui/bento-grid.tsx","packages/website/src/components/ui/blur-fade.tsx","packages/website/src/components/ui/button.tsx","packages/website/src/components/ui/highlighter.tsx","packages/website/src/components/ui/hyper-text.tsx","packages/website/src/components/ui/kbd.tsx","packages/website/src/components/ui/magic-card.tsx","packages/website/src/components/ui/marquee.tsx","packages/website/src/components/ui/neon-gradient-card.tsx","packages/website/src/components/ui/particles.tsx","packages/website/src/components/ui/separator.tsx","packages/website/src/components/ui/sonner.tsx","packages/website/src/components/ui/sparkles-text.tsx","packages/website/src/components/ui/spinner.tsx","packages/website/src/components/ui/switch.tsx","packages/website/src/components/ui/text-animate.tsx","packages/website/src/components/ui/tooltip.tsx","packages/website/src/components/ui/typing-animation.tsx","packages/website/src/constants.ts","packages/website/src/env.d.ts","packages/website/src/hooks/useGitHubStars.ts","packages/website/src/i18n/context.tsx","packages/website/src/index.css","packages/website/src/lib/useDocumentTitle.ts","packages/website/src/lib/utils.ts","packages/website/src/main.tsx","packages/website/src/pages/docs/Layout.tsx","packages/website/src/pages/docs/advanced/custom-ui/page.tsx","packages/website/src/pages/docs/advanced/page-agent-core/page.tsx","packages/website/src/pages/docs/advanced/page-agent/page.tsx","packages/website/src/pages/docs/advanced/page-controller/page.tsx","packages/website/src/pages/docs/advanced/security-permissions/page.tsx","packages/website/src/pages/docs/features/chrome-extension/page.tsx","packages/website/src/pages/docs/features/custom-instructions/page.tsx","packages/website/src/pages/docs/features/custom-tools/page.tsx","packages/website/src/pages/docs/features/data-masking/page.tsx","packages/website/src/pages/docs/features/mcp-server/page.tsx","packages/website/src/pages/docs/features/models/page.tsx","packages/website/src/pages/docs/features/third-party-agent/page.tsx","packages/website/src/pages/docs/index.tsx","packages/website/src/pages/docs/introduction/limitations/page.tsx","packages/website/src/pages/docs/introduction/overview/page.tsx","packages/website/src/pages/docs/introduction/quick-start/page.tsx","packages/website/src/pages/docs/introduction/troubleshooting/page.tsx","packages/website/src/pages/home/FeaturesSection.tsx","packages/website/src/pages/home/HeroSection.tsx","packages/website/src/pages/home/OneMoreThingSection.tsx","packages/website/src/pages/home/ScenariosSection.tsx","packages/website/src/pages/home/index.tsx","packages/website/src/router.tsx","packages/website/tailwind.config.js","packages/website/tsconfig.json","packages/website/vite.config.js","scripts/build-libs.js","scripts/build.js","scripts/ci.js","scripts/parallel-task.js","scripts/post-publish.js","scripts/pre-publish.js","scripts/sync-version.js","tsconfig.base.json","tsconfig.typecheck.json"],"storefront":"/r/alibaba","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/alibaba/page-agent/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}