Agent skill

Qv Mobile Test Dispatch

by tetherto in tetherto/qvac

Start an AWS Device Farm mobile integration test for an addon and pick the right prebuild source, so the run tests the binary the developer means rather than the published release.

Apache-2.0Auto-check passedMobile

Install Qv Mobile Test Dispatch

skills CLI
$ npx skills add tetherto/qvac --skill qv-mobile-test-dispatch -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install tetherto/qvac qv-mobile-test-dispatch --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/tetherto/qvac.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/qv-mobile-test-dispatch .claude/skills/qv-mobile-test-dispatch && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
qv-mobile-test-dispatch
GitHub stars
681
Token cost
~3.5k tokens
SKILL.md length
1,635 words
Files
2
Skills in repo
50
Repo updated
First seen
Licence
Apache-2.0

At a glance

Start an AWS Device Farm mobile integration test for an addon and pick the right prebuild source, so the run tests the binary the developer means rather than the published release.

  • Works in 6 steps: decide which binary should be tested → get a run id (only for the… → pick a valid test filter → …
  • Someone asks to run mobile tests
  • SKILL.md covers When to use this skill, Safety rules, Step 1 — decide which binary… and Step 2 — get a run id (only…, plus 7 more sections
  • Calls gh and jq

What it does

Qv Mobile Test Dispatch is an agent skill from tetherto/qvac. Start an AWS Device Farm mobile integration test for an addon and pick the right prebuild source, so the run tests the binary the developer means rather than the published release. Covers run ids, GPR dev builds, published pins, test filters, device names, and reading the result. Use when someone asks to run mobile tests, test an addon on a device/phone, test a native change on mobile, or invokes /qv-mobile-test-dispatch.

Its SKILL.md is about 3.5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files (for example `agents/openai.yaml`).

It sits in Mobile, covering Mobile testing and debugging. It works with Amazon Web Services. The repository describes itself as: Open-source local AI SDK - run AI on-device with no cloud, no API keys. Supports GGUF, RAG, image, music, and video generation, speech-to-text, P2P inference, and more… The licence is Apache-2.0.

When your agent uses it

  • Someone asks to run mobile tests
  • Test an addon on a device/phone
  • Test a native change on mobile
  • Invokes /qv-mobile-test-dispatch

Example prompts

  • “/qv-mobile-test-dispatch”

Workflow steps

6 steps, taken from the step headings in SKILL.md.

  1. decide which binary should be tested
  2. get a run id (only for the prebuild_run_id route)
  3. pick a valid test filter
  4. dispatch
  5. read the result
  6. attach the run to the PR

What it can do on your machine

Read from SKILL.md and the folder at commit c3a6030. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • gh
    • jq

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use gh, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Qv Mobile Test Dispatch loads about 3.5k tokens when it runs. Until then it costs about 112 tokens; SKILL.md has 1,635 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~112
When it runs · the whole SKILL.md, loaded when a task matches
~3.5k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from tetherto/qvac at commit c3a6030, republished under its Apache-2.0 licence (© tetherto). 1,635 words, ~3,525 tokens.

Download SKILL.mdSave it as .claude/skills/qv-mobile-test-dispatch/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
qv-mobile-test-dispatch
description
Start an AWS Device Farm mobile integration test for an addon and pick the right prebuild source, so the run tests the binary the developer means rather than the published release. Covers run ids, GPR dev builds, published pins, test filters, device names, and reading the result. Use when someone asks to run mobile tests, test an addon on a device/phone, test a native change on mobile, or invokes /qv-mobile-test-dispatch.
disable-model-invocation
true

mobile-test-dispatch

Mobile integration tests run on AWS Device Farm, which is billed per device minute. They do not run automatically on PRs — someone dispatches them by hand, choosing one platform, the device(s), and usually a test filter.

The part that goes wrong is which binary ends up on the phone. A dispatch does not compile the addon; it installs a prebuilt one. Get that wrong and the run is green against code nobody changed.

Canonical reference: docs/ci/MOBILE-ON-DEMAND.md. Read it once per session before answering detailed questions; this skill is the operating procedure, that doc is the source of truth.

When to use this skill

  • "Run mobile tests for <addon>"
  • "Test my native change on a device / on a phone"
  • "Why did my mobile run test the wrong build?"
  • "How do I get a run id?"

Safety rules

  • Device Farm costs money. Never dispatch the full suite to explore. Once a first run has been done, pass a tests filter and the smallest device set that answers the question.
  • The exception is a first run on an addon, which is deliberately the full matrix: every supported device, every test. See Step 3b. Narrow only after it is green.
  • llm-llamacpp is sharded (7 Android groups, 13 iOS groups) and an empty tests filter fans each group out as its own Device Farm run — multiplied by the device list. A full first run on a sharded addon is legitimate but expensive, so say what it will cost before dispatching it; outside a first run, always filter for LLM.
  • One platform per dispatch. Android and iOS are separate runs.
  • A second dispatch of the same workflow on the same branch cancels the first. To cover both platforms, either wait, or use different addons in parallel.
  • Never dispatch on someone's behalf without telling them it bills Device Farm.

Step 1 — decide which binary should be tested

goalinput
my own PR's native changeprebuild_run_id=<run id>
a build from another branch, or a published releasepackage=@tetherto/<addon>-mono@<dev> or package=@qvac/<addon>@<ver>
just the published releaseleave both empty

prebuild_run_id and package are mutually exclusive — setting both fails with a message telling you to clear one.

The input is named package on most addons but package_spec on asr-ggml, audiogen-ggml, tts-ggml. prebuild_run_id is the same everywhere.

Step 2 — get a run id (only for the prebuild_run_id route)

First: the PR must have built prebuilds at all. The prebuild stage is label-gated by ci-router — it runs only when the PR carries prebuilds, run-desktop-addon-tests, or run-mobile-addon-tests. With none of those there is no bundle and no run id. Add the prebuilds label and let CI re-run.

Then: open the PR's Checks tab, click the run that built the prebuilds, and take the number at the end of its URL.

Do not filter by the addon's own workflow name. Which workflow built the bundle varies — on-pr-nx.yml for most addons, on-pr-<addon>.yml for some, on-merge-nx.yml for a branch build. Scope by the PR's head commit:

bash
PKG=llm-llamacpp   # the package directory name, i.e. packages/<PKG>
PR=1234

SHA=$(gh pr view "$PR" --repo tetherto/qvac --json headRefOid --jq .headRefOid)
for rid in $(gh api "repos/tetherto/qvac/actions/runs?head_sha=$SHA&per_page=100" \
               --jq '.workflow_runs[].id'); do
  gh api "repos/tetherto/qvac/actions/runs/$rid/artifacts?per_page=100" \
    --jq ".artifacts[]|select(.name==\"prebuilds-$PKG\" and .expired==false)|.name" \
    2>/dev/null | grep -q . && { echo "$rid"; break; }
done

# An empty result must not be dispatched: prebuild_run_id="" is the unchanged
# path and quietly resolves @latest, which is the failure this route closes.

Nothing printed means either the label is missing, or — on the nx path — that run only built the addons it considered affected and yours was not one. The dispatch failure message lists which addons a run did build.

Step 3 — pick a valid test filter

tests is a mocha --grep over runner names, not file names. A name that matches nothing is rejected up front by validate-devices, for free, with the list of valid names — so a wrong guess costs nothing but a round trip.

Read the names from the same source validate-devices uses:

bash
# sharded addons (llm-llamacpp, diffusion-cpp, tts-ggml, audiogen-ggml, vla, ...)
jq -r '(.android//{})|[..|strings]|unique|.[]' packages/<PKG>/test/mobile/test-groups.json

# single-spec addons
grep -oE '\brun[A-Z][A-Za-z0-9_]*' packages/<PKG>/test/mobile/integration.auto.cjs | sort -u

If a name is rejected on device with [prestage] FATAL: tests grep /<name>/ matched no known runner, it is in neither the addon's test-groups.json nor its integration.auto.cjs — i.e. a typo. Take a name from the commands above. (That FATAL used to fire for valid runners too, because the prestage generator kept its own list; readKnownRunners() now reads test-groups.json directly.)

Step 3b — which devices to run on

A first run on an addon covers every supported device and every test. That is what says whether the change is good. Narrow only afterwards, when re-running a known failure or iterating on one test.

PlatformSupported devices
AndroidGoogle Pixel 9 Pro, Samsung Galaxy S25 Ultra, Samsung Galaxy S26 Ultra
iOSApple iPhone 16 Pro, Apple iPhone 17 Pro

Not supported — these will schedule and bill, but a failure on one is not acted on: Pixel 8 and older (below the targeted floor) and Pixel 10 (not adopted). Any other fleet device can be added deliberately, e.g. to reproduce a report on specific hardware; say why when you do.

Google Pixel 9 and Google Pixel 9 Pro are different fleet models under the default EQUALS operator. The supported one is the Pro.

Step 4 — dispatch

First run — full matrix, one dispatch per platform, tests left empty. Run them in sequence, not back to back: the concurrency group is keyed on workflow and ref and does NOT include the platform, so dispatching iOS while Android is still running cancels Android. Wait for the first to finish, then fire the second.

bash
gh workflow run integration-mobile-test-<addon>.yml --repo tetherto/qvac --ref <branch> \
  -f platform=Android \
  -f devices_custom="Google Pixel 9 Pro, Samsung Galaxy S25 Ultra, Samsung Galaxy S26 Ultra" \
  -f device_model_operator=EQUALS \
  -f prebuild_run_id=<run id>

# iOS — only after the Android run finishes, or it cancels it
gh workflow run integration-mobile-test-<addon>.yml --repo tetherto/qvac --ref <branch> \
  -f platform=iOS \
  -f devices_custom="Apple iPhone 16 Pro, Apple iPhone 17 Pro" \
  -f device_model_operator=EQUALS \
  -f prebuild_run_id=<run id>

Report a first run as complete only when both platforms actually completed. A cancelled Android leg is not a pass, and on llm-llamacpp it also discards a seed-models step budgeted at up to 120 minutes.

Follow-up — one device, one test, after something fails:

bash
gh workflow run integration-mobile-test-<addon>.yml --repo tetherto/qvac --ref <branch> \
  -f platform=Android \
  -f devices_custom="Samsung Galaxy S26 Ultra" \
  -f device_model_operator=EQUALS \
  -f tests=<runnerName> \
  -f prebuild_run_id=<run id>
  • devices_custom takes a comma-separated list and overrides the device dropdown. Names are full fleet names (Google Pixel 9 Pro, Apple iPhone 16 Pro).
  • device_model_operator=EQUALS bills exactly that model; CONTAINS may pick a different variant.
  • ref selects the JS harness, tests and app — not the native binary. It and the prebuild source are deliberately independent.
Show full SKILL.md (699 more words)Show less

Step 5 — read the result

The build job's setup phase prints the provenance:

Verified: prebuilds come from run <id> — artifact 'prebuilds-<pkg>',
workflow '<name>', head <sha>, branch <branch> (<repo>), <conclusion>

Check the head SHA is the commit you meant — a run id resolves whether or not it built the code under review.

Warnings worth acting on:

  • run <id> concluded 'failure' — the source run was red. Its prebuild job may still be the green part, but confirm.
  • run <id> built code from the FORK '<repo>' — normal for a fork PR (the repo is fork-first), but confirm you meant that contributor's code.

The run-id path fails closed — a wrong, private, unfinished or expired run id fails the run with the reason rather than falling back to @latest.

Read the verdict from the run's test-results.json, not the workflow conclusion: a green workflow is not the same as a passed test, and Device Farm's Totals: line counts its own suite rather than your runners.

Step 6 — attach the run to the PR

A run is only evidence if a reviewer can open it. After a re-run, the link belongs on the PR as a comment. Prefer a comment always: it appends, so nothing can be lost, and it never has to read what is already there.

Never post without explicit approval. This writes to a public repository. Draft the line, show it, show the exact command, and run it only when the human says to.

Name the test and the device, so the line reads without opening anything:

Re-ran runChatterboxSpeedTest on Samsung Galaxy S26 Ultra after 4e1f2a9:
https://github.com/tetherto/qvac/actions/runs/<id> — total=1 passed=1
Never put a PR body, log line or run output in a shell argument

Write the text to a file and pass the file:

bash
# compose the note in /tmp/pr-<num>-note.md with the Write tool, then:
gh pr comment <num> --repo tetherto/qvac --body-file /tmp/pr-<num>-note.md

Backticks and $(...) inside a double-quoted argument run before gh does, and PR bodies and run artifacts on a fork PR are written by third parties. An approval gate does not help: the human approves the rendered line, not the shell quoting.

For the description: read it to a file, append there with the Write tool, show the merged result, then gh pr edit <num> --body-file <file>, which replaces the whole body.

Quote the counts from test-results.json. Never report a pass you have not read out of that file — say what actually ran, including when the answer is that a failure is still reproducing, and when a leg was cancelled rather than run.

Per-addon notes

addonnote
llm-llamacppsharded — always pass tests
asr-ggml, audiogen-ggml, tts-ggmlsplit addons: an empty input or @qvac pin installs the matching -android-arm64 / -ios package from npm at the same version. @tetherto -mono builds carry prebuilds inline.
audiogen-ggmlpins its composite actions to the default branch, so prebuild_run_id only works once that support is on main; it fails loudly with instructions until then
vlapackage dir is packages/vla-ggml, workflow slug is vla
decoder-audiono native prebuild of its own (rides bare-ffmpeg from npm). package has no effect; use ref.
inference-addon-cppcompiles its own prebuilds in-run from the dispatched ref, so no prebuild input is needed or offered

Reading a failure — where the logs are

The console-logs-* artifact on the run is where everything lands. The test-results.json in it only records the harness assertion (expect(received).toBe(expected) at app.test.js), which is identical for every failure and never says why. The real reason is in the app's own output, and the file differs per platform.

whatAndroidiOS
JS / bare runtime, TAP lines, the failurelogcat_full.txt, bare tagbare_console.log
native C++ / engine outputlogcat_full.txt, bare tag, [C++ TEST] prefixbare_console.log, [C++ TEST] prefix
app shelllogcat_full.txt, ReactNativeJS tagbare_console.log
device/OS noiselogcat_full.txt (most of it)iOS_appium.log
bash
gh run download <run-id> --repo tetherto/qvac --dir ./logs

# Android — the bare runtime carries BOTH the JS and the C++ output
grep -aE "E bare|I bare" logs/**/*logcat_full.txt | head -40      # test + errors
grep -a "\[C++ TEST\]"    logs/**/*logcat_full.txt | head -40      # native/engine

# iOS — same two, one file
grep -aE "error|not ok"  logs/**/*bare_console.log | head -40
grep -a "\[C++ TEST\]"   logs/**/*bare_console.log | head -40

Traps that cost real time:

  • Use logcat_full.txt, not Logcat.logcat. They are different files; the latter is a smaller capture and does not carry the bare output.
  • Grep the bare tag, not TAP markers or the package name. The runtime prints through logcat, so TAP version/ok 1 never appear as raw lines.
  • Native C++ lines are prefixed [C++ TEST] [INFO]: [Llama.cpp] ... on both platforms — the engine logs through the same channel, not a separate tag.
  • There is no bare_console.log on Android, by construction: the app writes it into its private data dir, which adb cannot read and run-as refuses on a release-signed APK. That is expected — logcat is the Android channel.

A real example, the whole reason a run went red, invisible in test-results.json:

E bare: Test 'runFitStubTest' failed: AddonError: ADDON_NOT_FOUND:
        Cannot find addon '.' from @qvac/model-fit/binding.js
        Candidates: - linked:libqvac__model-fit.0.12.0.so
        [cause]: Error: dlopen fail

© tetherto, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 1 other file in .agents/skills/qv-mobile-test-dispatch of tetherto/qvac.

  • SKILL.md
  • agents/openai.yaml

Open the folder on GitHubat commit c3a6030

Compare with similar skills

Qv Mobile Test Dispatch next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Qv Mobile Test Dispatch compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Qv Mobile Test Dispatch this skilltetherto/qvac681—~3.5kAutomated safety check: PassApache-2.0
Orca iOS Simulator Controlstablyai/orca87k1 repos~584Automated safety check: PassApache-2.0
UI Kitten Showcase QAakveo/react-native-ui-kitten11k—~2.3kAutomated safety check: PassMIT
Mobile Automation with agent-devicenuclearpasta/react-native-drax715—~1.4kAutomated safety check: PassMIT
Live-Device iOS QAgarrytan/gstack136k—~10kAutomated safety check: NotesMIT
Orca Android Emulator Controlstablyai/orca87k—~558Automated safety check: PassApache-2.0

Similar skills

  • iOS Simulator control from inside Orca, with the live device view in Orca's emulator pane. Use when driving a booted Apple Simulator on macOS: taps, gestures…

    87k GitHub starsUsed in 1 repo~584 tokens
    MobileAuto-check passed
  • UI Kitten Showcase QA

    akveo/react-native-ui-kitten

    Drives the Expo showcase app in an iOS simulator with agent-device to sweep every UI Kitten component in all theme and mapping combinations, reporting regressions with evidence.

    11k GitHub stars~2.3k tokensUpdated yesterday
    MobileAuto-check passed
  • Mobile Automation with agent-device

    nuclearpasta/react-native-drax

    Drives iOS and Android devices and simulators from the command line: open apps, snapshot the UI tree, tap, type, scroll, take screenshots and read UI info.

    715 GitHub stars~1.4k tokensUpdated 4 days ago
    MobileAuto-check passed
  • Live-Device iOS QA

    garrytan/gstack

    Tests a SwiftUI app on a real iPhone connected by USB, reading the Swift source and then looping through screenshot, analysis and action to find bugs.

    136k GitHub stars~10k tokensUpdated today
    MobileAuto-check: notes
  • Android device and emulator control from inside Orca over adb, with the live device view in Orca's emulator pane. Use when driving an adb-connected emulator…

    87k GitHub stars~558 tokensUpdated today
    MobileAuto-check passed
  • Dpis Hyperos Smoke

    Kwensiu/DPIS

    Run automated DPIS HyperOS device smoke tests for package-specific dp/font emulation or replacement.

    108 GitHub stars~715 tokensUpdated 2 days ago
    MobileAuto-check passed

More from tetherto/qvac

All 50 skills in this repo
  • Creates a Solutions page in the QVAC documentation website from a real use case, generalizing the case into reusable guidance and registering the page in the site navigation.

    681 GitHub stars~2.8k tokensUpdated today
    Auto-check passed
  • Qv Docs Update

    tetherto/qvac

    Updates the docs website after a change to the SDK or CLI. An agent skill from tetherto/qvac.

    681 GitHub stars~11k tokensUpdated today
    Auto-check passed
  • Qv Agent Stack Sync

    tetherto/qvac

    Plan and prepare the QVAC agent-stack release cascade across @qvac/inference, @qvac/sdk, @qvac/cli, @qvac/ai-sdk-provider, @qvac/opencode-plugin, and @qvac/openclaw-plugin.

    681 GitHub stars~2k tokensUpdated today
    Auto-check passed
  • Run the deterministic code-quality audit, turn related findings into contextual remediation groups, prepare approval-gated Asana proposals, reconcile recurring runs, or configure twice-monthly…

    681 GitHub stars~1.6k tokensUpdated today
    Auto-check passed
  • Review C++ changes for string parameter and call-site efficiency conventions (std::stringview, std::string&&, const std::string&, const char, and TransparentStringMap lookup).

    681 GitHub stars~702 tokensUpdated today
    Auto-check passed
  • Qv Addon Changelog

    tetherto/qvac

    Generate changelog entries for a target add-on package. An agent skill from tetherto/qvac.

    681 GitHub stars~1.7k tokensUpdated today
    Auto-check passed

Questions about Qv Mobile Test Dispatch

What does Qv Mobile Test Dispatch do?

Start an AWS Device Farm mobile integration test for an addon and pick the right prebuild source, so the run tests the binary the developer means rather than the published release. Qv Mobile Test Dispatch is an agent skill from tetherto/qvac. Start an AWS Device Farm mobile integration test for an addon and pick the right prebuild source, so the run tests the binary the developer means rather than the published release.

When should I use Qv Mobile Test Dispatch?

Qv Mobile Test Dispatch fits situations like: someone asks to run mobile tests; test an addon on a device/phone; test a native change on mobile; invokes /qv-mobile-test-dispatch.

How do I install Qv Mobile Test Dispatch in Claude Code?

Run `npx skills add tetherto/qvac --skill qv-mobile-test-dispatch -a claude-code`. Or copy the skill folder (.agents/skills/qv-mobile-test-dispatch in tetherto/qvac) into .claude/skills/qv-mobile-test-dispatch in your project. Claude Code loads it when a task matches its description.

How do I install Qv Mobile Test Dispatch in Codex?

Run `npx skills add tetherto/qvac --skill qv-mobile-test-dispatch -a codex`. Or copy the skill folder (.agents/skills/qv-mobile-test-dispatch in tetherto/qvac) into .agents/skills/qv-mobile-test-dispatch in your project. Codex loads it when a task matches its description.

Can I use Qv Mobile Test Dispatch in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add tetherto/qvac --skill qv-mobile-test-dispatch -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/qv-mobile-test-dispatch, .gemini/skills/qv-mobile-test-dispatch, .github/skills/qv-mobile-test-dispatch and .opencode/skills/qv-mobile-test-dispatch in your project.

What does Qv Mobile Test Dispatch need to run?

Going by SKILL.md and its folder, Qv Mobile Test Dispatch needs the command-line tools its instructions call (gh and jq).

Does Qv Mobile Test Dispatch access the network?

SKILL.md contains no URLs. Its commands use gh, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Qv Mobile Test Dispatch safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Qv Mobile Test Dispatch use?

Qv Mobile Test Dispatch is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Qv Mobile Test Dispatch use?

About 3.5k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Qv Mobile Test Dispatch?

Skills that share tags, products or a category with Qv Mobile Test Dispatch: Orca iOS Simulator Control (stablyai/orca, 87k stars), UI Kitten Showcase QA (akveo/react-native-ui-kitten, 11k stars), Mobile Automation with agent-device (nuclearpasta/react-native-drax, 715 stars) and Live-Device iOS QA (garrytan/gstack, 136k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Qv Mobile Test Dispatch?

tetherto (a GitHub organization) maintains it in tetherto/qvac, which has 681 GitHub stars. The repository holds 50 skills in this directory. The repository was last updated on October 7, 2026.

Source: tetherto/qvac on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.