The Qventis Engine
Say it once in plain English. It compiles once, then runs the same way every time, with no model in the loop.
- No AI bill per run
- Same result every time
- Sees screens other tools can't
Check that 'Total' shows '42.00'
{"verb":"check","target":{"label":"Total","role":"field"},"expect":"42.00"}Order summary
Set cell 'Qty' to '5' on the 'Approved' row
{"verb":"set-cell","target":{"grid":"Orders","column":"Qty","row":{"Status":"Approved"}},"value":"5"}Type '{{po.number}}' into 'PO NUMBER' and press Enter
{"verb":"type","target":{"label":"PO NUMBER","screen":"PO INQUIRY"},"value":"{{po.number}}","then":"enter"}PO INQUIRY SCREEN 04
PO NUMBER . . . 4500017731
VENDOR . . . . 120044
STATUS . . . . OPEN
F3=EXIT F5=REFRESH ENTER=INQUIRE
Run 'Create sales order' and check that 'Status' shows 'Created'
{"verb":"run","target":{"task":"Create sales order"},"then":{"verb":"check","target":"Status","expect":"Created"}}Send POST to '/orders' and check status '201'
{"verb":"send","method":"POST","path":"/orders","expect":{"status":201}}POST /orders
{
"customer": "acme-retail",
"lines": 3
}201 Created
{ "id": "ord_10422" }Compare 'staging.orders' with 'dw.fact_orders' on 'order_id'
{"verb":"compare","left":"staging.orders","right":"dw.fact_orders","key":"order_id"}staging.orders
104211042210423dw.fact_orders
104211042210423Compiled once
One step, every channel, no model in the loop
Choose a step and see what it compiles to for each channel. Nothing is interpreted at run time.
Step you write
Check that 'Total' shows '42.00'
- Web
await expect(page.getByLabel('Total')).toHaveText('42.00'); - API
expect(body.total).toBe('42.00'); - Desktop
engine.check(Label("Total"), TextEquals("42.00")) - Mobile
expect(await $('~Total').getText()).toBe('42.00'); - Data
SELECT total FROM orders WHERE order_id = :order_id; -- expect '42.00'
Inside the engine
One sentence, one structure
People read and edit the sentence. The engine versions and compiles the structure underneath, so plain English never drifts into prose nobody can run. Select a highlighted part to see what it means.
Verb
Select a highlighted part of the sentence.
Twelve verbs, every channel
The same verbs mean the same thing on web, desktop, mobile, API and data. Targets are labels people recognize, never selectors.
Select 'Express' in 'Shipping method'
Remember 'Order number' as {{order.id}}
Send GET to '/orders/{{order.id}}'
Sees every screen
Many enterprise Windows applications draw their own controls, so standard automation sees one blank pane. The engine reads them the way a person does.
- Record a journey and watch plain-English steps appear as you click
- Custom-drawn controls, dense grids and remote sessions
- Every check retries to its timeout and records evidence
Step 4 could not find the 'Total' field. A field labeled 'Order total' now sits in the same place.
the 'Total' field
the 'Order total' field
Evidence: before and after screenshots and every other test affected.
Runs anywhere
Keep what you build
# run a suite and fail the pipeline on errors qventis run --suite smoke --env test # take your web tests with you qventis export --to playwright ./exported
- Headless from the CLI and SDK, in any CI
- Coding agents call the same runs through the Agent gateway
- Playwright export and Git-friendly files. No lock-in.
What runtime AI would cost you
Runtime-AI tools send a model the page and the step on every run. Estimate the model spend compile-once execution avoids.
Default based on a public browser-agent benchmark of about $10 per 100-task run on a basic model.
Put the engine on your hardest screen
Bring the app automation could never see. We will record it with you.