Web Application Testing
anthropics/skills
Tests local web applications with Python Playwright scripts, checking frontend behavior, capturing screenshots and reading browser console logs.
Verify microflow side effects and data changes with OQL against a running app.
$ npx skills add mendixlabs/mxcli --skill verify-with-oql -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install mendixlabs/mxcli verify-with-oql --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/mendixlabs/mxcli.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/mendix/verify-with-oql .claude/skills/verify-with-oql && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "verify-with-oql" agent skill from https://github.com/mendixlabs/mxcli/tree/main/.claude/skills/mendix/verify-with-oql into .claude/skills/verify-with-oql/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "verify-with-oql", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/mendixlabs/mxcli/tree/main/.claude/skills/mendix/verify-with-oqlType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add mendixlabs/mxcli --skill verify-with-oql -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install mendixlabs/mxcli verify-with-oql --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mendixlabs/mxcli.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/mendix/verify-with-oql .agents/skills/verify-with-oql && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "verify-with-oql" agent skill from https://github.com/mendixlabs/mxcli/tree/main/.claude/skills/mendix/verify-with-oql into .agents/skills/verify-with-oql/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "verify-with-oql", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add mendixlabs/mxcli --skill verify-with-oql -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install mendixlabs/mxcli verify-with-oql --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mendixlabs/mxcli.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/mendix/verify-with-oql .cursor/skills/verify-with-oql && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "verify-with-oql" agent skill from https://github.com/mendixlabs/mxcli/tree/main/.claude/skills/mendix/verify-with-oql into .cursor/skills/verify-with-oql/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "verify-with-oql", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/mendixlabs/mxcli.git --path .claude/skills/mendix/verify-with-oql--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add mendixlabs/mxcli --skill verify-with-oql -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install mendixlabs/mxcli verify-with-oql --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mendixlabs/mxcli.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/mendix/verify-with-oql .gemini/skills/verify-with-oql && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "verify-with-oql" agent skill from https://github.com/mendixlabs/mxcli/tree/main/.claude/skills/mendix/verify-with-oql into .gemini/skills/verify-with-oql/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "verify-with-oql", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install mendixlabs/mxcli verify-with-oqlInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add mendixlabs/mxcli --skill verify-with-oql -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/mendixlabs/mxcli.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/mendix/verify-with-oql .github/skills/verify-with-oql && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "verify-with-oql" agent skill from https://github.com/mendixlabs/mxcli/tree/main/.claude/skills/mendix/verify-with-oql into .github/skills/verify-with-oql/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "verify-with-oql", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add mendixlabs/mxcli --skill verify-with-oql -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install mendixlabs/mxcli verify-with-oql --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mendixlabs/mxcli.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/mendix/verify-with-oql .opencode/skills/verify-with-oql && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "verify-with-oql" agent skill from https://github.com/mendixlabs/mxcli/tree/main/.claude/skills/mendix/verify-with-oql into .opencode/skills/verify-with-oql/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "verify-with-oql", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
verify-with-oqlVerify microflow side effects and data changes with OQL against a running app.
Verify With Oql is an agent skill from mendixlabs/mxcli. Verify microflow side effects and data changes with OQL against a running app. Use after executing changes to confirm data was created, updated or deleted as expected, or to back a browser test with a data assertion.
Its SKILL.md is about 1.6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Testing & QA. It works with Playwright. The repository describes itself as: Mendix cli tool, a headless way to work with Mendix projects. Enables Mendix projects for use with 3rd party agentic coding tools like Claude Code and Copilot. Includes a… The licence is Apache-2.0.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 20a6c89. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
jqFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Verify With Oql loads about 1.6k tokens when it runs. Until then it costs about 58 tokens; SKILL.md has 389 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from mendixlabs/mxcli at commit 20a6c89, republished under its Apache-2.0 licence (© mendixlabs). 389 words, ~1,649 tokens.
.claude/skills/verify-with-oql/SKILL.md (or your agent's skills folder).This skill documents how to verify microflow side effects and data changes using OQL queries against a running Mendix app.
Use this when:
The core verification workflow is:
# 1. Deploy
mxcli exec changes.mdl -p app.mpr
mxcli docker build -p app.mpr --skip-check
mxcli docker reload -p app.mpr # or: mxcli docker up -p app.mpr --fresh --wait
# 2. Trigger (example: call a microflow that creates test data)
# This could be via Playwright, a rest call, or manual interaction
# 3. Verify
mxcli oql -p app.mpr "select Name, Email from MyModule.Customer where Name = 'Jane Doe'"# Verify a customer was created
mxcli oql -p app.mpr "select Name, Email from Sales.Customer where Name = 'Test Customer'"
# count records
mxcli oql -p app.mpr "select count(*) as Total from Sales.Order"# Verify status was changed
mxcli oql -p app.mpr "select OrderNumber, status from Sales.Order where OrderNumber = 'ORD-001'"# Verify record no longer exists (should return empty)
mxcli oql -p app.mpr "select count(*) as Total from Sales.Customer where Name = 'Deleted Customer'"# Verify an association was set (join query)
mxcli oql -p app.mpr \
"select o.OrderNumber, c.Name from Sales.Order o join o/Sales.Order_Customer/Sales.Customer c where o.OrderNumber = 'ORD-001'"Use --json for structured output that's easy to parse in scripts:
# json output for piping to jq
mxcli oql -p app.mpr --json "SELECT Name FROM Sales.Customer" | jq '.[].Name'
# count check in a script
count=$(mxcli oql -p app.mpr --json "SELECT count(*) AS Total FROM Sales.Order" | jq -r '.[0].Total')
if [ "$count" -gt 0 ]; then
echo "Orders exist: $count"
fiThe most powerful pattern: trigger actions through the UI with Playwright, then verify side effects with OQL.
// tests/verify-create.spec.ts
import { test, expect } from '@playwright/test';
import { execSync } from 'child_process';
import { login } from './utils/login';
function oql(query: string): any[] {
const result = execSync(
`mxcli oql -p app.mpr --json "${query}"`,
{ encoding: 'utf-8' }
);
return JSON.parse(result);
}
test('creating a customer via UI persists correctly', async ({ page }) => {
await login(page);
await page.goto('/p/Customer_Edit');
// Fill the form
await page.locator('.mx-name-txtName input').fill('OQL Test Customer');
await page.locator('.mx-name-txtEmail input').fill('oql@test.com');
await page.locator('.mx-name-btnSave').click();
// wait for save to complete
await page.waitForTimeout(2000);
// Verify via OQL
const rows = oql("select Name, Email from Sales.Customer where Name = 'OQL Test Customer'");
expect(rows).toHaveLength(1);
expect(rows[0].Email).toBe('oql@test.com');
});test('approving an order updates status and creates audit log', async ({ page }) => {
await login(page);
await page.goto('/p/Order_Overview');
// Click approve on first order
await page.locator('.mx-name-btnApprove').first().click();
await page.waitForTimeout(2000);
// Verify order status changed
const orders = oql("select status from Sales.Order where OrderNumber = 'ORD-001'");
expect(orders[0].Status).toBe('Approved');
// Verify audit log was created
const logs = oql("select action from Sales.AuditLog where action = 'Order Approved'");
expect(logs.length).toBeGreaterThan(0);
});For the fastest iteration loop when developing microflow logic:
# 1. Edit microflow
mxcli exec fix-logic.mdl -p app.mpr
# 2. Rebuild (fast)
mxcli docker build -p app.mpr --skip-check
# 3. Hot reload (no restart, keeps data)
mxcli docker reload -p app.mpr
# 4. Trigger the microflow (via UI or test)
# 5. Verify the result
mxcli oql -p app.mpr "select status from Sales.Order where OrderNumber = 'ORD-001'"
# Repeat from step 1 until correctThis loop avoids container restarts and database resets, making each iteration take seconds instead of minutes.
--json for scripted assertions — structured output is easier to parse than table formatmxcli oql uses the preview_execute_oql action which cannot modify datamxcli oql
executes through the running app's query layer (not a separate DB), so rows seeded with direct
SQL INSERTs (see demo-data) are invisible until the runtime re-reads them.
After seeding, run mxcli docker reload (or restart the app) before trusting an OQL count(*) of
0. To confirm the rows landed before a reload, query Postgres directly (mxcli sql …).count(*) to verify record countswhere clauses to find specific recordsjoin to verify associations were setORDER by ... limit 1 to check the most recent record--direct mode is faster when the admin port is reachable (after admin.addresses build patch)© mendixlabs, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/mendix/verify-with-oql of mendixlabs/mxcli.
Open the folder on GitHubat commit 20a6c89
Verify With Oql next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Verify With Oql this skillmendixlabs/mxcli | 128 | — | ~1.6k | Automated safety check: Pass | Apache-2.0 | |
| Web Application Testinganthropics/skills | 180k | 51 repos | ~966 | Automated safety check: Pass | Apache-2.0 | |
| Playwright CLIsanity-io/sanity | 6.4k | 18 repos | ~1.9k | Automated safety check: Pass | MIT | |
| playwright-cli Browser Automationgithub/gh-aw | 5.4k | 24 repos | ~2.8k | Automated safety check: Pass | MIT | |
| Write and Verify Playwright Testsappsmithorg/appsmith | 41k | — | ~2.9k | Automated safety check: Notes | Apache-2.0 | |
| Cucumber and Playwright E2E Testslanggenius/dify | 158k | — | ~682 | Automated safety check: Pass | Custom licence |
anthropics/skills
Tests local web applications with Python Playwright scripts, checking frontend behavior, capturing screenshots and reading browser console logs.
sanity-io/sanity
Automates browser interactions for web testing, form filling, screenshots, and data extraction.
github/gh-aw
Drives a real browser from the command line with playwright-cli to open pages, interact, mock requests, save state and work with Playwright tests.
appsmithorg/appsmith
Writes a Playwright end-to-end test from a prompt, runs it against a live Appsmith deployment and retries with fixes up to three times until it passes.
langgenius/dify
Guides changes and reviews of the Cucumber and Playwright end-to-end suite under `e2e/`: feature files, step definitions, support code, tags, locators and assertions.
langflow-ai/langflow
Write and review Playwright E2E tests for Langflow. An agent skill from langflow-ai/langflow.
mendixlabs/mxcli
Push OData query options into the SQL of a Mendix resource served by a read microflow, so $filter, $orderby, $top, $skip, $count and the key lookup reach the database instead of being silently…
mendixlabs/mxcli
Chart a Mendix app with Vega-Lite through a pluggable widget that takes the specification and the data as separate properties, so the model emits rows and never assembles a chart payload.
mendixlabs/mxcli
Author Mendix AI agent documents in MDL — Model, Knowledge Base, Consumed MCP Service and Agent, with variables, tools and multi-line prompts.
mendixlabs/mxcli
Run set-based INSERT, UPDATE and DELETE against Mendix entities through OQL statements, which the runtime supports and Studio Pro cannot author.
mendixlabs/mxcli
Define event-driven APIs over Kafka with Mendix business event services — publish and subscribe contracts, CREATE/DROP/DESCRIBE.
mendixlabs/mxcli
Search the Mendix Catalog platform service registry (catalog.mendix.com) from the CLI to find services published across an organisation.
Works with
Categories
Verify microflow side effects and data changes with OQL against a running app. Verify With Oql is an agent skill from mendixlabs/mxcli. Verify microflow side effects and data changes with OQL against a running app.
Verify With Oql fits situations like: testing & QA work in your project.
Run `npx skills add mendixlabs/mxcli --skill verify-with-oql -a claude-code`. Or copy the skill folder (.claude/skills/mendix/verify-with-oql in mendixlabs/mxcli) into .claude/skills/verify-with-oql in your project. Claude Code loads it when a task matches its description.
Run `npx skills add mendixlabs/mxcli --skill verify-with-oql -a codex`. Or copy the skill folder (.claude/skills/mendix/verify-with-oql in mendixlabs/mxcli) into .agents/skills/verify-with-oql in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add mendixlabs/mxcli --skill verify-with-oql -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/verify-with-oql, .gemini/skills/verify-with-oql, .github/skills/verify-with-oql and .opencode/skills/verify-with-oql in your project.
Going by SKILL.md and its folder, Verify With Oql needs the command-line tools its instructions call (jq). Our summary lists: Docker.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Verify With Oql is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.6k tokens (SKILL.md is roughly 6.6k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Verify With Oql: Web Application Testing (anthropics/skills, 180k stars), Playwright CLI (sanity-io/sanity, 6.4k stars), playwright-cli Browser Automation (github/gh-aw, 5.4k stars) and Write and Verify Playwright Tests (appsmithorg/appsmith, 41k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
mendixlabs (a GitHub organization) maintains it in mendixlabs/mxcli, which has 128 GitHub stars. The repository holds 72 skills in this directory. The repository was last updated on October 7, 2026.
Source: mendixlabs/mxcli on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.