{"id":"7904d897-8750-4875-b298-79838f5c7c5d","slug":"luckysolanki902-webpilot","kind":"mcp","name":"webpilot","summary":"The web, through the eyes of a machine. A semantic terminal browser & MCP server for LLM agents. Browse any website as numbered, interactive text — no pixels, no GUI.","owner":"luckysolanki902","repoUrl":"https://github.com/luckysolanki902/webpilot","license":"MIT","licenseTier":"permissive","trust":"community","stars":1,"match":null,"fewStars":true,"format":"mcp","createdAt":"2026-04-06T09:17:53.000Z","addedAt":"2026-10-21T20:58:02.071Z","logoUrl":"https://avatars.githubusercontent.com/u/108862877?u=8e22f9d9fb2d8a2ad36c1a258b02ba56822bb83b&v=4","linkOnly":false,"collection":null,"skillPath":null,"categories":["browser-web","cloud-infra"],"tags":[],"runtime":"node","local":true,"cloudCapable":false,"cloudCapability":"unknown","cloudReadyOnPlatform":false,"needsApiKey":false,"reviewed":false,"syncedAt":"2026-10-27T23:18:07.904Z","sample":false,"url":"https://conduits.dev/tools/luckysolanki902-webpilot","language":"TypeScript","transports":["stdio"],"install":{"npm":"webpilot-cli"},"requirements":{"env":[],"upstreamMayCharge":false},"tools":null,"readme":"# Webpilot\n\n**The web, through the eyes of a machine.**\n\n[![npm version](https://img.shields.io/npm/v/webpilot-cli.svg)](https://www.npmjs.com/package/webpilot-cli)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nA semantic terminal browser that renders web pages as structured, numbered, interactive text. Built for **LLM agents** (via [MCP](https://modelcontextprotocol.io)), **CLI-native developers**, and **automation pipelines**.\n\n> **Key insight:** LLMs don't need to *see* a website — they need to *understand* it. Webpilot uses the accessibility tree (the same structure screen readers use) to represent any website as numbered elements that both humans and machines can interact with.\n\n```\n$ wpilot https://github.com\n\n┌──────────────────────────────────────────────────────────────┐\n  GitHub: Let's build from here\n  https://github.com\n└──────────────────────────────────────────────────────────────┘\n\n  [1] › link         Sign in\n  [2] › link         Sign up\n  [3] ⌕ searchbox    Search GitHub\n  [4] # h1           Build and ship software on a single platform\n  [5] _ textbox      Enter your email address\n  [6] ◆ button       ⟦ Sign up for GitHub ⟧\n\n~ › click 1\n\n  Navigated: github.com -> github.com/login\n\n  [1] # h1           Sign in to GitHub\n  [2] _ textbox      Username or email address\n  [3] _ textbox      Password\n  [4] ◆ button       ⟦ Sign in ⟧\n  [5] › link         Forgot password?\n  [6] › link         Create an account\n\n~ › type 2 octocat@github.com\n~ › type 3 ••••••••\n\n~ › ss github-login.png\n\n  Screenshot saved to github-login.png\n```\n\nThe screenshot webpilot saves:\n\n<img src=\"assets/github-example.png\" alt=\"Webpilot screenshot of GitHub login with filled credentials\" width=\"700\" />\n\n## Why Webpilot?\n\n| | Browsh | Lynx | Carbonyl | **Webpilot** |\n|---|---|---|---|---|\n| JavaScript support | Yes | No | Yes | **Yes** |\n| SPAs (React, Next.js, Vue) | Yes | No | Yes | **Yes** |\n| LLM-parseable output | No | No | No | **Yes** |\n| MCP server for AI agents | No | No | No | **Yes** |\n| Element interaction by ID | No | No | No | **Yes** |\n| State diffs | No | No | No | **Yes** |\n| Semantic (a11y tree) | No | Partial | No | **Yes** |\n| No pixels, no rendering | No | Yes | No | **Yes** |\n| Zero cost (runs locally) | Yes | Yes | Yes | **Yes** |\n\n## Install\n\n```bash\nnpm install -g webpilot-cli\nnpx playwright install chromium   # one-time browser setup\n```\n\n## Quick Start\n\n```bash\n# Interactive REPL\nwpilot https://google.com\n\n# JSON output for LLM agents\nwpilot --agent https://google.com\n\n# Pipe mode for scripting\necho 'goto https://example.com\nextract --links' | wpilot --pipe\n\n# Shorthand URLs\nwpilot :3000              # → http://localhost:3000\nwpilot google.com         # → https://google.com\n```\n\n## MCP Server (for Claude, ChatGPT, etc.)\n\nWebpilot ships as an **MCP server** — any LLM agent that supports the [Model Context Protocol](https://modelcontextprotocol.io) can browse the web through it.\n\n### Setup with Claude Desktop\n\nAdd to your `claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"webpilot\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"webpilot-cli\", \"--mcp\"]\n    }\n  }\n}\n```\n\n### Setup with VS Code / Copilot\n\nAdd to your `.vscode/mcp.json`:\n\n```json\n{\n  \"servers\": {\n    \"webpilot\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"webpilot-cli\", \"--mcp\"]\n    }\n  }\n}\n```\n\n### Available MCP Tools\n\n| Tool | Description |\n|------|-------------|\n| `web_navigate` | Open a URL and get page state |\n| `web_snapshot` | Get current page as numbered elements |\n| `web_click` | Click element by `[n]` ID |\n| `web_type` | Type into input/textarea by `[n]` ID |\n| `web_select` | Select dropdown option |\n| `web_scroll` | Scroll up/down/top/bottom |\n| `web_back` | Go back in history |\n| `web_extract` | Extract text, links, tables, forms, or metadata |\n| `web_eval` | Execute JavaScript in page context |\n| `web_screenshot` | Capture page as PNG image |\n| `web_tabs` | List open tabs |\n| `web_newtab` | Open new tab |\n| `web_close` | Close browser session |\n\n### Example Agent Interaction\n\n```\nAgent: web_navigate(\"https://news.ycombinator.com\")\n→ 280 elements: [1] link \"Hacker News\", [2] link \"new\", [3] link \"past\" ...\n\nAgent: web_click(5)\n→ Navigated to article page, 42 elements\n\nAgent: web_extract({ type: \"text\" })\n→ Full article text extracted\n\nAgent: web_back()\n→ Back to Hacker News front page\n```\n\n## Commands Reference\n\n| Command | Description |\n|---------|-------------|\n| `goto <url>` | Navigate to URL |\n| `click [n]` | Click element by ID |\n| `type [n] \"text\"` | Type into form field |\n| `select [n] \"option\"` | Select dropdown option |\n| `check [n]` / `hover [n]` | Toggle checkbox / hover |\n| `press <key>` | Press keyboard key (Enter, Tab, etc.) |\n| `back` / `forward` | Browser history |\n| `refresh` | Reload current page |\n| `scroll down\\|up\\|top\\|bottom` | Scroll the page |\n| `find \"text\"` | Search for text in elements |\n| `show` | Re-display current page state |\n| `extract --text\\|--links\\|--tables\\|--forms\\|--meta` | Extract structured content |\n| `eval \"js\"` | Execute JavaScript |\n| `screenshot [path]` | Save screenshot |\n| `source` | View page HTML |\n| `tabs` / `tab [n]` / `newtab` / `closetab` | Tab management |\n| `help` | Show all commands |\n\n## Three Output Modes\n\n- **Human** (default) — Colored, formatted for terminal reading\n- **Agent** (`--agent`) — JSON structured output for LLM consumption\n- **Pipe** (auto-detected) — Plain text for `grep`, `awk`, scripting\n\n## How It Works\n\n```\nWebsite → Playwright (headless Chromium) → CDP Accessibility Tree → Numbered Elements → You\n```\n\n1. **Playwright** launches headless Chromium — full JS, cookies, SPAs, everything works\n2. The **accessibility tree** is extracted via Chrome DevTools Protocol — semantic structure, not pixels\n3. Elements get **numbered IDs** — `[1]`, `[2]`, `[3]`... for easy targeting\n4. After each action, a **state diff** shows what changed, not the entire page\n5. You interact with simple commands: `click [3]`, `type [5] \"hello\"`\n\n## Works With Everything\n\n- `localhost:3000` — your dev server\n- Public websites — Google, GitHub, HN, anything\n- React / Next.js / Vue / Angular / Svelte — full JS execution\n- SPAs with client-side routing\n- Sites behind login — cookies persist in session\n- Dynamic content — JS runs before each snapshot\n- Forms, dropdowns, checkboxes — full interaction\n- Multi-tab browsing\n\n## Use Cases\n\n- **LLM agents browsing the web** — Claude/ChatGPT navigate, fill forms, extract data via MCP\n- **E2E testing in CI** — pipe commands, assert output, no flaky selectors\n- **Web scraping** — extract links, tables, text from any JS-rendered page\n- **Accessibility auditing** — see exactly what the a11y tree exposes\n- **SSH/headless environments** — browse from any terminal, no GUI needed\n\n## Development\n\n```bash\ngit clone https://github.com/luckysolanki902/webpilot.git\ncd webpilot\nnpm install\nnpx playwright install chromium\nnpm run build    # → dist/index.js\nnpm run dev      # Watch mode\n```\n\n## License\n\nMIT\n"}