Aumate QA Agent
Framework-agnostic auto-healing for test automation. Works with any test framework, any language, any LLM provider.
your-project/
├── agent/ ← copy from this repo (or pip install)
├── qa_heal.py ← standalone runner
└── .qa-agent/
└── config.yaml ← auto-generated
Quick Start (30 seconds)
Copy into your project:
cp -r agent qa_heal.py /path/to/your-project/
cd /path/to/your-project
Run healing:
python qa_heal.py # heal broken tests
python qa_heal.py --apply # heal + apply fix to disk
python qa_heal.py --test # just run tests, no healing
python qa_heal.py --test-file tests/foo.spec.ts --test-name "my test"
Or install via pip:
pip install aumate-qa-agent
qa-agent init
qa-agent heal
How It Works
Your existing tests run normally
|
v
Failure detected (locator, timing, assertion, etc.)
|
v
DOM evidence collected from your project
|
v
Candidates generated (deterministic + optional AI)
|
v
Each candidate tested in isolated sandbox copy
|
v
PASS → Patch displayed (or auto-applied)
FAIL → Next candidate tried
No Test Code Changes Needed
The agent observes your existing tests. You don't modify a single line of test code.
Safety Guarantees
- No LLM has direct write access — the validation engine is the sole gatekeeper
- Application defects are never hidden — only automation defects (broken locators, timing) are healed
- Sandbox validation — patches are tested in an isolated copy of your project first
- Secrets are masked — no credentials, tokens, or passwords sent to LLMs
Supported Frameworks (built-in)
| Framework | Languages |
|---|---|
| Playwright | TypeScript, JavaScript, Python |
| Selenium | Python, Java, JavaScript |
Adding a new adapter requires implementing one interface:
from agent.adapters.base import FrameworkAdapter
class MyAdapter(FrameworkAdapter):
@property
def name(self) -> str: ...
def detect(self, project_root: str) -> AdapterDetectionResult: ...
def run_tests(self, project_root, test_file, test_name, custom_command) -> TestRunResult: ...
def parse_test_result(self, raw_output, exit_code, duration) -> TestRunResult: ...
def capture_evidence(self, project_root, failure) -> FailureEvidence: ...
def patch_code(self, source_code, old_locator, new_locator) -> str: ...
Third-party adapters can be shipped as separate pip packages:
# in their pyproject.toml
[project.entry-points."qa_agent_adapter"]
cypress = "my_package:CypressAdapter"
Supported LLM Providers
| Provider | Env Variable | Notes |
|---|---|---|
| Google Gemini | GEMINI_API_KEY |
Default |
| OpenAI | OPENAI_API_KEY |
|
| Groq | GROQ_API_KEY |
Free tier available |
| Ollama | OLLAMA_API_KEY |
Local, no API key needed |
OPENROUTER_API_KEY |
Multi-model hub | |
| Azure OpenAI | AZURE_OPENAI_API_KEY |
Enterprise |
# Configure LLM
python qa_heal.py --llm-provider openai --llm-model gpt-4o-mini
# Or set env var
set GEMINI_API_KEY=your-key
Works without any LLM configured — deterministic healing runs fully offline.
Configuration
Auto-generated at .qa-agent/config.yaml on first run:
project:
name: my-project
framework: playwright
language: typescript
test_command: npx playwright test
healing:
mode: approval # "auto" | "approval" | "safe"
auto_apply_threshold: 95.0
deterministic_first: true
llm:
primary:
provider: gemini
model: gemini-2.5-flash
security:
mask_secrets: true
strict_privacy: false
validation:
rerun_failed_test: true
run_related_tests: true
Healing Memory
Successful fixes are cached in ~/.qa-agent/memory.db. Recurring failures skip the LLM entirely and apply the historical fix immediately.
CLI Commands
qa-agent init # auto-detect project + generate config
qa-agent detect # show detected framework, language, runner
qa-agent doctor # system health check
qa-agent config llm # configure LLM provider
qa-agent test # run tests through agent
qa-agent heal # auto-heal failures
qa-agent heal --apply # heal + write fix to source
qa-agent history # view healing memory
qa-agent version # show version
Project Structure
aumate-qa-agent/
├── agent/
│ ├── core/
│ │ ├── orchestrator.py # main workflow
│ │ ├── execution_context.py # standardized data model
│ │ ├── failure_detector.py # classify failures
│ │ ├── confidence_engine.py # score candidates
│ │ ├── validation_engine.py # sandbox testing
│ │ ├── plugins.py # adapter discovery/registry
│ │ └── test_runner.py # universal test execution
│ ├── adapters/
│ │ ├── base.py # adapter interface
│ │ ├── playwright.py # Playwright adapter
│ │ └── selenium_adapter.py # Selenium adapter
│ ├── healing/
│ │ ├── base.py # strategy interface
│ │ ├── locator.py # deterministic locator healing
│ │ ├── timing.py # timing/race condition healing
│ │ ├── assertion.py # assertion healing (guarded)
│ │ └── ai_reasoner.py # AI-powered healing
│ ├── ai/
│ │ ├── provider.py # LLM base interface
│ │ ├── router.py # multi-provider registry
│ │ └── providers/ # Gemini, OpenAI, Groq, Ollama...
│ ├── memory/healing_history.py # SQLite persistence
│ ├── git/manager.py # diff, patch, branch
│ ├── project/ # detection, config, doctor
│ └── security/masking.py # secret redaction
├── cli/main.py # CLI entry point
├── qa_heal.py # standalone runner (drop into any project)
├── pyproject.toml # pip-installable package
└── ARCHITECTURE.md # full architecture spec
Requirements
- Python 3.9+
- Your existing test framework (Playwright, Selenium, etc.)
- Node.js (for Playwright/Cypress Web projects)
License
MIT
Metadata
Release files for aumate-qa-agent 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| aumate_qa_agent-1.0.0.tar.gz | 49.5 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| aumate_qa_agent-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 104.9 kB
Release files / aumate_qa_agent-1.0.0.tar.gz
| Download URL | aumate_qa_agent-1.0.0.tar.gz |
|---|---|
| Size | 49.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5d2cd6780267dad4a7a892d5c1e0269f79330b9abff4bee8fb5ba4a4ce00e48c
|
|
BLAKE2b-256 checksum How to use checksums |
765cf2542da2fec9d40b093578a9d030cc4d97b8bcf95602b454dc4790731e97
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aumate_qa_agent-1.0.0-py3-none-any.whl
| Download URL | aumate_qa_agent-1.0.0-py3-none-any.whl |
|---|---|
| Size | 55.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5b9ec22179f1b99492ca463bfbf9a6d765fc4bf5e849ad3c9f4ce344b1d075d5
|
|
BLAKE2b-256 checksum How to use checksums |
c6f1cec1f6fc9c7af9ff6f0096307396504cee922de48a5fc8670c880b461000
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Security for aumate-qa-agent 1.0.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.