fabiandaniel00/QAIlify
Automated QA review for PRs — drives a real browser through a plan, posts results to Linear.
View on GitHubTrust Signals
- Scorecard Score
- not yet scored
- Maintenance Recency
- Activelast commit Apr 30, 2026
- License
- MIT
Pinned Snippet
uses: fabiandaniel00/qailify@1f772ff380598fd61c40aecde4d05661780378ae # v1.0.0tags can be moved; commit SHAs can't. why a SHA?
Inputs
| name | description | required | default |
|---|---|---|---|
| anthropic-api-key | Anthropic API key used to drive the Claude model. Get one from https://console.anthropic.com/. | yes | — |
| linear-api-key | Linear 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-cmd | Shell 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-url | URL 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. | no | http://localhost:3000 |
| app-login-prompt | Optional 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 | "" |
| stack | Runtime 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`. | no | node |
| node-version | Node version installed by `actions/setup-node` (always runs). Accepts anything `setup-node` accepts, including `lts/*`, `20.x`, `20.11.0`. | no | 20 |
| ruby-version | Ruby version installed by `ruby/setup-ruby` when `stack: rails`. Ignored for other stacks. Accepts anything `setup-ruby` accepts. | no | 3.3 |
| erlang-version | Erlang/OTP version installed by `erlef/setup-beam` when `stack: phoenix`. Ignored for other stacks. | no | 26 |
| elixir-version | Elixir version installed by `erlef/setup-beam` when `stack: phoenix`. Ignored for other stacks. | no | 1.17 |
| browsers | Comma-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` | no | chromium |
| check-responsive | When true, the review also walks key plan steps at a 375×667 mobile viewport and flags layout regressions. Default false (desktop only). | no | false |
| effort | Thoroughness 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. | no | normal |
| model | Claude 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. | no | claude-sonnet-4-6 |
| app-id | Optional. 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-key | Optional. Full `.pem` contents of the GitHub App private key. Paired with `app-id`. | no | "" |
Outputs
no outputs