@acr-edge/qecopilot
v1.0.3
Published
QECopilot (π₯ KIWI) β AI-Native Multi-Agent Execution Platform for Natural Language Software Testing
Readme
π€ If you are an AI agent: Read
AGENT.mdfirst β that is your operating manual.
qecopilot (π₯ KIWI) β AI-Native Test Automation Framework
Declarative YAML test cases. Zero automation scripts. Driven entirely by AI.
qecopilot (nick name KIWI π₯) is an open-source test automation framework where you write tests in plain-language YAML and run them three ways: via the qecopilot CLI, the interactive TUI, or directly through any AI agent (GitHub Copilot, Claude, Codex).
No test scripts. No selectors. No boilerplate. Just describe what to test.
How It Works
- You write test cases in YAML β steps, expected outcomes, test data
- qecopilot (or your AI agent) reads the YAML and plans execution
- The browser is driven through Playwright MCP tools (
browser_navigate,browser_click, etc.) - Screenshots, HTML/JSON reports, and a self-updating knowledge graph are written automatically
YAML Test Cases β qecopilot (Planner β Executor β Validator β Reporter) β Reports + EvidenceThree Ways to Run
Choose the mode that fits your workflow β all three run the same YAML test cases.
1 Β· qecopilot CLI β direct command execution
qecopilot run suite smoke
qecopilot run test TC-001
qecopilot validateBest for: CI/CD pipelines, automated scripts, quick targeted runs.
2 Β· qecopilot TUI β interactive terminal
qecopilot # no arguments β launches full-screen TUIOn launch, the animated logo appears:
βββββββ ββββββββ
βββββββββ ββββββββ copilot - π₯ KIWI
βββ βββ ββββββ ββββββββββββββββββββββββββ
βββββ βββ ββββββ AI-Native Test Automation
βββββββββ ββββββββ v1.0.2
βββββββ ββββββββ
Project project-name Β· Suite smoke Β· Env qa
Type help to see commandsFull-screen interface with autocomplete, live run progress, command history, and LLM status bar:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Run progress and responses appear here β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β qe βΊ run suite _ β
β ββ history Β· tab complete Β· PgUp/Dn scroll Β· ctrl+c exit β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β 1 suite Β· 3 tests β gpt-4o [work] β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββBest for: local development, exploratory testing, onboarding new team members.
3 Β· AI Agent Mode β natural language
Use any AI agent that has CLI or MCP access:
# GitHub Copilot CLI
Run the smoke suite
# Claude, Cursor, or any MCP-capable agent
Run suite smoke and show me the failuresThe agent reads your YAML project, invokes qecopilot (or drives Playwright MCP directly), and streams results back into the conversation.
Best for: developers who live in their AI agent and want testing as part of their coding flow.
Prerequisites
System Requirements
| Requirement | Minimum | Recommended | |---|---|---| | Node.js | 22.0.0 | 22.22.3 LTS | | npm | 10.0.0 | 10.9.x (bundled with Node 22) | | OS | Windows 10 x64, macOS 12+, Ubuntu 20.04+ | β |
Verify before installing:
node --version # β₯ 22.0.0 required
npm --version # β₯ 10.0.0 requiredInstall / upgrade Node.js
macOS / Linux β via nvm:
nvm install 22.22.3 nvm use 22.22.3 node --version # v22.22.3Windows β via nvm-windows or Winget:
winget install OpenJS.NodeJS.LTS # or download from https://nodejs.org/Docker β see the included
Dockerfileanddocker-compose.yml.
1 Β· Install qecopilot
npm install -g @acr-edge/qecopilotBoth qecopilot, qe, and kiwi π₯ are available after install:
qecopilot --version
qe --version # shorthand
kiwi --version # same thing2 Β· Configure an LLM
qecopilot requires an LLM to plan and validate test cases. The recommended approach is a named global profile β set once, used across all projects.
# Add a profile (stored in ~/.qecopilot/config.json)
qe config profile add work \
--provider openai \
--model gpt-4o \
--api-key sk-...
# Set it as active
qe config profile use work
# Verify it is reachable
qe llm statusSupported providers:
| Provider | Flag | Required env var |
|---|---|---|
| OpenAI | --provider openai | OPENAI_API_KEY |
| Anthropic | --provider anthropic | ANTHROPIC_API_KEY |
| Google Gemini | --provider gemini | GEMINI_API_KEY |
| Ollama (local) | --provider ollama | (none) |
| AWS Bedrock | --provider bedrock | AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY |
| OpenAI-compatible | --provider openai-compatible | --base-url <url> |
CI / CD β use the
QE_LLM_PROFILEenv var to pass credentials inline without writing a file:export QE_LLM_PROFILE='{"provider":"openai","model":"gpt-4o","api_key":"sk-..."}'
3 Β· Configure Playwright MCP (for AI Agent Mode only)
Skip this if you only use CLI or TUI mode β qecopilot launches Playwright MCP automatically.
GitHub Copilot CLI
Create ~/.copilot/mcp-config.json:
{
"mcpServers": {
"playwright": {
"type": "local",
"command": "npx",
"args": ["@playwright/mcp@latest", "--browser", "msedge"],
"env": {},
"tools": ["*"]
}
}
}Windows: Use
msedge(pre-installed). macOS/Linux: Use"chrome"instead.
Or add interactively:
/mcp add
# Server Name: playwright
# Server Type: Local (STDIO)
# Command: npx @playwright/mcp@latest --browser msedgeVerify:
/mcp show playwrightClaude (Claude Code / Claude Desktop)
Add to .claude/settings.local.json in your project root:
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["@playwright/mcp@latest", "--browser", "msedge"]
}
}
}GitHub Copilot Cloud Agent
No setup needed β Playwright MCP is built in.
OpenAI Codex
Configure per your Codex deployment environment.
Quick Start
Option A β Blank project (bring your own app)
# 1. Scaffold a new project from the golden template
qe init my-app-tests
cd my-app-tests
# 2. Set up your environment
cp .env.example .env
# Edit .env: set BASE_URL and credentials for your app
# 3. Fill in application knowledge (optional but recommended)
# Edit knowledge/modules.json β UI elements, button labels, field types
# Edit knowledge/entities.json β data models, ID formats
# Edit knowledge/workflows.json β business workflows
# 4. Write your first test case
# Copy templates/testcase.yml β testcases/<feature>/TC-001.yml
# 5. Run it
qe run suite smoke
# or launch TUI:
qeOption B β Scaffold from a starter example
Starters give you a complete, runnable test suite for a real application. Great for exploring the framework before wiring it to your own app.
# List all available starters
qe starter list
# Get details about a starter
qe starter info saucedemo
# Scaffold with the saucedemo starter (SauceLabs demo e-commerce app)
qe init my-saucedemo-tests --starter saucedemo
cd my-saucedemo-tests
qe run suite smokeAvailable starters
| Name | App | What's included |
|---|---|---|
| saucedemo | saucedemo.com β SauceLabs demo e-commerce | Login, cart, checkout flows |
| fieldforce360 | FieldForce360 field service app | Work orders, dispatch, appointments |
Adding your own starter β set
QE_STARTERS_REPO=owner/repoto point at your own starter repository.
CLI Reference
Project scaffolding
| Command | Description |
|---|---|
| qe init <project> | Scaffold a new blank project from the golden template |
| qe init <project> --starter <name> | Scaffold and overlay a starter example |
| qe init <project> --local <path> | Scaffold from a local directory |
| qe starter list | List all available starter examples |
| qe starter info <name> | Show details about a specific starter |
Running tests
Running tests
| Command | Description |
| qecopilot run test <id> | Run a single test case by ID |
| qecopilot compile | Pre-compile all test plans (AOT) β faster, deterministic runs |
| qecopilot compile --suite <name> | Pre-compile a specific suite only |
| qecopilot compile --force | Force recompile even if plans are up to date |
| qecopilot runs [--limit <n>] | List recent runs |
| qecopilot validate | Validate all YAML assets in the project |
| qecopilot report latest | Show path to the latest run report |
| qecopilot report show <run-id> | Show path to a specific run's report |
| qecopilot llm status | Check LLM provider health |
| qecopilot mcp status | Check browser adapter status |
Global LLM Profile Commands
| Command | Description |
|---|---|
| qecopilot config profile add <name> | Add or replace a named LLM profile |
| qecopilot config profile list | List all profiles |
| qecopilot config profile use <name> | Set the active profile |
| qecopilot config profile remove <name> | Remove a profile |
Profiles are stored in ~/.qecopilot/config.json and shared across all projects.
TUI Commands (inside qecopilot interactive session)
| Command | Description |
|---|---|
| run suite <name> | Run a suite with live progress |
| run test <id> | Run a single test case |
| list suites | Show all suites |
| list tests [<suite>] | Show test cases |
| validate | Validate YAML assets |
| config | Show current LLM and project config |
| help | Show all available commands |
| exit / Ctrl+C | Exit |
Exit Codes
| Code | Meaning | |---|---| | 0 | All tests passed | | 1 | One or more tests failed | | 2 | Config / YAML validation error | | 3 | LLM provider unreachable | | 4 | Application under test unreachable |
Running with AI Agents (Copilot CLI)
Every new Copilot CLI session requires two setup commands:
/allow-allGrants all tool, file, and URL permissions β without this, Copilot prompts for approval on every browser action.
/mcp show playwrightVerifies the Playwright MCP server is active. You should see browser_navigate, browser_click etc.
Recommended flow every session:
cd /path/to/my-app-tests
gh copilot
/allow-all
/mcp show playwright
Run the smoke suite
/allow-allresets on exit β run it at the start of every new session.
Framework Structure
qecopilot/
βββ AGENT.md β AI agent operating manual (read this first)
βββ README.md
βββ .env β Runtime secrets (gitignored)
βββ .env.example β Template β copy to .env
β
βββ configs/
β βββ ai-test-config.yml β Global settings (browser, suite, environment, artifacts)
β βββ qa.yml β QA environment (base_url, api_url, flags)
β βββ uat.yml β UAT environment
β βββ prod.yml β Production environment
β
βββ testcases/ β Test case definitions (YAML)
β βββ <feature>/TC-NNN.yml
β
βββ actions/ β Reusable action libraries (YAML)
β βββ action-catalog.yml β Master index of all actions
β βββ common/
β βββ auth.yml β Login / logout
β βββ navigation.yml β Navigation actions
β
βββ testdata/
β βββ users.yml β User personas and credentials
β βββ entities.yml β Domain entities
β βββ environments.yml β Environment URLs and flags
β
βββ knowledge/ β Application knowledge graph (auto-updated each run)
β βββ modules.json β UI elements, button labels, field types per module
β βββ entities.json β Data models, ID formats, field constraints
β βββ workflows.json β Business workflows and status transitions
β βββ api_catalog.json β REST API endpoints
β βββ learning-log.json β Cross-run learning history
β
βββ suites/
β βββ smoke.yml β Test suite definitions
β
βββ templates/ β Blank templates for creating new assets
β βββ testcase.yml
β βββ action.yml
β βββ defect.md
β
βββ pipelines/
β βββ execution-pipeline.yml
β
βββ runs/ β Auto-generated run evidence (gitignored)
βββ reports/ β Quick-access reports (gitignored)
βββ latest/
βββ history/Configuration Reference
qecopilot reads configs/ai-test-config.yml from the project root. The LLM section is not in this file β it comes from your global profile or environment variables (see Prerequisites above).
framework:
name: "My Application Test Suite" # your project name
version: "1.0"
spec: "AGENT.md"
execution:
mode: mcp # mcp only (v1)
browser: msedge # msedge | chrome | firefox | webkit
headless: false # true for CI, false for local
maximize: true
timeout_seconds: 30
page_load_timeout_seconds: 15
retry_failed: 1 # retry a failed step once before marking FAIL
slow_mo_ms: 0 # ms pause between actions (0 = no delay)
environment:
target: qa # matches configs/<target>.yml
config: configs/qa.yml
suite:
name: smoke # matches suites/<name>.yml
file: suites/smoke.yml
artifacts:
base_path: runs/
screenshots: true
videos: false
traces: false
screenshot_on_action_boundary: true
screenshot_on_failure: true
mcp:
snapshot_before_action: true
snapshot_after_action: false
tool_timeout_seconds: 10
reporting:
formats: [json, html]
output_path: reports/
copy_to_latest: true
history_retention_runs: 50Environment file (configs/qa.yml)
environment:
name: qa
base_url: "${env.QA_BASE_URL}"
api_url: "${env.QA_API_URL}"Single-environment project model: one qecopilot project maps to one target environment. If you need to run the same automation against UAT, staging, or another environment, scaffold a separate project folder for that environment instead of switching envs at runtime. This keeps compiled plans, healing history, reports, and knowledge clean and easy to maintain.
Writing Test Cases
Copy templates/testcase.yml to testcases/<feature>/TC-NNN.yml:
test_case:
id: TC-001
title: "Create a new record"
feature: "Records"
priority: high
persona: admin
test_data:
user: users.admin1
steps:
- Login as Admin
- Navigate to Records
- Create Record
- Save
step_params:
Create Record:
name: "${testdata.entities.record1.name}"
expected:
- "Record is created successfully"
- "Record appears in the list"Writing Actions
Copy templates/action.yml to actions/<category>/<name>.yml:
actions:
- action_id: create_record
name: "Create Record"
description: "Opens the new record form and fills required fields"
parameters:
- name: name
required: true
steps:
- description: "Click the New button"
tool: browser_click
params:
element: "New Record button"
- description: "Type record name"
tool: browser_type
params:
element: "Name input"
text: "${params.name}"
- description: "Screenshot of filled form"
tool: browser_take_screenshotRegister it in actions/action-catalog.yml:
actions:
- id: create_record
file: actions/records/create-record.ymlTest Results
Quick access β reports/latest/ (and reports/history/<run-id>/):
| File | Contents |
|---|---|
| report.html | Human-readable pass/fail summary with screenshots |
| report.json | Machine-readable run summary |
Full evidence β runs/<run-id>/:
| Path | Contents |
|---|---|
| artifacts/screenshots/ | Step screenshots named <TC-ID>-<tool>-<step>.png |
| context/ | Resolved environment, test data, and execution plan used for the run |
| defects/BUG-NNN.md | Auto-generated defect report per failure |
| ai-reasoning/ | Agent decision logs (planner, executor, validator, reporter) |
| execution.log | One-line-per-step audit log of every MCP tool call |
| knowledge-updates.json | UI element discoveries made during this run |
Supported AI Agents
| Agent | Playwright MCP | Notes | |---|---|---| | qecopilot CLI / TUI | β Auto-launched | No MCP setup needed β qecopilot manages it | | GitHub Copilot CLI | β Manual config | See Prerequisites above | | GitHub Copilot Cloud Agent | β Built-in | No setup needed | | Claude Code / Claude Desktop | β Via settings.local.json | See Prerequisites above | | OpenAI Codex | β Via deployment config | Configure per environment |
License
Apache License 2.0 β see LICENSE for details.
