Iquest
FreeNot checkediQuest Agentic Test Harness — AI-powered browser and API test automation. Write tests in plain English. Discover. Validate. Assure.
About
iQuest Agentic Test Harness — AI-powered browser and API test automation. Write tests in plain English. Discover. Validate. Assure.
README
iQuest Agentic Test Harness
Discover. Validate. Assure.
AI-powered browser and API test automation. Write tests in plain English — the agent figures out the selectors or API calls.
Quick Start
1. Check prerequisites
See Prerequisites below for detailed OS-specific install steps.
2. Scaffold the harness:
npx @vsaripella/iquest init
3. Run tests:
cd .iquest && npm test
No step definitions. No selectors. No code.
Prerequisites
| Tool | Minimum Version | Why |
|---|---|---|
| Node.js | 18+ (library), 22+ (scaffolded projects) | Core library runs on 18+. Scaffolded .iquest/ projects need 22+ for varlock env validation. |
| Git | Any | For cloning examples and CI integration. |
| Playwright Browsers | — | Installed automatically by npx playwright install chromium. |
Checking & Installing
macOS
# Check Node.js
node --version
# Install Node.js (if missing)
# Option A — Homebrew
brew install node
# Option B — nvm (recommended)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash
source ~/.zshrc # or ~/.bash_profile
nvm install 22
nvm use 22
# Check Git (usually pre-installed)
git --version
# If missing: brew install git
# Install Playwright browsers (after npm install)
npx playwright install chromium
Windows
# Check Node.js
node --version
# Install Node.js (if missing)
# Option A — Official installer: https://nodejs.org/download/release/latest-v22.x/
# Option B — nvm-windows (recommended)
# Download & install: https://github.com/coreybutler/nvm-windows/releases
nvm install 22.0.0
nvm use 22.0.0
# Check Git
git --version
# If missing: download from https://git-scm.com/download/win
# Install Playwright browsers (after npm install)
npx playwright install chromium
Tip: Use a version manager (
nvm,fnm,volta, ornvm-windows) to switch Node versions per project.
Features
- No selectors. Ever. — Agent navigates by intent. Survives any UI refactor automatically.
- Unified UI + API — One feature file, one step definition, one
runAgent()call handles both browser and API steps. - CI-grade evidence — HTML report, trace viewer, and screenshots on every run.
- No API key locally — Uses your existing
claude loginoropencode auth loginsession. - 2-minute setup —
npx @vsaripella/iquest initscaffolds the complete harness. - Dual-engine — opencode (70+ providers) or Claude Code SDK. Pick one.
- BDD & YAML — Playwright-BDD, Cucumber.js, or YAML.
Powered by: Claude Code SDK • opencode • Playwright MCP • Playwright-BDD • Cucumber.js
How It Works
- Your BDD step definitions call
runAgent(provider, 'natural language step', context)where context is a Playwrightpage,browserContext, or a Playwrightrequestfixture (for API). - iQuest creates a unified MCP server in-process exposing both browser tools and API tools, over HTTP/SSE on a random localhost port.
- The chosen AI provider SDK connects to that MCP URL and receives your natural language instruction.
- The agent decides which toolset to use based on the step content:
- UI steps → Playwright MCP tools (
browser_navigate,browser_click,browser_type, etc.) - API steps → API MCP tools (
api_request,api_assert_status,api_assert_json_field, etc.)
- UI steps → Playwright MCP tools (
- The step passes or fails based on what the agent reports back.
Key design decisions:
- True browser sharing — the agent drives the exact same page object your test holds.
- Parallel-safe — each test worker gets its own HTTP port. No shared config files.
- Session resumption — within a scenario, the agent resumes its conversation across steps.
- Multi-provider — swap
claudeCodeforopenCodewith a one-line change.
Examples
UI Test Example
From examples/playwright-bdd/features/ui.feature:
Feature: UI Test
Scenario: Navigate to SauceDemo
* Navigate to "https://www.saucedemo.com/"
* Should see the login page with username and password fields
* Enter "standard_user" in the username field
* Enter "secret_sauce" in the password field
* Click the login button
* Should see the inventory page with products listed
API Test Example
From examples/playwright-bdd/features/api.feature:
Feature: API
Scenario: API Testing
* Hit API URL: https://automationexercise.com/api/productsList with Request Method: GET
* Response Code should be 200
* Response Body should contain "products"
* Response Body should contain "id"
* Response Body should contain "name"
* Response Body should contain "price"
Hybrid UI + API Scenario
A single scenario can seamlessly mix browser and API steps:
Feature: User registration flow
Scenario: Register via API, then verify in UI
* Call POST "/api/users" with body { "email": "[email protected]", "password": "secret123" }
* Verify the response status is 201
* Verify the JSON body has "id" equal to a non-empty string
* Navigate to "/login"
* Fill "email" with "[email protected]"
* Fill "password" with "secret123"
* Click "Submit"
* Should see "Welcome, [email protected]"
How the agent decides:
- Words like
navigate,click,fill,should see,verify element→ browser tools - Words like
call GET/POST,api,endpoint,request,response,status,header,json,body→ API tools
Authentication
No API key needed for local development — just log in once:
# Claude Code
claude login
# OpenCode (supports GitLab Duo, GitHub Copilot, Anthropic, OpenAI, Google, …)
opencode auth login
For CI or explicit keys, copy .iquest/.env.example to .iquest/.env and add the relevant key:
# Claude Code
ANTHROPIC_API_KEY=your_key
# OpenCode — whichever provider you're connecting to
ANTHROPIC_API_KEY=your_key
# OPENAI_API_KEY=your_key
# GOOGLE_API_KEY=your_key
Environment Variables
The .iquest/ directory uses varlock for environment variable management. Variables are defined in .env.schema (committed) and values go in .env (gitignored). Secrets are automatically redacted from logs.
| Variable | Default | Description |
|---|---|---|
BASE_URL |
— | App URL — sets Playwright baseURL and is injected into every agent prompt |
APP_USERNAME |
— | Username — injected into agent prompt for login steps |
APP_PASSWORD |
— | Password — injected into agent prompt; always redacted from logs |
API_TOKEN |
— | API Bearer token — injected into agent prompt for API steps; always redacted |
OPENQA_VERBOSE |
true |
Set false to suppress step-by-step agent logs |
HEADLESS |
true |
Set false to watch the browser |
ANTHROPIC_API_KEY |
— | Anthropic API key — only needed for CI (use claude login locally) |
OPENAI_API_KEY |
— | OpenAI API key — only needed for CI via OpenCode |
GOOGLE_API_KEY |
— | Google API key — only needed for CI via OpenCode |
Customizing Your Setup
iquest init creates a working starting point — everything in .iquest/ is yours to edit.
Playwright config — .iquest/playwright.config.ts is a standard Playwright config. Add projects, change timeouts, add reporters, enable retries for CI.
Step definitions — .iquest/steps/steps.ts is a regular Playwright-BDD step file. Add custom (non-AI) steps alongside the AI step, or add Before/After hooks.
Changing model or provider — open .iquest/steps/steps.ts and edit the provider call. Swap claudeCode for openCode, or change the model string — that's the only change needed.
API Reference
runAgent(provider, prompt, context, options?)
Runs the AI agent with a natural language instruction. Works for both browser (UI) and API testing.
| Parameter | Type | Description |
|---|---|---|
provider |
object |
Agent provider, e.g. claudeCode('claude-haiku-4-5') or openCode('gitlab/duo-chat-haiku-4-5') |
prompt |
string |
Natural language instruction |
context |
Page | BrowserContext | object |
Playwright page, browser context, or API request context/state object |
options.baseUrl |
string |
Base URL for API requests (when using API context) |
options.verbose |
boolean |
Enable logging (default: true) |
options.returnUsage |
boolean |
Return token usage stats (default: false) |
Returns: Promise<string> — the agent's final response (or { result, usage, steps, sessionId } if returnUsage: true).
claudeCode(model?)
import { claudeCode } from 'iquest';
const provider = claudeCode('claude-haiku-4-5'); // default
openCode(model?)
import { openCode } from 'iquest';
const provider = openCode('gitlab/duo-chat-haiku-4-5'); // GitLab Duo (default in init)
// or: openCode('github-copilot/gpt-5.4'), openCode('anthropic/claude-sonnet-4-6'), etc.
Requires @opencode-ai/sdk to be installed.
Examples Directory
- examples/playwright-bdd/ — Playwright-BDD with
.featurefiles (includes UI + API examples) - examples/playwright-yaml/ — YAML-based tests via
npx @vsaripella/iquest generate - examples/playwright-api/ — Hybrid UI + API tests (unified approach)
- examples/cucumberjs/ — Cucumber.js integration
Requirements
- iQuest library: Node.js 18+
- Scaffolded
.iquest/project: Node.js 22+ (required by varlock) @playwright/test^1.57.0- One of:
@anthropic-ai/claude-agent-sdk(forclaudeCode) or@opencode-ai/sdk(foropenCode)
Links
- NPM: https://www.npmjs.com/package/@vsaripella/iquest
- GitHub: https://github.com/svsatish/iQuest
- Documentation (GitHub Pages): https://svsatish.github.io/iQuest/
License
MIT
Install Iquest in Claude Desktop, Claude Code & Cursor
unyly install iquestInstalls into Claude Desktop, Claude Code, Cursor & VS Code — handles npx, uvx and build-from-source repos for you.
First time? Get the CLI: curl -fsSL https://unyly.org/install | sh
Or configure manually
Run in your terminal:
claude mcp add iquest -- npx -y @vsaripella/iquestFAQ
Is Iquest MCP free?
Yes, Iquest MCP is free — one-click install via Unyly at no cost.
Does Iquest need an API key?
No, Iquest runs without API keys or environment variables.
Is Iquest hosted or self-hosted?
Self-hosted: the server runs locally on your machine via the install command above.
How do I install Iquest in Claude Desktop, Claude Code or Cursor?
Open Iquest on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.
Related MCPs
Playwright
Browser automation, scraping, screenshots
by MicrosoftPuppeteer
Browser automation and web scraping.
by modelcontextprotocolopentabs-dev/opentabs
Plugin-based MCP server + Chrome extension that gives AI agents access to web applications through the user's authenticated browser session. 100+ plugins with a
by opentabs-devrobhunter/agentdeals
1,500+ developer infrastructure deals, free tiers, and startup programs across 54 categories. Search deals, compare vendors, plan stacks, and track pricing chan
by robhunterCompare Iquest with
Not sure what to pick?
Find your stack in 60 seconds
Author?
Embed badge for your README
Browse similar
All browse MCPs
