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 or when you request QA validation
- Sets up the full environment — installs dependencies, builds the project
- Runs the test suite — detects regressions introduced by the PR
- Exercises changed behavior — manually tests new features, bug fixes, and edge cases
- Posts a structured QA report as a PR comment with commands, outputs, and a verdict
How It Works
The QA workflow uses the OpenHands Software Agent SDK to validate your code changes:-
Trigger: The workflow runs when:
- A new non-draft PR is opened
- A draft PR is marked as ready for review
- The
qa-thislabel is added to a PR openhands-agentis requested as a reviewer
-
Validation: The agent follows a four-phase methodology:
- Understand: Reads the diff, classifies changes, and identifies entry points (CLI commands, API endpoints, UI pages)
- Setup: Bootstraps the repository — installs dependencies, builds. Checks CI status and only runs tests CI does not cover
- Exercise: The core phase — actually uses the software as a real user would. Spins up servers, opens browsers, runs CLI commands, makes HTTP requests. The bar is high: “tests pass” is not enough
- Report: Posts structured findings with evidence, including what could not be verified
-
Output: A QA report is posted as a PR comment with:
- Environment setup status
- CI & test status (what CI covers, any additional tests run)
- Functional verification evidence (commands run, outputs observed, screenshots)
- Unable to verify (what could not be tested, with suggested
AGENTS.mdguidance) - Issues found (🔴 Blocker, 🟠 Issue, 🟡 Minor)
- Verdict (✅ PASS, ⚠️ PASS WITH ISSUES, ❌ FAIL, 🟡 PARTIAL)
Code Review vs QA Validation
| Aspect | Code Review | QA Validation |
|---|---|---|
| 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 |
| Best for | Every PR | Feature PRs, bug fixes, risky changes |
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 all the setup automatically:- Checking out the extensions and PR repositories
- Setting up Python and dependencies
- Running the QA agent in the PR’s workspace
- Uploading logs as artifacts
Action Inputs
| Input | Description | Required | Default |
|---|---|---|---|
llm-model | LLM model to use | No | anthropic/claude-sonnet-4-5-20250929 |
llm-base-url | LLM base URL (for custom endpoints) | No | '' |
extensions-version | Git ref for extensions (tag, branch, or commit SHA) | No | main |
extensions-repo | Extensions repository (owner/repo) | No | OpenHands/extensions |
llm-api-key | LLM API key | Yes | - |
github-token | GitHub token for API access | Yes | - |
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.Customization
Repository-Specific QA Guidelines
Help the QA agent understand your project by adding a skill file at.agents/skills/qa-guide.md:
Trigger Customization
Modify when QA runs by editing the workflow conditions:Security Considerations
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
Environment setup failing
Environment setup failing
- Add setup instructions to
AGENTS.mdor a custom QA skill - Ensure the project’s dependencies are available in the CI environment
- Check if the project requires specific system packages
QA taking too long
QA taking too long
- Large test suites may take longer to run
- Consider adding a custom skill that specifies which test subset to run
- Check if the LLM API is experiencing delays
QA report not appearing
QA report not appearing
- Ensure
GITHUB_TOKENhaspull-requests: writepermission - Check the workflow logs for API errors
- Verify the PR is not from a fork with restricted permissions
Related Resources
- QA Changes Plugin - Complete plugin with scripts and skills
- Automated Code Review - Complementary code review workflow
- Software Agent SDK - Build your own AI-powered workflows
- Skills Documentation - Learn more about OpenHands skills

