Documentation Index
Fetch the complete documentation index at: https://allhandsai-docs-qa-changes-use-case.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
View Example Plugin
Check out the complete QA Changes plugin with ready-to-use code and configuration.
Overview
The OpenHands QA Changes workflow is a GitHub Actions workflow that:- Triggers automatically when PRs are opened, marked ready for review, or on demand
- Sets up the environment — installs dependencies, builds the project
- Exercises changed behavior — runs CLI commands, makes HTTP requests, opens browsers
- Posts a structured QA report with evidence and a clear verdict
How It Differs from Code Review
| Aspect | Code Review | QA Changes |
|---|---|---|
| Method | Reads the diff | Runs the code |
| Speed | 2-3 minutes | 5-15 minutes |
| Catches | Style, security, logic issues | Regressions, broken features, build failures |
| Output | Inline code comments | Structured QA report with evidence |
How It Works
The QA agent follows a four-phase methodology:- Understand — Reads the PR diff, title, and description. Classifies changes and identifies entry points (CLI commands, API endpoints, UI pages).
- Setup — Bootstraps the repo: installs dependencies, builds the project. Notes CI status but does not re-run tests.
- Exercise — The core phase. Actually uses the software the way a human would: spins up servers, opens browsers, runs CLI commands, makes HTTP requests. Focuses on functional verification that CI and code review cannot do.
- Report — Posts a structured QA report as a PR comment with evidence (commands, outputs, screenshots) and a verdict.
Quick Start
Add your LLM API key
Go to your repository’s Settings → Secrets and variables → Actions and add:
LLM_API_KEY: Your LLM API key (get one from OpenHands LLM Provider)
Create the QA label
Create a
qa-this label in your repository:- Go to Issues → Labels
- Click New label
- Name:
qa-this - Description:
Trigger OpenHands QA validation
Composite Action
The workflow uses a reusable composite action from the extensions repository that handles:- Checking out the extensions repository and PR code
- Setting up Python and dependencies
- Running the QA agent inside the PR repository
- Uploading logs and trace artifacts
Action Inputs
| Input | Required | Default | Description |
|---|---|---|---|
llm-model | No | anthropic/claude-sonnet-4-5-20250929 | LLM model to use |
llm-base-url | No | '' | Custom LLM endpoint URL |
extensions-repo | No | OpenHands/extensions | Extensions repository |
extensions-version | No | main | Git ref (tag, branch, or SHA) |
max-budget | No | 10.0 | Maximum LLM cost in dollars — agent stops when exceeded |
timeout-minutes | No | 30 | Wall-clock timeout for the QA step |
max-iterations | No | 500 | Maximum agent iterations (each is one LLM call + action) |
llm-api-key | Yes | - | LLM API key |
github-token | Yes | - | GitHub token for API access |
lmnr-api-key | No | '' | Laminar API key for observability |
Use
extensions-version to pin to a specific version tag (e.g., v1.0.0) for production stability, or use main to always get the latest features.QA Report Format
The agent posts a structured QA report as a PR comment. Reports are designed to be scannable — a reviewer can grasp the verdict in under 10 seconds, with detailed evidence available in collapsible sections.Verdict Values
- ✅ PASS: Change works as described, no regressions.
- ⚠️ PASS WITH ISSUES: Change mostly works, but issues were found.
- ❌ FAIL: Change does not work as described, or introduces regressions.
- 🟡 PARTIAL: Some behavior verified, some could not be verified.
Customization
Repository-Specific QA Guidelines
Add project-specific QA guidelines by creating a skill file at.agents/skills/qa-guide.md:
The skill file must use
/qa-changes as the trigger so it activates alongside the default QA behavior.Using AGENTS.md
You can also add setup and verification guidance toAGENTS.md at your repository root. The QA agent reads this file automatically and uses it to understand how to build, run, and test your project.
Workflow Configuration
Customize the workflow by modifying the action inputs:Trigger Customization
Modify when QA runs by editing the workflow conditions:Security Considerations
The workflow usespull_request (not pull_request_target) so that fork PRs do not get access to the base repository’s secrets. Since the QA agent executes code from the PR, using pull_request_target would allow untrusted fork code to run with the repo’s GITHUB_TOKEN and LLM_API_KEY.
The trade-off is that fork PRs won’t have access to repository secrets. The action detects this case and exits successfully with a clear skip notice instead of failing. Maintainers can run QA locally for fork PRs.
QA Evaluation (Optional)
The plugin includes an optional evaluation workflow that assesses QA effectiveness when PRs are closed. This helps you understand how well the QA agent is performing over time. To enable evaluation, add a second workflow file (.github/workflows/qa-changes-evaluation.yml) that runs on pull_request_target: [closed] and uses the evaluation script from the extensions repository. See the plugin documentation for the complete evaluation workflow.
Troubleshooting
QA not triggering
QA not triggering
- Ensure the
LLM_API_KEYsecret is set correctly - Check that the label name matches exactly (
qa-this) - Verify the workflow file is in
.github/workflows/ - Check the Actions tab for workflow run errors
- For fork PRs, QA is intentionally skipped (see Security section)
QA report not appearing
QA report not appearing
- Ensure
GITHUB_TOKENhaspull-requests: writepermission - Check the workflow logs for API errors
- The agent may still be running — check the Actions tab for in-progress workflows
Setup phase failing
Setup phase failing
- Add setup instructions to your
AGENTS.mdfile - Create a custom QA skill with specific build commands (see Customization section)
- Check that your project’s dependencies are compatible with Ubuntu 24.04
QA taking too long
QA taking too long
- Increase
timeout-minutesandmax-budgetfor complex projects - Add specific verification guidance in AGENTS.md to help the agent focus
- Consider which PRs truly need QA — use the
qa-thislabel for selective triggering instead of auto-triggering on all PRs
Agent cannot verify certain behavior
Agent cannot verify certain behavior
- This is expected for features requiring external services, credentials, or special hardware
- The agent will report what it could not verify and suggest AGENTS.md improvements
- Add guidance to your QA skill or AGENTS.md to help future runs succeed
Automate This
You can schedule periodic QA runs using OpenHands Automations. Copy this prompt into a new conversation to set one up:Related Resources
- QA Changes Plugin - Full plugin with workflow, action, and scripts
- QA Changes SDK Guide - SDK-level documentation and configuration reference
- Automated Code Review - Complement QA with automated code review
- Software Agent SDK - Build your own AI-powered workflows
- Skills Documentation - Learn more about OpenHands skills

