# Show HN: Qpilot – AI agent runs plain-text manual test cases in a real browser

> Source: <https://github.com/broxhq/qpilot>
> Published: 2026-07-04 10:15:30+00:00

**AI agent that runs your manual test cases in a real browser**

If qpilot saved you time →

. It helps more than you'd think.[⭐ Star it on GitHub]

- You paste a plain-text test case
- The agent opens Chrome and executes each step
- You watch results appear live —
`pass`

,`fail`

, or`warn`

per step - If it hits a captcha or OTP, it pauses and asks you directly

No code. No Selenium. No config files.

| Manual testing | Selenium / Playwright scripts | qpilot |
|
|---|---|---|---|
| Setup | none | write + maintain a test suite | paste plain text |
| Survives UI changes | n/a (a human adapts) | breaks on selector/layout changes | reads the page like a human, via ARIA semantics |
| Who can write a test | anyone | someone who codes | anyone who can write a step-by-step description |
| OTP / captcha | human handles it | usually blocks the run | pauses and asks you, then continues |
| Result | you watched it yourself | pass/fail, no narrative | pass/fail/warn per step, with evidence |

**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)

```
npx qpilot
```

That'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.

Browser opens automatically at `http://localhost:3847`

.

On first run qpilot asks which model to use. You can re-run setup anytime:

```
npx qpilot config
```

Two options:

-
**Anthropic (Claude)**— enter your`sk-ant-…`

key. Default model is`claude-haiku-4-5`

. Base URL is optional — set it if you reach Claude through a corporate proxy/gateway. -
**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.:

```
Base URL: https://dashscope-intl.aliyuncs.com/compatible-mode/v1
Model id: qwen2.5-72b-instruct
```

Your choice is saved to `~/.qpilot/config.json`

(mode `600`

) and reused on every run.

The custom path speaks the OpenAI

`/chat/completions`

protocol with tool calling — so the model must support function/tool calling for the agent to drive the browser.

For the Anthropic provider you can skip setup by supplying the key via env:

`ANTHROPIC_API_KEY`

environment variable`.env.local`

file in the current directory

```
echo "ANTHROPIC_API_KEY=sk-ant-..." > .env.local
```

The key is never stored except in `~/.qpilot/config.json`

when you run setup.

| Command | Description |
|---|---|
`qpilot config` |
Re-run provider setup (Anthropic or custom model) |

```
npx qpilot config
```

Browser visibility is a per-run choice in the UI, not a CLI flag: hit **Run** to
stay headless, or **Run with preview** to watch Chrome click through the page.

```
TC-001 — Login and add item to cart
URL: https://www.saucedemo.com/
Credentials: standard_user / secret_sauce

Steps:
1. Open the home page.
   Expected: login form with Username and Password fields is visible.

2. Enter credentials and click Login.
   Expected: Products page opens with 6 items.

3. Click "Add to cart" on "Sauce Labs Backpack".
   Expected: cart counter shows 1.

4. Click the cart icon.
   Expected: cart contains Sauce Labs Backpack at $29.99.
```

You can paste multiple test cases at once — the agent runs them in order.

Click **Choose folder** to point qpilot at a directory of `.md`

files (or **Upload
.md** for a single file). Check the ones you want, then **Run** the batch — each
file runs one after another with live status and timing, and you can **Stop**
mid-batch. Finished runs (including past batches) show up under **Recent runs**
on the home page.

- API key is stored only in
`~/.qpilot/config.json`

(file mode`600`

) — 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
- Powered by
[Claude](https://anthropic.com)+[Playwright](https://playwright.dev)
