{"slug": "show-hn-qpilot-ai-agent-runs-plain-text-manual-test-cases-in-a-real-browser", "title": "Show HN: Qpilot – AI agent runs plain-text manual test cases in a real browser", "summary": "Qpilot, an open-source AI agent that executes plain-text manual test cases in a real browser, was released on Hacker News. The tool uses Anthropic's Claude or any OpenAI-compatible model to interpret step-by-step instructions and perform actions like clicking and typing, pausing for CAPTCHAs or OTPs. It eliminates the need for coding or Selenium, allowing anyone to write and run browser tests.", "body_md": "**AI agent that runs your manual test cases in a real browser**\n\nIf qpilot saved you time →\n\n. It helps more than you'd think.[⭐ Star it on GitHub]\n\n- You paste a plain-text test case\n- The agent opens Chrome and executes each step\n- You watch results appear live —\n`pass`\n\n,`fail`\n\n, or`warn`\n\nper step - If it hits a captcha or OTP, it pauses and asks you directly\n\nNo code. No Selenium. No config files.\n\n| Manual testing | Selenium / Playwright scripts | qpilot |\n|\n|---|---|---|---|\n| Setup | none | write + maintain a test suite | paste plain text |\n| Survives UI changes | n/a (a human adapts) | breaks on selector/layout changes | reads the page like a human, via ARIA semantics |\n| Who can write a test | anyone | someone who codes | anyone who can write a step-by-step description |\n| OTP / captcha | human handles it | usually blocks the run | pauses and asks you, then continues |\n| Result | you watched it yourself | pass/fail, no narrative | pass/fail/warn per step, with evidence |\n\n**Requirements:** Node.js 20.12+, Google Chrome, an [Anthropic API key](https://console.anthropic.com) — or any OpenAI-compatible model endpoint (Qwen, vLLM, Ollama, corporate gateway)\n\n```\nnpx qpilot\n```\n\nThat's it. On first run qpilot walks you through a quick provider setup (arrow-key menu), then every launch shows your config and a Start menu.\n\nBrowser opens automatically at `http://localhost:3847`\n\n.\n\nOn first run qpilot asks which model to use. You can re-run setup anytime:\n\n```\nnpx qpilot config\n```\n\nTwo options:\n\n-\n**Anthropic (Claude)**— enter your`sk-ant-…`\n\nkey. Default model is`claude-haiku-4-5`\n\n. Base URL is optional — set it if you reach Claude through a corporate proxy/gateway. -\n**Custom**— any** OpenAI-compatible**endpoint: Qwen, vLLM, Ollama, a corporate gateway, OpenRouter, or OpenAI itself. You provide a** base URL**,** API token**and** model id**, e.g.:\n\n```\nBase URL: https://dashscope-intl.aliyuncs.com/compatible-mode/v1\nModel id: qwen2.5-72b-instruct\n```\n\nYour choice is saved to `~/.qpilot/config.json`\n\n(mode `600`\n\n) and reused on every run.\n\nThe custom path speaks the OpenAI\n\n`/chat/completions`\n\nprotocol with tool calling — so the model must support function/tool calling for the agent to drive the browser.\n\nFor the Anthropic provider you can skip setup by supplying the key via env:\n\n`ANTHROPIC_API_KEY`\n\nenvironment variable`.env.local`\n\nfile in the current directory\n\n```\necho \"ANTHROPIC_API_KEY=sk-ant-...\" > .env.local\n```\n\nThe key is never stored except in `~/.qpilot/config.json`\n\nwhen you run setup.\n\n| Command | Description |\n|---|---|\n`qpilot config` |\nRe-run provider setup (Anthropic or custom model) |\n\n```\nnpx qpilot config\n```\n\nBrowser visibility is a per-run choice in the UI, not a CLI flag: hit **Run** to\nstay headless, or **Run with preview** to watch Chrome click through the page.\n\n```\nTC-001 — Login and add item to cart\nURL: https://www.saucedemo.com/\nCredentials: standard_user / secret_sauce\n\nSteps:\n1. Open the home page.\n   Expected: login form with Username and Password fields is visible.\n\n2. Enter credentials and click Login.\n   Expected: Products page opens with 6 items.\n\n3. Click \"Add to cart\" on \"Sauce Labs Backpack\".\n   Expected: cart counter shows 1.\n\n4. Click the cart icon.\n   Expected: cart contains Sauce Labs Backpack at $29.99.\n```\n\nYou can paste multiple test cases at once — the agent runs them in order.\n\nClick **Choose folder** to point qpilot at a directory of `.md`\n\nfiles (or **Upload\n.md** for a single file). Check the ones you want, then **Run** the batch — each\nfile runs one after another with live status and timing, and you can **Stop**\nmid-batch. Finished runs (including past batches) show up under **Recent runs**\non the home page.\n\n- API key is stored only in\n`~/.qpilot/config.json`\n\n(file mode`600`\n\n) — never sent anywhere except your chosen model provider - Runs are in-memory and capped at the last 50 — restarting the server clears all of them\n- Powered by\n[Claude](https://anthropic.com)+[Playwright](https://playwright.dev)", "url": "https://wpnews.pro/news/show-hn-qpilot-ai-agent-runs-plain-text-manual-test-cases-in-a-real-browser", "canonical_source": "https://github.com/broxhq/qpilot", "published_at": "2026-07-04 10:15:30+00:00", "updated_at": "2026-07-04 10:20:09.126221+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "ai-products", "developer-tools", "large-language-models"], "entities": ["Qpilot", "Anthropic", "Claude", "OpenAI", "Selenium", "Playwright", "Chrome", "Node.js"], "alternates": {"html": "https://wpnews.pro/news/show-hn-qpilot-ai-agent-runs-plain-text-manual-test-cases-in-a-real-browser", "markdown": "https://wpnews.pro/news/show-hn-qpilot-ai-agent-runs-plain-text-manual-test-cases-in-a-real-browser.md", "text": "https://wpnews.pro/news/show-hn-qpilot-ai-agent-runs-plain-text-manual-test-cases-in-a-real-browser.txt", "jsonld": "https://wpnews.pro/news/show-hn-qpilot-ai-agent-runs-plain-text-manual-test-cases-in-a-real-browser.jsonld"}}