Documentation
Dino Docs
Dino is your personal AI QA harness. Point it at a URL, a Gherkin feature file, an API endpoint or a requirements document and the agent writes scenarios, builds Page Object Models, generates Playwright specs, creates k6 load tests, and heals broken tests, streamed live, on your machine.
This guide covers everything: installing the app, starting the Dino API server, configuring your workspaces and credentials, running every action, browsing what was generated with the workspace tools, executing Playwright dry runs, and watching k6 load tests live.
Core concepts
| Concept | What it is |
|---|---|
| Actions | AI prompts exposed by your Dino server (e.g. Generate BDD From URL). Each one is a specialist agent that runs real tools (bash, read, write) inside a workspace. The sidebar shows every action the server exposes, including custom ones you add on the server. |
| Project Workspace | The folder every Playwright-oriented action runs in. Features, POMs and specs are written here, the managed .env lives here, and the workspace tools scan it. |
| Load Testing Workspace | An optional second folder for the k6 load-testing workflow. When set, K6 actions and the Run K6 viewer use it; otherwise they fall back to the Project Workspace. |
| Dino API server | The local service (default http://localhost:4003) that hosts the agent runtime. Dino is its desktop front-end. Start it with one click from the header. |
| The pipeline | Chain actions into a flow: scenario β page objects β specs β dry run β heal, and alongside it endpoint / OpenAPI β k6 scripts β run k6. Each stage's output is the next stage's input, all in your workspace. |
The 30-second version
- Start the serverClick βΆ Start Server in the app header. A console window opens, installs what's missing (first time only), and the status dot turns green Connected.
- Set your workspaceOpen βοΈ Settings β Project Workspace and point it at your test project folder (absolute path).
- Add a key & modelSettings β API Key & Model: pick the provider, paste your API key, click β» Load Models, select a model, save.
- Run an actionPick e.g. Generate BDD From URL in the sidebar, fill the URL, click βΆ Run and watch the stream.
- Check the resultOpen Explore Features / Explore POM to review what was generated, then Dry Run to execute the specs. No terminal needed.
Requirements
| Requirement | Notes |
|---|---|
| OS | Windows only today. macOS and Linux are coming in the future. |
| Node.js β₯ 18 | Needed by the Dino API server and the npx playwright dry runs. Download from nodejs.org. The setup script checks and reports the version it finds. |
| Provider API key | Anthropic, OpenAI, Google, DeepSeek, Groq, Mistral, OpenRouter or xAI, whichever your server supports. Optional if the provider is already configured on the server itself. |
Install
From the installer (recommended)
- Reach out to us via Schedule demo on the AssertRx site, or at support@assertrx.com, to get the installation steps and the installer.
- Run it. On Windows the installer creates a desktop shortcut and a Start Menu entry (βDinoβ) and ships the bundled
install/setup-dino-api.batwith the app. The βΆ Start Server button uses it whenever needed. The app does not auto-run after install; launch it yourself. - Launch Dino. A splash screen shows briefly, then the main window (1100Γ780, resizable, min 800Γ600) appears.
First run
On a fresh install the header shows βCheckingβ¦β. The server isn't up yet. Work through these steps once and you're set:
1 Β· Start the API server
Click βΆ Start Server. On Windows this opens setup-dino-api.bat in its own
console window; the server keeps running even if you close Dino (close the console
window to stop it). If a server is already listening on the port, the button reports
βServer is already runningβ and simply reconnects.
2 Β· Point the app at your workspace
Open βοΈ Settings β Project Workspace and enter the absolute path
(e.g. C:/Users/you/projects/my-app). Everything Dino does happens inside this
folder. See Project Workspace. If you plan to use the load-testing
workflow, set Load Testing Workspace too.
3 Β· Connect your model
Settings β API Key & Model: choose the provider, paste the API key, click β» Load Models to verify the key and list available models, then select one and save. See API Key & Model.
4 Β· Run your first action
Click any action in the left sidebar (e.g. Generate BDD From URL), fill in the required parameter(s), and hit βΆ Run. Output streams in real time; tool calls (bash / read / write) appear in the panel below the output as they execute. Required parameters have an amber border and a required badge; values are remembered for the next run of the same action.
5 Β· Check the result
Generated .feature files, POMs and specs are written into your workspace.
Browse them with Explore Features /
Explore POM, then execute with Dry Run,
or generate and run k6 scripts with Run K6.
The Dino API server
Dino talks to a Dino API server over HTTP. The server hosts the agent runtime; the desktop app is the remote control.
| UI element | What it does |
|---|---|
| Status dot | Amber = checking, green = Connected, red = Not connected (with the error text). The footer mirrors the state (βConnected to Dino APIβ / βNot connectedβ). |
| Server bar | Change the URL (e.g. a server on another machine) and press β» Reconnect, or just press Enter in the field. The URL is remembered across launches. |
| βΆ Start Server | Launches the bundled setup script in its own console. No-op if a server is already listening on the port. While waiting, the app polls for up to ~6 minutes (1s intervals at first, then 3s). |
| Thinking level | On connect, the app automatically sets the server's thinking level to low so runs stream less noise. Servers without this endpoint ignore it silently. |
| β (header) | Exits the app entirely. |
PORT / HOST environment variables if you need a
different port, and picks up ANTHROPIC_API_KEY from the environment when set.
Settings Β· Project Workspace
The workspace is the single most important setting: it's the directory Playwright-oriented
actions run in (cwd), where generated files are written, where the managed
.env lives, and what the workspace tools (Explore Features / POM, Dry Run)
scan.
- Use an absolute path that exists on disk. A missing folder is reported when an action or tool needs it.
- It can be an existing test project, or an empty folder if you plan to run Setup Playwright first.
- Every action request automatically includes the workspace as
cwd, so you never configure paths per-action. - Click Save to persist; the value survives restarts (stored in the app's local settings file).
Settings Β· Load Testing Workspace
An optional dedicated folder for the k6 load-testing workflow. When set:
- The K6 actions (Setup K6, Generate K6 Tests, Generate K6 Tests from OpenAPI/Swagger) run here instead of the Project Workspace.
- The Run K6 viewer scans and executes scripts here.
- Its
.env(if present) is preferred when injecting environment variables into k6 runs, falling back to the Project Workspace's.env.
Leave it empty to run everything in the Project Workspace. K6 actions and the Run K6 viewer simply fall back to it. This keeps load-test scripts and Playwright suites in separate repos or folders when you prefer that.
Settings Β· API Key & Model
Dino runs on your own provider account. Configure it once and every action uses it.
- Pick a providerFrom the dropdown. The list comes from your server (
/api/providers); if the server can't be reached a fallback set is offered: anthropic, openai, google, deepseek, groq, mistral, openrouter, xai. - Paste the API keyFrom your provider console. The field is masked. Changing the provider afterwards clears the model list. Just load models again.
- Load modelsClick β» Load Models: this validates the credentials and lists the models they unlock (shown as
provider/model Β· name). - Select the model & saveThe provider, key and model are stored on this device and attached to every run.
pi /login). Keys are stored locally
in the app's settings file (dino-settings) and forwarded per request.
They're never written to the Dino server's disk.
Settings Β· Environment Variables
A built-in dotenv editor. Variables you add here are written to a .env file
inside your project workspace, and every action automatically picks that
file up. No per-action env configuration needed.
# <workspace>/.env: managed by Dino
ANTHROPIC_API_KEY=sk-ant-...
TEST_BASE_URL=https://staging.example.com
How it works
- Rows are KEY = value pairs. οΌ Add Variable adds a row, β removes one; at least one empty row is always shown.
- Save validates, writes
<workspace>/.envand remembers the list in the app settings. - If the workspace already contains a
.envwhen you first open the panel, its values are imported so you edit what's on disk rather than starting from scratch. - Actions receive the
.envpath automatically (the old per-actionauthEnvDirtextbox is gone). - k6 runs inject these variables into the process environment, preferring the Load Testing Workspace's
.env, falling back to the Project Workspace's.
Rules
- Names: letters, digits and underscores; must start with a letter or underscore (
[A-Za-z_][A-Za-z0-9_]*). - Duplicate names are rejected; blank rows are dropped on save.
- Values may contain newlines; they're escaped transparently on write.
- Surrounding quotes are stripped when an existing file is imported;
#comment lines are ignored on import.
.gitignore rules apply to secrets as usual.
Settings Β· Test Agents
Choose the tester perspectives the Generate BDD From URL action should consider while writing scenarios. Leave everything unchecked for default coverage.
| Agent | Focus |
|---|---|
| βΏ Accessibility | Keyboard navigation, ARIA, contrast, assistive tech |
| π Security | Auth flows, injection surfaces, data exposure |
| β Functional | Core behaviour and acceptance criteria |
| β±οΈ Performance | Load times, responsiveness under stress |
| π§ Usability / UX | Flow clarity, error states, friction |
| π Compatibility | Browsers, viewports, OS differences |
| π API / Integration | Contract correctness, failure handling |
| ποΈ Data Integrity | Validation, persistence, consistency |
| π Localization | i18n formats, RTL, translated strings |
| π Regression | Protecting existing behaviour |
The selection is passed to the agent automatically as tester roles; only Generate BDD From URL uses it (the old per-action testerRoles field is injected for you).
Actions
The sidebar lists every prompt your Dino server exposes: built-ins plus any custom
workflows you've added on the server. Kebab-case names are shown as friendly titles
(generate-pom-from-url-cli β βGenerate POM From URL CLIβ). Selecting one
shows its parameter form; fill it in and click βΆ Run.
Built-in actions
Setup Playwright
Stands up a clean, correctly-configured Playwright project in the workspace: config, folders, and a passing smoke test.
Generate BDD From URL
The agent explores your app and writes reviewable Gherkin feature files before a line of test code exists. Respects your Test Agents selection.
BDD From Requirements
Point it at a requirements document (native π file picker for Word/Excel/text) and get Gherkin scenarios covering the documented behaviour.
Generate POM From URL CLI
Drives playwright-cli against your live app and generates typed POMs (locators, actions, waits), ready to reuse in specs. (Preferred POM action.)
Generate POM From URL
Same idea, using the Playwright MCP bridge instead of playwright-cli.
Generate Spec From Feature
Converts feature files into runnable Playwright specs with step definitions wired to your page objects. Use the π picker (or copy a path from Explore Features) for the feature file.
Heal Playwright Failures
Reads the failed run, diagnoses stale selectors and timing issues, rewrites the tests, and re-verifies them automatically.
Setup K6
Scaffolds a k6 load-testing project in the Load Testing Workspace when one is configured.
Generate K6 Tests
Point it at an API endpoint and get a runnable k6 load-test script with checks and thresholds.
Generate K6 Tests from OpenAPI/Swagger
Feed it an OpenAPI/Swagger spec and it writes k6 scripts that exercise the documented endpoints.
Parameters
Each action declares its own form. Fields are labelled required or optional (required inputs get an amber border), and the values you typed last time are restored automatically per action. Common parameters:
| Parameter | Used by | Meaning |
|---|---|---|
urlrequired | URL-based actions | Address of the app to explore. Include the scheme (https://β¦). |
| Output directoryoptional | Generators | Folder (relative to the workspace) for generated files, e.g. tests/pom. Gets a π Browseβ¦ folder picker. |
requirementsFilerequired | BDD From Requirements | Path to the requirements document. The π picker filters for Word, Excel, CSV, text and Markdown files. |
featureFilerequired | Generate Spec From Feature | Path to the Gherkin feature file. The π picker filtered to .feature, or copy the path straight from Explore Features. |
Any parameter whose name ends in File gets a native file picker; any ending
in Dir gets a folder picker, including parameters of custom actions you add
on the server.
The pipelines
Actions compose. Typical end-to-end flows in one workspace:
ββ Playwright functional flow ββββββββββββββββββββββββββββββ
setup-playwright β scaffold the project (once)
generate-bdd-from-url β feature files for your app
generate-pom-from-url-cli β page objects for the same screens
generate-spec-from-feature β runnable specs wired to the POMs
Dry Run β execute + HTML report (no AI)
heal-playwright-failures β when selectors drift, self-heal and re-verify
ββ k6 load-testing flow ββββββββββββββββββββββββββββββββββββ
setup-k6 β scaffold the load-test project
generate-k6-test-from-endpoint β scripts for chosen endpoints
generate-k6-test-from-openapi β scripts for a whole API spec
Run K6 β execute + live progress (no AI)
Run, Stop & Output
| Control | What it does |
|---|---|
| βΆ Run | Executes the selected action. Required parameters are validated first. A missing one prints an error without starting a run. |
| β Stop | Detaches the app from the live stream and marks the run stopped. Files already written to disk stay; the server-side run may continue to completion. |
| β Clear | Wipes the output panel and tool-call log. |
While an action runs, two panels tell you exactly what the agent is doing:
- Output. The streamed transcript: agent narration, tool invocations with trimmed tool output, and a final β Session complete marker.
- Tool Calls: every tool invocation as it happens (
bash,read,write, β¦), with βΆ flipping to β (or β on failure), so nothing happens hidden.
When the run finishes, a usage line summarizes the session (tokens (in / out / cache read / write), cost, and tool-call count), and the footer keeps the latest token count and cost visible at all times.
Explore Features
π A read-only browser for every Gherkin .feature file in your project
workspace. The list on the left is sorted by path; the first file is auto-selected.
- Renders Gherkin nicely: feature title, collapsible scenarios, colour-coded Given/When/Then keywords, tags, example tables and doc strings.
- Click a file's name (or β§ Copy Path in the reader header) to copy its path, then paste it straight into an action parameter like Generate Spec From Feature.
- Reader controls (shared with Explore POM): Aβ/A+ font size (12β28 px, persisted), β² reset, βΆ maximize the reader (Esc restores), β° hide/show the file list.
- Great for reviewing what Generate BDD From URL just wrote, before committing anything.
Explore POM
π§© The same viewer for generated Page Object Models, rendered as friendly syntax-highlighted code (keywords, strings, Playwright locator APIs, comments). A file is listed when it matches the POM naming convention or lives in a POM directory:
tests/pom/login.pom.ts β *.pom.ts|js|mjs|cjs|java
tests/pom/helper.ts β any code file inside a *pom* directory
src/pages/home.pom.js β
src/util.ts β no pom in name or path
The same skip-list, sorting, copy-path and reader controls as Explore Features apply.
Dry Run
π¬ Execute Playwright tests in your workspace without leaving the app. A plain local
run, no AI involved. Dino runs npx playwright test in the project
workspace and streams the results live.
Controls
| Control | What it does |
|---|---|
| βΆ Run All Tests | Runs the entire suite in the workspace. |
| βΆ Run Selected | Runs only the spec highlighted in the list. |
| Browser project selector | Restricts the run to one project from your playwright.config (e.g. chromium, Mobile Chrome). Leave on π All browsers to run every project. Projects are read from your config; without one, the standard chromium / firefox / webkit trio is offered. |
| β Stop | Aborts the in-progress run. |
| β Clear | Resets the result screen and summary. |
| Open HTML report | After a run ends, a π Open HTML report link appears. It opens playwright-report/index.html in your default browser, with traces, screenshots and diffs where configured. |
Details
- Only Dino-style
*.spec.tsfiles are listed in the spec picker. - The exact command is echoed at the top of the result screen, e.g.
$ npx playwright test tests/login.spec.ts --project=chromium --reporter=list,html. - Runs stream per-test results with the
listreporter and write the HTML report (it never auto-opens; use the report button). - Runs execute with
CI=1, so interactive prompts are suppressed (note: this also honours anyretriesconfigured in your Playwright config). - Lines are colour-coded live (passed / failed / skipped / flaky), and the summary parses Playwright's counts, including flaky (failed first attempt, passed on retry), skipped, interrupted and did not run, not just the exit code.
- Only one dry run at a time: the buttons disable while a run is in progress.
Run K6
β‘ Execute k6 load tests and watch progress live. Again a plain local run, no AI
involved. Dino runs k6 run <script> in the k6 workspace
(Load Testing Workspace when set, else Project Workspace).
Which scripts are listed
The viewer scans the workspace for .js / .mjs / .cjs /
.ts files whose contents import from the k6 module (i.e. anything containing
import β¦ from 'k6/β¦' or 'k6'). The same noise directories as the
other explorers are skipped. The hint under the toolbar shows which workspace the scripts
will run in.
Controls
| Control | What it does |
|---|---|
| βΆ Run Selected | Runs the script highlighted in the list. (k6 requires exactly one script; there is no βrun everythingβ.) |
| β Stop | Aborts the in-progress run. |
| β Clear | Resets the result screen and summary. |
Details
- Variables from your managed
.env(Settings β Environment Variables) are injected into the run's environment, so scripts can read them via__ENV. - k6's progress bar is redrawn in place (no endless scrolling), and colour output is normalized.
- The summary parses k6's end-of-test report. Failed checks and failed thresholds are counted and shown.
- Exit codes are translated for you:
99= thresholds failed,100= script exception,101= script could not be loaded,102= aborted. - Only one k6 run at a time; buttons disable while it's in progress.
k6 must be installed and on your PATH. Install it from
k6.io if the run fails with
βFailed to run k6β.
Troubleshooting
| Symptom | Fix |
|---|---|
| βServer did not start in timeβ | Check the console window the βΆ Start Server button opened. Missing Node.js, npm install failures and port conflicts are printed there. The first start can take minutes while packages install. Requires Node.js β₯ 18. |
| Status stays red | Verify the URL in the server bar (default http://localhost:4003) and press β» Reconnect. If the server runs on another machine, use its address. The setup script honours a custom PORT. |
| βNo project workspace configuredβ | Settings β Project Workspace β set an absolute path that exists on disk. |
| βWorkspace path not foundβ / βnot a directoryβ | The saved folder was moved, deleted, or points at a file. Re-enter it in Settings (same check applies to the Load Testing Workspace for K6 tools). |
| Load Models fails | Usually an invalid or unpaid API key. Re-paste the key; also confirm the server is reachable (model listing goes through it). After switching providers you must load models again. |
| No specs in Dry Run | Only *.spec.ts files are listed. If you just generated specs, make sure they were written into the current workspace. |
| βNo HTML report foundβ | The report button appears after a dry run completes and writes playwright-report/index.html. Run the tests first. |
| βFailed to run k6β / no scripts listed | Install k6 from k6.io and make sure k6 is on your PATH. Scripts are only listed when they import from the k6 module and live in the k6 workspace. |
| βA dry run / k6 run is already in progressβ | Only one of each can run at a time. Wait for it to finish or press β Stop first. |
| Invalid variable name / Duplicate | Environment variable names must match [A-Za-z_][A-Za-z0-9_]* and be unique. See Environment Variables. |
| Output seems cut off | You may have pressed β Stop, which detaches the live stream. Files already written stay on disk; re-run the action to continue. |
Security & Privacy
- Your keys stay yours. Provider API keys are stored in the app's local settings file on your device and forwarded with each request. They're never written to the Dino server's disk.
- The workspace is yours. The agent operates through real tools inside the folder you choose; every invocation is visible in the Tool Calls panel. Nothing runs hidden.
- Secrets live in
.env. Managed environment variables are written to your workspace's.env, the standard Playwright/CI location, so your existing.gitignorerules apply. - Hardened shell-outs. Dry-run browser projects and k6 script paths are validated against strict whitelists before being executed through a shell; report paths are resolved by the main process, never trusted from the page.
- Sandboxed renderer. The UI runs with context isolation and no Node integration; the renderer can only reach the main process through a narrow, validated IPC API.
Found something sensitive? See the repository's SECURITY.md for how to report it responsibly.
FAQ
Which AI providers can I use?
The provider dropdown is driven by your Dino server (with a fallback set of anthropic, openai, google, deepseek, groq, mistral, openrouter, xai). Keys are optional if the provider is already configured server-side via environment variables or pi /login.
Can I add my own actions?
Yes, Dino lists every prompt the server exposes. Add a custom prompt on your Dino server and it appears in the sidebar on the next connect, no app update needed. Parameters ending in File/Dir automatically get native browse pickers.
Where do generated files go?
Playwright artefacts (features, POMs, specs) go into the Project Workspace under each action's output directory (e.g. tests/pom, features/). K6 scripts go into the Load Testing Workspace when one is configured, else the Project Workspace. Explore Features / Explore POM / Run K6 show them immediately.
Do Dry Run and Run K6 need the AI server?
No. Both are plain local executions (npx playwright test / k6 run) in your workspace. No model, no tokens. Only actions (prompts) use the AI.
Why keep a separate Load Testing Workspace?
To keep load-test scripts and their dependencies apart from your functional Playwright project, handy when they live in different repos. If you don't set one, everything simply runs in the Project Workspace.
Are my parameter values remembered?
Yes, the last values you entered for each action are restored when you select it again, per action. The server URL is remembered too (and old localhost:3000 defaults migrate automatically to port 4003).
Can I point the app at a remote Dino server?
Yes. Put the server's URL in the server bar (e.g. http://192.168.1.20:4003) and press β» Reconnect. Actions then run with the server's file system, so use a workspace path valid on that machine.
Does closing the app stop the server?
No. The Dino API server runs in its own console window and survives the app. Close that console window (or kill the process) to stop it. The β button in the header only exits the app.
Is my code sent anywhere?
The agent runs on your machine via the local server; prompts and file contents go to the model provider you configured, exactly as if you ran the model yourself. No third-party AssertRx service sees your code.