Agent skill

Simdeck

by NativeScript in NativeScript/SimDeck

A skill your agent uses for simulator lifecycle, app install/launch, live viewing, UI inspection, touch/keyboard automation, screenshots, recordings, logs, pasteboard, hardware controls, and…

MITAuto-check passedMobile

Install Simdeck

skills CLI
$ npx skills add NativeScript/SimDeck --skill simdeck -a claude-code

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

GitHub CLI
$ gh skill install NativeScript/SimDeck simdeck --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/NativeScript/SimDeck.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/simdeck .claude/skills/simdeck && 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
simdeck
GitHub stars
152
Token cost
~3.6k tokens
SKILL.md length
1,259 words
Files
1
Skills in repo
1
Repo updated
First seen
Licence
MIT

At a glance

A skill your agent uses for simulator lifecycle, app install/launch, live viewing, UI inspection, touch/keyboard automation, screenshots, recordings, logs, pasteboard, hardware controls, and…

  • Works in 6 steps: Start UI, list, simdeck use ,… → Build with project tools; install and… → Use one describe --format agent… → …
  • Simulator lifecycle
  • SKILL.md covers Device and app, Fast agent inspection, Interact and Timing and batch, plus 3 more sections
  • Calls flutter

What it does

Simdeck is an agent skill from NativeScript/SimDeck. Use for simulator lifecycle, app install/launch, live viewing, UI inspection, touch/keyboard automation, screenshots, recordings, logs, pasteboard, hardware controls, and repeatable simulator flows.

Its SKILL.md is about 3.6k 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 Mobile, covering Cross-platform mobile apps and iOS development. It works with iOS, Android, Flutter and React Native. The repository describes itself as: SimDeck is a developer tool built for streamlining mobile app development using agents. Drive iOS Simulators and Android emulators from your favorite IDE & CLI. The licence is MIT.

When your agent uses it

  • Simulator lifecycle
  • App install/launch
  • Touch/keyboard automation
  • Hardware controls

Example prompts

  • “/simdeck”

Workflow steps

6 steps, taken from the first numbered list in SKILL.md.

  1. Start UI, list, simdeck use , boot/select the device, open viewer if in-app browser available
  2. Build with project tools; install and launch with SimDeck.
  3. Use one describe --format agent --max-depth 4 to understand an unfamiliar screen.
  4. Interact with selectors first; use coordinates only when needed.
  5. Verify with waitFor/assert/query, not repeated full describe dumps.
  6. Batch known flows; keep describe as a failure/debug artifact.

What it can do on your machine

Read from SKILL.md and the folder at commit 2d7346b. 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:

    • flutter

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

  • Network

    No URLs in SKILL.md.

    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

Simdeck loads about 3.6k tokens when it runs. Until then it costs about 52 tokens; SKILL.md has 1,259 words of instructions outside code blocks.

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

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 NativeScript/SimDeck at commit 2d7346b, republished under its MIT licence (© NativeScript). 1,259 words, ~3,647 tokens.

Download SKILL.mdSave it as .claude/skills/simdeck/SKILL.md (or your agent's skills folder).
name
simdeck
description
Use for simulator lifecycle, app install/launch, live viewing, UI inspection, touch/keyboard automation, screenshots, recordings, logs, pasteboard, hardware controls, and repeatable simulator flows.

SimDeck Agent Guide

SimDeck automates iOS Simulators and Android emulators. Use the CLI for automation and the browser UI for live human visibility. iOS works with NativeScript, UIKit, SwiftUI, React Native, Expo, and Flutter apps; Android live viewing uses the emulator -share-vid shared display surface plus SimDeck's native host H.264 encoder, with lifecycle, screenshots, logs, and UIAutomator hierarchy dumps also handled through ADB.

SimDeck uses one long-running local service. Run simdeck first; it starts or reuses the background service and prints the browser URL plus pairing code. Pass --open only when you want SimDeck to open the default browser itself. Pass -p <port> or --port <port> when the service should use a non-default port. Pass -a or --autostart when the service should also be registered as a macOS LaunchAgent.

Example response from simdeck:

json
{
  "ok": true,
  "pairingCode": "401974",
  "pid": 91285,
  "projectRoot": "-",
  "started": true,
  "url": "http://127.0.0.1:4310"
}
bash
simdeck
simdeck --open
simdeck -p 4311
simdeck -a
simdeck pair # prints LAN/Tailscale pairing URLs, code, and iOS QR
simdeck service stop
simdeck service kill # stops all SimDeck services from any binary
simdeck service restart

Usually http://127.0.0.1:4310. Pass a simulator name or UDID to simdeck when the browser URL should open with ?device=<UDID>. Use simdeck -p 4311 when the default port is not the right fit. Use simdeck pair when a native iOS client needs to pair. It starts or refreshes the LaunchAgent-backed service, detects LAN and Tailscale IPv4 addresses, and prints a QR with a simdeck://pair URL. Normal service restarts preserve the token and pairing code; use simdeck service reset only when you need to rotate them. Use simdeck service kill or simdeck service killall when you need a clean slate across installed and source-checkout binaries.

Optionally, when a user might want to drive the current simulator from their phone, run simdeck link [sim] to print an https://app.simdeck.sh/open universal link that opens SimDeck Studio on iOS (or the launchpad in a browser) pre-targeted at the resolved simulator.

Always first run simdeck and open the reported URL in the in-app browser using the Browser tool if available.

If Browser Use is not available, only then use simdeck --open; it opens the default browser and may take focus away from the app.

Device and app

Start by choosing a project default device. simdeck use <UDID> stores the selection for the current workspace/CWD so later commands can omit the UDID. Explicit UDIDs, --device, SIMDECK_DEVICE, and SIMDECK_UDID still work for one-off overrides. Prefer short forms in agent loops, such as simdeck tap "Continue" and simdeck snapshot --format agent --max-depth 2 -i.

bash
simdeck list
simdeck list --format json
simdeck use <UDID>
simdeck boot <UDID>
simdeck boot android:<AVD_NAME> --android-emulator-arg=-no-snapshot
simdeck shutdown
simdeck erase
simdeck core-simulator restart
simdeck install /path/to/App.app
simdeck install /path/to/App.ipa
simdeck install android:<AVD_NAME> /path/to/app.apk
simdeck launch com.example.App
simdeck uninstall com.example.App
simdeck open-url myapp://route
simdeck open-url https://example.com
simdeck toggle-appearance
simdeck camera sources
simdeck camera start com.example.App --file /absolute/path/to/camera.mov
simdeck camera start com.example.App --webcam
simdeck camera switch --placeholder
simdeck camera status
simdeck camera stop

simdeck list defaults to compact JSON for token-efficient agent selection. Use simdeck list --format json only when you need full paths and display metadata.

Build apps with project tooling.

Android devices use IDs like android:Pixel_8_API_36. simdeck list discovers AVDs from the Android SDK. SimDeck-owned Android boots use emulator gRPC screenshot streaming for live video, keep the emulator shared-video surface as fallback, and use --android-gpu host by default. Android browser streams default to software H.264 at 60 fps with a 960px long-edge cap so emulator gRPC frame production stays smooth. On macOS, managed boots use -qt-hide-window so the Qt render loop stays active without showing the native emulator window. Use simdeck service restart --android-gpu auto or --android-gpu swiftshader_indirect only when host GPU rendering is unstable. Optional user defaults live in ~/.simdeck/config.json. Supported keys include service.port, android.emulatorArgs, and android.disableAudio; explicit CLI/API boot arguments still win for one-off runs.

Fast agent inspection

Use targeted checks for test loops. describe is a diagnostic snapshot of the whole hierarchy. For verification, prefer the service APIs exposed by simdeck/test: action, query, waitFor, assert, selector tap, and batch.

bash
simdeck describe
simdeck describe --format agent --max-depth 4
simdeck describe --format agent --max-depth 4 --interactive
simdeck snapshot --format agent --max-depth 4 -i
simdeck describe --format compact-json
simdeck describe --point 120,240
simdeck describe --source auto
simdeck describe --source nativescript|react-native|flutter|swiftui|uikit
simdeck describe --source native-ax
simdeck describe --source android-uiautomator
simdeck describe --direct
simdeck wait-for --label "Welcome" --timeout-ms 5000
simdeck wait --label "Welcome" --timeout-ms 5000
simdeck assert --id login.button --source auto --max-depth 8

The default source is native-ax, which is the fastest and most universal path for agents. Use --source auto when you want richer NativeScript, React Native, Flutter, SwiftUI, or UIKit inspector data before native accessibility fallback. Use --direct or --source native-ax for the private CoreSimulator accessibility bridge. Use --source android-uiautomator for Android emulator UIAutomator hierarchies. For Android IDs, describe uses uiautomator dump; use --format agent or --format compact-json the same way as iOS. Use --interactive or -i when an agent only needs controls and actionable framework nodes; SimDeck keeps ancestor context so the output is still navigable. Agent output labels nodes with refs such as @e3; reuse them with simdeck press @e3. snapshot, press, and wait are aliases for describe, tap, and wait-for.

Prefer selectors, coordinates only when needed. Selector taps go through the service and wait for the element server-side. Use --expect-id, --expect-label, or another --expect-* selector when the tap should also wait for the next screen before returning.

bash
simdeck tap --id LoginButton --wait-timeout-ms 5000
simdeck tap --id com.apple.settings.screenTime --expect-id BackButton
simdeck tap --label "Continue" --element-type Button
simdeck tap 120 240
simdeck tap "Continue"
simdeck press @e3

For persistent app integration tests, use simdeck/test instead of shelling out repeatedly:

ts
import { connect } from "simdeck/test";

const udid = "your-device-udid";
const simdeck = await connect({ udid });

try {
  await simdeck.launch("com.example.App");
  await simdeck.waitFor({ id: "login.button" }, { maxDepth: 8 });
  await simdeck.tap(0.5, 0.5);
  await simdeck.assert({ label: "Welcome" }, { maxDepth: 8 });
  const matches = await simdeck.query({ id: "account.name" });
  console.log(matches);
} finally {
  simdeck.close();
}

simdeck/test state-query helpers default to source: "native-ax" for fast agent control. Pass source: "auto" only when you intentionally want richer framework inspector trees before native accessibility fallback.

Use tree()/describe only when a test needs to print the whole UI for debugging. In a normal agent loop, do not fetch the full tree after every action; verify the specific element or text that proves the step succeeded.

Show full SKILL.md (465 more words)Show less

Interact

bash
simdeck tap 120 240
simdeck touch 0.5 0.5 --phase began --normalized
simdeck touch 0.5 0.5 --phase ended --normalized
simdeck touch 120 240 --down --up --delay-ms 800
simdeck swipe 200 700 200 200
simdeck swipe 200 700 200 200 --duration-ms 500 --pre-delay-ms 100 --post-delay-ms 250
simdeck gesture scroll-up
simdeck gesture scroll-down
simdeck gesture swipe-from-left-edge
simdeck gesture swipe-from-right-edge
simdeck pinch --start-distance 160 --end-distance 80
simdeck pinch --start-distance 0.20 --end-distance 0.35 --normalized --duration-ms 250 --steps 8
simdeck rotate-gesture --radius 100 --degrees 90
simdeck rotate-gesture --radius 0.12 --degrees 45 --normalized --duration-ms 250 --steps 8
simdeck type 'hello'
simdeck type --stdin
simdeck type --file message.txt
simdeck key enter
simdeck key 42 --duration-ms 500
simdeck key-sequence --keycodes h,e,l,l,o --delay-ms 75
simdeck key-combo --modifiers cmd,shift --key z
simdeck dismiss-keyboard
simdeck button software-keyboard
simdeck button home
simdeck back
simdeck button lock --duration-ms 1000
simdeck button side-button
simdeck button volume-up
simdeck button volume-down
simdeck button action --duration-ms 1000
simdeck button mute
simdeck button digital-crown
simdeck crown --delta 50
simdeck button left-side-button
simdeck button siri
simdeck button apple-pay
simdeck home
simdeck app-switcher
simdeck rotate-left
simdeck rotate-right
simdeck pasteboard set 'text'
simdeck pasteboard get

Use --stdin or --file for text with quotes, newlines, shell variables, or shell-sensitive characters.

Timing and batch

bash
simdeck tap --label "Continue" --wait-timeout-ms 5000
simdeck tap --label "Continue" --expect-label "Done"
simdeck back
simdeck swipe 200 700 200 200 --pre-delay-ms 100 --post-delay-ms 250
simdeck button lock --duration-ms 1000

Prefer to use wait-for or assert in a batch to wait for UI state instead of fixed delays. sleep 500 in a batch waits 500 ms. Use sleep 0.5s or sleep --seconds 0.5 when you want to write seconds explicitly.

Use batch when steps are known; use discrete commands when a later step depends on parsing previous output.

bash
simdeck batch \
  --step "tap --label Continue --wait-timeout-ms 5000 --expect-label Done" \
  --step "type 'hello world'" \
  --step "back" \
  --step "pinch --start-distance 0.20 --end-distance 0.35 --normalized"

Batch rules: one source (--step, --file, or --stdin); set the default with simdeck use <UDID> or keep <UDID> at batch level; ordered steps; fail-fast by default; --continue-on-error for best effort. Step commands: tap, back, wait-for, assert, swipe, gesture, pinch, rotate-gesture, touch, type, button, key, key-sequence, key-combo, sleep.

For JS tests, batch can combine action and verification without extra CLI process startup:

ts
await simdeck.batch([
  { action: "tap", selector: { label: "Continue" }, waitTimeoutMs: 5000 },
  {
    action: "waitFor",
    selector: { label: "Continue Tapped" },
    timeoutMs: 5000,
  },
  { action: "assert", selector: { id: "fixture.status" } },
]);

For app-style flows, SimDeck can run a practical subset of Maestro YAML:

bash
simdeck maestro test flow.yaml --artifacts-dir artifacts/maestro

Evidence

bash
simdeck screenshot --output screen.png
simdeck screenshot --with-bezel --output screen-bezel.png
simdeck screenshot --stdout > screen.png
simdeck record --seconds 5 --output screen-recording.mp4
simdeck record --seconds 5 --stdout > screen-recording.mp4
simdeck logs --seconds 30 --limit 200
simdeck chrome-profile
simdeck processes
simdeck stats
simdeck stats --watch
simdeck sample --seconds 3

Use screenshots for still evidence, --with-bezel when the device frame matters, and record for short MP4 screen recordings. Use stats for simulator app CPU, memory, disk write, network receive/send rates, connections, hang, and crash/termination signals. Use sample only when a short CPU stack capture is worth the extra pause. Prefer describe for token-efficient state dumps, if they have enough context.

Camera Simulation

Use camera start when a booted iOS simulator app needs a deterministic camera feed. The CLI talks to the SimDeck daemon, which owns the camera source and shared-memory writer, then injects the camera shim into the app with simctl launch and relaunches the bundle. Use camera switch to swap between placeholder, media, and webcam sources without relaunching while the daemon feed is alive.

bash
simdeck camera sources
simdeck camera start com.example.App --file /absolute/path/to/feed.mov --mirror off
simdeck camera switch --placeholder
simdeck camera start com.example.App --webcam "FaceTime HD Camera"
simdeck camera stop

Media paths must be absolute. URLs are treated as video streams. Webcam support depends on macOS camera availability and permission for SimDeck.

Default loop

  1. Start UI, list, simdeck use <UDID>, boot/select the device, open viewer if in-app browser available
  2. Build with project tools; install and launch with SimDeck.
  3. Use one describe --format agent --max-depth 4 to understand an unfamiliar screen.
  4. Interact with selectors first; use coordinates only when needed.
  5. Verify with waitFor/assert/query, not repeated full describe dumps.
  6. Batch known flows; keep describe as a failure/debug artifact.
Optional inspector plugins

For a richer hierarchy, if user wants to opt-in

NativeScript Inspector

NativeScript apps can connect directly to the running server from JS and expose their view hierarchy plus raw UIKit backing views

ts
import { startSimDeckInspector } from "@nativescript/simdeck-inspector";

if (__DEV__) {
  startSimDeckInspector({ port: 4310 });
}

The runtime connects to GET /api/inspector/connect as a WebSocket

React Native Inspector

React Native apps can expose their component tree and Metro dev-mode source locations with the inspector package:

ts
import "react-native-simdeck/auto";
import "expo-router/entry";

Import it before expo-router/entry or AppRegistry.registerComponent(...). The auto entrypoint no-ops outside development, reads EXPO_PUBLIC_SIMDECK_PORT when present, and otherwise scans common SimDeck service ports. Use the manual startSimDeckReactNativeInspector(...) API when you need custom host/path/security options.

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

Files

Just SKILL.md in skills/simdeck of NativeScript/SimDeck.

Open the folder on GitHubat commit 2d7346b

Compare with similar skills

Simdeck 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.

Simdeck compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Simdeck this skillNativeScript/SimDeck152—~3.6kAutomated safety check: PassMIT
Developing Mobile Appstelagod/code-abyss244—~258Automated safety check: PassMIT
Senior Mobileborghei/Claude-Skills874—~1.9kAutomated safety check: PassMIT
Expo UIarcboxlabs/linkcode155—~1.2kAutomated safety check: PassMIT
Flutter Adding Home Screen Widgetsbtwld/superdeck129—~2.2kAutomated safety check: PassBSD-3-Clause
Mobile Devcallstackincubator/codex-mobile-dev-plugin138—~5.5kAutomated safety check: PassNone

Similar skills

  • Developing Mobile Apps

    telagod/code-abyss

    Mobile development knowledge reference covering iOS (SwiftUI), Android (Jetpack Compose), React Native, and Flutter.

    244 GitHub stars~258 tokensUpdated 2 mo ago
    MobileAuto-check passed
  • Senior Mobile

    borghei/Claude-Skills

    A skill your agent uses when the user asks to "build a mobile app", "scaffold React Native project", "create SwiftUI views", "set up Jetpack Compose", "optimize mobile performance", "configure Expo…

    874 GitHub stars~1.9k tokensUpdated today
    MobileAuto-check passed
  • Expo UI

    arcboxlabs/linkcode

    Framework (OSS). An agent skill from arcboxlabs/linkcode.

    155 GitHub stars~1.2k tokensUpdated 9 days ago
    MobileAuto-check passed
  • Adds home screen widgets to a Flutter app for Android and iOS.

    129 GitHub stars~2.2k tokensUpdated 9 days ago
    MobileAuto-check passed
  • Mobile Dev

    callstackincubator/codex-mobile-dev-plugin

    Official

    A skill your agent uses when building, running, changing, or debugging local iOS, Android, Expo, React Native, or SwiftUI apps.

    138 GitHub stars~5.5k tokensUpdated today
    MobileAuto-check passed
  • Stream

    adrianhajdin/react-native-lingua

    Stream router for Chat, Video, Feeds, and Moderation. An agent skill from adrianhajdin/react-native-lingua.

    150 GitHub stars~1.9k tokensUpdated 4 mo ago
    MobileAuto-check passed

Categories

Questions about Simdeck

What does Simdeck do?

A skill your agent uses for simulator lifecycle, app install/launch, live viewing, UI inspection, touch/keyboard automation, screenshots, recordings, logs, pasteboard, hardware controls, and…. Simdeck is an agent skill from NativeScript/SimDeck. Use for simulator lifecycle, app install/launch, live viewing, UI inspection, touch/keyboard automation, screenshots, recordings, logs, pasteboard, hardware controls, and repeatable simulator flows.

When should I use Simdeck?

Simdeck fits situations like: simulator lifecycle; app install/launch; touch/keyboard automation; hardware controls.

How do I install Simdeck in Claude Code?

Run `npx skills add NativeScript/SimDeck --skill simdeck -a claude-code`. Or copy the skill folder (skills/simdeck in NativeScript/SimDeck) into .claude/skills/simdeck in your project. Claude Code loads it when a task matches its description.

How do I install Simdeck in Codex?

Run `npx skills add NativeScript/SimDeck --skill simdeck -a codex`. Or copy the skill folder (skills/simdeck in NativeScript/SimDeck) into .agents/skills/simdeck in your project. Codex loads it when a task matches its description.

Can I use Simdeck 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 NativeScript/SimDeck --skill simdeck -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/simdeck, .gemini/skills/simdeck, .github/skills/simdeck and .opencode/skills/simdeck in your project.

What does Simdeck need to run?

Going by SKILL.md and its folder, Simdeck needs the command-line tools its instructions call (flutter).

Does Simdeck access the network?

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.

Is Simdeck 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 Simdeck use?

Simdeck is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Simdeck use?

About 3.6k tokens (SKILL.md is roughly 15k 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 Simdeck?

Skills that share tags, products or a category with Simdeck: Developing Mobile Apps (telagod/code-abyss, 244 stars), Senior Mobile (borghei/Claude-Skills, 874 stars), Expo UI (arcboxlabs/linkcode, 155 stars) and Flutter Adding Home Screen Widgets (btwld/superdeck, 129 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Simdeck?

NativeScript (a GitHub organization) maintains it in NativeScript/SimDeck, which has 152 GitHub stars. The repository was last updated on September 11, 2026.

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