ios-qa
An agent skill by garrytan, from garrytan/gstack. Tags: ios, qa, testing.
What it does
Live-device iOS QA for SwiftUI apps. (gstack)
Install
With the skills CLI, which installs into Claude Code, Codex, Cursor and other agents:
npx skills add garrytan/gstack --skill ios-qa
Or copy the skill folder into Claude Code's skills directory by hand (~/.claude/skills for every project, or .claude/skills inside one):
git clone --depth 1 https://github.com/garrytan/gstack
cp -r gstack/ios-qa ~/.claude/skills/ios-qa
Safety box score
Grade F, high risk: 88 of 100 risk points, rated 2026-10-20. The grade rates what the skill and its scripts can reach on the machine of whoever installs it, across eight categories from shell execution to secrets access. How the score works.
This skill drives a real iPhone or iPad from the host, including build, install, launch, token rotation, and remote tailnet control. The main risks are host command execution, secret/token handling, and instructions that steer the agent to auto-accept workflow directives or override normal prompting.
| Category | Level | Why |
|---|---|---|
| Code & shell execution | 3 (high) | It directly runs host commands and native tools, including `spawnSync('xcrun', ...)` in `daemon/src/devicectl.ts` and the preamble launcher `~/.claude/skills/gstack/bin/gstack-skill-start`. |
| Network access | 3 (high) | Tailnet mode exposes a remote control surface and sends device data off-machine, with endpoints like `curl -X POST http://<mac-tailnet-ip>:9999/auth/mint` and forwarded `/screenshot`, `/tap`, and `/state/*` traffic. |
| Filesystem reach | 2 (moderate) | It reads and writes outside the project in `~/.gstack/ios-qa-allowlist.json`, `~/.gstack/ios-qa-daemon.pid`, and `~/.gstack/security/*.jsonl`, plus copies files out of the app sandbox. |
| Secrets & credentials | 3 (high) | It handles session and boot credentials, including copying `tmp/gstack-ios-qa.token` from the app container and keeping session tokens in `SessionTokenStore`. |
| Privilege & persistence | 2 (moderate) | Setup expects machine-level components like Tailscale and Xcode, and the docs explicitly tell the user to run `brew install --cask tailscale` and read `/var/run/tailscale.sock`. |
| Instruction hijack surface | 3 (high) | `SKILL.md` tells the agent to treat the skill file as executable instructions, honor instruction blocks from tool output, and says `DEMO MODE OVERRIDES ALL OTHER RULES`. |
| Irreversible actions | 3 (high) | The skill can install, launch, relaunch, and drive a physical iOS app, including `/tap`, `/swipe`, `/type`, and direct `/state/*` writes, so it can change device state on its own. |
| Transparency | 2 (moderate) | Important shipped files were not read here, including `daemon/src/index.ts`, `scripts/gen-accessors-tool/Sources/GenAccessors/main.swift`, and `scripts/gen-accessors.ts`. |
Before installing
- Read `daemon/src/index.ts` and `scripts/gen-accessors-tool/Sources/GenAccessors/main.swift` before trusting the runtime and codegen path.
- Decide whether you want state stored under `~/.gstack/` for allowlists, pidfiles, audit logs, and attempts logs.
- If you might use tailnet mode, review `docs/tailscale-acl-example.md` and verify which identities may reach the daemon port.
Rated 2026-10-20 by an automated review of 25 files from the skill's repository.
Source
- Repository
- garrytan/gstack (all skills from this repository)
- Path
- ios-qa/SKILL.md
- Branch
- main
- Updated
- 2026-10-05
Related skills
- eas-simulator — EAS service (paid). Run and control a user's app on a remote iOS/Android simulator hosted on EAS cloud.
- principle-prove-it-works — Apply after completing a task, before declaring done.
- principle-test-behavior-not-implementation — Apply when you write, change, or keep a test. Call the code the way its users do and assert the result they observe against a literal expected value.
- running-release-tests — Run automated release testing (UI or API) via the AWS DevOps Agent using a pre-configured test profile.
- tdd — Use only when the user explicitly asks for TDD, a failing test, or a regression test, OR when the bug has an obvious cheap local test target.
- qa — Fix browser/API/CLI/job/worker/webhook bugs. (gstack)