Skip to main content
QA Wolf lints every JavaScript and TypeScript file in your workspace — inline in the editor as you edit, and inside an AI job as the agent writes. Findings appear the same way a type error does. A base set of rules always runs, catching real mistakes such as an unhandled promise, an unreachable branch, or a duplicate object key. You do not configure anything to get them.

Severity decides what blocks

When an AI job finishes its work, QA Wolf lints what changed before the job can complete. A rule’s severity decides what happens next:
  • error — blocks. QA Wolf sends the agent the findings and waits for a fix, and the job fails if the agent cannot clear them.
  • warn — informs. The agent sees the finding but it does not hold up the job.
  • off — silent. The agent is never told about it.

Configure rules

Add an .eslintrc.json file at the root of your repository. Without one, only the base rules run, at the severities they ship with.
.eslintrc.json
extends enables @qawolf/eslint-plugin-pom, which is bundled into QA Wolf — you install nothing. Its rules cover page object conventions: locators confined to the locators getter, no raw page.click() in a flow, Arrange-Act-Assert (AAA) comments on every step. The plugin’s README lists each one with examples. rules re-sets the severity of any rule, base rules included, using "off", "warn" or "error" — or the matching number 0, 1 or 2. Rules you do not list keep the severity they ship with. Page object model rules take effect only once the plugin is enabled; set a severity on one without it and the rule stays off, and the editor says so.
QA Wolf’s AI writes page objects whichever rules you enable — every workspace is built on the POM base classes. These rules enforce the conventions around them rather than turning them on.

Turn on any other ESLint rule

Name any core ESLint or typescript-eslint rule and it runs. @typescript-eslint/no-deprecated is a useful one to know about: it flags calls to any API documented as @deprecated, including the superseded Playwright methods such as page.type(). Rules needing type information report less inside an AI job than in the editor, because the job does not resolve imports from npm packages.

What QA Wolf reads

QA Wolf reads three keys from .eslintrc.json: extends, plugins and rules. It ignores anything else — settings, parserOptions, overrides, env — and flags it in the editor so the file does not quietly lie about what is running. $schema and root pass without complaint. Three more limits worth knowing:
  • Rule options are dropped. In "no-redeclare": ["error", { … }] the severity applies and QA Wolf discards the options after it.
  • @qawolf/eslint-plugin-pom is the only plugin supported. Any other plugin named in extends or plugins has no effect, and the editor says QA Wolf skipped it. Ask QA Wolf about adding one you need.
  • An unreadable file is skipped whole. If the JSON is invalid, is not an object, or runs past 131,072 characters, QA Wolf enables no page object model rules at all. The base rules still run, and the editor explains why.
Last modified on September 18, 2026