Simulator Audio E2E
hyochan/react-native-nitro-sound
Build and run repeatable react-native-nitro-sound recorder/player regression tests on an iOS Simulator or Android emulator, with explicit virtual-device selection, microphone permission, Maestro…
Run the full OpenIAP device matrix — six frameworks across iOS, Google Play, Amazon Appstore, Meta Horizon, and VegaOS — driving real hardware over adb and xcrun, and report one row per cell with…
$ npx skills add hyodotdev/openiap --skill e2e-matrix-runner -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install hyodotdev/openiap e2e-matrix-runner --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/hyodotdev/openiap.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.codex/skills/e2e-matrix-runner .claude/skills/e2e-matrix-runner && rm -rf skills-srcUse ~/.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/
Install the "e2e-matrix-runner" agent skill from https://github.com/hyodotdev/openiap/tree/main/.codex/skills/e2e-matrix-runner into .claude/skills/e2e-matrix-runner/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "e2e-matrix-runner", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/hyodotdev/openiap/tree/main/.codex/skills/e2e-matrix-runnerType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add hyodotdev/openiap --skill e2e-matrix-runner -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install hyodotdev/openiap e2e-matrix-runner --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/hyodotdev/openiap.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.codex/skills/e2e-matrix-runner .agents/skills/e2e-matrix-runner && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "e2e-matrix-runner" agent skill from https://github.com/hyodotdev/openiap/tree/main/.codex/skills/e2e-matrix-runner into .agents/skills/e2e-matrix-runner/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "e2e-matrix-runner", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add hyodotdev/openiap --skill e2e-matrix-runner -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install hyodotdev/openiap e2e-matrix-runner --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/hyodotdev/openiap.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.codex/skills/e2e-matrix-runner .cursor/skills/e2e-matrix-runner && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "e2e-matrix-runner" agent skill from https://github.com/hyodotdev/openiap/tree/main/.codex/skills/e2e-matrix-runner into .cursor/skills/e2e-matrix-runner/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "e2e-matrix-runner", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/hyodotdev/openiap.git --path .codex/skills/e2e-matrix-runner--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add hyodotdev/openiap --skill e2e-matrix-runner -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install hyodotdev/openiap e2e-matrix-runner --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/hyodotdev/openiap.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.codex/skills/e2e-matrix-runner .gemini/skills/e2e-matrix-runner && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "e2e-matrix-runner" agent skill from https://github.com/hyodotdev/openiap/tree/main/.codex/skills/e2e-matrix-runner into .gemini/skills/e2e-matrix-runner/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "e2e-matrix-runner", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install hyodotdev/openiap e2e-matrix-runnerInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add hyodotdev/openiap --skill e2e-matrix-runner -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/hyodotdev/openiap.git skills-src && mkdir -p .github/skills && cp -r skills-src/.codex/skills/e2e-matrix-runner .github/skills/e2e-matrix-runner && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "e2e-matrix-runner" agent skill from https://github.com/hyodotdev/openiap/tree/main/.codex/skills/e2e-matrix-runner into .github/skills/e2e-matrix-runner/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "e2e-matrix-runner", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add hyodotdev/openiap --skill e2e-matrix-runner -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install hyodotdev/openiap e2e-matrix-runner --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/hyodotdev/openiap.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.codex/skills/e2e-matrix-runner .opencode/skills/e2e-matrix-runner && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "e2e-matrix-runner" agent skill from https://github.com/hyodotdev/openiap/tree/main/.codex/skills/e2e-matrix-runner into .opencode/skills/e2e-matrix-runner/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "e2e-matrix-runner", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
e2e-matrix-runnerRun the full OpenIAP device matrix — six frameworks across iOS, Google Play, Amazon Appstore, Meta Horizon, and VegaOS — driving real hardware over adb and xcrun, and report one row per cell with…
E2E Matrix Runner is an agent skill from hyodotdev/openiap. Run the full OpenIAP device matrix — six frameworks across iOS, Google Play, Amazon Appstore, Meta Horizon, and VegaOS — driving real hardware over adb and xcrun, and report one row per cell with evidence. Use when asked for a full e2e matrix, a device regression across every framework and store, or delegated hardware testing.
Its SKILL.md is about 3.4k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Testing & QA, covering End-to-end testing, Mobile testing and debugging and Cross-platform mobile apps. It works with iOS. The repository describes itself as: Standardized protocol for in-app purchases across all platforms — backed by Meta & Amazon. The licence is MIT.
Read from SKILL.md and the folder at commit 9f7d5f6. It shows what the files ask for, not the result of running them.
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.
Shell commands in SKILL.md call:
adbxcrunxcodebuildflutterdotnetFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
E2E Matrix Runner loads about 3.4k tokens when it runs. Until then it costs about 87 tokens; SKILL.md has 1,773 words of instructions outside code blocks.
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.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
binary at native build time.** Editing `.env` andAutomated 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.
The full file from hyodotdev/openiap at commit 9f7d5f6, republished under its MIT licence (© hyodotdev). 1,773 words, ~3,401 tokens.
.claude/skills/e2e-matrix-runner/SKILL.md (or your agent's skills folder).Run every cell of the matrix below on real hardware and report a row for each.
.claude/commands/e2e-tests.md is the authority on what a row means and how to
verify one; read it before starting and follow it. This file adds only what a
delegated agent needs: the matrix, the devices, and the rules for reporting.
For a parallel run, delegate $e2e-matrix-runner-google (Play, Amazon,
Horizon, VegaOS) and $e2e-matrix-runner-apple (iOS) instead; both follow
this file's techniques and reporting contract on their narrowed scope.
Six frameworks: react-native-iap, expo-iap, flutter_inapp_purchase,
kmp-iap, maui-iap, godot-iap, plus the native packages/google
(Android) and packages/apple (iOS) rows.
| Store | Frameworks | Device | Depth |
|---|---|---|---|
| iOS | all six + packages/apple | iPhone (physical) | device purchase flow each |
| Google Play | all six + packages/google | Pixel | device purchase flow each |
| Amazon | all six + packages/google | Fire tablet | device purchase flow each |
| Meta Horizon | all six + packages/google | Quest 3 | build + install + launch + tap-navigate to the purchase gate; purchase only when the checkout UI is visibly test/sandbox |
| VegaOS | react-native-iap and expo-iap only | Vega device | build + install + launch; purchase attempt when device input allows |
That is 7 iOS + 21 Android/Horizon + 2 VegaOS cells. Do not silently drop a cell.
Confirm tap only when its UI is
visibly marked test or sandbox. Otherwise report build + launch coverage.Discover them rather than trusting this list, with adb devices -l and
xcrun devicectl list devices. At the time of writing:
| Role | Serial / UDID |
|---|---|
| Pixel | HT79F1A00473 |
| Fire tablet | GN43T503515200BA |
| Quest 3 | 2G0YC5ZG480381 |
| Vega device | G0733M085512021G |
| iPhone | 00008110-0004081E1A79801E |
The iPhone UDID has changed mid-session before (re-enumeration); re-check it
after any device was not found error instead of retrying the stale id. The
Mac's LAN address (the iPhone's IAPKit/Metro origin) also changes between
networks — confirm with ipconfig getifaddr en1 (fallback en0) each run.
Every example shares the application id dev.hyo.martie, so only one framework
can be installed at a time per device. Uninstall before installing the next, and
expect INSTALL_FAILED_UPDATE_INCOMPATIBLE when signing keys differ. This
applies to iOS too: all six example apps share the bundle id, so install,
purchase, and move to the next framework strictly one at a time.
Android. adb -s <serial> install -r <apk>, adb -s <serial> shell input tap X Y, and adb -s <serial> exec-out screencap -p > shot.png. Read the
screenshot before every tap; do not tap coordinates from memory. With several
devices attached, a debug build follows only the device ANDROID_SERIAL names
and otherwise links Play, so build each cell with it set to that cell's device
and check the store line before installing, as the
## Android Store Selection section of .claude/commands/e2e-tests.md shows.
Quest. screencap returns black because Quest blocks capture of the VR
compositor. Do not conclude the device is undriveable. Drive the display-0 VR
panel directly: adb -s $QUEST shell input tap X Y reaches the panel, and
adb -s $QUEST shell uiautomator dump exposes the accessibility tree with
text and bounds — dump, tap the dumped coordinates, dump again. tap, swipe,
and keyevent (BACK dismisses the Horizon checkout dialog) are all verified
working on display 0 (Quest 3, Horizon OS, 2026-09-25: RN RedBox dismissed,
Kepler home → Purchase Flow navigated, MAUI scrolled to products, Purchase
tapped into com.oculus.store checkout and BACKed out cleanly).
adb -s "$QUEST" shell am start -n <launcher-activity> # resolve per framework
adb -s "$QUEST" shell uiautomator dump /sdcard/ui.xml
adb -s "$QUEST" pull /sdcard/ui.xml .
adb -s "$QUEST" shell input tap X Y # coordinates from the dumpResolve the launcher activity per framework (cmd package resolve-activity --brief ..., or monkey -p <pkg> -c android.intent.category.LAUNCHER 1):
Flutter uses io.flutter.embedding.android.FlutterActivity, MAUI a
crc...MainActivity. RN/Expo debug builds need their Metro
(adb reverse tcp:8081, one packager at a time) and a cold start if the
first bundle load stalls. If Metro serves a stale graph (same RedBox after
an entry change, or a 500 Got unexpected undefined), restart it with
--reset-cache. When the panel is empty right after launch, wait for the JS
bundle (RN shows 6 bare nodes until loaded); a transient null root node
from the dump usually clears on retry.
Verified limitation (Quest 3, Horizon OS, scrcpy 3.x): the above applies to
display 0 only. On a scrcpy virtual display (--new-display), touch
injection is silently ignored — adb shell input -d N tap, explicit
input touchscreen -d N tap, and monkey-script tap(x,y) all leave the
frame bit-identical (compare md5 before/after). Key events
(input -d N keyevent) do reach the app. Prefer display 0 + dumps over the
virtual-display + screenshot path; one md5-compare per OS upgrade is enough,
do not burn the run re-proving it.
Consequences: drive each Horizon app as install + launch + navigate + tap to
the purchase gate. The com.oculus.store checkout dialog renders its full
text into the dump (product, total, payment method, Confirm), so the
test/sandbox gate stays enforceable without screenshots. A build that linked
Play instead of Horizon fails earlier with Play's own error (RN-IAP:
initConnection failed ... responseCode -1, no Play Store on Horizon OS); its
store line says store=play, so rebuild for the Quest. Report any other store
error exactly, not as a generic input block. Horizon purchase cells
are BLOCKED by default (real-money Confirm, or no store connection), never
guessed.
iOS. Build with xcodebuild -destination "id=$UDID", install with
xcrun devicectl device install app, launch with
xcrun devicectl device process launch. Never use iPhone Mirroring for
debugging or purchases: the phone stays in the user's hand, and Mirror refuses
to connect while it is in use. Drive the physical iPhone directly instead.
A physical iPhone can be driven, through XCUITest. Build a UI-test bundle once
and point it at any installed app with XCUIApplication(bundleIdentifier:), then
run it with xcodebuild test-without-building -xctestrun, passing the flow in
environment variables so one signed runner serves every framework. Without an
Xcode account, build with CODE_SIGNING_ALLOWED=NO and hand-sign the runner and
its nested .xctest with a wildcard development profile.
Shortcut when the custom runner is not at hand: maestro-runner drives a
physical iPhone over its bundled WebDriverAgent with Maestro YAML flows as-is.
Verified working on this machine (Korea's iPhone, iOS 27, team PRDQGB267K):
export PATH="$HOME/.maestro-runner/bin:$PATH"
maestro-runner --platform ios --device "$IOS_UDID" --team-id PRDQGB267K \
test flow.yamlRules for this path, all verified the hard way:
--wda-bundle-id: a custom bundle forces a rebuild that fails
signing (No Accounts, stale wildcard profile). The default bundle reuses
the good cache under ~/.maestro-runner/cache/wda-builds/.IPHONEOS_DEPLOYMENT_TARGET = 12.0 (below Xcode's 15.0
floor). Patch once in the user-local checkout and rerun:
sed -i '' 's/IPHONEOS_DEPLOYMENT_TARGET = 12\.0/IPHONEOS_DEPLOYMENT_TARGET = 15.0/g' ~/.maestro-runner/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/project.pbxprojtakeScreenshot only saves plain filenames (shot.png lands under the
run's assets/ dir). Absolute paths like /tmp/x.png fetch fine over WDA
but fail to save (no such file or directory) while the step still passes —
a silent evidence loss. Always confirm the PNG exists before claiming a
visual check.test/... writes reports/<timestamp>/ with report.json
(status: passed), junit-report.xml, and per-command assets. The suite
exit code is unreliable alone; read report.json for the verdict.Two gates need a human, roughly once a day each: the device asks for its passcode
to Enable UI Automation, and a sandbox purchase can demand a hardware
side-button double-click. Neither is automatable. Report that cell as
BLOCKED: needs <which> and keep going.
Traps that look like code bugs:
No script URL provided with
unsanitizedScriptURLString = (null) — that is a permissions failure, not a
Metro failure. Drive XCUIApplication(bundleIdentifier: "com.apple.springboard")
and tap Allow.127.0.0.1. iOS has no adb reverse. Use the Mac's
LAN address for both Metro and the IAPKit server, and start the packager with
REACT_NATIVE_PACKAGER_HOSTNAME=<lan-ip> ... --host lan.extra into the binary at native build time. Editing .env and
restarting with --clear changes nothing; confirm the value in the installed
app's EXConstants.bundle/app.config and rebuild natively.Profile configuration, so use flutter build ios --release
with --dart-define for the IAPKit settings.dotnet build ships a stale Info.plist incrementally. After editing it,
delete bin/ and obj/ for that target framework or the device keeps running
the old plist.VegaOS. Source ~/vega/env first. vega exec vda devices -l is transport
visibility only; kepler device list is the install source of truth. Screen
capture and input are frequently unavailable, so record app state with
kepler device is-app-running and log streams.
Rows verify against a local IAPKit server, not the hosted one. Start it from
packages/kit as .claude/commands/e2e-tests.md describes, give each Android
device adb -s <serial> reverse --no-rebind tcp:3100 tcp:3100, and point the
example at http://127.0.0.1:3100; a physical iPhone needs the Mac's LAN
address instead. Re-check the reverse mapping immediately before each
purchase — it is dropped whenever a device reconnects, and the symptom is a
verification failure that looks like a code bug.
A row passes only when the server logs a matching verify_request with
isValid: true and the app finishes the transaction. Record the corrId.
The TestFlight/sandbox Apple Account password is pinned: Password12!. When a
sandbox purchase sheet asks for it, type it and continue the cell without
asking. This is a shared test account, so no redaction or secrecy handling is
needed in transcripts, logs, or screenshots.
What stays human-only: the device passcode for Enable UI Automation, the
hardware side-button double-click, a parental-control PIN, and any real-money
Horizon checkout. If one of those blocks a cell, report it as
BLOCKED: needs <which> and keep going. Never invent or reuse the pinned
password for any other account.
One row per cell, in a table, with:
PASS / FAIL / BLOCKED / UNSUPPORTEDcorrId for a pass, the
exact error for a fail, the exact missing prerequisite for a blocked cellRules that matter more than finishing:
BLOCKED with the reason, never omitted and never
guessed.© hyodotdev, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .codex/skills/e2e-matrix-runner of hyodotdev/openiap.
Open the folder on GitHubat commit 9f7d5f6
E2E Matrix Runner 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| E2E Matrix Runner this skillhyodotdev/openiap | 155 | — | ~3.4k | Automated safety check: Notes | MIT | |
| Simulator Audio E2Ehyochan/react-native-nitro-sound | 961 | — | ~1.1k | Automated safety check: Pass | MIT | |
| Engine E2Ewix/react-native-navigation | 13k | — | ~1.1k | Automated safety check: Pass | MIT | |
| E2Egronxb/hot-updater | 1.8k | — | ~1.6k | Automated safety check: Pass | Custom licence | |
| Keybase E2E Flow Testskeybase/client | 9.3k | — | ~1.2k | Automated safety check: Pass | BSD-3-Clause | |
| MAUI Device Test Runnerdotnet/maui | 23k | — | ~3.3k | Automated safety check: Pass | MIT |
hyochan/react-native-nitro-sound
Build and run repeatable react-native-nitro-sound recorder/player regression tests on an iOS Simulator or Android emulator, with explicit virtual-device selection, microphone permission, Maestro…
wix/react-native-navigation
Run Wix Engine (mobile-apps-engine) iOS E2E tests locally to validate RNN changes.
gronxb/hot-updater
Run end-to-end OTA verification for examples/v0.85.0 with agent-device.
keybase/client
Guides writing and fixing end-to-end flow tests for the Keybase app on desktop with Playwright and on iOS with Appium and WebdriverIO, sharing one testID registry.
dotnet/maui
Builds and runs .NET MAUI device tests locally on iOS simulators, MacCatalyst, Android emulators or Windows, with optional category filtering.
dotnet/maui
Writes UI tests that reproduce a GitHub issue in .NET MAUI and keeps iterating until the tests actually fail, proving they catch the bug.
hyodotdev/openiap
A skill your agent uses for OpenIAP documentation generation work, especially the release-note card each PR carries in packages/docs/src/pages/docs/updates/releases.tsx, written as already published…
hyodotdev/openiap
Manage OpenIAP's OpenCollective presence, including profile copy, slug/link migrations, sponsor/backer recognition, update posts, and README/docs sponsor assets.
hyodotdev/openiap
Run IAPKit local receipt-validation E2E with the dev.hyo.martie React Native or Expo examples, the compiled packages/kit server, real Convex, and Apple or Google sandbox purchases.
hyodotdev/openiap
Run the Apple half of the OpenIAP device matrix — six frameworks plus the native package on iOS — on a physical iPhone and report one row per cell with evidence.
hyodotdev/openiap
Run the Android half of the OpenIAP device matrix — six frameworks across Google Play, Amazon Appstore, and Meta Horizon, plus VegaOS — on real hardware and report one row per cell with evidence.
hyodotdev/openiap
A skill your agent uses for IAPKit product sync E2E testing in packages/kit with the Petgu React Native app, localhost dashboard, App Store Connect, and Google Play Console.
Works with
Categories
Run the full OpenIAP device matrix — six frameworks across iOS, Google Play, Amazon Appstore, Meta Horizon, and VegaOS — driving real hardware over adb and xcrun, and report one row per cell with…. E2E Matrix Runner is an agent skill from hyodotdev/openiap. Run the full OpenIAP device matrix — six frameworks across iOS, Google Play, Amazon Appstore, Meta Horizon, and VegaOS — driving real hardware over adb and xcrun, and report one row per cell with evidence.
E2E Matrix Runner fits situations like: asked for a full e2e matrix; A device regression across every framework and store; delegated hardware testing.
Run `npx skills add hyodotdev/openiap --skill e2e-matrix-runner -a claude-code`. Or copy the skill folder (.codex/skills/e2e-matrix-runner in hyodotdev/openiap) into .claude/skills/e2e-matrix-runner in your project. Claude Code loads it when a task matches its description.
Run `npx skills add hyodotdev/openiap --skill e2e-matrix-runner -a codex`. Or copy the skill folder (.codex/skills/e2e-matrix-runner in hyodotdev/openiap) into .agents/skills/e2e-matrix-runner in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add hyodotdev/openiap --skill e2e-matrix-runner -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/e2e-matrix-runner, .gemini/skills/e2e-matrix-runner, .github/skills/e2e-matrix-runner and .opencode/skills/e2e-matrix-runner in your project.
Going by SKILL.md and its folder, E2E Matrix Runner needs the command-line tools its instructions call (adb, xcrun, xcodebuild, flutter and dotnet).
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
E2E Matrix Runner is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.4k 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.
Skills that share tags, products or a category with E2E Matrix Runner: Simulator Audio E2E (hyochan/react-native-nitro-sound, 961 stars), Engine E2E (wix/react-native-navigation, 13k stars), E2E (gronxb/hot-updater, 1.8k stars) and Keybase E2E Flow Tests (keybase/client, 9.3k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
hyodotdev (a GitHub organization) maintains it in hyodotdev/openiap, which has 155 GitHub stars. The repository holds 19 skills in this directory. The repository was last updated on October 9, 2026.
Source: hyodotdev/openiap on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.