DEV Community

metataro
metataro

Posted on

Human-in-the-loop QA: let an AI agent run your test sheet on Android, iPhone, web and desktop — and sign off each case yourself

Most "AI testing" tools aim for the same promise: the AI runs everything and tells you it passed.
When something ships broken anyway, "the AI said it passed" is not an answer anyone accepts. A person is accountable.

git-qa is an open-source human-in-the-loop QA runner built around that fact.
An AI agent works through your test sheet; you watch the live screen and sign off each case with one key.
The evidence records who verified what.

git-qa running a test sheet

What it does

  • Reads a test sheet — a TSV you can write in any spreadsheet: step, expected result
  • Drives the target — Android devices and emulators (adb), web pages (Chrome, Edge, Firefox, Safari), desktop apps on macOS and Windows, and iPhone / iPad (USB mirroring; tapping through WebDriverAgent)
  • Shows you the live screen while it works, with a marker where it found the expected text
  • Lets you place the verdict with one key — D pass, F fail
  • Keeps the evidence — run.json plus the screen at the moment of the verdict, per case

The vocabulary is the point

Value Meaning
VERIFIED A person put their name on it
AUTO_PASS The AI passed it. Nobody looked
FAIL It failed
BLOCKED Could not run
SKIP Not run

A plain PASS would merge the first two. That merge is exactly what git-qa exists to prevent.

Letting Claude Code test on a real device

git-qa ships an MCP server. An agent such as Claude Code can take screenshots, read the screen,
list what can be pressed and tap it — on Android, web, desktop or iPhone.
You can run a sheet unattended overnight (--no-ui) and review only the failures in the morning.
The pass is still yours to give.

It also refuses sheets that verify nothing: if the expected text was already on screen before the step,
the case is stopped as BLOCKED with a note on how to fix the sheet.

Try it

  1. Download from the distribution page (macOS signed and notarized; Windows x64 / ARM64, unsigned) and install Node 22+
  2. Enter a handle, pick a device / URL / desktop app, pick a test sheet
  3. Start, watch, press D / F

It is beta and MIT-licensed. Bug reports and requests: Issues.

Top comments (1)

Collapse
 
runfoundry profile image
Foundry •

The BLOCKED rule for a sheet that verifies nothing is the part I'd copy first. We run UI automation on real iPhones through WebDriverAgent and hit the mirror image of it: a check that passes because the screen changes without the step doing anything.

We confirmed a feed swipe by hashing a screenshot before and after. On a playing video the hash differs on every frame, so a swipe that bounced back to the same video was logged as a page turn. The fix was to compare something only the event can cause (the caption and account text on the overlay), which sounds close to what your expected-text marker does.

Two things from the iPhone side that may matter for the WDA path: system prompts sit outside the app's element tree, so a tap can report success while a prompt swallowed it, and the same app build can open a different screen on a small model than on a big one.

Does git-qa handle "the screen changed, but not because of the step" on screens that animate, or is that left to the sheet author?