v0.2.x to v0.3.x
What is new in agent-qa v0.3, and the config changes a v0.2 project needs before it runs.
What's new
agent-qa v0.3 can run tests somewhere other than your machine, and describes every device in the committed config.
- Remote browsers and devices. List a Playwright server, a CDP endpoint or an Appium server under
registry.remotes, and pick it withuse.browser.remoteor a device'sremote. See Remote browsers and devices. - First-party plugins. BrowserStack, Hyperbrowser, Kernel and Steel each have a plugin that creates a session before a test and releases it after.
pluginsis now one list of named entries, and the plugin kit lets you write your own. - Devices by model. A device says what it is, such as
model: Pixel 8andos: "15", and agent-qa finds it on this machine. A target names its defaultdevice.agent-qa devicesshows where each device runs and what this machine has. - New commands.
agent-qa plugins list,agent-qa plugins describe <entry>,agent-qa plugin validate <target>,agent-qa devicesandagent-qa doctor --remote <name>.
How to upgrade
v0.3 upgrades in place. Your tests, suites, hooks, knowledge and recorded runs carry over; only some config keys change.
Upgrade this project to agent-qa v0.3
Upgrade this project from agent-qa v0.2 to v0.3. Do the work, rather than only describing it. Read the upgrade guide first: https://vostride.com/docs/agent-qa/migrate/v0-2-to-v0-3.md v0.3 upgrades in place. Keep the tests, suites, hooks, knowledge and recorded runs. 1. Find agent-qa.config.yaml and the files it names. Stop any agent-qa dashboard or MCP server you started. 2. Upgrade agent-qa with this repository's package manager. If the project uses a Claude or Codex subscription, upgrade @vostride/agent-qa-subscription-auth too. 3. Run npx agent-qa validate. Every removed key is refused with a sentence that says what to do. Fix each one, using the tables in the guide. 4. If agent-qa.local.yaml exists, move each device into registry.devices in agent-qa.config.yaml, described by model and os, and each app path into its target's app.path, and set the target's device. Run npx agent-qa devices to see the model names this machine has. Then delete agent-qa.local.yaml. 5. If the project ran on BrowserStack, install @vostride/agent-qa-plugin-browserstack at exactly the agent-qa version, and add its plugins entry, remote and devices as the guide shows. Ask me to put BROWSERSTACK_USERNAME and BROWSERSTACK_ACCESS_KEY in the secrets file; never write their values yourself. 6. Run npx agent-qa validate until it passes, then npx agent-qa doctor and npx agent-qa plugins list, and fix what they report. 7. Run one of my own tests or suites and report its verdict. Never print secrets or put credentials in YAML or commands. Report what you changed, and anything I still need to do.
Update the packages
npm install -D agent-qa@latestIf you sign in with a Claude or Codex subscription, update
@vostride/agent-qa-subscription-authto the latest version too.Validate
npx agent-qa validateEvery removed key is refused with one sentence that says what to do, and a leftover
agent-qa.local.yamlstops every command that loads the config. Work through them with the tables below.Check the setup
npx agent-qa devices npx agent-qa doctorThen run one of your own tests or suites.
What changed in your files
plugins
plugins is a list of named entries, and plugins.auth is gone. The subscription sign-in plugin becomes the subscription entry:
# v0.2
plugins:
auth:
- package: "@vostride/agent-qa-subscription-auth"# v0.3
plugins:
- name: subscription
package: "@vostride/agent-qa-subscription-auth"plugins.providers is gone. A model provider plugin must be an @vostride/agent-qa-* package, so a third-party one is refused; use openai-compatible or anthropic-compatible with a baseURL instead.
agent-qa.local.yaml
agent-qa no longer reads agent-qa.local.yaml, and refuses to start while the file exists:
agent-qa.local.yaml is no longer read: describe each device under registry.devices with model and os (id pins one unit), and set app.path on the target. Delete the file.Move each part into agent-qa.config.yaml, then delete the file:
# v0.2: agent-qa.config.yaml
registry:
devices:
pixel:
platform: android
transport: local
targets:
my-app:
platform: android
appPackage: com.example.app
appActivity: .MainActivity# v0.2: agent-qa.local.yaml
devices:
pixel:
avd: Pixel_8_API_35
apps:
my-app:
path: builds/my-app-debug.apk# v0.3: agent-qa.config.yaml
registry:
devices:
pixel:
platform: android
model: Pixel 8
targets:
my-app:
platform: android
appPackage: com.example.app
appActivity: .MainActivity
device: pixel
app:
path: builds/my-app-debug.apk| v0.2 binding | v0.3 |
|---|---|
devices.<name>.avd | model: the AVD's name or its device profile. agent-qa devices lists them. |
devices.<name>.serial | model: the model the phone reports. Add id with the serial only when two identical phones are attached. |
devices.<name>.udid | model: the simulator's name. Add id with the UDID only to pick one of two identical simulators. |
devices.<name>.platformVersion | os, in quotes. |
devices.<name>.appPackage, appActivity, bundleId | The target's appPackage, appActivity and bundleId. |
devices.<name>.automationName, browserName | The device's capabilities, as appium:automationName and browserName. |
apps.<target>.path | The target's app.path. |
apps.<target>.browserstack | The target's app.ref. |
providers.browserstack | The BrowserStack plugin, with the credentials in your secrets file. |
registry.devices
| v0.2 | v0.3 |
|---|---|
transport: local | Delete it. A device with no remote is on this machine. |
transport: browserstack | Set remote to a BrowserStack plugin remote. |
match | Describe the device with model, os and id. App IDs go on the target, and other Appium settings go in capabilities. |
A test without use.device now runs on its target's device. --device still picks a device for a run, but only one on this machine.
BrowserStack
agent-qa no longer reads BROWSERSTACK_USERNAME and BROWSERSTACK_ACCESS_KEY from the environment, and has no built-in BrowserStack transport. Install the plugin, put the two values in your secrets file, and add an entry and a remote:
npm install --save-dev --save-exact @vostride/agent-qa-plugin-browserstack@$(npx agent-qa --version)plugins:
- name: browserstack
package: "@vostride/agent-qa-plugin-browserstack"
options:
username: "{{secret:BROWSERSTACK_USERNAME}}"
accessKey: "{{secret:BROWSERSTACK_ACCESS_KEY}}"
registry:
remotes:
- name: browserstack-devices
plugin: browserstack
devices:
bs-pixel:
platform: android
remote: browserstack-devices
model: Google Pixel 9
os: "15"A target's app.browserstack becomes app.ref, or leave app.ref out and the plugin uploads app.path for you. registry.providers is gone.
Other removed keys
These went away in late v0.2 releases. Each one is refused with a message that says what to do.
| Key | Instead |
|---|---|
allowProduction | Delete it. A target's environment is a label, and production targets run like any other. |
eval | Delete it. agent-qa eval replay takes its settings as flags. |
services.cache.ttl | Delete it. Cached plans do not expire by age. |
services.mcp.host, path, transport | Delete them. agent-qa mcp listens on 127.0.0.1, and uses stdio or --http. |
services.accessibility.runAfter: navigation | Use test-end or every-step. |
knowledge.contextBudgetTokens, knowledge.commitArtifacts | Delete them. |
A step's retries | Set meta.retries on the test: a test retries as a whole. |
A step's screenshot | Pass --screenshot-mode every-step to agent-qa run. |
Commands
| v0.2 | v0.3 |
|---|---|
agent-qa devices init | Removed. Devices are found by model, so nothing needs binding. Run agent-qa devices to see what this machine has. |
agent-qa run --bail, --screenshot-dir, --max-ablations | Removed. |
agent-qa cache purge --test <path> | Removed. cache purge --all clears every cached plan. |
AGENT_QA_CACHE_TTL | No longer read. |
AGENT_QA_APPIUM_URL | Names an Appium server on this machine only. List any other server under registry.remotes. |