agentleFS
ltatarevltatarev/skills/skills/verify/SKILL.md

verify

Skill0 starsChanged 3 months agoMITView on GitHub

Build, launch and drive a React Native app on the iOS simulator to observe a change end-to-end. Use when verifying a code change actually works at runtime and not just in tests, when the user asks to run the app, take a screenshot, or check something on device, or when a bug can only be confirmed by driving the UI. Covers idb-based tapping, why synthetic clicks fail, where console output actually goes, and simulator gotchas.

  • Installs packages

188 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use instinct-export, instinct-import and 10 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • TheKREATORSSkill

    instinct-export

    Export instincts from project/global scope to a file

    Also in 3 projects that use this

  • TheKREATORSSkill

    instinct-import

    Import instincts from file or URL into project/global scope

    Also in 3 projects that use this

  • AviadPSkill

    risk-assess

    Assess the risk and blast radius of a proposed code change before implementing it. Evaluates CI impact, framework-wide vs localized scope, rollback path, and identifies blindspots. Use when user says "what's the risk", "is this safe", "assess the impact", "risk assess", "blast radius", or before applying framework-wide or CI-affecting changes. Do NOT use for code quality review (use code-quality) or plan validation (use design-validator).

    Also in 3 projects that use this

  • diego-tobalinaSkill

    build-fix

    Fix build and compilation errors systematically. Run when build fails.

    Also in 6 projects that use this

  • AaravChadhaSkill

    secure

    Security review with a confidence gate - a finding exists only with a concrete exploit scenario and a high/medium/low confidence rating; everything else goes to a worth-hardening list, never inflated. Sweeps five surfaces: auth gates, secrets hygiene, injection and unsafe sinks, unsafe deserialization/crypto/transport, and LLM tool-use trust boundaries. Reports only, never fixes. Use when the user asks for a security review or to check vulnerabilities, secrets, or auth.

    Also in 3 projects that use this

  • ArvorCoSkill

    specify

    Create feature specification from natural language description. Use when starting a new feature or creating a spec. Triggers on: create spec, specify feature, new feature spec.

    Also in 10 projects that use this

  • +1 more from TheKREATORS

The file

We split this skill into the rules it gives an agent

2 rules. 0 are common, 0 are distinctive, and 2 are very specific to this project.

  • 0

    Common

    Most of the 167 edited versions we read keep these.

  • 0

    Distinctive

    This author's own choices. Worth a look.

  • 2

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    If two simulators have the same name (for example one per iOS runtime), the name is ambiguous, and xcodebuild -destination 'name=…' fails …

    line 23
  2. Very specific:

    Use idb, which taps the device directly in device points:

    line 52

“Common” is measured: kept by at least 6 in 10 of the 167 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Verifying on the iOS simulator

Static checks and unit tests do not prove a UI change works. This skill is the procedure for actually driving the app and observing it.

Build and launch

npx react-native run-ios --simulator='iPhone 17 Pro Max'

If two simulators have the same name (for example one per iOS runtime), the name is ambiguous, and xcodebuild -destination 'name=…' fails with Unable to find a device matching the provided destination specifier. Use the id instead:

xcrun simctl list devices available | grep 'iPhone 17 Pro Max'
npx react-native run-ios --udid=<UDID>

Cold builds take a few minutes (longer on a fresh pod install). After a JS-only change no rebuild is needed — Metro serves a fresh bundle on relaunch:

xcrun simctl terminate booted <bundle-id>
xcrun simctl launch booted <bundle-id>

Get the bundle id from the Xcode project or app.json rather than guessing.

Driving the UI — use idb, not synthetic clicks

Do not drive the simulator with AppleScript click at or cliclick. Both post mouse events that the Simulator delivers unreliably: they land at the wrong coordinates, get swallowed by the window's pointer capture ("Press esc to stop capture" in the title bar), and succeed only intermittently. This costs a lot of time and produces confusing evidence — you cannot tell a failed tap from a bug.

Use idb, which taps the device directly in device points:

brew install facebook/fb/idb-companion
/usr/bin/python3 -m venv idbenv && ./idbenv/bin/pip install fb-idb  # needs py3.9; fb-idb breaks on 3.14
idb_companion --udid <UDID> &                                       # note the grpc port it prints
./idbenv/bin/idb connect localhost <port>
./idbenv/bin/idb ui tap <x> <y>

Coordinates. A screenshot from xcrun simctl io booted screenshot is in pixels, not device points. On a 3x device (e.g. iPhone 17 Pro Max, 1320×2868 px ↔ 440×956 pt) divide screenshot pixels by 3 to get the tap target. Confirm the device's scale factor before converting.

A Switch needs a real press, not an instantaneous tap:

./idbenv/bin/idb ui tap --duration 0.12 <x> <y>

Observing what the app did

console.log and the app's logger do not go to the system log, so xcrun simctl spawn booted log stream does not show them. On older React Native versions they go to the Metro terminal. From about React Native 0.77, Metro does not show them; they go to React Native DevTools only.

A probe that always works: render the value as a Text with a bright background, take a screenshot, then remove it. Put the probe in the view on top. A full-screen modal, such as onboarding, hides a probe in the screen under it.

To capture runtime state in a screenshot, temporarily Alert.alert(...) the value from the code path under test, drive the flow, screenshot, then remove the instrumentation. Alerts queue, so N calls means N dismissals.

For state-shaped questions, a Redux devtools bridge (Reactotron or similar, if the repo wires one in dev) is usually faster than adding log lines.

Gotchas

  • The simulator's clock follows the host, so anything scheduled days out cannot be waited for. Read back the OS's own pending state instead (e.g. notifee.getTriggerNotifications()) — that is the real store of record.
  • Apps that gate startup on a migration or backfill show a loading screen on the first launch after a schema bump, before anything renders. Do not mistake that for a hang.
  • A stale Metro bundler serves the old bundle. If a JS change does not appear, restart Metro before doubting the code.

Definition of done

  • The change was observed running, not inferred from tests.
  • Evidence captured (screenshot, or the specific observed behavior described).
  • All temporary instrumentation (Alert.alert, log lines, debug flags) removed from the diff.
  • Static checks still pass afterwards — see validate-change.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.