ios-simulator-browser — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited ios-simulator-browser (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Bundled commands use $PLUGIN_ROOT ($env:PLUGIN_ROOT in PowerShell; same path suffix) for the plugin root. Set it once: use the host's plugin-root variable when defined (Claude Code: PLUGIN_ROOT="$CLAUDE_PLUGIN_ROOT"), otherwise the absolute path of this plugin's root directory.
Use this as the preferred user-facing Simulator surface whenever the task would benefit from the user seeing or interacting with the app in the Codex browser. Plain simulator debugging remains useful for build/run, logs, bundle IDs, UI trees, and headless automation; once it provides or launches a Simulator UDID, hand off to this browser workflow for visible proof unless the user explicitly asked for a headless or log-only check.
xcrun simctl list devices available.serve-sim in a long-running terminal pinned to that simulator. Clean up any tracked stale helper for this simulator before starting, and install a trap so the helper is cleaned up when this terminal exits: SIM="<simulator-udid>"
cleanup_serve_sim() {
npx --yes serve-sim@latest --kill "$SIM" >/dev/null 2>&1 || true
}
trap cleanup_serve_sim EXIT INT TERM HUP
cleanup_serve_sim
npx --yes serve-sim@latest "$SIM"serve-sim in the Codex in-app browser.npx --yes serve-sim@latest --kill "$SIM" before starting another mirror for that simulator.serve-sim --kill; another thread may own a different simulator mirror.Use the bundled launcher when the requested previews live in an importable Swift package. Point it at the package manifest and select the target whose previews should be displayed. It generates a disposable host project outside the user's source tree, installs and launches that host in Simulator, and watches the package for edits.
node "$PLUGIN_ROOT/skills/ios-simulator-browser/scripts/swiftui-preview-browser.mjs" \
/absolute/path/to/Package.swift \
--package-target "<target>" \
--device "<simulator-udid>"--preview-filter <regex[, ...]>; it matches display names and code identifiers such as StatusRowView_Previews.serve-sim for that same UDID and open its printed URL in the in-app browser.PreviewProvider and #Preview declarations through the generated host..xcodeproj, .xcworkspace, Package.swift, schemes, or build settings to force preview support.For browser or preview QA, capture a browser screenshot showing the simulator frame. For hot reload QA, also report the launcher's hot reloaded package preview ... in pid ... output and show the changed frame after editing.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.