fabiandaniel00/QAIlify

Automated QA review for PRs — drives a real browser through a plan, posts results to Linear.

View on GitHub

Trust Signals

Scorecard Score
not yet scored
Maintenance Recency
Activelast commit Apr 30, 2026
License
MIT

Pinned Snippet

workflow.ymlSHA-pinned
uses: fabiandaniel00/qailify@1f772ff380598fd61c40aecde4d05661780378ae # v1.0.0

tags can be moved; commit SHAs can't. why a SHA?

namedescriptionrequireddefault
anthropic-api-keyAnthropic API key used to drive the Claude model. Get one from https://console.anthropic.com/. yes
linear-api-keyLinear personal API key (Settings → Security & Access → Personal API keys). When set, `@qailify review` posts the full report on the linked Linear ticket and drops a short reference comment on the PR. Without it, the full report lands inline on the PR. no""
start-app-cmdShell command that boots the app under test. Runs from the checked-out PR root before `@qailify review` starts. Can be anything that ends with the app listening on `app-url`. Examples: Node: cd sample-app && npm ci && npm run build && npm run start -- -p 3000 Rails: cd sample-app && bundle install && bin/rails s -p 3000 Phoenix: cd sample-app && mix deps.get && mix phx.server Only needed for `@qailify review` — plan and edit_plan ignore it. no""
app-urlURL where the app becomes reachable after `start-app-cmd` runs. The action polls this URL until it responds (up to 5 min) and then points Playwright at it. If you deploy to a preview URL, set this to that URL and leave `start-app-cmd` empty. nohttp://localhost:3000
app-login-promptOptional instructions for logging into the app before `@qailify review` runs the plan. Include the test username/password and any special steps. When empty, QAIlify assumes the app does not require login. no""
stackRuntime family to install for the app under test (review only). One of: node — install Node only (default). rails — install Node + Ruby. phoenix — install Node + Erlang/OTP + Elixir. other — install Node only; bring your own runtime install steps in the workflow before this action runs. Node is always installed regardless of stack — Playwright MCP needs it. Pin specific versions via `node-version`, `ruby-version`, `erlang-version`, `elixir-version`. nonode
node-versionNode version installed by `actions/setup-node` (always runs). Accepts anything `setup-node` accepts, including `lts/*`, `20.x`, `20.11.0`. no20
ruby-versionRuby version installed by `ruby/setup-ruby` when `stack: rails`. Ignored for other stacks. Accepts anything `setup-ruby` accepts. no3.3
erlang-versionErlang/OTP version installed by `erlef/setup-beam` when `stack: phoenix`. Ignored for other stacks. no26
elixir-versionElixir version installed by `erlef/setup-beam` when `stack: phoenix`. Ignored for other stacks. no1.17
browsersComma-separated list of Playwright browsers the review should exercise. Supported values: chromium, firefox, webkit. The first entry is the primary browser used via Playwright MCP; any extras get a cross-browser visual-regression pass via the Playwright CLI. Examples: `chromium` · `chromium,firefox` · `chromium,firefox,webkit` nochromium
check-responsiveWhen true, the review also walks key plan steps at a 375×667 mobile viewport and flags layout regressions. Default false (desktop only). nofalse
effortThoroughness dial: `low` · `normal` (default) · `high`. Drives plan breadth, review depth, thinking budget, run-time, and API cost together. - low — tight plan (≤3 steps), minimal cross-browser / mobile work, cheapest + fastest. - normal — current behaviour: ≤6 plan steps, 2–3 highest-risk mobile re-walks, cross-browser main-screen screenshot pass. - high — broad plan (≤10 steps), every step re-walked in every extra browser, every step re-walked at mobile viewport if `check-responsive` is on, deepest thinking — slowest + most expensive. nonormal
modelClaude model ID used for plan / edit_plan / review. Defaults to claude-sonnet-4-6 (Sonnet 4.6 with extended thinking), which is what QAIlify was tuned on. noclaude-sonnet-4-6
app-idOptional. Numeric GitHub App ID. When set together with `app-private-key`, comments post under that App's identity (custom avatar/name). When either is missing, comments post as `github-actions[bot]`. See docs/SETUP.md §4 for how to create your own App. no""
app-private-keyOptional. Full `.pem` contents of the GitHub App private key. Paired with `app-id`. no""

no outputs