πŸ¦• Dino docs Β· AssertRx

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

ConceptWhat it is
ActionsAI 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 WorkspaceThe 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 WorkspaceAn 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 serverThe 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 pipelineChain 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

  1. 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.
  2. Set your workspaceOpen βš™οΈ Settings β†’ Project Workspace and point it at your test project folder (absolute path).
  3. Add a key & modelSettings β†’ API Key & Model: pick the provider, paste your API key, click ↻ Load Models, select a model, save.
  4. Run an actionPick e.g. Generate BDD From URL in the sidebar, fill the URL, click β–Ά Run and watch the stream.
  5. Check the resultOpen Explore Features / Explore POM to review what was generated, then Dry Run to execute the specs. No terminal needed.

Requirements

RequirementNotes
OSWindows only today. macOS and Linux are coming in the future.
Node.js β‰₯ 18Needed 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 keyAnthropic, 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)

  1. Reach out to us via Schedule demo on the AssertRx site, or at support@assertrx.com, to get the installation steps and the installer.
  2. Run it. On Windows the installer creates a desktop shortcut and a Start Menu entry (β€œDino”) and ships the bundled install/setup-dino-api.bat with the app. The β–Ά Start Server button uses it whenever needed. The app does not auto-run after install; launch it yourself.
  3. Launch Dino. A splash screen shows briefly, then the main window (1100Γ—780, resizable, min 800Γ—600) appears.
Tip The first start can take a few minutes while npm packages download. The app polls the server and connects automatically once it answers. Watch the console window for progress or errors.

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.

Server URLhttp://localhost:4003: the default, editable in the bar under the header
UI elementWhat it does
Status dotAmber = checking, green = Connected, red = Not connected (with the error text). The footer mirrors the state (β€œConnected to Dino API” / β€œNot connected”).
Server barChange 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 ServerLaunches 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 levelOn 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.
Note The server and the app are separate processes. Closing Dino does not stop the API server. Close its console window (or kill the process) to stop it. The setup script honours 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).
Important Actions, Explore, Dry Run and Environment Variables return clear errors until a workspace is set (β€œNo project workspace configured…”). Setting one fixes all of them at once.

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.

Resolution orderK6 action / Run K6 β†’ Load Testing Workspace (if set) β†’ Project Workspace

Settings Β· API Key & Model

Dino runs on your own provider account. Configure it once and every action uses it.

  1. 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.
  2. Paste the API keyFrom your provider console. The field is masked. Changing the provider afterwards clears the model list. Just load models again.
  3. Load modelsClick ↻ Load Models: this validates the credentials and lists the models they unlock (shown as provider/model Β· name).
  4. Select the model & saveThe provider, key and model are stored on this device and attached to every run.
Tip The key is optional if the provider is already configured on the server itself (via its environment variables or 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>/.env and remembers the list in the app settings.
  • If the workspace already contains a .env when you first open the panel, its values are imported so you edit what's on disk rather than starting from scratch.
  • Actions receive the .env path automatically (the old per-action authEnvDir textbox 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.
Important Saving requires a valid Project Workspace. Otherwise you'll see β€œNo project workspace configured”. Because the file lands in your workspace, your existing .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.

AgentFocus
β™Ώ AccessibilityKeyboard navigation, ARIA, contrast, assistive tech
πŸ”’ SecurityAuth flows, injection surfaces, data exposure
βœ… FunctionalCore behaviour and acceptance criteria
⏱️ PerformanceLoad times, responsiveness under stress
🧠 Usability / UXFlow clarity, error states, friction
🌐 CompatibilityBrowsers, viewports, OS differences
πŸ”Œ API / IntegrationContract correctness, failure handling
πŸ—„οΈ Data IntegrityValidation, persistence, consistency
🌍 Localizationi18n formats, RTL, translated strings
πŸ” RegressionProtecting 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

Setup Playwright

Stands up a clean, correctly-configured Playwright project in the workspace: config, folders, and a passing smoke test.

/generate-bdd-from-url

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

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

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

Generate POM From URL

Same idea, using the Playwright MCP bridge instead of playwright-cli.

/generate-spec-from-feature

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

Heal Playwright Failures

Reads the failed run, diagnoses stale selectors and timing issues, rewrites the tests, and re-verifies them automatically.

/setup-k6

Setup K6

Scaffolds a k6 load-testing project in the Load Testing Workspace when one is configured.

/generate-k6-test-from-endpoint

Generate K6 Tests

Point it at an API endpoint and get a runnable k6 load-test script with checks and thresholds.

/generate-k6-test-from-openapi

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:

ParameterUsed byMeaning
urlrequiredURL-based actionsAddress of the app to explore. Include the scheme (https://…).
Output directoryoptionalGeneratorsFolder (relative to the workspace) for generated files, e.g. tests/pom. Gets a πŸ“‚ Browse… folder picker.
requirementsFilerequiredBDD From RequirementsPath to the requirements document. The πŸ“ picker filters for Word, Excel, CSV, text and Markdown files.
featureFilerequiredGenerate Spec From FeaturePath 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

ControlWhat it does
β–Ά RunExecutes the selected action. Required parameters are validated first. A missing one prints an error without starting a run.
β–  StopDetaches 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.
βœ• ClearWipes 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.

Tip Selecting a different action (or a workspace tool) swaps the parameter form and clears the output, so you always know which run you're looking at.

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

ControlWhat it does
β–Ά Run All TestsRuns the entire suite in the workspace.
β–Ά Run SelectedRuns only the spec highlighted in the list.
Browser project selectorRestricts 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.
β–  StopAborts the in-progress run.
βœ• ClearResets the result screen and summary.
Open HTML reportAfter 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.ts files 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 list reporter 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 any retries configured 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.
Tip Pair Dry Run with Heal Playwright Failures: dry-run to confirm the failure, heal, then dry-run again to confirm the fix, all without opening a terminal.

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

ControlWhat it does
β–Ά Run SelectedRuns the script highlighted in the list. (k6 requires exactly one script; there is no β€œrun everything”.)
β–  StopAborts the in-progress run.
βœ• ClearResets 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.
Important k6 must be installed and on your PATH. Install it from k6.io if the run fails with β€œFailed to run k6”.

Troubleshooting

SymptomFix
β€œ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 .gitignore rules 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.

Dino Β· built by AssertRx Questions? Contact us Β· assertrx.com